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

五步走战略——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云创新产品与应用项目征集,欢迎研发者、团队和创业企业参加! 

第一个F#入门程序Hello world 在F#中将函数作为一等对象的值 PHP获取Google PR值 ASP.NET(C#)获取Google PR值 android.appwidget类剖析 Android NDK之JNI使用例子 RemoteViews - Android Widget开发入门 ASP.NET如何用正则表达式得到网站页面中的所有链接 PHP实现图形验证码案例(1) Android Widget开发实例-电量监控 Android自带Widget - Clock指针钟表源代码分析 C#实现文件批量改名工具 PHP利用Google Chart API生成饼图 PHP操作SQLite数据库 PHP利用DomDocument创建XML文件 ASP.NET如何加密/解密URL网址 如何使用C#读取csv文件 三步骤实现ASP.NET(C#)项目中添加谷歌(Google Map)地图 使用C# ASP.NET以FTP客户端方式下载文件 ASP.NET如何用C#代码检测手机浏览器 使用C#读取上传的Excel文件 新版本SQL Helper类 C#使用iTextsharp生成PDF 在.NET里用iTextSharp库生成PDF文档 用itextsharp将ASP.NET页面导出到PDF中 什么是JQuery-JQuery API jQuery入门指南-JQuery API jQuery的核心部分-JQuery API $(elements)-JQuery API $(expr, context)-JQuery API $(fn) -JQuery API 用VB写发邮件。。。。。。。。。。。。。。。 vc绘图的问题!!请各位大侠帮帮忙.谢谢!急! 如何在Edit中判断光标是否是在字符串的末尾? 小弟想学java,怎样才能入门,请高手指教,谢谢!!! 急!!VB如何实现让windows2000休眠??? 为什么win2000 Prefessional下安装了补丁2就打印不出? 我把flash文件生成了.exe文件,但我想打开它时就是全屏显示的,请问怎么做? 谁帮我理清一下所有的修饰符的搭配情况啊?比如public不能和private连用,而static可以和native连用. 在TabCtrl对象中动态Create了一个Button(父窗口为TabCtrl对象),但是MAP的ON_BN_CLICKED (IDC_PUSHBUTTON, OnButtonClicked)消息却没有任何反应?其他对象的ON_NOTIFY消息有反应的! 第一页可根据查询条件正常显示,第二页就不受查询条件的限制,开始显示数据库里的所有内容(其实第一页的内容还没显示完)查询条件不能传到下一页 大家都会遇到的问题:程序打包以后太大!!!!请大家来讨论、解决!来着有份! JB5中的classpath! 谁可以给我一份报价文档 有人能介绍几本学习ATL的好书 javascript中调用jsp 如何显示剪贴板的内容 各位前辈好.我有个关于TCP/IP协议应用的问题,请大家指点. 除了本站好象很少有人讨论日志文件的,能介绍点好的website吧(国内外均可)谢了先 用什么软件制作和修改.chm文件阿?? 问个弱问题:web服务器和数据库服务器不用同样系列的东西会有问题吗? createbitmap()里頭有五個參數,最後一個參數怎麽設置?我看了英文和中文的解釋都理解不了,誰能給個例子出來呀 如何添加自定义的ToolBar.怎样在命令菜单被check时随意显示和隐藏该工具条?急! 在线等,为什么我的代码原来可以运行,现在不可以了????TextPad 用GetCommandLine()得到的文件名是c:\test\YTEX~1.XY,而我的实际文件名是c:\test\y.txt.XY,我该怎么办? 急急急...为什么我拨号已经拨通了,但我还是打不开网页,ping各个网站也ping不通 各位前辈好.关于TCP/IP协议应用的问题,请大家指点. ***软件加密,急急急!!!请高手指教*** 寻找与CSDN类似的社区软件 谁有SCJP SL-275的原版电子版教材? 标准C程序中调用类的编译错误 access的mdb数据库如何编程知道里面含有那几个表? 谁有瑞星的升级程序,或是授权ID什么的?现在瑞星升级很烦啊!又是注册,又是授权的。 好象很少有人讨论日志文件的,能介绍点好的website吧(国内外均可)谢了先 Ghost之后,20G只剩下一个2G的C:!!!如何恢复,请指教,多谢!!! 我是初学者,问一个比较傻的问题:既然JAVA是一种纯面向对象的语言,那么为什么int i=new int()或int i=new int(1)不能通过编译?谢谢。 哪位能讲解一下,WEB服务器启动一个PHP 脚本的过程? 哪位朋友有没有做过让asp自动生成 Access数据库中的一张表 现想做一模块,主要是对股票数据在网络(包括公司内部网或是INTERNET)进行实时的发送; 关于DcomConnection的一个问题:连接局域网其他机器的应用程序服务器时“拒绝访问” 在VisData中正常通过,但在程序中不能通过,为什么 图像的小波分解和重构,模极大值算法。 师傅不在QQ,在这里吗?有个问题.//小新的徒弟. 老千,上次的那个rose下载网站,你还记得吗?偶忘了,搜索了几遍野没找到//牛虻 在VisData中正常通过但在程序中不能通过,为什么 向各位高手请教两句:tab_1.post selecttab(3) 的作用是不是向tab发送消息,消息内容是selecttab(3)?yield()是不是从消息中查找是否有相同消息,如果有则将它拿出执行? 我很莱,谁能给我简单的解释一下线程是什么?脱壳是什么? 图象资料,轻而易举30分! 和大家交流一下泛型化编程 文件拷贝的简单问题, 大家好:请问:access的mdb数据库如何编程知道里面含有那几个表? 怎样将mysql驱动加到jbuilder中,让Database pilot能认得出,高分相送 踢毽子的好处? 气缸气动缓冲和机械缓冲有什么区别 智能气动标记机压力不大,怎么调啊 踢毽子对身体有什么好处? 带导杆气缸有哪些优点 切纸机压力改气动我的是开印刷厂的,用的是半开拉杆切纸机,想把压力部分改成气动的,问一下这个方案可行吗?如果能改,气泵和气缸都要求什么标准的? 踢毽子的好处?帮我解答一下吧!各位帮我一下! 带导杆气缸有哪些? 液压机和气动压力机的区别我们客户要买压力机,英文hydraulic press,请问气动的开始固定台压力机和液压机除了动力源不一样外还有有什么区别?从功能上讲是否是一样的?哪种更先进一些?价钱 一个骑自行车的人,沿长5米高3米的斜面下滑,车人共重700n,求使车沿斜面下滑的力 驾驶装有abs 系统的机动车怎样采取紧急制动? 气动压力机,压力不足是怎么回事 某同学选了一个倾角为的斜坡,他骑自行车电荷量为q的正电荷,均匀分布在由绝缘材料制成的质量为m半径为R的均匀细环上,现设法加外力使圆环从静止开始,绕通过环心垂直于环面的轴线匀加速 ABS详细的含义是什么?具体作用是什么?没有ABS系统,车辆有什么危险?意向车型:大众 朗逸比对方面:操控度 气动压力机的工作原理是什么啊? 什么设备能用到气动元件(气缸 电磁阀等)越详细越好 气缸的公差与配合 有没有可能在外部测量汽车轮胎气压?不在轮胎内安装传感器,而是通过对轮胎的外部分析,或者直接用传感器接触轮胎表面测得轮胎的气压呢?不需要精准,只要大概数值. 二位三通电磁阀 二位二通电磁阀 怎么翻译成英文? 气缸的圆度误差 管材压力试验机有哪些标准? 电磁阀的英文怎样说? 什么叫汽缸的圆柱度误差?我要书面的表达,不要口头上的,因为是做试卷的, 汽车轮胎气压多少正常? 电磁阀英语翻译请各位知道的说一下具体的翻译.冰箱用的电磁阀上面的.线圈骨架:线圈包塑:求以上两个电磁阀上名称的英文翻译.最好正宗一点,英文单词少一点. 那个600MM长气缸怎么做到能再任意位置精确定位啊,误差不大于1毫米的.现在有没有已经成熟的产品能用在这里啊?为什么气电伺服控制器没有成品吗?百度上找不到. 为什么汽车轮胎的气压前后不一样 “电磁阀” 英语怎么说?“电磁阀”是家用可燃气体报警器的组成部分, 有更好的说法没?谢谢各位高手帮助~ 气缸,“气缸带位置感测”请问这个“位置感测”在气缸中具体起什么作用?FESTO标准双作用气缸,型号DNC-32-380-PPV-A,型号中的A表示带位置感测 求汽车上所有控制器,和带PCB板开关、灯等得安装位置和作用. 汽车的 标准气压是几个压力?说具体点! 进口气动球阀,进口不锈钢气动球阀哪家好啊 冬天汽车轮胎气压应该在多少? 所有气体的压强在标准条件下是相同的吗?根据P=nRT/V,n设为1mol,T设为273.15K,R为常数8.309J/(mol·k),气体体积在标准情况下都是22.4L,就可以算得所有气体压强都是大气压强.这样算对吗?如果对的话, 角行程气动球阀和直行程气动球阀比较想问下角行程气动球阀,和直行程气动球阀,它们在性能比较,哪个更好些我是说气缸一个是直行程,一个是角行程的 汽车轮胎一般应该是多少个气压? 1 标准大气压强单位换算 某同学在水平公路上骑自行车,当车胎发生缓慢漏气时,车胎对地面的压力和压强( )A 压力和压强不变 B 压力和压强都变大C 压力不变,压强变小 D压力变小,压强变大 教练车最前面两个小镜子有什么用我知道是后视镜.不过其他车都没有,我想不需要看.踩下离合器踏板就行了.动力切断就行了. 汽缸是有气动阀控制的吗?谁能说明气缸,气动阀,电磁阀,气动阀门之间的关系, 小明骑车上学,由于车胎漏气,小明的自行车对地面的压力和压强的变化是------( ) A、压力不变,压强小明骑车上学,由于车胎漏气,小明的自行车对地面的压力和压强的变化是------( )A、压力 谁能告诉下这是什么车的镜子 这几个气缸的规格CDQ2B32_45,CDQ2B25_30D,CDQ2KB16_20这三个气缸的外形尺寸,还有行程是多少, 1.某同学在水平公路上骑自行车,当车胎发生缓慢漏气时,(车胎内的空气质量可忽略不计),车胎对地面的压力和压强()A.压力和压强都不变 B.压力和压强都变大 C.压力不变,压强变小 D.压力 物理论文关于车的镜子和灯水平初二左右,主要是写汽车的镜子的反射还有灯就是关于光的反射折射和传播给我个提纲 水力采煤是从喷枪中射出的水柱在煤层上产生的平均压强是100000PA.求煤层表面1平方厘米的面积所受的压力.计算过程及思考路线 小明放学回家在水平道路上骑自行车,发现车胎慢慢漏气,则车胎对地面的压强将( )麻烦附带解释 汽车镜子上的一道线是干什么用的 为什么高压气体从喷枪喷出时,喷枪口前面的气压会低于喷枪口周围的气压.高压气体是空气分子被压缩后的气体,喷出来时,单位体积中的空气分子数量多于空气中单位体积的空气分子,数量应 气动阀门气缸优点? 汽车镜子怎么调 ps喷枪怎么设置,是笔刷打开喷枪么?喷枪有啥作用? 机动车在紧急制动时abs系统会起到什么作用 汽车轮胎气压过高对车子有哪些损害?我新手,充气时气压表坏了,过了半月一测量气压600kpa,我靠.我开的是普通轿车.请问对车子有哪些损害?谢谢哥哥姐姐们 喷枪气压如何调节? 物理的压强和V派什么的计算题的公式和讲解我一辈子的事啊 节流阀和调速阀的准确区别 气缸上的调速阀是控制流量还是速度.对气缸工作影响如何.有人说调速阀控制的只是速度.通过改变气体流量来改变气缸的运行速度,对气缸出行压力并无影响.但是, 有力作用再物体上,物体的运动状态就会改变.这句话为什么错? 气缸------这种气动滑台怎么动作的?(图)安装方式是推杆固定呢还是缸体固定的? ------兄弟啊不要随便哪里复制个东西过来好不好啊,这样会误人的. 汽车轮胎标准气压
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn