写点什么

第五周作业 - 微博评论高性能高可用的计算架构

  • 2023-01-28
    北京
  • 本文字数:1298 字

    阅读完需:约 4 分钟

作业要求:

1.计算性能预估

2.非热点事件的高性能计算架构,需要考虑是否拆分独立的服务

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

性能估算

1.用户量预估

1.1 用户量:

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

1.2 关键行为:

发评论:支持回复楼层、楼中楼

  • 读取评论:按照时间、热度排序

  • 2.用户行为建模

    2.1 发评论

    微博是一个看得多发的少的业务,假设平均每天每人发 1 条微博,则微博每天的发送量约为 2.5 亿条。假设每条微博评论为 3 条,则评论数为 7.5 亿条。

    大部分的的人发微博在早上 8:00-9:00,中午 12:00-13:00,晚上 20:00-22:00,假设这几个时间段的发微博总量占比 60% 且微博会有评论的情况占比也是 60%,则这 4 个小时平均发评论的 TPS 计算如下:

    7.5 亿 * 0.6*0.6 / (4*3600) ≈ 18K/s

    2.2 看评论

    由于绝大部分用户看评论的对象是大 V 和明星,假设看微博和看评论的人次一致,平均一条评论的观察人数有 100 次,则观看次数为:

    7.5 亿*100 = 750 亿。

    大部分人看评论的时间段和发评论的时间段基本重合,因此看评论的平均 QPS 计算如下:

    750 亿 * 0.6 /(4*3600) = 3000K/s

    3.性能需求计算

    3.1 发评论

    业务特性区别于发微博,因为用户发完评论可能已经被刷到自己也看不到的情况,因此可以用写缓存。架构分析用户过亿,应该用多级负载均衡架构,覆盖 DNS->CDN->Nginx->网关的多级负载均衡。负载均衡算法选择发评论的时候依赖登录状态,登录状态一般都是保存在分布式缓存中的,因此发评论的时候,可以将请求发送给任意的服务器,选择轮询或者随机算法。

    业务服务器估算发评论设计几个关键的处理:内容审核、数据写入存储、数据写入缓存,因此按照一个服务器每秒处理 500 来估算,完成 18K/s 的 TPS,需要 36 台服务器,加上一定的预留量,选择 40 台服务器。


    多级负载架构图


    多级缓存架构图


    3.2 看评论

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

    架构分析用户量过亿,应该使用多级负载均衡架构和 CDN 服务

    负载均衡算法选择游客可以直接看评论,因此将请求发送给任务服务器都可以,选择轮询或者随机算法

    业务服务器数量估算假设 CDN 的命中率在 98%,剩下的 2%读评论系统请求进入系统,则请求 QPS 为 3000K/s * 2% = 60K/s,由于读评论的处理逻辑比较简单,主要是读缓存系统,因此假设单台业务服务器处理能力是 1K/s,则机器数量为 60 台,按照 20%的预留量,最终机器为 80 台。


    多级负载架构图

    多级缓存架构图

    3.3 微博高性能计算方案-整体架构设计

    任务分配:双机房、三机房

    任务分解:基于业务场景关联度和请求量将发评论和看评论分拆到不同服务

    合并总体负载架构图

    多级缓存图,和读写缓存架构一致

    4.热点事件设计

    • 业务特性分析

    发评论和一般的发评论类似

    看评论热点事件发生后,绝大部分评论都落在了热点事件的那一条微博下的评论

    • 架构设计分析

    发评论可以考虑对评论进行限流,由于评论最好不要丢弃,因此尽可能少的丢弃请求,考虑用漏桶算法

    看评论热点事件的评论也可能存在热点问题,可以使用多副本缓存,由于原来的架构本身已经采用了应用内的缓存,总体上来看,缓存热点问题不一定很突出

    看评论如下

    写评论如下:


    用户头像

    还未添加个人签名 2020-11-15 加入

    还未添加个人简介

    评论

    发布
    暂无评论
    第五周作业-微博评论高性能高可用的计算架构_不爱学习的程序猿_InfoQ写作社区