



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
我们开发第一版的IronWorker已经是3年前的事了,是用Ruby写的,API基于Rails开发。我们没用多久就发展成了相当大的规模,很快我们就触及到了Ruby程序的承载上限。长话短说,我们切换到了Go语言,请接着读下去,下面是事情如何一步步发展的。最初的设计首先,做一点背景介绍:我们开发的第一版IronWorker,起初叫做SimpleWorker(很不错的名称,不是吗?),用的是Ruby。我们过去是一个顾问公司,为其它公司开发应用,在当时有两个东西被炒得非常火:亚马逊的Web Services和Ruby on Rails。所以我们开发的应用都基于AWS的Ruby on Rails架构,并因此吸引了不少大客户。我们开发IronWorker的初衷是来源我们自身的需求。我们有不少做硬件设备的客户,他们会724小时不停的给我们发送数据,我需要收集这些数据,把它们整理成有用的信息。典型的做法就是让定时任务每天每小时的遍历这些数据。我们想到应该开发一个东西,能够处理所有用户的数据,而不必做一大批的定时任务为每个客户单独处理。于是我们开发了一个服务类应用,并在内部使用了一段时间,但后来我们认为一定会有其他的人也需要这个应用,于是我们决定公布它,这样,IronWorker诞生了。我们的服务器可承受的CPU使用率大概在50-60%。当超过这个额度,需要增加服务器来保持它在50%左右。只要我们不介意大量的服务器租用费(我们当然介意),这种模式会工作的很好。但最大的问题是出现在流量大量陡增时。当一个大型的流量高峰到来时,它会产生多米诺效应,会拖垮我们整个的服务器集群。当某些指标超过50%的阀值时,我们的Rails服务器会吃掉100%的CPU使用率,变成无响应状态。这会导致负载均衡设备认为它已经宕了,把它移出分发池,于是这台无响应的服务器上的负载就会转移到池中其他服务器上。因为池中剩下的服务器需要承载这失去的服务器上的负载再加上流量高峰,必然会有第二台服务器倒下,负载均衡设备又会把它移除,前赴后继。很快池中所有的服务器都会耗尽。这种现象也叫做colossal clusterf*k (ref: +Blake Mizerany)。这里是一个简单描绘多米诺宕机效应的绘图。在这种架构下避免这种事情发生的唯一办法就是保持有大量的额外处理能力,让我们的服务器的负载远低于它应该能承受的能力,但这意味着要多花一大笔钱。必须让这种状态有所改变。重写应用我决定重写这应用。这是一个很容易的决定,很显然,我们的Ruby on Rails无法支撑我们业务规模的增长。我们都有多年的开发Java的经历,曾经写过很多东西只需要很少的资源就能处理大量负载,远比Ruby on Rails的处理能力强的多,我知道我们可以做出很多改进。于是,接下来的问题变成了应该使用哪种语言?选择一种语言我对任何新建议都持开放的态度,最不济,我还可以重回到Java。Java是一个在很多方面(比如性能上)很棒的语言(是吗?),但经过了多年的Ruby程序编写后,我已经为它的开发效率所痴迷。Ruby很有趣,朴素,简单。我们搜索了一下比Ruby性能上要好的脚本语言(Ruby并不是很差),比如Python和Javascript/Node,我们还研究了Java的衍生语言,如Scala和Clojure,和还有其它的语言例如Erlang(AWS使用了它)和Go语言(golang)。Go语言获胜。事实上,它的作为基础组成部分的并发特征太强悍了;它的标准核心库提供了我们开发API服务需要的所有东西;它简洁;它编译快;很像Ruby,Go语言很有趣;最后,数字是不会撒谎的。经过了一次原型制作和性能测试后,我们知道了通过它我们可以将负载能力做重大的提高。经过了征询团队的意见(“这很好,它背后有Google支持”),我们打起了攻坚战。起初决定押宝Go语言时,这是一个有风险的决策。Go语言的社区并没大量的形成,没有多少开源的Go语言工程项目,在正式产品上使用Go语言的成功案例并不多(有吗?)。而且我们并不敢肯定在认定Go语言后能否招到这方面的顶级人才,但很快我们发现我们可以招到顶级人才正是因为我们选择了Go语言。我们是首个公司公开的宣称在我们的产品中使用Go,首个公司在Go语言邮件列表里贴出Go语言工作职位招聘。很多顶级程序员希望来我们这里,就是因为这样他们可以在每日的编程中使用Go语言。Go语言的表现在我们推出了首个Go语言版本后,我们的服务器数量从30个减少到了2个,并且只留了2个服务器做冗余储备。它们就像是根本没有被使用,完全就像没有任何程序在上面运行。我们的CPU使用率低于5%,整个应用的运行启动只消耗了几百KB的内存(仅在启动时),相比之下Rails应用要耗用50MB。这种比较甚至是包括了虚拟机内存使用!这真是天与地的差别。从此我们再也没有经历过多米诺宕机的事故。相比起之前,我们的业务增长了许多。我们有了更大的流量,我们增加了两个新服务(IronMQ 和 IronCache)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 聚乙烯醇海绵行业分析:高吸水性PVA海绵是最大的细分市场占51%的份额
- 2025年机器人产业人才发展报告-智联研究院
- 生存秘籍:野外探险必修课
- 2025年互联网医疗平台在线问诊服务质量与患者就医体验优化报告
- 智慧交通系统中的交通流量预测技术2025年应用创新报告
- 2025年公众参与对环境影响评价工作流程的影响分析报告
- 即时配送行业配送路径优化与成本控制:冷链物流解决方案报告
- 工业互联网平台IPv6技术升级在2025年工业互联网平台市场拓展与竞争挑战报告
- 企业可持续发展目标(SDGs)在绿色能源与新能源开发中的应用报告
- 抖音平台经纪人管理制度
- 2025年广西公需科目答案03
- 2024年贵州省贵阳市中考生物试题(含答案逐题解析)
- 冷冻水管道工程施工工艺
- GA∕T 1699-2019 法庭科学 复制笔迹检验指南
- 杭电 通信电路复习
- 初物管理办法及规定
- 对照品管理SOP双语
- 积雪草提取物对胃粘膜的保护作用及其机制探讨
- STEP7下冗余IO编程
- 道教全真礼斗清科仪
- 餐厅小票打印模板72790
评论
0/150
提交评论