微信朋友圈架构设计
一、微信朋友圈高性能业务指标
1.业务背景
摘自张小龙 2021 年 1 月 19 日的演讲:有 7.8 亿用户进入朋友圈,1.2 亿用户发表朋友圈,其中照片 6.7 亿张,短视频 1 亿条;
2.发朋友圈业务指标
假设:
1.朋友圈各种操作都发生在早 8 点-晚上 12 点的区间内。
2.发朋友圈峰值是平均值的 100 倍。
3.发照片时,平均一次发布为 4 张照片。
发朋友圈均值=(6.7 亿/4 +1 亿)/(15*60 *60) ≈ 4644
发朋友圈 TPS=4644 * 100 ≈ 46 万
3.刷朋友圈业务指标
假设:
1.朋友圈各种操作都发生在早 8 点-晚上 12 点的区间内。
2.用户平均每天刷 10 次朋友圈。
3.刷朋友圈峰值是平均值的 10 倍。
刷朋友圈均值=(7.8 亿 *10)/(15*60 *60) ≈ 14.5 万
刷朋友圈 QPS=14.5 万 * 10 ≈ 145 万
4.评论和点赞业务指标
假设:
1.发一条朋友圈有 20 个点赞。
2.点赞峰值是平均值的 5 倍。
点赞均值=4644 *20 ≈ 10 万
点赞 TPS=10 万 * 5 ≈ 50 万
5.微信朋友圈高性能复杂度分析
二、微信朋友圈高性能方案-发朋友圈
三、微信朋友圈高性能方案-刷朋友圈
四、微信朋友圈高性能方案-评论和点赞
五、朋友圈整体架构图-单机房示意图
1.架构图
2.设计说明
2.1 数据库表
1.好友关系表,记录好友关系列表,缓存在 redis 中。
2.发布表,记录所有用户的发布数据,比如一次发布是几张图片,每张图片的 URL 是什么。谁可以看,谁不可以看等等。
3.相册。相册是每个用户独立的,记录了该用户所发布的所有内容。实际的值是指向发布表的索引。
4.评论表。评论就是针对某个具体发布的朋友评论和点赞操作。
5.同步表。按时间线存储的,一个用户所有朋友的发布内容,缓存在 redis 中。
2.2 要点
1.相册写成功后,触发批处理,把本次发布数据的指针插到所有好友的同步表里面去,同时更新 redis。
2.用户刷朋友圈时,从 redis 中读取待同步数据,然后由客户端去拉取发布内容。
3.针对一次发布,客户端拉取完内容后,再从评论表拉取好友的评论和点赞数据。
版权声明: 本文为 InfoQ 作者【卡西毛豆静爸】的原创文章。
原文链接:【http://xie.infoq.cn/article/0db1a8f89f0c00d357ab8fec6】。文章转载请联系作者。
评论