写点什么

架构实战营模块五作业

作者:spark99
  • 2021 年 12 月 01 日
  • 本文字数:1462 字

    阅读完需:约 5 分钟

设计微博系统中”微博评论“的高性能高可用计算架构。

【作业要求】

基于模块 5 第 6 课的微博实战案例,分析“微博评论”这个核心场景的业务特性,然后设计其高性能高可用计算架构,包括但不限于如下内容:

1. 计算性能预估(不需要考虑存储性能);

2. 非热点事件时的高性能计算架构,需要考虑是否要拆分独立的服务;

3. 热点事件时的高可用计算架构。

性能估算

【用户量】

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

【关键行为】

1. 发微博;

2. 看微博;

3. 评论微博;

写评论

假设 1 条微博平均 100 个人观看,其中有 20 个人评论,则评论微博的次数为:2.5 亿 * 20 = 50 亿。

大部分人发微博集中在早上 8:00~9:00 点,中午 12:00~13:00,晚上 20:00~22:00,我们假设这几个时间段发微博总量占比为 60%。写评论的时间段和发微博的时间段基本重合,写评论也会涉及内容审核(依赖审核系统)和数据写入存储(依赖存储系统)。和发微博不同的是,评论不需要实时处理,假设业务要求评论发表后 2 小时内需要处理,则微博评论的平均 TPS 为: 50 亿 * 60% / (10*3600) ≈ 9w/s。

看评论

假设平均一条微博观看人数有 100 人,这 100 个人中有 30 个人会看评论,则看评论的次数为:2.5 亿*100 *30% 75 亿。和看微博一样,60%的用户看评论的时间也集中在早上 8:00~9:00 点,中午 12:00~13:00,晚上 20:00~22:00,则看评论的 QPS 为:75 亿 * 60% / (4*3600) ≈ 32w/s。

评论高性能计算架构

【业务特性分析】

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

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

【架构分析】

  1. 用户量过亿,整体性能要求较高,应该要用多级负载均衡架构。

  2. 写评论可以异步处理,使用 MQ 做缓冲。

  3. 看评论需要使用多级缓存架构,用来缓存近期比如 3 天内发布的微博的评论。

【架构设计】

1. 负载均衡算法选择

用户写评论/看评论的时候,将请求发送给任意服务器都可以,这里选择“轮询”算法。

2. 业务服务器数量估算

  • 写评论。按照一个服务每秒处理 600 来估算,完成 9w/s 的 TPS,需要 150 台服务器,加上 20%的预留量需要 180 台服务器。

  • 看评论。假设 CDN 能够承载 90%的用户流量,那么剩下 10%的读评论的请求进入系统,则请求 QPS 为 32w/s * 10% = 3.2w/s,由于读评论的处理逻辑比较简单,主要是读缓存系统,因此假设单台业务服务器处理能力是 1000/s,则机器数量为 32 台,按照 20%的预留量,最终机器数量为 40 台。

整体架构设计

负载均衡架构

缓存架构

评论高可用计算架构

评论的高可用计算架构需要考虑的是热点事件对系统可用性的挑战。

用户行为建模和性能估算

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

【发评论】

热点微博会造成发表评论的数量大增,但很难预估具体量,和事件的影响力和影响范围有关。

【看评论】

热点微博通常会形成大量的转发、浏览,以及评论,但大部分用户一般不会持续翻看评论内容,因此对看评论的业务影响不大。


结合上面的分析,可得出结论:评论的高可用计算架构需要考虑的是发评论的高可用。

业务特性分析

热点事件发生后,绝大部分请求都落在了导致热点事件发生的那一条微博上面,用户会在该热点微博下面发表大量的评论。评论可异步处理,且允许突发大流量的情况下丢弃部分评论。

评论计算高可用架构分析

评论的计算高可用和计算高性能架构设计相同,都是通过 Kafka 做缓冲处理,我们通过上面的性能估算-写评论分析得出写评论的 TPS 为 9w/s,并不算太高,当热点微博的评论请求量超过一定阀值时,可考虑在服务网关做一层限流。


发布于: 36 分钟前阅读数: 8
用户头像

spark99

关注

还未添加个人签名 2020.10.07 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营模块五作业