写点什么

极客时间【架构实战营】第二期 模块五作业

用户头像
Geek_91606e
关注
发布于: 刚刚

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

1. 计算性能预估

1.1 发评论

微博评论业务属于看多发少的业务,假设平均每人每天发 2 条评论(只考虑文字),微博每天的评论数量为 5 亿条。

大部分人评论微博的时间集中在早上 8:00~9:00,中午 12:00~22:00,晚上 20:00~22:00,假设这几个时间段评论总量占比 60%,则这 4 个小时的平均评论微博的 TPS 计算如下:

5 亿 * 60% / (4 *3600) ≈ 20K/s

1.2 看评论

假设平均每条评论观看人数有 100 次,则总观看次数为:

5 亿 * 100 = 500 亿。

大部分人看评论的时间段与发评论的时间段基本重合,因此看评论的平均 QPS 计算如下:

500 亿 * 60% / (4 *3600) ≈ 2000K/s

2. 非热点事件的高性能架构

2.1 发评论

2.1.1 业务特性分析

发评论是典型写操作,因此不能用缓存,可以用负载均衡

2.1.2 架构分析

用户量过亿,应采用多级负载均衡架构,覆盖 DNS -> F5 -> Nginx -> 网关的多级负载均衡。

2.1.3 架构设计

2.1.3.1 负载均衡算法选择

评论微博依赖用户登录状态,登录状态保存在分布式缓存中,因此发评论时,可以将请求发给任意服务器,使用“轮询”“随机”算法。

2.1.3.2 业务服务器数量估算

评论微博设计几个关键处理:内容审核(依赖审核系统)、数据写入存储(依赖存储系统)、数据写入缓存(依赖缓存系统),因此按照每台服务器 500 的 TPS 来估算,完成 20K 的 TPS,需要 40 台服务器,加上一定的预留量,可以使用 50 台服务器

2.2 看评论

2.2.1 业务特性分析

看评论是一个典型的读操作,由于评论不能修改,因此非常适合缓存架构,同时由于请求量很大,也需要负载均衡架构

2.2.2 架构分析

用户量过亿,应采用多级负载均衡架构

请求量达到 500 亿,应采用多级缓存架构,尤其是 CDN 缓存,是缓存设计的核心。

2.2.3 架构设计

2.2.3.1 负载均衡算法选择

游客也可以看评论,因此将请求发给任意服务器都可以,使用“轮询”“随机”算法。

2.2.3.2 业务服务器数量估算

假设 CDN 可以承载 90%用户流量,剩下 10%的请求进入系统,则请求 QPS 为 2000K/s * 10% = 200K/s,由于读取评论的处理逻辑比较简单,主要是读缓存系统,因此假设单台业务服务器处理能力为 1000 的 QPS,则机器数量需要 200 台,加上一定的预留量,可以使用 240 台。

2.3 微博评论业务整体架构设计

任务分配:由于用户量较大,地域分布广,因此需要多机房。

任务分解:由于看评论与发评论的请求数量相差较大,因此需将写评论和看评论拆分为不同的服务。

3. 热点事件的高可用架构

3.1 架构设计分析

3.1.1 发评论

评论的重要性和影响力不如原微博,尽量少丢请求,考虑“漏桶算法”限流策略。

3.1.2 看评论

热点事件微博评论存在缓存热点问题,可以考虑“多副本缓存”

用户头像

Geek_91606e

关注

还未添加个人签名 2021.07.22 加入

还未添加个人简介

评论

发布
暂无评论
极客时间【架构实战营】第二期 模块五作业