Twitter timeline团队负责人在QCon London上分享了一篇Timelines @ Twitter的演讲,以下是其中一些摘要。
数据
1亿活跃用户
Timeline接口2万QPS
推送平均1ms,99% 4ms以内
每天2.5亿条新Tweets,平均3千/秒,峰值1万以上。
每天260亿次分发,每秒1800万(从中看出平均关注100人)
投递100万粉丝的时间需要3.5秒,每秒可投递28万
架构
材料中以介绍推(fan-out)为主
对于followers多的用户,从fan-out上采用pipeline的方式并行投递推送,每个任务负责分发4000个粉丝
fan-out首先投递到timeline cache上(page cache?)
用户收件箱采用redis存储,Redis只包括活跃用户,冷用户随时间过期
使用Redis的list数据结构,每个item中还包括tweet ID, user ID及标志位3个字段
使用Redis RPUSHX来避免写入冷用户
对于频繁访问用户的timeline, 设置in-process cache(local cache)
fan-out及fan-in的比较如下
技术选型与演进
Redis,使用了Redis来代替之前的memcached来存储vector cache
Thrift, 内部调用已经基本使用Thrift方式服务化,参看P109
Scala,内部服务基本使用Scala实现,但搜索模块使用Java实现,视频Q&A中提到
Finagle,较多篇幅介绍,是一个Scala实现的网络库,基于Netty框架的基础上
请问这个标志位是做什么用的呢?
——————–
使用Redis的list数据结构,每个item中还包括tweet ID, user ID及标志位3个字段
Finagle 不算是网络库吧,准确的算是rpc封装
http://www.infoq.com/presentations/Timelines-Twitter
杨老师,我听了他的音频,感觉pipelined fan-out并不是您说的那样并行投递,可能是串行的。
另外,我还是没能明白他举的例子,为什么DIARIOSAS的timeline会成为hotspot呢?它的粉丝数是32万,即使采用fan-in的delivery方式,即他的粉丝登录时都需要把他的user timeline并到自己的home timeline,好像也不至于成为hotspot上,Arya说到是重大赛事的时候Diariosas的timeline会成为hotspot,但我觉得成为hotspot的应该是Diariosas的tweet才对,那时转发量应该比较大。
http://www.famouspay.com
Thank you verry good blogs thanks.
In both home and business settings, duct cleaning is an essential service for preserving the effectiveness and air quality of HVAC systems. See industrial duct cleaning services