• Feeds

  • Posts Tagged ‘microblog’


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

    微博架构与平台安全演讲稿

    本文是在2010中国首届微博开发者大会演讲稿(PPT),由于网上已经有演讲视频及全程文字记录,这里就不做补充,演讲稿如下。

    需要下载请点击 view on Slideshare,在 Slideshare 打开后 Download

    构建可扩展的微博架构(qcon beijing 2010演讲)

    在使用Twitter几年的时间里面,经常思考微博如何更好的实现,恰好最近几个月也参与了相关工作,大部分都是工程实践,总结实践会促生更具实际价值的理论。因此在QCon Beijing 2010这次演讲参考了不少网友的意见后选择了《构建可扩展微博架构》的题目。
    由于在决定选题时知道来自Twitter总部有30万followers的@nk也会讲一个类似的题目,心中当时有点忐忑,最大的顾虑就是要讲的领域更他重叠,如果他讲得更深入,我就没必要班门弄斧了。后来考虑到以下几个原因还是决定继续

    • Twitter架构是单IDC设计,从它递增的tweet id就可以看出,后来当面向@nk提问也得到了证实。
    • 中美网络环境差异,单IDC和多IDC有很多设计上的不同
    • 大部分参会人员未必能对英文演讲有深入理解及感悟,中文的演讲可以讲一些细节解释更透彻。
    • Twitter对故障的容忍度大,国内公司对服务故障通常更敏感。因此国内架构师会考虑设计方案尽量简单可靠,服务需要更稳定。国外开发团队更倾向追求在工作中应用技术创新,因此会导致架构设计理念的不少差异。

    演讲的slide如下,登录slideshare之后可以下载。

    这里再补充在qcon演讲未来得及考虑成熟的一个方面,用户规模影响设计,具体是指用户数每上一个数量级,许多设计需要重新考虑。

    10万用户级别

    • 单服务器,前端、后端、cache、db在一起。

    百万级

    • db和cache单独部署服务器,db或按业务进行拆分(sharding)
    • cache或使用一致性hash扩展。
    • 前端后端还是在一起,但是根据业务拆分,每个业务可分配不同数量的服务器

    千万级

    • 开始重视架构设计,有专门技术架构师
    • 需跨机房部署,前端在远程增加反向代理加速,数据库在异地机房使用slave数据库副本
    • 后端拆分出来,系统内部需要远程调用,内部需远程调用协议。

    亿级

    • 架构更细分,或增加数据架构师,cache架构师,分布式架构师
    • 数据库sharding碰到烦恼,开始考虑分布式数据服务
    • 数据访问需要根据业务特点细分。
    • 开发、运维、测量、调优具备有自己的专有工具。
    • 所有服务需要地理多机房分布,具备IDC容灾设计。
    • 服务可降级

    上面的数字仅供理解“用户规模影响设计”,数字本身并无具体指导价值。

    另外在slide中也提到了,目前新浪微博团队急需人才,对上面相关技术领域感兴趣的架构师及各层次开发人员(熟悉PHP,Java, C或数据架构任意一种)可随时跟我联系,工作地点为北京,联系方式见博客首页。