架构实战营模块五作业
设计微博系统中”微博评论“的高性能高可用计算架构。
【作业要求】
基于模块 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。
评论高性能计算架构
【业务特性分析】
写评论是一个典型的写操作,因此不能用缓存,可以用负载均衡。
看评论是一个典型的读场景,由于评论发了后不能修改,因此非常适合用缓存架构,同时由于请求量很大,负载均衡架构也需要。
【架构分析】
用户量过亿,整体性能要求较高,应该要用多级负载均衡架构。
写评论可以异步处理,使用 MQ 做缓冲。
看评论需要使用多级缓存架构,用来缓存近期比如 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,并不算太高,当热点微博的评论请求量超过一定阀值时,可考虑在服务网关做一层限流。
版权声明: 本文为 InfoQ 作者【spark99】的原创文章。
原文链接:【http://xie.infoq.cn/article/5472972547608cc63637104f3】。未经作者许可,禁止转载。
评论