程序员必看:性能大幅度提升的Twitter新系统架构

  2013年8月3日《天空之城》在日本的热播创下每秒新增143119条推文的Twitter峰值记录,是Twitter平均每秒发推数(TPS)5700条的25倍。

  值得注意的是,在这次毫无征兆的“洪峰”到来时,Twitter全新的系统平台并没有被潮水般涌来的推文堵塞而产生任何延迟甚至宕机。

  Twitter旧架构与新架构的性能对比

  仅仅三年前,在2010年世界杯上,一个点球和一张红牌产生的“推文风暴”都可能导致Twitter服务暂时失去响应,号称地球脉搏的 Twitter 经常“心肌梗塞”。过去三年Twitter的工程师们夜以继日的工作,试图用“缝缝补补”的方式完善Twitter系统,但最终随着Twitter的快速 发展,这些方法的收效转瞬即逝。

  最终,Twitter痛下决心重新架构为人诟病的IT系统,新平台上线运行后在性能和可靠性上都取得的翻天覆地的进步。无论是《天空之城》热播还是超 级碗决赛都没能卡住Twitter,而且新的架构也为Twitter推出多媒体推文卡片,跨设备消息同步等新功能的推出提供了有力的支撑。

  最近,Twitter平台工程副总裁Raffi Krikorian(@raffi)在Twitter官方博客 撰文分享了Twitter新架构的方法和经验,摘要如下:

  重新架构的缘由与问题症结

  2010年世界杯多次卡壳后,我们重新审视了系统,有以下几点发现:

  我们运行着全球最大的Ruby on Rails应用,200名工程师负责开发运维这个系统,但随着用户规模和服务数量的快速增长,系统所有的数据库管理、Memcache链接以及公共API 的代码属于同一个代码库。这给工程师的学习、管理和并行开发都带来巨大困难。

  我们的MySQL存储系统已经遇到性能瓶颈。整个数据库中到处都是读写热点。

  通过添置硬件已经无法解决根本的系统问题——我们的前端Ruby服务器每秒处理交易的数量大大低于我们的预期,也与其硬件性能不成比例。

  从软件的角度看,我们陷入了“优化的陷阱”。我们是在牺牲代码库的可读性和灵活性来换取性能和效率。

  重新检视系统,并设定三大目标/挑战

  一、新架构必须在性能、效率和可靠性上表现优异,减少延迟大幅提升客户体验;同时将服务器数量减少到原来的十分之一;新系统能够隔离硬件问题防止其演变为大规模宕机。

  二、解决单一代码库的种种弊端,尝试松耦合的面向服务模型。我们的目标是鼓励封装与模块化的最佳实践,但这次是在系统层面,而不是类库、模块和数据包的层面。

  三、最重要的是能够支持新功能的快速发布。我们希望能够由一些充分授权的小团队能做出自主决策,并独立发布一些用户功能。

  我们在动手前部分开发了一些概念验证模型,最终我们确定了重建的原则、工具和架构。

  系统重建的关键措施

  一、前端服务:用JVM取代Ruby VM。通过重写代码库将Ruby VM服务移植到JVM,性能提高了10倍,如今性能达到 10-20k请求/秒/主机。

  二、编程模型:按服务类型对系统进行结构,建立一个统一的客户端服务器库并与负载均衡、故障转移策略等绑定,从而让工程师们能更加专注于应用和服务界面。

  三、采用SOA面向服务架构,使并行开发成为可能。

  四、推文的分布式存储。即使将整块单一应用分解成不同的“服务”,存储依然是个巨大的瓶颈。过去Twitter采用的单一MySQL主数据库只能线性 写入推文,Twitter决定在推文的存储上采用全新的分区策略,用Gizzard框架创建容错的分片分布式数据库存储推文,但这样一来就没有办法使用 MySQL的唯一ID生成功能。Twitter用 Snowflake解决了这个问题。

  五、监测与统计。将单一应用转化为复杂的SOA应用后,需要购买匹配的工具才能够驾驭。Twitter的服务推出速度很快,同时还需要实现数据化的决策支持,Twitter的Runtime系统团队为工程师开发了两个工具Viz和 Zipkin。

时间: 2024-09-13 13:24:05

程序员必看:性能大幅度提升的Twitter新系统架构的相关文章

程序员必看:关于SQL Server的若干注意事项

server|程序|程序员 如果你正在负责一个基于SQL Server的项目,或者你刚刚接触SQL Server,你都有可能要面临一些数据库性能的问题,这篇文章会为你提供一些有用的指导(其中大多数也可以用于其它的DBMS). 在这里,我不打算介绍使用SQL Server的窍门,也不能提供一个包治百病的方案,我所做的是总结一些经验----关于如何形成一个好的设计.这些经验来自我过去几年中经受的教训,一直来,我看到许多同样的设计错误被一次又一次的重复. 你了解你用的工具吗? 不要轻视这一点,这是我在

程序员必看 c++笔试题汇总

本文通过对程序员笔试过程的总结,对程序员c++笔试题进行了汇总.希望能与大家共同分享.下面是一些常见题型: 1.求下面函数的返回值(微软) {   int countx = 0;   while(x)   {   countx ++;   x = x&(x-1);   }   return countx;   }  假定x = 9999. 答案:8 思路:将x转化为2进制,看含有的1的个数. 2. 什么是"引用"?申明和使用"引用"要注意哪些问题? 答:引用

Java程序员必看电影:Java 4-ever

如果你是Java程序员或者说你有意往Java方面发展,这么这部由JavaZone制作的恶搞微软.net的小电影一定值得你去看一看. 影片通过叛逆小伙的成长历程描述了在微软帝国下Java所给人们带来的新思维和新方向,拍摄的非常具备专业水准,强烈推荐观看. 如果你是Java程序员或者说你有意往Java方面发展,这么这部由JavaZone制作的恶搞微软.net的小电影一定值得你去看一看. 影片通过叛逆小伙的成长历程描述了在微软帝国下Java所给人们带来的新思维和新方向,拍摄的非常具备专业水准,强烈推荐

程序员必看--23种设计模式及解释(中英文对照)

转自:http://blog.csdn.net/yaolingrui/article/details/7338263 设计模式是每个程序员的必修课,这里将23种模式整理在一起,想学习这方面知识的朋友们有福了,呵呵. Singleton Pattern(单例模式):Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.) F

程序员必看2008编程语言走势解盘_网站应用

Java类语言:Java似乎会逐渐走下坡.J2ME会受到Google Android.Adobe Flash Lite..NET Compact Framework的影响:J2SE的对手则是.NET和AIR:J2EE在中小型网站受到PHP.Ruby-on-Rails(RoR)很大的冲击.幸好,目前大型企业好像还是买J2EE的帐. 在J2ME和J2SE方面,未来似乎可以用JavaFX奋力一搏:在J2EE方面,也有Groovy/Grails可以抵挡RoR.尤其目前大家怀疑PHP和RoR只适合用在中小

程序员必看:如何快速戒掉熬夜(晚睡)强迫症_生活健康

熬夜的习惯最常出现在时间分配比较自由的年轻人中:大学生.待业者.自由撰稿人.网络作者.画手.空闲期的创业者--其中又以经常接触网络的人为主.其实熬夜并不是一种正常的 习惯,它和社交网络依赖症(一直刷手机.刷微博.只要手机不在身边就特别心慌,生怕别人不联系自己)一样都是强迫症的一种. 写这篇文章是因为我自己以前就有严重的晚睡强迫症,一般情况我都不会正常作息,通常状况是凌晨四五点睡觉,第二天下午一两点起来.最凶猛的时候可以是下午两点睡晚上九点起.这是哪国时差?不清楚,反正全世界的时差都过,就是不爱按

提高MySQL数据库查询效率的几个技巧[php程序员必看]

MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点变化频繁,因此一定要保持查询和插入的高效.以下是我在使用过程中做的提高效率的三个有效的尝试. l 使用statement进行绑定查询 使用statement可以提前构建查询语法树,在查询时不再需要构建语法树就直接查询.因此可以很好的提高查询的效率. 这个方法适合于查询条件固定但查询非常频繁的场合. 使用方法是: 绑

php程序员必看php优化效率方法 (1/4)

7.1.在可以用file_get_contents替代file.fopen.feof.fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个url文件时候的php教程版本问题: 2.尽量的少进行文件操作,虽然php的文件操作效率也不低的: 3.优化select sql语句,在可能的情况下尽量少的进行insert.update操作(在update上,我被恶批过): 4.尽可能的使用php内部函数(但是我却

程序猿必看的网站

问题描述 1.Fenby.com在线学习编程中文网站,而且有一套C语言和Java课程,不久会推出安卓和iOS课程,我就在这里自学的,非常推荐.2.ABeginner'sGuidetoHTML&CSS一个很好的在线学习HTML&CSS基础的网站.3.AnAdvancedGuidetoHTML&CSSHTML&CSS进阶,里面还包含了jQuery的学习.4.笨方法学Ruby.这本在线电子书是LearnRubyTheHardWay的繁体中文翻译,也是ZedShaw写的LearnX