架构实战营-模块五作业
设计微博系统中”微博评论“的高性能高可用计算架构。
【作业要求】
基于模块 5 第 6 课的微博实战案例,分析“微博评论”这个核心场景的业务特性,然后设计其
高性能高可用计算架构,包括但不限于如下内容:
1. 计算性能预估(不需要考虑存储性能);
2. 非热点事件时的高性能计算架构,需要考虑是否要拆分独立的服务;
3. 热点事件时的高可用计算架构。
【提示】
1. 分析方法对照“看微博”和“发微博”的案例。
答:
用户行为建模和性能估算
微博评论
考虑到微博是一个看得多评论的少的业务,由于绝大部分微博用户看微博的对象是大 V 和明星,因此假设平均一条微博评论次数为 10 次,则微博评论的次数为:
2.5 亿* 10 =25 亿
大部分人微博评论的时间段和看微博的时间基本一致,因此看微博的平均 QPS 计算如下:
25 亿* 60% /(4 * 3600)= 100K/s.
业务特性分析
微博评论是典型的写操作,因此不能和缓存。但用户写的评论很快就被其它用户的评论淹盖了,但是评论要尽量不要丢,可以用缓冲(漏桶算法变种-缓冲),可以用负载均衡
架构分析
用户量过亿,应该要用多级负载均衡架构,覆盖 DNS -> F5 -> Nginx ->网关的多级负载均衡。
架构设计
1. 负载均衡算法选择
微博评论的时候依赖被评论的微博,某个用户微博只能在某台服务器处理,因此微博评论的时候,将请求发送给指定服务器,这里选择 Hash 算法。
2. 业务服务器数据估算
微博评论涉及几个关键的处理:内容审核(依赖审核系统)、数据写入存储(依赖存储系统),数据写入缓存(依赖缓存系统),假设微博评论的写缓冲能够承载 90%的用户请求,那么剩下的 10%的写评论的请求进入系统。则 TPS 为 100K/s *10%=10K/s,因此按照一个服务每秒处理 500 来估算,完成 10K/s 的 TPS,需要 20 台服务器,加上一定的预留量,25 台服务器差不多了。
非热点事件时的高性能计算架构,需要微博评论拆分独立的服务,第一点一条微博发出后,可能要过一两天才来评论。第二点一条微博对应的微博评论请求几百万个请求。
热点事件时的高可用计算架构
接口高可用,可以考虑对微博评论限流,可以采用漏桶算法变种 - 写缓冲(用 Kafka 消息队列),队列大小设为 100 万个。
评论