架构实战营模块 5 作业
5 一:作业
设计微博系统中”微博评论“的高性能高可用计算架构。
【作业要求】
基于模块 5 第 6 课的微博实战案例,分析“微博评论”这个核心场景的业务特性,然后设计其
高性能高可用计算架构,包括但不限于如下内容:
1. 计算性能预估(不需要考虑存储性能);
2. 非热点事件时的高性能计算架构,需要考虑是否要拆分独立的服务;
3. 热点事件时的高可用计算架构。
二:微博评论计算性能预估
2020.9 月月活 5.11 亿,日活 2.24 亿(参考《微博 2020 用户发展报告》)。
发评论
【业务特性分析】
根据发微博的用户行为建模和性能优化,发评论和发微博差不多:
假设平均每天每人发 1 条评论,则评论每天的发送量约为 2.5 亿条。
大部分的人发评论集中在早上 8:00~9:00 点,中午 12:00~13:00,晚上 20:00~22:00,假设这几个时间段发评论总量占比为 60%,则这 4 个小时的平均发微博的 TPS 计算如下:
2.5 亿 * 60% / (4 * 3600) ≈ 10 K/s。
【架构分析】
评论是写操作,所以不需要缓存,用户量过亿,需要使用多级负载均衡
【架构设计】
因为写评论业务实现最终一致性就可以,延迟秒级的方案,会走写缓冲到 MQ 处理后续各个操作(审核、排序、统计等等),前端假写的方案。
单机 TPS 轻松 2K,10K 的 TPS,只需要 5 台机器,加上 20%的预留量,增加一台机器,总共 6 台机器。
查看评论
【业务特性分析】
由于绝大部分微博用户看评论的对象是大 V 和明星的微博,因此我们假设平均一条微博观看人数有 100 次,评论大多数看第一页的场景,正常适合微博的数据同时请求评论的数据
2.5 亿 * 100 = 250 亿。
大部分人看微博评论的时间段和发评论的时间段基本重合,因此看评论的平均 QPS 计算如下:
250 亿 * 60% / (4*3600) = 1000K/s
【架构分析】
用户量过亿,需要使用多级负载均衡
评论是读操作,并且大多情况命中会命中,因此需要多级缓存架构,特别是 CDN 缓存,进程内缓存。
【架构设计】
假设 CDN 能够承载 90%的用户流量,那么剩下 10%的读评论的请求进入系统,则请求 QPS 为 1000K/s * 10% = 100K/s,由于读取评论的处理逻辑比较简单,主要是读缓存系统,并且在写评论异步去计算评论的排序规则,用户的请求都会打到进程内缓存和分布式缓存,因此假设单台业务服务器处理能力是 1000/s,则机器数量为 100 台,按照 20%的预留量,最终机器数量为 120 台
三:非热点事件时的高性能计算架构
多级负载均衡架构
多级缓存架构
四:热点事件时的高可用计算架构
发评论热点高可用
令牌桶(控制速率,防刷) + 写缓冲(令牌桶)
看评论热点高可用
进程内缓存 + 多副本缓存热点数据
评论