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

五步走战略——Avocado在最初几周内迅速扩大30倍

HTML文档下载 WORD文档下载 PDF文档下载
Avocado(鳄梨)是由前Google Reader的员工Chris Wetherell 和 Jenna Bilotta 开发的一款情侣应用,该应用在几周内扩大了30倍。这篇文章总结的就是通过Avocado这个例子,如何迅速扩大你的移动应用。


Avocado(鳄梨)是由前Google Reader的员工Chris Wetherell 和 Jenna Bilotta 开发的一款情侣应用,该应用能够让情侣们在工作和生活中更加亲密的同时,更好的管理自己的生活。

日前,Avocado首席工程师 Mike Maelzer发表了一篇文章,通过 Avocado的规模在几周内扩大了30倍这个例子,分享了如何演进架构来适应迅速扩大的移动应用。如果你的产品刚刚起步,那么这是一个很好的学习例子。

High Scalability的Todd Hoff对这篇文章进行了总结,他表示,Avocado通过五个步骤使移动应用实现了迅速扩大。

以下为文章全文:

他们最大的教训是一个很好的警示:

如果更早进行扩展操作,将是一个伟大的开始。由于时间压力,我们不得不做出妥协——减少我们四个媒体缩放工具盒。虽然投入更多的硬件,解决了一些规模问题,但还是不理想。

下面是我对文章的一些要点总结:

演化步骤之一——使其工作

刚开始的时候,你只是想把事情做好,几乎不管如何实现它。你知道如何修复需要的地方吗?Avacodo有针对性的测试他们的软件,寻找弱点,以更新、修复它们。这是一个非常明智的渐进过程。每一个大系统都是从一个较小的系统发展而来。

第一个问题:你真的需要进行扩展?Avocado需要扩展是因为他们预计将会有更多的访问量,而且他们不能让那些潜在的用户有一个糟糕的用户体验。所以,处理大流量峰值是一个必须考虑的因素。

他们初期使用一个很典型的设置,为每种功能都配备一台服务器:一个前端服务器(存储:API、Web相关、socket.io、HAProxy、安全通道/SSL加密);一个Redis服务器;一个MySQL服务器;一个批处理服务器(运行各种守护进程)。

副本测试设置用来运行常见的场景,如账户创建。

在测试环境中使用较小的EC2实例即省钱又能发现资源相关的错误。

测试脚本用jmeter建立,模拟每分钟数万的用户注册。

针对找到的薄弱点采用不同的方案进行测试,如添加第二台服务器,并使用服务器上所有的CPU。

数万用户同时注册导致性能下降:

  • 创建新的Python进程引起的发送邮件确认和调整个人资料图片造成CPU峰值
  • 这一些都发生在一个服务器里
  • 一些MySQL查询花费很长的时间
  • SSL是一个重大的CPU负载

演化步骤之二——测试驱动的变化

通过测试结果驱动它们:

添加了一些数据库索引以加快访问。在创建表时,你应该已经知道要添加哪些索引。让你的数据库告诉你什么是缓慢发展的产品,尤其在项目的初期。

使用node.js的异步功能重写邮件验证,而不是每次都分开一个单独的Python进程。吞吐量增长了3-5倍,为什么他们还要首先使用Python的方法?这似乎是一个明显的浪费。也许他们已有了代码,也许他们知道如何在Python上做到这一点?或许在更大的机器上这样做可能无关紧要。但这是一个明智的增量变化。虽说在它不工作时可以进行修复,但仍然有一个很大的隐患。如果其中一个进程死掉,那么用户的注册状态机也将会停止。

SSL被转移到它自己的服务器。同样,这个问题相当明显,一个更大的机器可以无视这个问题,但它在一个服务器上更容易开始。

促进四个新实例分配用于调整图像缩放。在促进后,移除这些实例。用一个好的策略来处理预期的流量高峰。

演化步骤之三——生产促进转变

随着我们的生产经验越来越丰富,我们可以看到很多问题正在变成那些奇怪的、难以预测的类型,似乎只能进行很糟的修复。

由于在升级监控警报过程中响应时间慢,所以添加了前端服务器。监控完成后,最终增加了15台服务器。

我们注意到在较大的EC2实例中,只有一个CPU被使用,node.js只是个单处理器解决方案,而每台主机上HAProxy也只被路由给一个实例。由于要读取一个新的配置,需花费几秒的时间重新启动HAProxy,所以他们创造了一个冗余的HAProxy服务器,用来减少停机时间。

ELB被用来将流量路由到两个HAProxy服务器以及处理SSL,这将减少代理服务器数量并节省资金。

这引起了多个服务器socket.io的问题,用户需要用一台服务器维护一个会话。所以他们转向粘性会话,这需要一些繁琐的变化。

有趣的发现:Websockets并不适用于所有的蜂窝网络。因为这是一个移动应用程序的关键。同时,ELB不支持websockets。所以他们使用XHR-polling。一个令人惊讶的命运转折。

看起来有很多socket服务器。为了减少被使用的数据库连接池的数量,最初每个socket.io服务器有一个数据库连接,排队到数据库的工作,通过socket.io,8个CPU每个要使用60%的性能。而在每个服务器实例中使用2到10个数据库连接池,可让CPU使用率下降3%,并显著改善相应时间。

为什么不从一开始就使用连接池?这是按标准来的。我很惊讶他们没有使用连接池,但会有各种各样的问题,关键并不是这问题,而是你发现并克服它们。

演化步骤之四——走向全球

世界各地都存在“移动情侣”,所以他们调整了在世界各地推出的服务器,通过延迟指导亚马逊路由。这是多么疯狂的一件事。在同一时间推出一个国际版本将是一个巨大的交易。现在,它只是你要做的另一件事。

移动性能是关键,但他们是否应该较早走向全球?这将是疯狂的举动,在你走向世界之前,你必须有运作系统的相关经验。

演化步骤之五——现在使其更好地工作

在处理初始推广负载后,要了解系统是如何运作的,以及如何解决问题,现在的时间去考虑自动化和自动部署策略。一开始就实施自动化是很复杂的事情,因为那时候你还不知道它应该如何工作。要有更完善的增量思维。 (王旭东/编译 仲浩/审校)

本文来自: High Scalability

“ 第五届中国云计算大会 ”将于2013年6月5-7日在北京国家会议中心隆重举行。猛击报名! 

相关活动已经火热启动:

2013中国云计算大调查,每周大奖等你拿! “ 

Innovation Cloud 2013云创新产品与应用项目征集,欢迎研发者、团队和创业企业参加! 

福利来了,爱拍原创免费为iOS版手游制作宣传视频 【工具推荐】Zrender——轻量级Canvas类库,让绘图大不同! 基于Docker和CoreOS的开源PaaS平台——Deis v1.0正式发布! 微软宣布.NET开发环境开源 支持三大操作系统 爆发吧,诺基亚!前员工开发物联网新设备 详解Visual Studio Emulator for Android,微软的Mobile First! HPC China 2014完美落幕,AMD Firepro荣获好评! 揭秘微软的Container技术之一Drawbridge AWS副总裁谈数据中心网络打造 【最具价值CTO评选秀】出门问问CTO雷欣:从技术极客到核心管理的秘密 《近匠》APICloud:“云”+“端”一体的移动API提供者 Oculus移动SDK发布!John Carmack操刀、集成Unity 4.5 11月15日深圳见!深圳微信开发者大会公布全部议程 参与2014中国大数据行业大调查 BDTC门票等你拿 HTML5规范尘埃落定,5个开发工具推荐 盘点最受开发者喜爱的Android 5.0 Lollipop API IoE Day侧记:想开发智能硬件?先要弄明白这几个问题 【问底】许鹏:使用Spark+Cassandra打造高性能数据分析平台(二) 微软承诺所有Lumia WP8设备将升级至Win10,用户会买账吗? 周末,深圳微信开发者大会等您来!(参会必读+名单) 营造云安全生态链 第五届云安全联盟高峰论坛在京顺利召开 中国大数据六大技术变迁记 【最具价值CTO评选秀】当当网CTO熊长青:结合行业及技术发展,规划技术方向 社交颠覆传统,环信技术交流沙龙纪实(组图) 揭秘经典案例炼成之道 微信开发者大会精华回顾 从一家电子商务网站学到的经验教训 【最具价值CTO评选秀】极路由CTO康晓宁:极客转型CTO的感悟 盘点这些年来的“微信万能论” 《近匠》亲加通讯云:IM即时通讯API的极致服务者 TCL杯HTML5智能电视开发大赛完美落幕,8项获奖应用大揭晓! Xcode 6.2 Beta发布,支持WatchKit的iOS 8.2 SDK来了! 怎么把Demo_Adhoc分到两台机上运行 数据库更新 how to 用 insert into 把一个.zip文件保存进数据库?? 请大家推荐一个CD机吧!!!! 急,NOTES与SQL SERVER的问题 asp实例 我的Access库文件原来大小是6.78M,我清空所有记录和减少很多记录时,为什么大小没改变? 关于delphi动态加载控件,在线 代人提问:请问.dcu文件是干什么的?如何才能生成该类型文件。 怎么响应Enabled属性 asp.net做网页,运行后,<asp;....></asp:...>字段仍然存在?? 请教VB高手们一个高难问题! 请问,存储过程在VC如何调用,用ADO,ODBC。 怎么实现这个SQL? 没事瞎问~~~黑客软件能走向海外吗?(比如扫描器,键盘记录器,木马等) windows protect --error ,我装不了系统啊 DbEdit里的数据用adoquery如何更新才好? 有没有办法调试存储过程? 我是个菜鸟,请教大家,VC++和C++ Builer的优点和缺点。 请问如何改变显示文本的颜色? delphi 6 的补丁包 浏览器为NS6时如何获取屏幕分辨率? 如何控制 ValueListEditor ?有一个Help这样写道: 各位斑竹请进来,紧急求救呀!!!!! 是否可以把用asa建的数据库转变为access? 在java中如何压缩和解压文件夹? 如何在运行期把最大化,最小化按钮灰掉!? 求一句广告词 请教一个毕业设计的问题,关于在c++buileder中OLe对象调用:怎么样把word中的表格导入到数据库 请问如果在首页中加入一个论坛的登陆对话框? 这样的IIS错误信息,是什么意思,怎么解决? 问一下,vb怎么连接数据库呀`~(access)有代码吧~~给分呀` 如何画箭头? C#进行嵌入式开发,方便吗? 她为什么看上我??! 如何用BCB从mp3文件中得到歌名,歌手名,唱片集,流派等! 各位知道有关于ORACLE系统管理实例方面的书籍吗? ADO访问access数据库,怎样编辑一条记录啊? 请教各位关于win2000默认共享的问题 喜欢德国队的进来,坚韧不拔的意志和不到最后一刻不放弃的精神!!!! 如何判断图像大小 com的参数传递问题 请问:如何将pb数据库中的表倒入vf数据库中???急!!!!!! 大家好,关于数据库的问题请,大家帮忙。 一个关于button的简单问题 有没有将图片设为桌面的api函数,若有怎样用?若没有,怎样实现该功能? 我在adotable中删除数据它老是报错:”键列信息在最后读取中改变“(急用) 如何将CString类型转换为int型? wyx病毒的所有症状表现、危害性、解决方法。 在线等待--100分(很简单的问题) 急急急!! 氢离子电子式 用热的快在电壶里烧水对电壶有害没?听说那样烧久了壶就不保温了 某同学在做电解水的实验时通电一段时间后,水的质量减少了2.7g(不考虑蒸发),理论上的H2和O2质量分别是多少 两根材料相同的均匀导线x和y串联在电路中,两导线沿长度方向的电势变化情况分别如图 电壶烧水,一段时间后发现壶盖在跳动,这种现象中能是整样转化的? 苯酚钠溶液和通入二氧化碳成什么? 并联电路中的一条支路电阻变化时,各个支路的电流分配会发生变化吗?在电源不变的情况下,即电压不变 电水壶不烧水时壶身与电座分开放好吗 一根铜导线和一根镍铬合金线.长短粗细都相同.把它们并联在电路里,通过哪根导线的电流大?为什么? 并联电路各支路分到的电流大小与电阻成____,电阻越大,分到的电流就越____.并联电路各支路分到的电流大小与电阻成____,电阻越大,分到的电流就越___,并联电路的总电阻比其中任何一个电阻都 电壶烧水把电能转化为()能1.2.热能 3.机械能 NaH是一种离子化合物,其中钠显+1价.NaH与水反应放出氢气.下列叙述错误的是A.NaH还原剂,水是氧化剂B.生成的另一种产物是氢氧化钠C.NaH的氧化产物是氢气D.水的氧化产物是氢气请问答案C正确吗, AB和BC 是由同种材料制成的长度相同的两段导体,将它们串联入电路中比较通过它们的电流和电压的大小 所有的原电池中是不是都是电解质溶液中的阴离子移向负极,阳离子移向正极? 从化学角度分析,甲醇有哪些特性?有什么通途? 有同种材料制成长度相等的导线串联 AB比BC细 比较他们的电压电流数量关系 春雨的诗句15句 甲醇、丙醇是怎么命名的,就是说有什么特征,为什么这么叫还有甲酸,乙酸还有那个丙三醇, 并联电路中支路电流是怎样按支路电阻分配的 电解水反应的化学方程式为 . 氢化锂是制作氢气的来源,反应化学式为LiH+H2O=LiOH+H2↑.计算80g氢化锂与足量水反应产生氢气质量 在并联电路中,有两条支路,其中一条的电阻比另一条的电阻大,那么电阻较大的有电流通过吗?或者在串联电路中,如果其中一处断路,那连接在电路中的电压表会偏转吗?如果并联电路中部分 从电解水的化学方程式 金属氢化物可以快速与水反应制取氢气,如:氢化锂与水反应的化学方程式为LiH+H2O=LiOH+H2.若制取10克氢气,需要消耗多少克氢化锂? 英语短文(礼仪方面)大一新生做课前发言,需要一篇英语短文要求:关于礼仪的 不要低幼化不要用特别难的词(符合大1新生) 电解水的化学方程式 化学上利用氢化锂和水在常温下反应制取氢气同时生成氢氧化锂反应的化学式为LiH+H2O=LiOH+H2↑生成的氢氧化锂能和多少克质量分数为10%的稀盐酸恰好完全反应 氢气还原氧化铜的方法测定某氧化铜样品的纯度(杂质不与氢气反应),同学们设计了以第三小题我选的是A和B,正确答案是BA为什么不是正确答案?如果装置的气密性不好,那就可能会导致空气 电解水的反应的化学方程式 苯酚,NaOH,CO2怎么反应?生成物好像是水杨酸钠反应式是什么?还有反应条件~ 带电粒子在复合场(电场与磁场同时存在)中的运动的分析方法 有两根粗细相同,长短不同的锰铜线,将它们串联在电路中,那根电压大,那根电流大 采用紫外分光光度计法测定时如何选择分析波长 描写春风春雨春风的古诗名句 如果在粗细相同的铁丝和锰铜丝之间选择,你选择---做连接电路的导线,理由是 ( )C2H6OH+( )O2---点燃---( )CO2+( )H2O 氯离子与氢离子能反应吗 煤层气的采集方法可行,是不是利用它驱动燃气轮机可以发电那?如果煤层气采集方便,为什么不利用它作为燃气轮机的燃料发电,然后产生蒸汽供暖. 一句写春雨的诗句 用氯酸钾和二氧化锰制取氧气用向上排空气法收集的最佳时刻 N2H4是一种常用的火箭燃料,它与一种单质X燃烧生成氮气写出X的化学式 原电池里的盐桥里面的离子能移动到溶液中吗?同时溶液中的离子能通过盐桥吗?如果只是让离子集中在盐桥与溶液接触的部分使两边溶液保持电中性,那么突然拿掉盐桥后,盐桥里面的离子不就 酸度0.2换成ph是多少 发射卫星时可用肼(N2H4)为燃料,用二氧化氮为氧化剂,这两种物质反应生成氮气和水蒸气.已知:N2(g)+2O2(g) ═2NO2(g) △H1= +67.7 kJ•mol-1N2H4(g) +O2(g) ═N2(g)+2H2O(g) △H2=-534 kJ•mol-1 电解质溶液在原电池中有什么用?书上说“原电池一定要形成闭合回路”,我不明白“闭合回路”是什么意思?参考书里说要离子的移动来导电,为什么?电子从负极流向正极,然后在正极和水中的 广泛使用酒精、沼气,既可解决能源问题,也有利减轻温室效应怎么错了?老师说它们是清洁能源啊? 发射通讯卫星的火箭用联氨N2H4作燃料用四氧化二氮气体作助燃剂燃烧后的生成物之一是氮气写出反应化学方程发射通讯卫星的火箭用联氨(N2H4)作燃料用四氧化二氮(N2O4)气体作助燃剂,燃烧 电解水的化学方程式有几个? 温室效应和甲烷有关系吗 "为了实验安全,做氢气还原氧化铜实验时,先检验氢气纯度后再像试管中通气体"对不对啊? 电解水化学方程式表示的意义? 甲烷可以直接引起温室效应吗? 用氢气还原氧化铜时在氢气通入前应先检验什么 电解水的化学反应方程式 在原电池中,电解质的阳离子和阴离子分别向什么电源的什么极移动,盐桥中的阴阳离子呢? 在氢气还原氧化铜时,通入氢气前先检验什么,为什么? 有哪些根据化学结构计算最大紫外吸收波长的经验规则 铜的电解精炼为什么铜离子比氢离子铁离子优先得到电子RT 电壶烧水有害吗 紫外最大吸收波长是650nm的话,荧光激发波长该选什么?如果激发波长选了650nm,那根据斯托克斯定理,发射波长不是在可见光外面了?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘