Twitter

周二晚上,在美国 2012 年总统大选揭晓的时刻,微博网站 Twitter 遭遇了有史以来最大的访问冲击,服务的负载量陡增,但却没让用户感到丝毫的反应迟钝——一些 Twitter 的开发人员把这归功于公司把后端软件从 Ruby 迁移到 Java 的正确决策。

根据 Twitter 公司负责架构的副总工程师 Mazen Rawashdeh 在 博客上透露的信息,周二在太平洋时间的晚上8:11分到9:11分期间,Twitter 用户平均每秒钟发布 9965 条信息。

Rawashdeh 写到,在8:20分里的有一个一秒里,Twitter 用户共写出了 15107 条新微博,在访问量最顶峰的那一分钟里,人们共制造了 874560 条信息。

这样的数量对于 Twitter 来说是很不寻常的,Rawashdeh 说,这表明人们对 Twitter 服务使用上了一个新台阶。而在过去,在一些特殊的日子里,Twitter 曾经经历过短暂的服务停顿,比如平安夜或运动的闭幕式,而像这次这样长时间持续的高访问量的状况,还是头一遭。这也是 Twitter 网站开创以来在竞选期间遇到的最大的一次访问冲击。

在过去,Twitter 用户一般都会知道,在这样大的负载压力下,Twitter 服务通常会出问题。在 Twitter 早年,服务宕机如此常见,以至于网站有创意的“休克大鲸鱼”的报错界面成了 Web2.0 大众的文化标识。

但是,周二晚上由于竞选而带来的访问量冲击却一点没有撼动它,Rawashdeh 把这归功于 Twitter 仍在进行的把后端服务从 Ruby 和 Ruby on Rails 框架迁移到基于 Java 虚拟机(JVM)的新技术架构的工作。

当 Twitter 运行在 Ruby 上时,这休克大鲸鱼会经常的出现在你面前,但使用 Java 后,不多见了。

Twitter 首次撤离 Ruby 起于 2008 年,引用前 Twitter 开发者 Alex Payne 的话,当时公司的基于 Ruby 的消息队列系统(mq)”摔了个跟头”。

“Ruby 擅长于做很多事情,”当时 Payne 说,“但对于长时间的处理过程,尤其是需要大量内存的操作,并不是很在行。”

Twitter 对于此种情况的解决方案是,把部分的 Ruby 程序移植到基于 JVM 的架构上。起初,公司的开发团队拒绝 Java 而偏爱 Scala——另一种 JVM 上的编程语言,混合有面向对象和面向过程等多种语言特征。如今,Twitter 里程序是 Scala 程序和普通 Java 程序的复合体。

但有一部分 Twitter 服务仍然运行于 Ruby 之上,但根据 Rawashdeh 的说法,对 Ruby 的使用会逐渐减少。特别的他提到,Twitter 系统正在进行重新配置,这样一来,来自移动设备的访问再也不会接触到任何的基于 Ruby 的程序。

而 Twitter 中使用的 Ruby 程序是部署在一个定制的,高度优化过的 Ruby runtime 上的,专门针对执行长处理操作而进行更高效管理内存的优化。

对那些钟爱 Ruby 的语法、Ruby 的快速开发效率、以及所有这种语言的编程理念的狂热粉丝来说、这真不是一个受欢迎的消息。他们认为跟其它语言比起来性能问题并不重要,Ruby 在性能上的劣势,并不能掩盖这种语言优雅的语法、高效的生产率、以及它的所有编程哲理上的光芒。

但对于 Twitter 来说,结果才是重要的。“底线:无论人们何时、何地、何种方式访问 Twitter,我们都要保持它 24/7 小时的可访问,在世界任何一个角落。”Rawashdeh 写到,“我们为这个目标奋斗不止。”

他们干的不错。根据这汹涌的跟竞选相关的评论来看,在奥巴马做美国总统的第二届任期里,Twitter 的平均访问量将会继续攀升。

英文原文:Twitter survives election after Ruby-to-Java move