• Feeds

  • Notes about Timelines @ Twitter

    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框架的基础上

    如想及时阅读Tim Yang的文章,可通过页面右上方扫码订阅最新更新。

    « | »

    7 Comments  »

    1. yaming

      请问这个标志位是做什么用的呢?
      ——————–
      使用Redis的list数据结构,每个item中还包括tweet ID, user ID及标志位3个字段

    2. Finagle

      Finagle 不算是网络库吧,准确的算是rpc封装

    3. Rhein

      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才对,那时转发量应该比较大。

    Leave a Comment