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

高性能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让你可以选择性的关闭一些功能,而不是关掉整个网站。

怎样读出MEMO控件的当前值-Delphi资料 怎样使用Delphi 5中的TExcelApplication操纵Excel 97/2000 怎样在TDataset中汉英混用-Delphi资料 制作可移动的窗体的MovePanel控件-Delphi资料 制作可移动的分割窗体-Delphi资料 制作用于日期时间型字段的DELPHI数据感知控件 制作主窗口显示前的版权窗口-Delphi资料 状态条插入可视控件-Delphi资料 做动态显示的控件-Delphi资料 做一个OpenGL控件-Delphi资料 Api函数列表——与打印相关-Delphi资料 Delphi 5快速创建控制面板程序 Delphi 编写Windows NT服务 Delphi 的 分 发 工 具 ─ ─InstallShield Delphi 关于系统编程中的技巧 Delphi3如何调用Excel Delphi5.0中的函数调用模式 用Delphi 编 程 时 如 何 利 用 线 程 Delphi的8个技巧 delphi函数参考手册 DELPHI键盘常用快捷键汇总(DEFAULT 和CLASSIC) Delphi实现自动切换输入法 Delphi使用汇编 Delphi系 统 提 示 信 息 的 汉 化 DELPHI下的多线程程序设计 Delphi下汉字输入法的编程及使用 在Delphi与C++之间实现函数与对象共享 DELPHI中处理时间 Delphi中的INI文件编程 DELPHI中的消息处理机制 Delphi中对目录拷贝、删除和搬移的操作 怎么判断一个Input type= text中的数字是不是浮点数? 哪位大哥有关于操作系统中文件系统设计的实例文档,(急用)谢谢。 有关asp中,后台编辑新闻时,上传多图片,如何在前台显示的问题 一定给分,初学java,请问java开发平台的比较 weblogic及EJB属于中间层的吗?( 请问SQLServer数据更新速度与系统配置之间关系的问题 问题还是没有得到解决,请csdn高手进来看看.(在线等!) 请大家帮忙~~~~~ 添加一个矩形框用什么函数,在上面添加文字、颜色呢? 拜托!请问全面学习J2EE一共要装哪些软件?谢谢! 这是我在本机上用ROUTE PRINT出来的内容,请高手们指点! 在线送分!!!谁能帮我解决分页的问题 请问有没有什么简便的方法在数组里插入一条纪录。 打印打印 如何通知一个正在Sleep(INFINITE)的线程结束运行? 小问题 c语言基础问题 上海的朋友!请进来说说如果你/*未来*/女朋友或男朋友第一次来上海,你会带他或她去哪些地方玩??有七到十天时间 请问长时间用光驱放DVD会不会损伤硬盘? 急救 vj6 中如何调用sql数据库 谁能告诉我早期LINUX内核的源代码和C编译器的源代码,哪能找到!谢谢! DB2安装问题 有谁知道北京数字证书认证中心是干吗?他们说的什么信息加密、网上作业身份识别、BGC是什么回事?跟服务器有关吗? 在SQL Server中导库时出现DLL错误,怎么回事 将int型转化为字符型用什么函数? 谁能告诉我早期LINUX内核的源代码和C编译器的源代码,哪能找到!谢谢!要多少分都给! 500分求菜单功能。 很急的问题!希望大家帮忙! jb8中类找不到了??? 请教高手:如何让label显示在text、button等的上面? 新手请高手帮忙了~~~ 谢谢~~~ 500分求菜单功能。 修改数据,提交保存老报错,纳闷~~~ 急!在RED HAT LINUX中怎么配置POP和STMP服务器? 散分呵呵 是真还是假,群众的眼睛是雪亮的! 求助:XP和2003双操作系统,XP用PQ分区后在2003里找不到? 500分求菜单功能。 treeview控件,如何让其点击结点后再从数据库中取得这个节点的下一层节点? 如何在SQL SERVER 2000导入mis.bak文件? HELP!一道规划问题的优化!源代码 虚心的小弟,散分(分不多) 在线等待!!sql 无法登陆 500分求菜单功能。 用VC写的dll在vb上怎么用? 这样的sql 怎样写 WIN2000和LINUX与APACHE的搭配的困惑 高分求助,各位进来帮一帮吧,有问题请教,急,急!!! 找不到包在线等 我就不相信CSDN没有高手,帖出代码求救!!! 在服务器端监视客户记录 什么是河流的梯级开发? 根据一个句子补充英语的句子!1.然后你应该干什么呢?What ________you do_______?2.我把一些种子放进一个花盆里.I put ________ ________ into a pot.3.我很兴奋.I am so________.4.我每天浇它.I water it______ _______ . 梯级开发的好处 哪位高手帮我把生物必修一做个总结,高一期末考复习用的!小弟感激不尽! 它的意思是什么? 我国哪些河流、河段已经实现谁能梯级开发?我国长江黄河这些是有,但是具体河段就很少明确,希望高手指教.最好附上出处不是“谁能” 是 “水能”,打错了. (1)试分析从攀枝花到宜宾的金沙江河段实行水能梯级开发的主要有利条件 卧龙吟蜀国80级该用什么将 兵种选什么?卧龙吟蜀国我的武将有 廖化(黄金重骑) 斐(虎贲刀兵) 简雍(鼓) 刘表(鼓) 袁术(冲车) 孙乾(不知道用什么兵种) 张任(没练) 现在用的 so it is important that you think before what you say or do everything请问有语法错误吗 什么是河流梯级开发? 用…不断…造句 立塔打井 杭州首个井筒式停车库有望下海铁联运专列开通(图)留学生展风姿(图)杭州着力疏通“毛细血管” 拥堵点已着产下龙凤胎的方姑娘昨出院了 亲人赶到杭州萧山机场明起启用新的冬春季航班时浙江高速部分路段夜间有雾气出现 注意新快报记者承认受人指使收人钱财发表失农业部回应转基因大米动物试验:旨在科新消法将于明年实施 网购7日内可无理马尼拉市长拟为人质事件筹集2000万专家解读张志军访台时机:反服贸影响不专家谈张志军访台:两岸事务部门常态沟国民党批民进党两岸政策:蔡英文不要说台湾高中上演“抢人”大战 重金心理战男子婚前向朋友传妻子裸照 辩称好东西台中一小学建“梦幻厕所” 创意设计令台湾5月失业率续降至3.85% 创7台湾男子一夜情遇男性“辣妹” 落跑被北京理科状元获北大自主招生加分30分柯文哲坦言参选团队像“杂牌军” 只能影像再现国民党最后一次大撤退 亲共者瞒天问路实朴大陆穿越者的徒弟龙珠之未来战士与时间行者新月绝域邪神魔破世界葬主脚下的传奇斗战异空三国事纪开元寺旅游巴音布鲁克天鹅湖旅游薰衣草世界旅游白沙湖旅游186团龙珠山旅游区旅游冰川公园旅游达瓦昆沙漠旅游红其拉甫山口旅游淀山湖旅游北京展览馆旅游鹫峰国家森林公园旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘