写点什么

架构实战营模块 5 作业

作者:星夜
  • 2022 年 6 月 29 日
  • 本文字数:1285 字

    阅读完需:约 4 分钟

架构实战营模块 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 台

整体架构设计

多级负载均衡架构


多级缓存架构


三、热点事件时的高可用计算架构

热点事件的微博评论相比微博而言高可用要求较低,可以考虑对热点事件微博的评论进行限流,必要时进行降级和熔断。

写评论高可用

限流。其实在上面的正常写评论设计中已经使用了无限漏桶进行缓冲,这里的限流可以不过多考虑叠加方案

看评论高可用

可以采用多副本缓存架构来应对热点。当副本缓存服务器压力过大时自动熔断。

多副本缓存架构


发布于: 刚刚阅读数: 4
用户头像

星夜

关注

还未添加个人签名 2018.05.07 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营模块 5 作业_架构实战营_星夜_InfoQ写作社区