说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

高性能、高流量Java Web站点打造的22条建议

HTML文档下载 WORD文档下载 PDF文档下载
流量的激增让众多机构“疲于奔命”,高扩展性、面向服务的架构已成为当务之急。这里为大家分享打造高流量网站的22个建议,其中包括数据库、缓存、架构等多个方面。

从2005年-2013年,Ashwanth Fernando曾供职于Best Buy、Pearson VUE、Walgreens、Walmart eCommerce等多家知名公司,现在Apple从事高级工程师、平台工程师一职,拥有丰富的高流量Web应用程序打造及架构经验,近日Ashwanth撰文分享了他的高流量Web软件打造经验。

下为译文

受Joshua Bloch写的《Effective Java》启发,我想分享自己关于建立高流量Web软件的整体建议。这些术语中的一些可能不仅仅关于软件设计也关于工程组织、文化等相关领域。

免责声明

  • 只代表个人观点
  • 如发现与现实情况相违背的原则,请谨慎对待,或使用一般认识

1. 考虑使用不止一个数据中心

在商务领域,一直存在许多恐怖的道听途说,而这些恐慌都因为他们只使用了单一的数据中心。如果你想在自然灾害或者电力供应故障中幸免,那么请使用多于1个的数据中心,使用active-active模式来配置你所有的数据中心。虽然在开销上可能会有所增加,但是比只使用单active的配置要值得多——因为在passive和active副本上,总会发现有些数据片不一致。

2. 考虑使用稀疏数据中心部署

不管是通过PaSS,还是运营团队进行,当软件集群被部署到同一个数据中心的机架上时,确保这些机架使用不同的电力供应。你不可能保证机架供电的万无一失,一旦失败将会导致整个机架上服务器的丢失,这个时候你绝对不会希望整个数据中心都只连在一个电路上。

3. 考虑使用私有云来组织资源

IaaS开源解决方案Openstack等其他的软件至今尚未成熟,需要庞大的团队来运营,在运行期间会产生各种各样的问题,除非你有足够的预算,否则别考虑建立一个私有的云服务。然而,私有云可以提供众多优势。首先在部署方面就可以进行众多的定制化,这远比AWS或者是Rackspace货架上的选择要多。其次它允许你做许多的硬件定制化,就好比在硬件层次的Oracle就比准虚拟化环境快得多。

4. 考虑使用PaaS做解决方案

为软件释放投入巨量人力进行部署的日子已接近尽头,各个机构在敏捷及快速市场投放上绞尽脑汁,而PaaS无疑会加速这个部署过程。它允许特性尽可能快的发布,同时也能让开发者得到极大的满足。这是个非常好的开始,给予开发者部署集维护自己软件的工具,这将给工作积极性带来很大的提高。同时,越来越多的开发者甚至不愿意加入没有自动化软件部署系统的公司。更少的领导,更简化的环节,将给你带来无与伦比的效率。

5. 如果使用Oracle或者MySQL,只做基于主键的查询

只有在RAC中存在很少的Artifacts时,Oracle才能在流量高峰时获得最佳性能。尽可能避免使用Referential Integrity、Triggers、Materialized Views、Views、Stored Procedures和其他的Oracle Artifacts。Triggers可以在从数据访问层实现。Stored Procedures可以完全转移到应用层。数据库只用来存储数据,基于字段进行存储而不是主键,使用类似Lucene的索引器做表的索引,使用一个允许在结果集上做基于其他字段的查询,这将会返回这个记录的主键,而这个主关键字可以进一步被用来拿取记录。

6. 考虑使用Oracle或者MySQL分片

当schema达到临界点,Oracle的可伸缩性将被限制,这里建议你对schema做基于功能(比如订单,产品目录,促销活动,客户等)上的分片,同时也为高密度表做key shards。为key shards使用一致性哈希,这样当一个新的RAC被添加RAC集时,你不再需要遍历所有RAC中的键,以获悉哪些键需要被移动到键的分片中。

7. 如果你使用Oracle做RDBMS,考虑使用Data Guard及Golden Gate

使用这两种技术将大大简化甲骨文的运营周期,Data Guard允许一个近实时passive读副本(没有客户端会与之连接),而Golden Gate则允许一个近实时的active读写副本。

推荐的部署拓扑之一就是为同个数据中心的每个分片配置1个Data Guard;使用Golden Gate来备份其他数据中心的每一个分片。

注意:Golden Gate只是近实时

8. 为Oracle或者MySQL添加数据访问层

假设你有一个可以接受500个连接的Oracle RAC,而你有25个jBoss实例和这个甲骨文RAC对话,每个Jboss实例配置范围10到50的数据库连接池。

当jBoss集群开启时,连接到Oracle的数目为250(25乘10),一切运行良好。随着流量快到jBoss集群的峰值,想象一下将会发生什么。在某个点后,Oracle将开始拒绝连接。

因此建议通过一个Multiplexer层建立一个Multiplexe应用程序服务器连接。可以是一个简单的 netty应用,这个应用运行在一个每个netty节点仅能够与Oracle建立25个连接的集群上,但是对入站连接来者不拒。它会将所有的连接循环传递给Oracle,但是绝对不会超过25个,同时还使用Oracle JDBC驱动与Oracle通信。

9. 避免跨数据中心事务

当下,这已经是非常简单的事情,但是在任何地方都非常适用,包括Oracle。在两个数据不同数据中心,不要适用1个XA适配器去做跨数据中心事务,这将导致相当长时间的应用线程阻塞,直到两个阶段的提交完成,因此将带来你的应用程序服务、服务和所有同步上传流崩溃,最终会因为线程数量增加而导致整个应用程序崩溃,比如在类似Black Friday流量情况下。

10. 考虑分布式缓存框架

Memcached、Counbase是最常用的选择。但实际上,卸载非易失性数据到一个中心缓存集群上,确实没必要在每个JVM上做相同的拷贝。但是确实需要设置小数量的JVM堆作为分布式缓存的一个MRU缓存,这样的话,缓存集群本身将会受到非常少的网络调用。

  • 在JVM上大多数分布式缓存支持本地缓存的概念,它将储存最常用的对象。
  • JVM上,GC的pause time同样被最小化了,因为对象图中需要遍历的对象比以前更少了。
  • Warmup过程是必不可少的,这可以帮助将数据导入分布式缓存,这个过程应该在晚上或者是用户访问量低的时候。

《近匠》酷传:解除App发布和监控痛苦 有道heX正式开源:用HTML5和NodeJS开发桌面应用 在3D空间创作:英大学生发明增强现实设计产品 2014年3月浏览器份额:Chrome终超Firefox 成市场第二大浏览器 2014年3月操作系统份额:Windows 7大涨,Windows XP仍未跌破27%大关 路透社:iPhone 6仅有4.7寸版本,将于5月量产,5.5寸遭冷冻 高端实战技术培训:OpenStack企业应用之路 据统计,Oracle已击败IBM跃居软件行业第二 【技术博客推荐】2014年值得关注的10个开源项目 Intel在深圳建立智能设备创新中心 将投入1亿美元 免费获得价值1200元Unity2014顶级盛会门票! IBM公布Softlayer中国业务落地时间表 推荐30款最佳的数据可视化工具 数据库迁移测试:选白盒还是黑盒? 东软发布首款英特尔架构企业级移动终端解决方案 英特尔与腾讯创立游戏创新实验室 推进RealSense技术 《近匠》系列沙龙之探寻绝密武器:移动跨平台开发 iOS走向开放:苹果新推iAd Workbench广告服务 腾讯薛伟:快速模型更新在精准广告推荐中的应用 微软Build2014第一天要点精华汇总(组图) Windows 8.1 Update 1五大改变:任务栏回归,增强鼠标支持(图) 【十大院士】怀进鹏:全球的计算模式可能重新形成 微软Build2014第一天应了解的15件事 TypeScript1.0发布,完美支持Visual Studio系列产品 欲与Android展开价格战,微软宣布在移动设备上免费开放Windows 2014深圳英特尔信息技术峰会次日要点汇总 4月4日:微软39周岁,生日快乐! 正式进军硬件市场 Atlassian发布可穿戴设备Bitband 云计算时代IT专业人员需具备的10项技能 【走近院士】李德毅:大数据是连接虚拟和现实世界的桥梁 微软Build2014大会第二天干货总结 Microsoft Azure拥抱Puppet、Chef、MongoDB... 打印vb窗体 有什么办法(产品)实现局域网内 IP 同 MAC 绑定,未经绑定关系建立的机器无法实现通信? 谁能给个关于递归的例子? 个人版的SQL SERVER 2000能提供多少连接阿? 网络GIS开发者联盟诚邀软件界精英,共创伟业 dlink网卡不能FTP? 快过年了,打算给父母还有爷爷奶奶买点东西,大家有什么好的建议? asp.net项目启动运行出错,详细信息如下: 怎样判断数据读取完毕? 求ERP的电子书、资料 如何才能做到c/s结构应用程序(pb开发的mis)访问数据库不安装oracle客户端??谢谢 高分请教做服务器,win2000server ???win2000系统,Epson 1600系列打印机,如何找到"自定义纸张"..谢谢 控件区别? 通过一组checkbox来控制按钮是否为disabled 如何通过SQL语句获取我的ORACLE版本号。 在线等,谢谢了…… 应该开个图书交流的版,大家就不必去买那么贵的新书了 ADOTable与ADOquery同步更新问题?? 给你看一张照片,这两人是谁 市面上的delphi的好书怎么这么少呀?哪位ggjj推荐一本好的delphi书籍!! 关于组件和控件的问题。 兄弟们,分数线出来啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! rows菜单update properties下 identity column 列表框作何解? 一个过滤问题 我的系统分析员成绩出来了,气死我了。39,39,55 感觉她作我的GF不错(附照片) 关于excel控件的使用中的第一步 请问哪位有显示CAD文件的组件 用SQL SERVER 2000把数据结构同数据导出到Oracle8i 时 只能够导出结构,why? 忍痛转让 小木可来接分! 各位,在pb里能够用java的类和函数么? 为什么FrameworkSDK里的例子都不能运行? 建议增加《无线应用》板块,包括SMS 函数定义为static有什么作用? 关于postgre,help~~~~~ 怎么在vb的datareport中,显示图片呀!很急,帮忙 谢谢! 邮件问题!控件的用法! 有谁用VC做过面向对象数据库ObjectStore的开发,想交流一下 为什么装了ADSL后经常性死机呢!谢谢 如何打印vb窗体 请大家帮忙看看我的CPU到底是什么烂货!!!谢谢了! 菜鸟急问:如何导入导出DB2整个数据库的结构及数据??立刻结分!! 今天终于考完了最难的一门“机电系统设计” 高兴 && 散粉 应该开个图书交流的版,大家就不必去买那么贵的新书了 关于WebApplication的简单问题!! 有关Delphi中的面向对象程序设计方法 新美国主机到位,经安全运行3周无任何问题,开始销售。 50分买一个C++ Builder 6.0的注册号!!! HELP 温州女大学生月经期飙歌致声带充血猴子喂避孕药 繁殖迅猛甚至已有第五代薄熙来案周四公审 贪污受贿罪状累累(杭州8岁孩子光腚大闹科技馆 称穿衣服河南7警景区裸泳 公安官博作出回应(图文:台州村民种出罕见140斤冬瓜王海宁4名青年戴着耳机没听见呼喊被潮水韩国变性艺人河莉秀杭州遭车祸 随后带临安高中生冒充警察查车 有证表扬没证女儿以患有精神病为由诉母亲贷款合同无杭州男子因玻璃门太干净撞破头 状告商律师买奥巴马图书发现和奥巴马无关 怒三位小伙抢劫忙排练 路遇民警当场露怯杭州水果店招牌掉落 砸断女店员锁骨(舞厅服务生爱上坐台小姐 爱叫人生死相杭州地下车库因大雨进水 仓库蔬菜漂了浦江14岁少年拿着玩具枪抢劫被抓浙江大学4名同年同月同日生男生分同一霸王合同系违法 高桥三家商家受罚户口和亲情的抉择令黑户家庭左右为难浦江男子冒充警察强奸少女 还抢走其3新疆博湖县社区热心居民捐衣物献爱心托里县举行主题成人礼曁民族团结手拉手玛纳斯县真心实意倾听民声 求真务实低新疆托里县四举措加强教育注重“育人”玛纳斯县北五岔镇村级计生药具管理工作和布克赛尔县查和特乡抗灾自救工作全面新疆精河县多举并措促就业托里县纪检委实行党的群众路线教育实践新疆呼图壁县二十里店镇践行焦裕禄精神伊宁市五一小长假旅游收入增长12.1云南干旱致7州市119.97万人受灾舞韵流转中的痴情和守望云南彝良35家煤矿全部停产整顿昆明交警微信平台开通 指尖上对话群众甘肃岷县地震灾区千名干部“上山下乡”多地欲为楼市限购“松绑” 专家称仅靠中国广西向越南移交一名毒贩中国驻哈大使:“亚信”未来或成全亚洲第二届北京 上海市民划船器挑战赛6月山西五台山举行千僧斋法会庆祝佛主圣诞扬州政府转职能放弃“奶酪” 创机会让
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘