看这篇文章很有收获,大致归纳一下:
1,“如果有follower正在阅读他的Twitter个人主页,主页里暗含的JavaScript会自动每隔几十秒,访问一下Twitter服务器,检查正在看的这个个人主页是否有更新。如果有更新,立刻下载新的主页内容。这样follower就能读到最新发表的短信了。”
2,Twitter成功的重要原因之一,就是速度快。“Twitter 工程师认为,一个用户体验良好的网站,当一个用户请求到达以后,应该在平均500ms以内完成回应。而Twitter的理想,是达到200ms- 300ms的反应速度[17]。因此在网站架构上,Twitter大规模地,多层次多方式地使用缓存。”
3,Twitter采用三层架构,“逻辑层 (Logic Tier)用的工具是Mongrel Rails Server,利用Rails现成的模块,降低开发的工作量。”
4,Twitter的各个请求的实现用到了队列。“队列的实现方式有多种,例如Apache Mina就可以用来做队列。但是Twitter团队自己动手实现了一个队列,Kestrel。”......“Kestrel和Mina这些“重量级”的队列,意义在于支持联络多台机器的,分布式的队列。”
5, Twitter工程师们在解决API通道的缓存问题使用的是MemCached ,在处理Web通道的缓存问题时使用的是开源项目Varnish。
6, “Apache Web Server的主要任务,是解析HTTP,以及分发任务。不同的Mongrel Rails Server负责不同的任务,但是绝大多数Mongrel Rails Server,都要与Vector Cache和Row Cache(楼主注:API缓存)联系,读取数据。Rails Server如何与MemCached联系呢?Twitter工程师们自行开发了一个Rails插件(Gem),称为CacheMoney。”
7,试验显示,Apache能过容纳4,000个并发连接。Yaws能够容纳80,000以上的并发连接,但Yaws使用Erlang语言写的。
8,变买为租解决Twitter流量的波动问题;
9,“Twitter完成整个业务流程的平均时间是500ms,甚至能够提高到200-300ms,说明在Twitter分布式系统中,事件驱动的设计是成功”。
10, 为了提高消息队列的垃圾回收(Garbage Collection)的效率,Twitter用Kestrel取代了Ruby,因为Scala运行在JVM上,因此有更优化的垃圾回收手段。
11,Twitter可能用“API Server”代替Mongrel,因为据说它的速度比Apache+Mongrel组和快4倍。“Apache+Mongrel组合,每秒能够处理139个请求,而“API Server” 每秒钟能够处理大约550个请求。”