系统设计面试:如何设计一个Twitter或微博

这期视频主要介绍了设计Twitter或类似新闻源系统的功能和非功能需求,以及一些架构概述和讨论点,包括推拉模型和混合模型、服务的无状态性、多数据中心分布、数据库副本和缓存策略、监控使用指标等。

 

00:00 设计Twitter或任何类型的新闻源系统时,我们需要考虑功能和非功能需求。

  • 功能需求包括发布和检索动态、通知和分析等服务。
  • 非功能需求包括高可用性和最小延迟。
  • 在估算中,假设每天有2000万活跃用户,每人平均发推文5次,每天总共有1亿条推文,每秒大约有1000条推文。
  • 假设有100:1的读写比例,每秒会有大约10万个读请求。
  • 每天存储大约10GB的数据,假设每条推文平均占用100字节。

02:36 这部分介绍了Twitter的数据模型设计,包括推文、关注者和新闻源的关系,以及推文和新闻源之间的关联。

  • 数据模型包含了推文、关注者和新闻源之间的关系。
  • 推文可以分为普通推文和转发推文,需要在接口中进行区分。
  • 用户可以有多个新闻源,类似于Instagram的主页和探索页。

05:11 在这个部分中,讲解了GraphQL和REST API的比较,以及feed发布和检索的两种策略。

  • GraphQL可以根据需要精确获取所需信息,而REST API需要定义多个端点。
  • Feed发布和检索有两种策略:fan out on write和fan out on read。

07:49 使用混合模式的推拉方法来解决新闻订阅系统中的性能问题和系统负载问题。

  • 读取模式的优点是避免了资源浪费和热键问题。
  • 缺点是读取速度较慢,不符合低延迟和高性能的需求。
  • 使用混合模式,即推拉模型的结合,可以解决这个问题。
  • 架构概述中,建议使用用户服务、用户缓存、用户数据库和图数据库来处理用户关系和基本信息。

10:25 在设计Twitter的新闻推送系统时,需要分析一些指标,如每天的推文数量、用户对帖子的停留时间和互动情况,以提供最佳用户体验。

  • 使用大数据分析工具(如Spark)可以帮助改善用户体验。
  • 保持服务无状态,以实现水平扩展。
  • 在每个服务中拥有多个实例,以确保系统的可用性。
  • 将服务分布在多个数据中心,以实现全球应用的低延迟。
  • 使用多个读取副本来处理大量的读取负载。
  • 尽可能缓存数据以提高性能,并定义缓存过期策略。
  • 监控使用指标,以预测未来的使用情况。
请登录后发表评论

    没有回复内容