写点什么

架构训练营 -- 模块二

作者:LJK
  • 2021 年 12 月 12 日
  • 本文字数:1163 字

    阅读完需:约 4 分钟

朋友圈业务主要包括:发朋友圈,看朋友圈,以及评论点赞

数据估算

根据新浪数据:https://www.sohu.com/a/445530372_114760,每天约有 7.8 亿人进入朋友圈,1.2 亿人发朋友圈,假设数据如下:


发送朋友圈

  • 每人每天发 3 条朋友圈:1.2 亿*3 = 3.6 亿条朋友圈/天

  • 二八原则估算 80%新朋友圈集中在每天的 20%的高峰时间段:3.6 亿*0.8 / 4.8 小时 约 1.7 万 TPS

  • 瞬间 TPS 预估 5 倍约 8.5 万 TPS


看朋友圈

  • 每天每天浏览 20 条朋友圈:7.8 亿*20 = 156 亿浏览/天

  • 二八原则估算 80%浏览量集中在每天的 20%的高峰时间段:156 亿*0.8 / 4.8 小时 约 9 万 QPS

  • 瞬间 TPS 预估 5 倍约 45 万 QPS


评论点赞

  • 每天每天评论/点赞 10 条朋友圈:7.8 亿*10 = 78 亿浏览/天

  • 二八原则估算 80%评论点赞集中在每天的 20%的高峰时间段:78 亿*0.8 / 4.8 小时 约 4.5 万 TPS

  • 瞬间 TPS 预估 5 倍约 23 万 TPS


高性能复杂度分析

发朋友圈

  • 发朋友圈主要是写操作,需要提升写性能,同时考虑朋友圈的展示是按用户按时间进行展示的,因此可以考虑基于 LSM 的 KV 存储模型提升写入性能,例如 HBase

  • 通过负载均衡进行任务分配,发朋友圈本身业务模型简单,不涉及到任务分解

  • 数据通过分片存储,由于发朋友圈本身是写数据,因此也不涉及读写分离等任务分解

看朋友圈


  • 看朋友圈一般每天会产生多次请求,因此选择维护独立缓存提升读性能

  • 通过负载均衡进行任务分配,看朋友圈本身业务模型简单,不涉及到任务分解

  • 单机存储及集群存储与发朋友圈和评论/点赞重合,可以进行复用,因此不需要单独设计

评论点赞

  • 整体复杂度与发朋友圈类似

  • 评论点赞主要是写操作,需要提升写性能,同时考虑朋友圈的存储在 LSM 中基本也是按照时间倒叙存储的,因此可以考虑基于 LSM 的 KV 存储模型提升写入性能,例如 HBase

  • 通过负载均衡进行任务分配,评论点赞本身业务模型简单,不涉及到任务分解

  • 数据通过分片存储,由于评论点赞本身是写数据,因此也不涉及读写分离等任务分解

整体分析

  • 主要数据存储于基于 LSM 的 Hbase 中,主要是考虑到发朋友圈和评论点赞的数据特征,具体包括:

  • 数据以写入为主,需要提升写性能

  • 朋友圈按时间排序,越旧的朋友圈访问量越低,同时点赞评论一般也是基于比较新的朋友圈,不会访问过于陈旧的 LSM Tree

  • 由于 LSM 存储系统可能会读取多个 Tree,影响读取效率,可以通过 Redis 缓存数据,提升数据读取效率

  • 缓存可以进行异步更新,将一定期间内 batch 的数据一起更新,也可以在用户主动刷新时进行更新,这个更新操作可以作为一个独立的服务在后台进行

  • 最后还有一个考虑,微信是熟人社交,基本不会出现关注度很高的,类似微博大 V 这种用户,所以这种写时更新缓存的方案是可行的。但是思考如果出现类似微博明星用户这种,譬如某一个用户的关注者有 30M,这样的话在写时更新缓存的方案就会出现性能瓶颈,因为一个 Post 就会触发 30M 的 Cache 更新操作。这种情况下可以使用关系数据库然后通过 join 操作获取朋友圈,然后和缓存中的数据进行合并,相当于一种 hybrid 的方法

用户头像

LJK

关注

还未添加个人签名 2018.08.07 加入

还未添加个人简介

评论

发布
暂无评论
架构训练营 -- 模块二