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

高性能、高流量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过程是必不可少的,这可以帮助将数据导入分布式缓存,这个过程应该在晚上或者是用户访问量低的时候。

Unity游戏引擎向iOS与Android开发者免费 Twitter获“下拉刷新”专利 开发者仍可自由使用 复杂产品的响应式设计【流程篇】 使用Javassist库为Bytecode Instrumentation开发JVM Agent 内容解析创业公司Stremor推出4款API 2013中国云计算榜单之三:174家云应用服务商,繁花似锦! 盘点各大云服务提供商:麦当劳=AWS,汉堡王=? BlackBerry Jam亚洲开发者大会9月将在香港开幕 把服务器搬进来:Splashtop在中国搭建Bridging Cloud Web框架全对比第五期 新增Windows环境 前Tumblr首席开发者回忆录:一个人也能开发出好产品 测试者和开发者,为何我们不能友好地相处? 讲师秀之11:何刚谈京东的云机遇 讲师秀之10:武汉大学张焕国教授,可信计算是云计算之成败关键 【上海直播】Windows Azure+世纪互联:中国云计算“烈火烹油” 最新版Chrome浏览器推出全新语音搜索功能 惠普第二财季净利润同比下滑32% PC和服务器销售不佳 讲师秀之11:网易汪源的成长故事 PPT集萃(三):六位国内技术大牛分享巨型平台的打造与应用 聚焦全球移动市场:创新以色列 科技巨头的倾慕之地 Android版Chrome 27浏览器正式上架 机器人——数据中心的新“网管” George Chu:在雅虎打造真正的工程师文化 2013,303+家中国云计算企业的“生态系统”之梦! 高访问量Web应用跨云端迁移的原因:权限和易用性 Web应用开发者福音 Chrome 28新增丰富通知中心功能 帷千兰旭:推广渠道鱼龙混杂,开发者请小心 关于IE 10 你应该知道的6件事 Spring Framework 4.0M1发布,支持JDK 8、Java EE 7 “渣打科营编程马拉松赛”正式启动 官网同时上线 Android应该支持OpenCL的十大理由 用applet怎样打开一个文件吗? 请问哪种ORB产品实现了com服务器/corba客户机的桥 我读《深入探索C++对象模型》的感受,cber能再回答我一次么? 谁有DELPHI的有关网络编程方面的资料?给我一份可以吗? 关于stringgrid的问题????? 痛苦啊,难道要放弃BCB吗? 大家认为在开发过程中是否不能用全局变量? 如何让LINUX支持我显卡 高手,谁来帮我一下~! 取字符 在SDK中,如何获得客户区的宽度和高度呢??(哪两个函数呢?) 哪里有ATL的电子书下载?最好是中文的! 高手谁能帮帮我呀~~~~~~~! 请教:如何在statusbar的panel中显示一个图标呢? VC++中如何使用OLE对象? 初来乍到,发现这儿JJMM还挺多的。。。 请高人指教~! CSDN中碰到这种问题,该如何解决呢? 如何学习director 你能帮我一下吗?~ 企业商务管理软件,开放全部的源代码及开发文档! 企业管理软件,全套源码及开发文档!!!! 哪里有支持任何波特率的通讯控件下载? net_lover(孟子E章)请进~! 一个有关CWebBrowser的问题,急急急!!! 这样的语句为什么不可以实现一次删除多条记录 plmm是什么意思? 各位大侠,知道哪儿有直接可用的上传文件的控件吗? 多谢了!!! 论坛的题目是不是太没意思了 一个sqlserver7统计的问题?? varchar类型不是可以输入255个字符吗,为什么我输了160个就出现'item XXX doesn't pass validation test ' 唉 ~~~~~ 奈何 ~~~~~ 突然想到个荒唐的问题: 事件和过程有什么不同? 奇怪的事前,高手请进来 我的问题还没有解决~! 这里的高手呢,人听多,会的人不多 申奥倒计时,如果你在线,请进来验证这以历史性时刻,谢谢 我有一个用hook截获鼠标移动的dll,但是没有效果,请问怎么调试? 请教,怎样在java中把Button的背景改做一个图片 对delphi5一个自带例题的疑问。 爆炒MM之水园MM ID一览 窗体和控件的自适应问题? 求《unix》环境高级编程的源程序下载。 在MIS或WEB中有大量的对数据操作的工作,是否所有的insert,update,delete工作都需lock and unlock??? 紧急求助:那里有pb7的最新版本下载(mark200106@sina.com) 感谢stanely :) 哪里有《unix环境高级编程》所带的源程序下载? 关于quickrep得统计问题,为什么我只能把所有的数据累加而不能累加一个grouphead和groupfoot之间的数据 关于ATL做ActiveX控件的问题 关于jc文件的问题 请问:在用ADO执行查询操作时,如出现“超时”错误,应该有哪些解决办法? 递等式 5乘777加13乘555怎么巧算、、麻烦帮我一步一步写出来. 已知a是第三象限角,且sin^4a+cos^a=5/9,那么sin2a等于?最好过程能说得通俗些,因为我懂得还不是很多. 已知角α的终边上有一点的坐标是P(3a,4a),其中a≠0,求α的三角函数值 计算(-1)+(-3)+(-5)+(7)+…… +(-99) 已知a是第二象限角,且sin^4a+cos^4a=5/9,那么sin2a等于 已知角a的中终边上有一点坐标p(3a,4a) a不等于0 求sina cosa tana 的三角函数如题 考试中 如何计算1+3+5+7+.+99=?里面有多少项?如何计算呢?===多少? 已知a是第三象限角.若sin^4+cos^4=9分之五5 求sin2a 设a<0,角阿尔法的终边经过点P(-3a,4a),那么sin阿尔法+2cos阿尔法的值等于 怎样求证对于任意的角A cosA四次方-sinA的四次方=cos2A 已知a是锐角且cos^4a-sin^4a=3/5,求sin2a(2)(sin^2a+3sinacosa-cos^2a)/(2sin^2a+cos^2a)的值 已知角α的终边经过点P(4a,-3a)(a≠0),求2sinα+cosα的值? 已知cos2a=3/5,求sina的四次方+cosa的四次方 已知a是第三象限角,sin∧4a+cos∧4=5/9那么sin2a等于 设角α的终边上有一点P(-4a,3a)(a≠0),则2sinα+cosα的值是( ) 怎么求? cosa四次方—sina四次方 为什么 等于cos2a 若sina+sin^2a=1,求cos^2a+cos^4a的和 已知角a的终边上有一点P(3a,4a) (a sin^4a+cos^4a=1,则sina-cosa= 已知sina+cosa=1/2 求:sin^4a+cos^4a 设α角终边过点p(3a,4a)(a≠0)求sinα,cosα,tanα? 求证:(1-cosa的4次方-sina的4次方)/(1-cosa的6次方-sina的6次方)=2/311 已知sina+sin^2a=1,求3cos^2a+cos^4a-2sina+1 设α角终边过点p(3a,4a)(a≠0)求sinα,cosα,tanα? 用cosa 表示sin4a-sin2a+cos2a 若cosA+cos^2a=1,则sin^2A+sin^6A+sin^8A等于多少若cosA+cos^2A=1,则sin^2A+sin^6A+sin^8A等于多少 上面那个题打错字母了 已知角B的终边过点P(-4a,3a)Simb.cos b.tan b谁知道怎么整啊 sin4a-cos4a=sin2a-cos2a 求证 已知cosa+cos^2=1,则sin^2a+sin^6a+sin^8a=多少请给出详解,谢谢! sin²a+cosˇ4a+sin²acos²a 化简 (sin2a-cos2a)^2=1-sin4a 求证! 已知sina+cosa=m 求sina*cosa 和 sin^4a+cos^4a的值 2.证明:sin²²a+cos²²a=1-2sin²acos²a 22是4噢2.证明:sin²²a+cos²²a=1-2sin²acos²a 22是4噢 打不出这个符号 (sin2a-cos2a)^2=1-sin4a请尽快给我答案!急!急!急! 若sin^4a+cos^4a=1,则sina+cosa= 求证[1]1-2sin acos a/cos²a -sin²a =1-tan a/1+tan a.[2]1-cos 2θ/1+cos 2θ=tan²θ 证明题:(sin2a-cos2a)²=1-sin4a 已知sina+cosa=1/3,求sin^a+cos^4a sin∨4a-cos∨4a=sin²a-cos²a 求证 sin4a+sin2a*cos2a+cos2a=? 求过程,谢谢!sin4a数字是次方 cosa=1/2,cos^4a+sin^4a=?cos2a=1/2 证明:sinα^2+sinβ^2-sinα^2sinβ^2+cosα^2cosβ^2=1 求所有的实数a,使得cosA,cos2A,cos4A,…,cos2^nA都是负数.n∈N,实数a就是角A。 已知sina·cosa=1/2,求sin^4a=cos^4a的值打错了求sin^4a+cos^4a 证明:1-2sinα cosα/cos^2α -sin^2α=1-tanα/1+tanα sin a +cos a =1/2 0 已知sina+cosa=p,求(1)sina*cosa(2)sin^2a-cos^2a(3)sin^3a+-cos^3a(4)sin^4a+-ctg^3a 证明[2-2sin(α+3π/4)cos(α+π/4)]/(cos^4α-sin^4α)=(1+tanα)/(1-tanα) cos(a+b)=3/5 sin(b-pai/4)=5/13 a,b 属于(0,pai/2) 求cos(a+pai/4) 三角函数sin、cos、tan各等于什么边比什么边? 证明sin^4α-cos^4α=2sinα²-1 若0 我要sin.cos.tan三角函数表,只要30°45°60°.是要根号的,不要有小数点的 证明(1-2sinθcosθ)/(cos^2θ-sin^2θ)=(cos^2θ-sin^2θ)/(1-2sinθcosθ) 已知π/2 三角函数问题 sin与cos和tan怎么转换比如sin150度,为什么等于sin30度,cos150度为什么等于-cos30度 当a=-2时,a+2a+3a+4a.+100a等于多少 已知cos2a3/5求cos^2a sin^4a的值 已知角阿尔法的终边上有一点p的坐标是(3a,4A),其中a不等于0,求三角函数值.这道题为什么先求半径 不是求函数值都是按单位圆半径为1算的吗? a=-2时,a+2a+3a+4a+.+100a等于多少
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn