聊聊Twitter的架构决策

标签: dev | 发表时间:2022-06-04 00:00 | 作者:
出处:http://itindex.net/relian

Twitter有两条时间线:

  • 用户时间线: 用户自己所有推文的集合,从磁盘中获取。

  • 主页时间线: 用户关注的人的推文的集合,组成了用户的主页。

在设计数据库时,最简单的数据库只是将所有写操作附加到文件的末尾,并在需要时读取。没有什么比简单的附加到文件中更快的了,但是,随着数据库文件的增长,从这种类型的数据库中查询某些内容将花费很长时间。

为了减少查询时间,我们在其中添加索引。但是添加索引将意味着写入将花费更长的时间,因为必须在将其写入数据库之前编辑索引。但由于读取的数量将远远多于写入的数量,这是一种公平的权衡。

同样,Twitter的阅读量也远远超过了写入量。所以他们构建了一个系统,可以更好的为用户的主页时间线服务。他们预先计算出所有用户的主页时间线,并将其存储在Redis集群中。就这么简单!

现在,无论用户何时发布消息,该消息都会被插入每个关注者的时间线队列中。所以如果你有5000个粉丝,你的推文就会有5000个写操作!外加上1个数据库本身的写操作

这听起来很疯狂,但你仔细想想,这是有道理的。现在可以同时为数百万用户提供服务而不需要访问磁盘,这可以从根本上减少延迟。这个过程叫做扇出(fan-out)!

  1. 那么到目前为止,Twitter的架构是怎样的呢?

  2. 用户访问Twitter的主页。

  3. Twitter在Redis集群中查找用户的主页时间线。

  4. 一旦找到,就向用户直接展示。

当用户发送一条推文时,该推文会被复制到用户的所有关注者的时间线上。

还有一些其他的细节:

  1. Twitter维护了一个图数据库,其保存了用户关注关系的所有数据。当发生扇出时,扇出服务查询这个图数据库以确定将推文推送到何处。

  2. 扇出将在数据中心的3台不同的机器上进行复制,即每个用户的时间线存储在3台不同的机器上。这是必需的,因为如果其中一台机器出现故障,其他机器可以作为备份提供服务。

  3. 推文本身并不存储在集群中,而只存储推文ID。推文将在传递给用户的同时被检索出来。

  4. 如果用户超过30天没有登录Twitter,该用户的时间线将不会保存在Redis集群中。对于这类用户,只有当他们返回并向主页时间线发出请求时,才会从磁盘重构他们的时间线。

每个用户的主页时间线上存储的推文数量是有限制的,每次只向用户显示800条推文,这是为了控制内存使用而做出的设计决策!

相关 [twitter 架构 决策] 推荐:

聊聊Twitter的架构决策

- - IT瘾-dev
Twitter有两条时间线:. 用户时间线: 用户自己所有推文的集合,从磁盘中获取. 主页时间线: 用户关注的人的推文的集合,组成了用户的主页. 在设计数据库时,最简单的数据库只是将所有写操作附加到文件的末尾,并在需要时读取. 没有什么比简单的附加到文件中更快的了,但是,随着数据库文件的增长,从这种类型的数据库中查询某些内容将花费很长时间.

twitter系统架构分析

- - 企业架构 - ITeye博客
twitter系统架构分析. (一)twitter的核心业务. twitter的核心业务,在于following和be followed:. (1)following-关注. 进入个人主页,会看到你follow的人发表的留言(不超过140个字),这是following的过程;. (2)followed-被关注.

图解Twitter的服务器架构

- huacnlee - 服务器运维与网站架构|Linux运维|互联网研究
Twitter的服务器架构的简要示意图:. Unicorn: Ruby 的HTTP服务器. Kestrel : Twitter用Scala写的message queue. Flapp: Twitter做的图存储FlockDB. Gizzard: Twitter用Scala写的一个通用Sharding框架.

Twitter的实时通知架构

- -
Twitter工程经理Sarrabh Pathak在伦敦QCon 2017大会上介绍了Twitter网站的通知系统架构. 他主要介绍了Twitter所面临的独特挑战,比如社交网络的双峰(bimodal)性、如何应付尖刺流量以及如何实现实时的通知机制. Pathak解释说,与一般的社交网络不同,Twitter的用户数据具有不对称性.

Twitter新搜索架构和功能的实现方案

- - 互联网旁观者
今天(2011年5月31日),Twitter 发布了能够帮助我们的用户找到最相关的推文、图片和视频的 个人化搜索体验. 要创造这个产品,我们的基础架构需要支持两项主要的功能:搜索结果的相关性过滤和对于相关图片以及视频的识别. 两项功能都需要我们完全重写我们搜索架构,他们的核心就是 Blender 和 Earlybird.

Twitter新系统架构性能大幅度提升

- - IT经理网
8月3日《天空之城》在日本的热播创下每秒新增143119条推文的Twitter峰值记录,是Twitter平均每秒发推数(TPS)5700条的25倍. 值得注意的是,在这次毫无征兆的“洪峰”到来时,Twitter全新的系统平台并没有被潮水般涌来的推文堵塞而产生任何延迟甚至宕机. Twitter旧架构与新架构的性能对比.

提高排序效果,Twitter搜索相关架构解析

- - IT瘾-geek
每天,全世界几百万的用户都在Twitter上搜索着发生的新鲜事. 在重大事件期间,比如刚刚过去不久的 2016欧洲杯,我们观察到在用户前来Twitter查看最新战况时,搜索服务会出现流量的尖峰,并且整体流量随着此事件的推移而稳步上升. Twitter的搜索质量组就是负责给用户返回质量最好的结果.

从0开始设计Twitter系统架构

- - DockOne.io
【编者的话】Twitter是全球最大的社交网络之一,如果让我们从0开始设计twitter的系统架构,该怎么做呢. 这篇文章简单介绍了设计类twitter系统的思路并在最后给出了参考设计. 原文: Twitter System Architecture. Twitter是全球领先的在线社交网络服务,用户可以在这里发布和阅读被称为“推文(tweets)”的短消息.

Tumblr架构 – 页面浏览量150亿/月并且比Twitter更难拓展

- - 龙浩的blog
    注:一些内容不熟悉,所以没有翻译.     Tumblr每个月增长30% , 一天5亿网页浏览,40K/sec , 每天3TB的数据存储在1000+的服务器上. 最开始只有4名工程师来处理所有事情,当有20多个工程师的时候,才有实力出一些有趣的解决方案.     Tumblr最开始是典型的大型LAMP应用,现在的分布式服务模型使用了Scala, HBase, Redis, Kafka , Finagle等,现在在处理PHP应用的问题,开始走向面向服务的设计.

影响架构决策的非功能性需求

- - 博客园_知识库
  英文原文: Non-functional Requirements in Architectural Decision Making.   本文由《IEEE Software》杂志首发,现在由InfoQ和IEEE Computer Society联合向您呈现.   在软件工程中,非功能性需求(nonfunctional requirements,简称NFRs)与软件架构(software architectures,简称SAs)之间存在着紧密联系.