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

高性能Web应用打造攻略:扩展过程中20个最大的绊脚石

HTML文档下载 WORD文档下载 PDF文档下载
成功不可能一蹴而就,任何高性能、大规模的Web应用都是慢慢扩展而来。然而通往成功的路上从来不缺乏艰辛,这里为大家分享对扩展性影响最大的20个绊脚石以及避免之道。

Sean Hull是Heavyweight Internet Group的创始人兼高级顾问,拥有20年以上技术顾问相关经验,曾为多家知名机构提供咨询,其中包括The Hollywood Reporter、Billboard、NBC Universal、Zagats、Rent the Runway及ideeli,这些高速增长的公司每个月处理接近1亿的独立访客。Hull在Amazon EC2部署和Linux及MySQL性能上有着丰富的经验。巨大流量的处理需涉及多个方面,其中包括网站扩展性、业务连续性、安全及架构挑战等。近日,Hull分享了高性能Web应用打造的经验,剖析了扩展之路上20个最大的绊脚石。以下为译文:

1. 二阶段提交

通常情况下,当数据库中的数据发生改变时,它需要同时被写入内存和硬盘。当一个提交发生时,传统数据库需要负责数据在真实存储媒质上的持久化。牢记,内存的数据在崩溃或者重启后都会消失。即使数据已经在数据库中缓存,数据库仍然需要将其持久化到磁盘上,MySQL的二进制日志及Oracle的redo日志都符合这个要求。

通过MySQL集群或者类似DRBD(Distributed Replicated Block Device)或者Amazon Multi-AZ(Multi-Availability Zone)的分布式文件系统,提交并不仅仅是在本地发生,同时也在远端。二阶段提交意味着需要从远端得到反馈,鉴于网络及一些其它的延时,提交速度可能会被毫秒级的降低,仿佛高速公路上的所有汽车都因重载变慢。如有考虑使用Multi-AZ或者读备份,不妨查看Amazon RDS(Relational Database Service)与MySQL的比较。

同步复制同样会出现这些问题,因此MySQL解决方案是半同步的,这也可以看做是在二阶段提交上的一些让步。

2. 缓存不足

在所有层中缓存的作用都至关重要,那么什么地方最需要使用缓存:浏览器、页面、对象还是数据库存?下面不妨统统试一下。

浏览器缓存似乎遥不可及,除非你清楚浏览器是从Web Server中取出指令及其渲染的页面。因此,如果包含的对象有一个比较长的生命周期,浏览器将会缓存他们,不需要再次进行读取。这不仅会加快用户的浏览速度,同样会有益于Server对网站的托管,因为会切实的减少用户的二次读取。

猛戳这里查看更多浏览器缓存相关,确保设置了期满头文件及缓存控制。

页面缓存需要使用类似Varnish的技术,可以将它看成一个迷你的高速、低开销Web Server。它不可以支撑类似Apache可以的复杂页面,但是它可以让非常简单的页面更快。因此位于Apache之前,用于减少负载,让Apache可以处理更加复杂的页面。就像交通警察,在专注更复杂的机动车前,先给自行车放行。

对象缓存由类似memcache的组件完成,可以把它当做是应用程序的便利贴。做数据库查询时会先访问缓存寻求数据,如果发现了所需的数据,那么结果返回的时间将比访问数据库快10-100倍,这样就可以快速的构建页面,从而在眨眼间为用户呈现。如果它没有发现所需的数据,或者只发现了一部分,那么将会建立数据库请求并将返回的数据放于缓存中,让更多的后来者受益。

3. 缓慢的磁盘I/O、RAID 5、多租户存储

数据库中的一切都受到存储的限制,这里既包含了空间问题,也受设备读写的速度掣肘。

如果你使用实体服务器,那么一定要当心RAID 5,独立磁盘冗余阵列的一种,数据保护和奇偶性将严重的影响写操作。同时,如果其中一个磁盘损坏,那么这个阵列在磁盘重建时将变得非常缓慢。

这个方案一般使用RAID 10,它将为你提供独立的镜像集。这导致没有奇偶校验计算,从而不会影响重建时的速度。

云环境可能会涉及到类似于Amazon EBS(Elastic Block Store,一个类似于SAN的虚拟化磁盘)的技术。鉴于其基于网络,你必须与其它租户竞争存储的读写。因为每个存储能支撑的读写速度是固定的,所以你的邻居可能会影响到你网站及应用程序的读写速度。

最近,Amazon又公布了一个重量级产品Provisioned IOPS(每秒I/O操作)。对于技术专家来说看起来非常不错,但是对于其它人来说毫无价值。尽管如此,其依然重要,这意味着你可以锁定你数据库所需的磁盘性能。如果你想在Amazon上托管数据库,那么不妨多关注一下这个。

4. 串行处理

在超市结账时,如果有10个收银台开放,那么从事的是并行处理。如果每个收银台都在休息,只有一个登记处开放,那么从事的是串行操作。那么结账的队伍将变得非常长,不仅是结账人的心情受到影响,购物者也同样如此。这点经常发生在线路不够的大桥收费站以及许多人一起离场的体育场所。

网络应用需要严格的避免串行,因等待API调用而产生的阻塞,所有的后端节点都在等待一个搜索服务器,只要你应用程序的某处形成一个线就代表了串行化的发生,那么必须不惜一切代价去清除它。

5. 缺少Feature Flag

在给业务部门建立应用时,开发者一般从特性和功能入手。Feature Flag将至关重要,它让人们可以通过后端配置文件或管理员UI页面关闭或者打开特性。

为什么他们如此重要?如果你有早上4点的救火经验,那么你将明白启动应急计划的必要性。你需要可以关闭评级、评论以及应用程序其它的一些特性,这将不会导致整个系统崩溃。更重要的是,在新特性发布时,有些时候问题并不明显,直到一群互联网用户同时涌入。Feature Flag让你可以选择性的关闭一些功能,而不是关掉整个网站。

VB6.0动态加载ActiveX控件漫谈 VB编程步步高-表单篇 VB编程常见问题 VB编程中如何锁定鼠标 VB创建位图菜单 VB实现按钮浮动效果 VB应用程序中的工具提示和状态显示 VB中处理长列表框项的两种方法 VB中多级下拉列表的实现 VB中防止将重复项目添加到列表框控件中 VB中实现菜单分割 VB中实现带预览的对话框 VB中实现同一窗口的多个实例及控件的动态增减 VB中阴影字体的实现 VB自定义数据结构的传输转换 Visual Basic 窗体背景花纹的实现 Visual Basic 中的界面设计原则和编程技巧 Visual Basic 中文本框处理技巧集萃 Visual Basic 中字符淡出淡入的实现 Visual Basic窗体背景花纹的实现 Visual Basic下工具条的制作 Visual Basic中的界面设计原则和编程技巧 Visual Basic中在同一界面输入大量数据的几种方法 VisualBasic中的界面设计原则和编程技巧 VisualBasic中用户界面的设计原则 把 VB 标准的工具栏变成平面式 把窗体卸载干净-VB资料 保持初始的窗体大小-VB资料 编程实现将所有窗口最小化-VB资料 不规则形状窗口详细说明 -VB资料 不用 API ,直接调用关联的程序 -VB资料 redhat7.2使用有感觉(散分)^_^ 用递归方法求行列式的值(TC20) 2000下chm打不开了?? TMD!TREEVIEW之变态奇观,恼火啊!--送分! help,date类型的问题 personal oracle8i的问题--TNS:没有监听器 我的WIN2000总是提示内存不能为读,而且C:空间总是提示不足,该怎么办? 一个小问题——这句话是什么意思? 在ASP中如何执行ORACLE对象表中的函数??? 我配置的apache+mysql+php怎么不能,显示网站入口flash??? 我如何使用一个全局struct,我用的是extern,但每个extern时都要把结构写全,有没有简单的方法? 请问全国计算机等级考试广州在哪报考? 请问哪里可以找到<Delphi 6 Developer's Guide>这本书? 万网又4机32小时了,累计4机300小时。 我要送分,要分的快来抢.....晚了就没有。分明天会兑现。我说的一定算数。 研究一下ado与Oracle数据库连接的实现 各位高手看过来》》》》 怎么做一个弹出菜单? 请问VC++的编译器开关是怎么回事? 为什么我把IIS配置好后,当我在一台客户机上游览的时候所有链接都不能用呢?请教如何解决? 在DOS下会死机吗? 何为A片?(搞笑 ) vc中执行 select count(*) from table 如何得到返回的数值? 非绑定的,能编辑的网格控件,是什么? SQL 2000 Text数据类型的问题 北京又起沙尘暴了。 我的RED HAT LINUX 的文件系统出了错误,怎样解结?谢谢! 100分请教ActivX控件的注册问题? 如何获得按钮的位置(x y) 请问“GetVolumeInformation( )”函数所获取的“序列号”,在用FORMAT格式化后是否会发生变化? 怎么建立XML树状目录? 救命啊 我也很着急,拜托~~~~~~~~~(关于发布和订阅的简单问题) 在pb中如何自激动窗口,急! 遍了一个简单的servlet,编译时提示:package javax.servlet does not exist! 怎样统计新闻发布系统的新闻点击数 小弟是新手,用GCC编译了一个源文件,生成一个叫a.out的文件,好像是可执行文件,但不知怎样执行,请告知!!! 请问怎样才能用MainFrame类中的函数来控制同一项目中的视(View类)的操作??? 搞个调查:在杭州的程序员年薪有多少K? 请问大虾,Active Dictroy有什么作用,另外到什么地方可以下载? 请问各位仁兄,珠海的2002年程序员考试在哪里报名?谢谢! 如何绕过禁止IP?请指点? 小和尚想开网吧!请问各位高手!网吧应该用什么样的的配置比较好!扩朴方式那总比较好! Question:有没有_获取“视频采集卡”的AV信号 的控件? win98下能安装oracle8i吗? 如何在ASP页面中对XML文档进行询?(问题较多) Insert into TableName values(?,?,?,?,?) 为何写入中文时数据库会是乱码??? 有几个技术问题求助!!!! 有人要去参加Visual studio.net发布会吗 失落中 如何打开被屏蔽的“运行”窗口、注册表编辑器?? 已知平行六面体ABCD-A1B1C1D1中,以顶点A为端点的三条棱长都等于1,且两两夹角为60度.求AC1与平面ABCD所成的角的余弦值, 一个圆台形物体的上底面积是下底面积的2/3,如图放在桌上(大的一面在下),对桌面的压强是200Pa翻过来放,对桌面的压强是多少.麻烦用反比例函数解, 库仑定律中的k库仑定律中的比例系数k为什么可以写成k=1/(4πε0)的形式?(ε0是真空介电常数,π为圆周率)是不是与球坐标有关?请说明比例系数k为什么可以写成k=1/(4πε0)的形式? 在solidworks中怎样建立基准面? 什么是G,GB,M,MB,哪个大呢? 库仑定律中的k值是多少9次幂是正还是负 库仑定律 电场强度 如图10-9所示.A、B两球质量均为m,所带电量分别为q和-q,两球间用绝缘细线连接,A球又用绝缘细线悬挂在天花板上,在两球所在空间有方向向左的匀强电场,电场强度为E,平衡 一均匀带电半圆环,半径为R,电量为Q,求环心处的电势想问下,为什么是这么求呢,用的公式是点电荷的场强公式,但是给的是圆环,为什么不用求电势的加呀? 一均匀带电半圆环,半径为R,电量为Q,求环心处的电势. 点A在平面阿尔法内,但点B在平面阿尔法外.用符号表示,并画出相应的图形 GB G M MB 哪个最大,哪个最小还有KB 初二科学浮力题小东将一个重5.88N、边长为10cm的正方体木块放入水槽中.快啊,小东将一个重5.88N、边长为10cm的正方体木块放入水槽中,然后加入5cm的水,结果发现木块仍然沉在水底,没有浮起来. 在平行六面体ABCD-A'B'C'D'中,以顶点A为端点的三条棱长都等于1,且它们彼此都等于60度在平行六面体ABCD-A'B'C'D'中,以顶点A为端点的三条棱长都等于1,且它们彼此都等于60度,求(1)向 GB大还是MB大啊 一个边长为10cm的木块完全浸没在水中,木块的上表面距水面的高度为5cm,木块受到的浮力大小是多 Solidworks怎样在圆柱上建基准轴与基准面? 圆台形物体上底面积是下底面积的2/5,对桌面压强400帕,翻过来对桌面压强是多少? 正方形木快G=6N ,边长a=10cm ,求1用手压入水中,木块此时的浮力,人手压力 2松 库仑定律和电场强度真空中有两个固定的点电荷,带电量都为 Q .他们相距为 L .在其连线中点有一带正电 q ,质量为 M 的点电荷静止在中点处.现将 q 沿连线偏移少许(长度为 a )后放手,求点电荷 q 一个圆台形物体的上底面积是下底面积的四分之一,对桌面的压强是p,翻过来放,对桌面的压强是多少? 边长10cm的木块,漂浮在水面,下底面距离水面6cm,受到的浮力为6N,求(1)木块重力 (2)木块密度 solidworks中如何创建基准面,在原有的三个基准面基础上,绘制一个模型,在模型上的某面在创建一个基准面.说详细点本人是solidworks初学者,还请多多高手指点. 容量单位KB、MB、M、GB、G到怎么念,它们之间是怎么换算的?怎么念啊,听别人好像都是读“兆” 匀强电场的场强为什么各处相等?怎样分析它的电场分布?为什么场强相同 关于电场强度的两个表达式E=F/q E=Q/r2的定义怎么理解? 英文说'吻你十八遍`怎么说? 一半径为R的半圆细环上均匀地分布电荷Q,求环心处的电场强度为什么是E=Q/(2∏^2*ε*R^2) 假如正六面体的六个边电阻都是1欧姆,他的对顶点的电阻是多少? 文件大小中的KB,GB.MB怎么区分 一个半径为R的半圆细环上均匀的分布电荷Q,求环心处的电场强度 为一用某粗细均匀的电阻丝围成的正六面体框架,已知每一条的电阻为R,求两个顶点A B间的总电阻 145的英文 G MB KB 怎么换算? 4欧的电阻与6欧的电阻并联,其等效电阻为_____欧?总电阻为______欧? 同性电磁力排斥公式(F=KQ1Q2/R2)那么异性呢?一般题目中,异性多为-Q1,Q2,该怎么求? 依旧去掉负号,套公式么? GB与MB、B、G、KB、K的换算进率 这个图用solidworks怎么画 求R2 用的什么公式?哥 不是游戏 结冰时节,江河里的水生动物仍然能够生长,没冻死,为什么? 一个六面体的棱长和为36厘米,这个六面体的表面积最大为( )平方厘米 设i是虚数单位,计算2i*(1+i)^2 为什么结冰时代,江河里的水生动物仍然能够生长?根据水的性质解释 平行六面体的棱长都为a,从一个定点出发的三条棱两两都成60度角,求该平行六面体的体积? 用棱长为1厘米的12个正六面体,做长方体时,要是表面积最小,那么表面积是多少? 静电计工作原理中的感应电荷是怎么产生?对于静电计中,金属球和平行电路板的一端连接,而金属外壳和另一端连接.这时里面的感应电荷怎么产生的啊?假设金属球连正级,那么我金属箔不是已 solidworks如何建立两个平行的基准面?举个例子说明 :我要建一个圆柱 不用拉伸土凸台的方法 如何用放样完成 放样的时候如何建立上下两个平面? 用棱长1厘米的12个正六面体做长方体要使表面积最小表面积是多少 静电感应原因 平行六面体的棱长都是a,且从一个顶点出发的三条棱两两都成60度,则此平行六面体的体积等于多少? 用绝缘细线弯成的半圆环,半径为R,其上均匀的带有正电荷Q,试求圆心O处的电场强度. 库仑定律F= ,k= 请问solidworks基准面有什么作用? 用绝缘细线弯成的半圆环,半径为R,其上均匀地带有总电荷Q,试求圆心O点电场强度 谁能帮我详细解决一下静电感应的基本原理,为什么?希望讲的通俗点,我只是初学者,注:请不要复制百度词条的内容!用自己的话回答,感激不尽! 静电场的 库仑定律 电场强度 电势能 电势差 应用 之类的公式谁能帮我总结下 最好标好字母的意义. 一个圆台形物体的上底面积是下底面积的1/4,如果如图所示放在桌上,对桌面的压强是200Pa,翻过来放,对桌面的压强是多少? 现在我对物理学的库仑定律是模糊概念,请解释和举例说明和应用公式. 在同一平面内,角阿尔法与角贝他的两点分别平行,请画出图形,在探索角阿尔法与角贝他的关系角的度数不用画出来 教我怎么画就可以了 已知,一个圆台物体的上底面积是下底面积的三分之二,放在桌面上对桌面的压强是200Pa,求翻过来对桌面的压要公式和过程 电容器的工作原理不是静电感应吗?那为什么接正极的那一极板是带正电的?如果是静电感应的话,那接近正极的那一极板应该是带负电的呀
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘