Twitter 新系统架构性能大幅度提升

oschina
 oschina
发布于 2013年08月18日
收藏 77

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

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

TWITTER perf-improvements-2

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

文章来自IT经理网

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:Twitter 新系统架构性能大幅度提升
加载中

最新评论(34

Raynor1
Raynor1

引用来自“ak_birdofprey”的评论

不知道他们是不是在OPENJDK下部署的系统哈。觉得OPENJDK要比ORACLE的JDK性能高

狗屎啊。。。这一个你还是太天真了。。显然是没有。。ORACLE的JVM还是各个领域的首选。而且在LINUX下面确实还是ORALCE的强大。。

Raynor1
Raynor1

引用来自“mickelfeng”的评论

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

这么厉害

语言换成了SCALA了。。。他们的RUBY程序就是几个后台的监控程序了。。

唐海康
唐海康

引用来自“haitao”的评论

引用来自“打杂程序猿”的评论

其实java 一直很给力,不知道为啥还有这么多人不相信java 性能给力呢?

ruby比python还慢,比ruby快10倍,可能比c还是慢10倍

比C快的语言好像只有汇编了。除去C 和C之外基本上就是java了。
晒太阳的小猪
晒太阳的小猪

引用来自“兮风古道”的评论

引用来自“ak_birdofprey”的评论

不知道他们是不是在OPENJDK下部署的系统哈。觉得OPENJDK要比ORACLE的JDK性能高

oracle jdk 是从 openjdk 构建而来。

更希望直接使用原生OPENJDK。不过现在正在努力的适应GO
方凯
方凯
果然还是原生的ruby vm太烂⊙▽⊙。欺待pypy出py3k的正式版~
haitao
haitao

引用来自“打杂程序猿”的评论

其实java 一直很给力,不知道为啥还有这么多人不相信java 性能给力呢?

ruby比python还慢,比ruby快10倍,可能比c还是慢10倍
傅红雪_osc
傅红雪_osc
调高效率,好用就是王道,我喜欢java ,php,ruby,python 混着来
傅红雪_osc
傅红雪_osc

引用来自“冷月孤寒”的评论

引用来自“南湖船老大”的评论

引用来自“屁屁果”的评论

后台数据库还是mysql吗?那个天天喷mysql不是数据库的在哪?@宏哥

何必跟一个老菜鸟码农较真呢。。。人家年纪大了,没有技术还不能有脾气吗?

哈哈...

呵呵
兮风古道
兮风古道

引用来自“ak_birdofprey”的评论

不知道他们是不是在OPENJDK下部署的系统哈。觉得OPENJDK要比ORACLE的JDK性能高

oracle jdk 是从 openjdk 构建而来。
返回顶部
顶部