微博评论高性能高可用计算架构
一、性能估算
1、 根据微博公布数据:2022 年 9 月的月活跃用户数为 5.84 亿,日均活跃用户数为 2.53 亿。
2、 假设平均每人每天发 1 条微博(只考虑文字微博),则每天总集发送量约 2.5 亿条;
3、 由于绝大部分微博用户看微博的对象是大 V 和明星,假设平均一条微博观看人数为 100 次,其中十分之一人次看完后会给予评论,即平均每条微博评论数为 10。
4、 大部分的人发微博集中在早上 8:00~9:00 点,中午 12:00~13:00,晚上 20:00~22:00,假设这几个时间段发微博总量占比为 60%,
5、 绝大多数评论对象是大 V 和明星,且评论的特点是排在前面的评论读取数多,排在后面的基本不会被读,所以整体读取需求不大,这里假设 10%的评论会被读取
6、 4 个小时的平均微博评论的 TPS 计算如下:
发评次数:2.5 亿 * 10 = 25 亿
发评 TPS:发评次数 *60% / (4 *3600) ≈ 100K/s
读评次数:发评次数 *10%=2.5 亿
读评 TPS:读评次数 *60% / (4 *3600) ≈ 10K/s
二、非热点事件的高性能计算架构
2.1 业务特性分析
1. 发评是一个典型的写操作,因此不能用缓存,可以用负载均衡;但根据评论对实时性要求不高的特点,可以使用漏桶算法做写入缓冲,能在流量高峰保证业务可用,且评论不被丢弃。
2. 读评论是一个典型的读场景,由于评论发了以后不能修改,因此非常适用缓存架构;读评请求量 2.5 亿,复用发评的负载均衡
2.2 架构分析
1. 发评用户量过亿,应该要使用覆盖 DNS->f5->Nginx->网关的多级负载均衡
2. 读评请求用户量过亿,应该要使用覆盖 DNS->f5->Nginx->网关的多级负载均衡读评请求量
3. 读评论读评次数 2.5 亿,应该使用多级缓存,因为读评论对性能、实时性要求不高,使用多级缓存,但不使用 CDN。
2.4 架构设计
1. 负载均衡算法选择
发评论的时候依赖登录状态,登录状态一般都是保存在分布式缓存中的,因此发评论的时候,将请求发给任意服务器都可以,这里选择“轮询”或者“随机”算法。
游客都可以直接看评论,因此将请求发送给任意服务器都可以,这里选择“轮询”或者“随机”算法。
2. 业务服务器数量估算
发评论:发评论涉及内容审核(依赖审核系统)、数据写入存储(依赖存储系统)、数据写入缓存(依赖缓存系统)等处理过程,因此按照一个服务每秒处理 500 来估算,完成 100k/s 的 TPS,需要 200 台服务器,再预留 25%左右,250 台就可以了。
读评论:读评论处理逻辑比较简单,主要是读缓存系统,因此假设单台业务服务器处理能力是 1000/s,则机器数量 10 台即可满足 10k/s 的 TPS,加上 30%预留量,13 台机器即可。
2.5 架构图
1. 微博评论负载均衡架构
2. 微博评论评论缓存架构
三、 热点事件时的高可用计算架构
热点事件指某个大 V 或者明星爆料或者官宣,虽然只有一两条微博,但引起大量用户在短时间内评论,给系统造成很大压力。
对于微博评论的场景,评论数和评论 TPS 跟热点事件的影响力和影响范围有关,都很难预估,所以只能做一些预防。
热点事件的评论也可分为写评论和读评论两部分,且对实时性要求都不高,所以发评论时可以使用漏桶算法进行限流;绝大多数热点微博的评论都不会被查看,所以无需额外措施,按照非热点事件的情况处理即可。
评论