写点什么

微博评论高性能高可用计算架构

作者:艾瑾行
  • 2023-08-14
    山东
  • 本文字数:1273 字

    阅读完需:约 4 分钟

一、性能估算

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 跟热点事件的影响力和影响范围有关,都很难预估,所以只能做一些预防。

热点事件的评论也可分为写评论和读评论两部分,且对实时性要求都不高,所以发评论时可以使用漏桶算法进行限流;绝大多数热点微博的评论都不会被查看,所以无需额外措施,按照非热点事件的情况处理即可。



用户头像

艾瑾行

关注

还未添加个人签名 2020-08-12 加入

还未添加个人简介

评论

发布
暂无评论
微博评论高性能高可用计算架构_架构训练营_艾瑾行_InfoQ写作社区