架构实战营模块 5 作业
设计微博系统中”微博评论“的高性能高可用计算架构
【作业要求】
基于模块 5 第 6 课的微博实战案例,分析“微博评论”这个核心场景的业务特性,然后设计其高性能高可用计算架构,包括但不限于如下内容:
1. 计算性能预估(不需要考虑存储性能);
2. 非热点事件时的高性能计算架构,需要考虑是否要拆分独立的服务;
3. 热点事件时的高可用计算架构。
【提示】
1. 分析方法对照“看微博”和“发微博”的案例。
一、计算性能预估
背景:2020.9 月月活 5.11 亿,日活 2.24 亿(参考《微博 2020 用户发展报告》)。
1. 发评论
假设平均每天每人发 1 条微博 & 平均一条微博观看人数有 100 次,其中有 30%的用户会评论,则评论数为:
2.5 亿 * 100 * 30% = 75 亿
假设大部分的人发评论同样集中在早上 8:00~9:00 点,中午 12:00~13:00,晚上 20:00~22:00,假设这几个时间段发评论总量占比为 60%,则这 4 个小时的平均发微博的 TPS 计算如下:
75 亿 * 60% / (4 * 3600) ≈ 300 K/s
2. 看评论
通常情况下用户看微博时就会同时加载微博评论,所以用户看评论次数相当于看微博的次数,则看评论的次数为:
2.5 亿 * 100 = 250 亿
假设大部分人看微博的时间段和发评论的时间段基本重合,因此看微博的平均 QPS 计算如下:
250 亿 * 60% / (4*3600) = 1000K/s
二、非热点事件时的高性能计算架构
1. 发评论
业务特性分析
发评论是一个典型的写操作,因此不能用缓存,可以用负载均衡。
发评论业务容忍度高,可以异步处理,因此可以使用漏桶算法变种-写缓冲来实现。
架构分析
用户量过亿,应该要用多级负载均衡架构,覆盖 DNS -> F5 -> Nginx -> 网关的多级负载均衡。
架构设计
1)负载均衡算法选择
发评论时用户可以将请求发送给任意服务器,这里选择“轮询”或者“随机”算法。
2)业务服务器数量估算
发评论类似发微博涉及几个关键的处理:
内容审核(依赖审核系统)、数据写入存储(依赖存储系统)、数据写入缓存(依赖缓存系统)
假设异步写操作用户可等待 30 秒
按照一个服务每秒处理 500 来估算
完成 300K/s 的 TPS,需要 300K/500/30 = 20 台服务器,加上一定的预留量,25 台服务器足够。
2. 看评论
业务特性分析
看评论是一个读场景且评论不能修改,因此非常适合用缓存架构,同时由于请求量很大,负载均衡架构也需要。
架构分析
1)用户量过亿,应该要用多级负载均衡架构。
2)请求量高可使用多级缓存架构。
架构设计
1)负载均衡算法选择
任何人都可以看评论,所以选择“轮询”或者“随机”算法
2)业务服务器数量估算
假设 CDN 能够承载 90%的用户流量,那么剩下 10%的读评论请求会进入系统。请求 QPS 为 1000K/s * 10% = 100K/s。由于读操作的处理逻辑比较简单,主要是读缓存系统,因此假设单台业务服务器处理能力是 1000/s,则机器数量为 100 台,按照 20%的预留量,最终机器数量为:
100K / 1000 * (1 + 20%) = 120 台
整体架构设计
三、热点事件时的高可用计算架构
热点事件的微博评论相比微博而言高可用要求较低,可以考虑对热点事件微博的评论进行限流,必要时进行降级和熔断。
写评论高可用
限流。其实在上面的正常写评论设计中已经使用了无限漏桶进行缓冲,这里的限流可以不过多考虑叠加方案
看评论高可用
可以采用多副本缓存架构来应对热点。当副本缓存服务器压力过大时自动熔断。
版权声明: 本文为 InfoQ 作者【星夜】的原创文章。
原文链接:【http://xie.infoq.cn/article/f7689b252c0146923b5d257a9】。文章转载请联系作者。
评论