写点什么

架构实战营模块 5 - 微博评论高性能高可用计算架构

作者:
  • 2023-01-31
    内蒙古
  • 本文字数:1735 字

    阅读完需:约 6 分钟

用户行为建模和计算性能估算

用户量

2020.9 月月活 5.11 亿,日活 2.24 亿(参考《微博 2020 用户发展报告》)。

关键行为

  1. 发评论

  2. 看评论

性能估算

数据参考:已知微博每天的发送量约为 2.5 亿条,由于绝大部分微博用户看微博的对象是大 V 和明星,因此我们假设 平均一条微博观看人数有 100 次,则观看微博的次数为: 2.5 亿 * 100 = 250 亿。

发评论

由于大多数用户的习惯只是看微博,很少进行评论,因此我们假设看微博 10 人次当中有 1 次评论,则评论微博的条数为:250 亿 / 10 = 25 亿条。


大部分的人发微博集中在早上 8:00~9:00 点,中午 12:00~13:00,晚上 20:00~22:00,假设这几个时间段发微博总量占比为 60%,则这 4 个小时的平均发微博的 TPS 计算如下:

25 亿 * 60% / (4 * 3600) ≈ 100 K/s

看评论

大多数用户在看微博时,不一定去看评论,因此我们假设,每条评论的观看次数为 20 次,则观看评论的总次数为:

25 亿 * 20 = 500 亿。


大部分人看评论的时间段和发评论的时间段基本重合,因此看评论的平均 QPS 计算如下:

500 亿 * 60% / (4*3600) = 2000K/s。


高性能计算架构设计

发评论

业务特性分析

发评论也是一个典型的写操作,因此不能用缓存,可以用负载均衡。

架构分析

用户量过亿,应该要用多级负载均衡架构,覆盖 DNS -> F5 -> Nginx -> 网关的多级负载均衡。

架构设计

  1. 负载均衡算法选择

  • 发评论时,虽然是要发到某条确定的微博的下面,但是,具体的业务逻辑判断还是在后台的业务服务器当中进行。

  • 发评论的时候同时还要依赖登录状态,登录状态一般都是保存在分布式缓存中的。

  • 因此发评论的时候,将请求发送给任意服务器都可以,这里选择“轮询”或者“随机”算法。


  1. 业务服务器数量估算

  • 发评论和发微博的处理流程相似,同样涉及几个关键的处理: 内容审核(依赖审核系统)、数据写入存储(依赖存储系统)、数据写入缓存(依赖缓存系统),因此按照一个服务每秒处理 500 来估算,完成 100K/s 的 TPS,需要 200 台服务器,加上一定的预留量,250 台服务器可以保证性能

发评论多级负载均衡架构


看评论

业务特性分析

看评论是一个典型的读场景,评论发了后不能修改,因此非常适合用缓存架构,同时由于请求量很大,负载均衡架构也需要。

架构分析

1. 用户量过亿,应该要用多级负载均衡架构;

2. 看评论的请求量达到 500 亿

  • 当点击每条微博下面的评论时,首先会有 5 条首页热门评论的展示,考虑到首页评论展示的实时性,以及这 5 条评论会随微博一起展示,所以同微博一样,考虑用 CDN 进行缓存,定期刷新(例如 1 小时刷新一次)。

  • 其它评论无需用 CDN,用分布式缓存来缓存评论列表页,因为翻页看后面的评论的人其实不多。

架构设计

  1. 负载均衡算法选择

  • 同看微博一样,游客也可以直接看评论,因此将请求发送给任意服务器都可以,这里选择“轮询”或者“随机”算法。


  1. 业务服务器数量估算

  • 每条微博下面的 5 条评论,要缓存在 CDN 上,则缓存在 CDN 上的总评论数为:2.5 亿 * 5 = 12.5 亿条,总评论数为 25 亿条,故 CDN 承载了 50%的流量,则看评论请求的 QPS 为:2000K/s * 50% = 1000K/s假设单台业务服务器处理能力是 800/s,则机器数量为 1250 台,按照 20%的预留量,最终机器数量为 1500 台。

看评论的架构设计

多级负载均衡架构
多级缓存架构


整体架构设计

分析

多级负载均衡整体架构

多级缓存整体架构

高可用计算架构设计

热点事件: 指某个大 V 或者明星爆料或者官宣,虽然只有一两条微博,但引起大量用户在短时间内访问,给系统造成很大压力。

热点事件用户行为建模和性能估算

发评论

造成热点事件的微博下面会有海量评论,具体数量很难预估。

看评论

和发评论一样很难预估,也和事件的影响力和影响范围有关。


热点事件业务特性分析

发评论

发评论是一个典型的写操作,因此不能用缓存,可以用负载均衡。

看评论

看评论主要集中在首页热门评论,或者前几页评论上面。


热点事件高可用架构分析


核心架构设计思想: 既然无法预估,那就做好预防!

架构设计分析

发评论

热点事件微博可能会有海量评论,所以可以考虑用“漏桶算法”的变种“写缓冲”来应对海量评论,这样可以尽量少丢弃请求,保证较高的可用性,因为重新写评论会给用户带来较差的用户体验。

看评论

热点事件也会存在热点评论,所以同微博一样,也存在缓存热点问题,可以考虑“多副本缓存”,由于原有的缓存架构已经采用了“应用内的缓存”,总体上来看,缓存热点问题其实不一定很突出。


热点时间高可用架构示意图


发布于: 刚刚阅读数: 3
用户头像

关注

还未添加个人签名 2018-06-01 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营模块5 -微博评论高性能高可用计算架构_架构实战营_源_InfoQ写作社区