架构实战营 第 6 期 模块五课后作业
作业要求
设计微博系统中”微博评论“的高性能高可用计算架构。
【作业要求】
基于模块 5 第 6 课的微博实战案例,分析“微博评论”这个核心场景的业务特性,然后设计其
高性能高可用计算架构,包括但不限于如下内容:
1. 计算性能预估(不需要考虑存储性能);
2. 非热点事件时的高性能计算架构,需要考虑是否要拆分独立的服务;
3. 热点事件时的高可用计算架构。
【提示】
1. 分析方法对照“看微博”和“发微博”的案例。
1. 计算性能预估
根据之前看微博的估算
假设看微博时肯定会看评论,所以看评论的平均 QPS 也是 1000K/s
假设看微博的人中每 10 个有 1 个会发表评论,则发评论的平均 TPS 为 100K/s
2. 高性能高可用计算架构分析
因为发评论和看评论的功能相对独立,可将服务拆分为“发评论”和“看评论”。
2.1 发评论
【业务特性分析】
发评论也是一个典型的写操作,因为不能用缓存,可以用负载均衡。
【架构分析】
考虑 TPS 比发微博还要高,应该要用 4 级负载均衡架构,覆盖 DNS -> F5 -> Nginx -> 网关的多级负载均衡。
【架构设计】
负载均衡算法选择
发评论的时候需要登录,并且评论要关联到某一条微博。所以登录状态需要保存在分布式缓存中。
不考虑热点事件,评论和其微博的关联关系可保存在分布式数据库中。这样将请求发送给任意服务器都可以,这里选择“轮询”或者“随机”算法。
业务服务器数量估算
按照一个服务每秒处理 500 来估算,完成 100K/s 的 TPS,需要 200 台服务器,加上 20%的预留量,需要 240 台服务器。
2.2 看评论
【业务特性分析】
看评论也是一个典型的读操作,所以非常适合缓存架构。同时由于请求量很大,负载均衡架构也需要。
【架构分析】
请求量过亿,应该要用多级缓存架构,尤其是 CDN 缓存,是缓存设计的核心。。
【架构设计】
负载均衡算法选择
游客都可以直接看微博和评论,因此将请求发送给任意服务器都可以,这里选择“轮询”或者“随机”算法。
业务服务器数量估算
假设 CDN 能够承载 90%的用户流量,那么剩下 10%的读评论的请求进入系统,则请求 QPS 为 1000K/s * 10% = 100K/s,由于读取微博的处理逻辑比较简单,主要是读缓存系统,因此假设单台业务服务器处理能力是 1000/s,则机器数量为 100 台,按照 20%的预留量,最终机器数量为 120 台。
3. 非热点事件时的高性能计算架构
负载均衡整体架构
多级缓存整体架构
4. 热点事件时的高可用计算架构
热点事件时,虽然只有一两条微博,但引起大量用户在短时间内对其发表评论和读取评论,给系统造成很大压力。
【发评论】
对热门微博发表的评论,考虑用“漏桶算法”。为了减少丢失评论,可以将队列设的大一点。
【看评论】
可以考虑“多副本缓存”,由于评论其实也有热点评论,大多数用户其实也只看热点评论。可考虑在应用内缓存热门微博的同时,缓存其下属的热门评论。
评论