从0开始设计Twitter系统架构

2021-12-12  本文已影响0人  DeepNoMind

Twitter是全球最大的社交网络之一,如果让我们从0开始设计twitter的系统架构,该怎么做呢?有哪些服务是必须的?有哪些点需要提前考虑?这篇文章简单介绍了设计类twitter系统的思路并在最后给出了参考设计。原文:Twitter System Architecture[1]

Twitter是全球领先的在线社交网络服务,用户可以在这里发布和阅读被称为“推文(tweets)”的短消息。在系统架构设计面试过程中,当被问及如何设计Twitter时,大多数候选人都会将其设计为单体服务。然而,将Twitter这样的大型服务设计为单体,表明候选人缺乏设计分布式系统的经验。从微服务甚至lambda(或函数)的角度来设计分布式系统在今天是很正常的选择。目前的趋势是,没有人会将新服务设计为单体,公司正逐渐将其庞大的单体服务转换为一组微服务。因此,候选人应该以微服务的方式设计Twitter。


功能需求
  1. 用户可以发布或分享新的推文(tweet)
  2. 每条推文最多不超过140个字符
  3. 用户可以删除推文,但不能更新/编辑发布的推文(写操作)
  4. 户可以标记喜欢的推文(写操作)
  5. 用户可以关注或取消关注另一个用户(写操作),关注一个用户意味着用户可以看到其他用户在他的时间线上的推文
  6. 可以生成两种类型的时间线(读操作),用户时间线由他最后N个推文组成,主页时间线由他正在关注的用户的热门推文按照时间降序生成
  7. 用户可以根据关键字搜索推文(读操作)
  8. 用户需要有一个帐户来发布或读取推文(暂时使用外部身份服务)
  9. 用户可以注册和删除帐户
  10. Twitter支持包含文字和图片/视频的推文,但在我们当前的设计中,将只支持文本
  11. 分析/监视服务,以确定其负载、运行状况和功能
  12. 分析还可为用户提供关于关注谁、推文通知、热门话题、推送通知和分享推文的意见或建议

非功能需求

  1. 服务的高可用是最重要的需求,这意味着用户可以在自己的主页时间线上阅读推文,而感受不到任何停顿
  2. 生成时间线的时间最长不得超过半秒
  3. 不需要强一致性,只需要最终一致性,可以使用关键词数据库用于搜索基于关键词的推文
  4. 随着用户和推文的增加,系统负载也在增加,因此系统应该具有可伸缩性
  5. 持久化用户数据

现在我们来做一些计算。


twitter服务的概要设计

由于系统的复杂性,可以将其划分为若干个服务,其中包括若干个微服务。

  1. 推文服务(Tweet service)
  2. 用户时间线服务(User timeline service)
  3. 扇出服务(Fanout Service)
  4. 主页时间线服务(Home timeline service)
  5. 社交网络服务(Social graph service)
  6. 搜索服务(Search service)

下面是twitter服务中不同逻辑组件或微服务架构。


twitter服务的详细设计

所有微服务都可以被称为模块。

1. 推文服务(Tweet service)

然后我们看一下tweet服务的数据库表结构。

用户(Users)表包含用户的所有信息,推文(Tweet)表存储所有推文,Favorite_tweet表存储了喜欢的推文记录,也就是说,每当用户喜欢一条推文时,就会在Favorite_tweet表中插入一条记录。

2. 生成唯一的推文Id

当用户调用postTweet()时,调用会发送给应用服务器。应用服务器为该推文生成一个唯一的id,同样的机制也可以用来为推文生成短URL。另一个方式是基于应用服务器的UUID(Universally unique identifier)。推文ID生成后,应用服务器将该推文插入分布式缓存和数据库的tweet表中。由于需要在执行推文的创建/更新/删除操作的同时更新缓存和数据库,所以我们使用缓存透写机制。

3. 可扩展性设计

4. 社交网络服务(Social graph service)
5. 用户时间线服务(User timeline service)
6. 扇出服务(Fanout Service)
7. 主页时间线服务(Home timeline service)
8. 搜索服务(Search service)
9. 照片和视频

twitter的网络

twitter的最终详细设计

系统设计

数据架构

参考文档

  1. http://highscalability.com/blog/2011/11/29/datasift-architecture-realtime-datamining-at-120000-tweets-p.html
  2. https://www.codekarle.com/system-design/Twitter-system-design.html
  3. https://blog.twitter.com/engineering/en_us/topics/infrastructure/2017/the-infrastructure-behind-twitter-scale
  4. http://highscalability.com/blog/2013/7/8/the-architecture-twitter-uses-to-deal-with-150m-active-users.html

References:
[1] Twitter System Architecture: https://medium.com/interviewnoodle/twitter-system-architecture-8dafce16aec4

你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。
微信公众号:DeepNoMind

上一篇 下一篇

猜你喜欢

热点阅读