写点什么

架构训练营模块五作业

作者:gigifrog
  • 2023-02-10
    北京
  • 本文字数:983 字

    阅读完需:约 3 分钟

0.作业要求

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

1.计算性能预估

1.1 基本数据

  • 2020.9 月月活 5.11 亿,日活 2.24 亿(参考《微博 2020 用户发展报告》)。

  • 微博评论包含 2 种关键行为:发微博评论,看微博评论

1.2 建模和性能估算

发微博评论

  • 考虑到微博是一个看得多,发很少的业务。假设平均每天每人会对 2 条微博发评论,则微博评论的每天发送量为 2.5 * 2 = 5 亿条

  • 假设大部分人发微博评论的时间段集中在 8:00~9:00, 12:00~13:00, 20:00~22:00,假设上述时间段发送评论的量占总量的 60%,则发评论的 TPS 为:2.5 亿 * 2 * 60% / (4 * 3600) = 20K/s

看微博评论

  • 假设平均每人会看 100 条微博,20%的微博会打开评论的第一页,2%的微博会打开第二页的评论, 上述浏览行为 60%发生在高峰的 4 小时内。

  • 微博评论的 QPS 计算:2.5 亿*100*(20% + 2%) *60%/(4*3600) = 230K/s

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

2.1 发微博评论

  • 发微博评论是一个写操作,而且完成后不能修改。因此不需要缓存

  • 每日活跃用户总量过亿,需要用多级负载均衡架构,包括 DNS->F5->Nginx->网关

  • 发评论只有一次的交互,可以负载均衡算法可以选择最简单的“轮询”或者“随机”算法

  • 按照一个服务器每秒 500 来估算,完成 20K/s 的 TPS 需要 40 台服务器,加上预留量,50 台服务器

2.2 看微博评论

  • 看微博评论是一个典型的读场景,由于评论发了后不能修改,因此非常适合用缓存架构,同时由于请求量很大,负载均衡架构也需要

  • 用户量过亿,必须采用多级负载均衡架构,DNS->F5->Nginx->网关。负载均衡算法选用“轮询”或者“随机”算法

  • 请求数量达到 55 亿,应该用多级缓存架构,本地缓存->CDN->web 容器缓存->应用缓存->分布式缓存

  • CDN 中只需缓存第一页的评论,其余缓存前 5 页的评论

  • 假设 CDN 承担绝大部分的流量,只有 10%的读评论请求进入系统,流量为 23K/s,一台服务器处理读请求为 1000/s,机器数量为 23 台,加上预留,30 台服务器

2.3 整体架构

多级负载均衡架构

多级缓存架构

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

3.1 发微博评论

  • 对于热点事件,用户发微博评论的意愿更强烈,短期内对系统冲击较大可以采取:用户端缓存+后端限流的方式。

  • 用户端本地缓存:用户发完评论后,利用本地缓存直接将该评论在客户端置顶

  • 后端限流:采用漏桶算法,减少丢弃请求

3.2 看微博评论

  • 热点事件中,用户更加愿意翻看更多的评论,可以采用 CDN + 后端多副本缓存

  • CDN:将前 5 页的评论都存入 CDN

  • 后端:将热点微博的评论的副本的放入多个缓存服务器。


用户头像

gigifrog

关注

还未添加个人签名 2018-01-17 加入

还未添加个人简介

评论

发布
暂无评论
架构训练营模块五作业_架构训练营_gigifrog_InfoQ写作社区