`
wangdei
  • 浏览: 366217 次
社区版块
存档分类
最新评论

Twitter的增容处理

阅读更多

文/Patrick Joyce译/杨昊

       由于之前爆发的一些问题,大家产生了对Twitter的成见。并不是说对Rails进行增容很难,实际上针对基于Rails的网站进行增容并不是问题所在,对所有的网站来讲,增容从来都不是一个容易的问题。

      Twitter的故事  

Twitter源自于ODEO公司的一个小的分支项目,它是Jack Dorsey提出的,并且成为了世界上最大的Rails应用。Jack Dorsey 对AIM的状态消息十分着迷。问题在于,如果想把消息发到世界的各个角度,你必须得坐在电脑前面。

Twitter自去年三月发布之后访问量少得可怜,直到去年的西南偏南音乐节,大家都能从大屏幕上看到Twitter的使用过程,自此之后一下火了起来,访问量骤增。然后又平静了一阵。接着媒体技术粉墨登场,又掀起了一股热潮。

       所以,你该怎样面对这些呢?

l  更多的主机—仍旧是一个包含主/从副本的数据库

l  Joyent网站提供的具有32个CPU核的SUN主机

l  横跨19个CPU核的120个mongrel实例

l  横跨16个CPU核的消息处理

l  横跨2核的Jabber服务实例

l  一个构建于8核主机之上的MySQL实例

l  16GB以上的memcache应用

为何需要这些呢?

l  平均每秒200-300的连接数量

l  高峰期每秒800个连接

l  它们处理了11000个连接

l  MySQL每秒处理2400个

l  Alexe(有所保留地)说他们有着巨大的流量,那还没计算占用了很大流量的API访问。在他们最新的一次测试中通过API的流量访问是web流量的20倍

       而配备了cache_fu与acts_as_cached这两个Rails插件的Memcache成了他们的救星。此外,他们还使用扩展了的cache_stats插件获取状态。

       他们写了一个自定义的API缓存插件,在执行过滤之前和之后完成自定义操作。他们打算共享抽取出来的缓存。如何使缓存失效是这样做的一个难点。他们既做基于时间的过期限制,也做事件驱动的过期限制。

       在数据库设计方面,诸如一些ID列表之类,他们采取了反正规化(denormalize)的方式。通过对id列表进行缓存,这样避免了数据库中的连接操作,这为他们减轻了许多数据库方面的压力。      

       他们与Gmail的创建人Paul Buchheit在处理系统缓存时,如何构建一个健壮的分布式队列。因为此前他们的架构工作做的有些过多了。一秒钟会有多少条消息呢?9条。6个月的时间里又能有多少?这个系数是10。只要将他们扔到磁盘里面进行处理就好了。

他们希望能够开放队列系统的源代码。它是基于memecache系统的。通过memcache,任何消息都可以加入到队列中,并使用memcache客户端进行访问。

       他们所做的最有帮助的事情之一,就是与社区之间的讨论和互动。你不能总猫在你的办公室。社区能够提供很多帮助。和他们进行讨论,你可以得到众多的顾问。社区中有太多优秀的人了,你没有理由不去借助他们的帮助。

问答环节

问:对于缓存中的事件驱动失效机制,其相关的逻辑是放在什么地方的?在Mongrel里面?还是在Rails和XMPP的集成里面?

答:是放在Jabber服务器中,它可以将这些以Ruby写就的处理客户端完全隔离开来。

问:他们打算什么时候加入分区机制?如何处理用户间的随机关系?

答:用户不是关键。他们仍未进行分区的原因是,他们想要基于时间进行划分,因为大多数请求从时间上看是本地的。他们计划在未来3到4个月里做这件事情。Oracle完成了这工作,但Alex说他宁肯把自己的帽子吃掉,也决不会去买oracle的许可证。所以当他们解决了之后就会推出来。

试着尽量发现如何高效地开展开源工作,并努力去多做一些。

问:你的商业模式是什么?计划如何赚钱?

答:每个人都在问这个问题。简单点回答就是下一个问题(大笑)。他们有一些想法,这些聪明人们正在做一些事情。它一定能够让大家耳目一新。

问:他们有多少eJabberd节点?

答:很多,多得令人吃惊。

问:在eJabberd和rail用户之间进行同步会有问题吗?

答:不会。

问:有了所有这些mongrel,你们是如何完成部署并保证全部正常运行的?

答:他们希望从观众中得到建议。他们付出了很多努力,做了复查和改进。如果你在他们进行部署的时候是连接着的,你会与500个用户相联。这是很惊人的。他们仍没有一个很好的办法来解决这个。对于Mongrel中的队列,他们由Ezra的一个讲演中受到了启发。

问:这么说当你重启的时候你便杀掉了所有的mongrel进程,或是作了一次“回滚”?有些公司就是采取了回滚的方式来解决问题。

答:他们关掉了所有进程,因为队列在mongrel之中,若他们那样做就会填满了所有队列。他们这样尝试过,但得到的结果却是乱七八糟的。

问:怎样看待“Twitter是愚蠢的,因为他们没有采用ETag”这种说法?

答:他们确实在用ETag,但并不起作用,因为它们在末尾有一个显示消息请求时间的时间戳。Web流量的分块小得足以将其忽略不计了。Yahoo高性能小组(High Performance group)在演示中提到了它是无关紧要的。

问:ETag不会对API缓存有帮助吗?

答:只有在客户端执行它们时才可以,大多数情况下是没有帮助的。

问:下一步目标?

答:回调API有很大潜力。第三方的开发人员在打算做这件事。让我们期待着把。

       我们热爱XMPP,并在和Jabber社区的人们一起努力通过一些很cool的新方法来使用Jabber以推进其发展。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics