Twitter的基本架构(1)

Twitter的功能基本上可以分为4个pipeline:

image

下图描绘了写一个tweet的基本流程:

image

每个用户在redis中都有一条list结构的记录,保存的是uid->近期tweets的对应关系。当用户调用write API写一条tweet,这条tweet会发送fanout模块。fanout会将该tweet写入到用户每个好友对应的redis记录中。

当用户访问自己的homepage时:

image

Timeline Service会将用户的timeline tweets从redis中取出呈现。另外,TweetyPie组件提供了获取每个tweet具体信息的服务,而Gizmoduck则提供查询每个用户信息的服务。

细节上,redis中实际只保存了active user的数据(相当于是个LRU的cache)。如果用户的数据不在redis中,可能很快从数据库中重建用户的数据。

Twitter搜索的流程如下:

image

新写入的tweet还会被交给Ingester模块。它会将tweet写入搜索引擎的索引中。Twitter已经做了非常实时的索引,一个tweet 7秒后就可以被检索到了。另外,Twitter会将最新的tweet(几天内的)的索引保存在内存中,而旧的索引archive到硬盘上。

模块Blender负责处理搜索查询。它会向所有的index机器发出查询请求,然后将不同index的返回结果merge到一起。

将以上两个pipeline合在一起,就是所有Pull的流程:

image

还提到,为了保证尽可能的快,spam detection并不是同步处理的。而是有另外的模块异步处理。

— Continue. —

Advertisements
相册 | 此条目发表在Analyzing Big Data with Twitter分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s