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.