模块二:课后作业
分析一下微信朋友圈的高性能复杂度
【作业要求】
1、质量复杂度?业务复杂度?
微信朋友圈,业务较简单,主要应该是质量复杂度
2、高性能业务指标
根据 2021 年发布的财报,截至 2020 年第四季度,微信及 WeChat 合并月活账户数为 12.25 亿,每天有超过 1.2 亿用户在朋友圈发表内容;
张小龙在演讲中表示,每天有 10.9 亿用户打开微信,有 7.8 亿用户进入朋友圈,1.2 亿用户发表朋友圈;
根据 2015 年的数据,截止到 2015 年 7 月,微信每月活跃用户约 5.49 亿,朋友圈每天的发表量(包括赞和评论)超过 10 亿,浏览量超过 100 亿。2015 年元月的流量到了平时的 2 倍,而峰值则达到了平时峰值的 2 倍,相当于平时正常流量的 5 倍;
模型假设:
主要分为发朋友圈、点赞/评论、看朋友圈
日总发表量≈月活✖2;其中,假设发朋友圈 10%,即每人每天发 2 个朋友圈(1.2 亿✖2=2.4 亿),赞/评论占 90%,即每人每天赞/评论 18 次(1.2 亿✖18=21.6 亿);
日总浏览量≈月活✖20;约每人每天浏览 30 次(7.8 亿✖30≈240 亿)
微信朋友圈相关业务有明显的时间高峰和低峰,按 20%的时间完成 80%的操作预估,则 1.92 亿朋友圈在 4.8 小时发出;17.28 亿赞/评论在 4.8 小时发出;48 亿次浏览发生在 4.8 小时内;考虑数据中出现的元月峰值,则计算结果✖2
3、按业务分析
单机存储高性能,可采用 Redis 存储,其中,
有权限看到朋友圈的好友列表,可以使用 Redis List 存储;
发布的朋友圈具体信息,可以使用关系型数据库存储,数据按用户分片;
用户与发布的朋友圈具体信息的关联(存储用户 id 和朋友圈信息 id,1:N),可以使用 Redis List 存储;
个人可以看到的朋友圈的时间线(存储用户 id 和朋友圈信息 id,1:N),可以使用 Redis List 存储;
赞/评论,虽然并发数量更高,但是操作内容相对发布朋友圈要简单很多;
赞/评论的具体内容,可以使用关系型数据库存储,数据按原发布朋友圈的用户分片;
赞/评论和原朋友圈数据的关联关系(存储原信息 id 和评论/赞的 id,1:N),可以使用 Redis List 存储
看朋友圈,完全依赖于写操作的架构设计
朋友圈属于增量业务,采用自顶向下架构设计,微信的使用原来必然为多机房的模式,朋友圈沿用原多机房模式即可
4、架构设计
5、设计理由
对读的并发要求很高,考虑大部分关联关系存入 Redis 中,极大提升读取速度。具体的信息字段存入关系型数据库,例如 xx 时间,xx 用户,xx 地点,发布了一条朋友圈,这条朋友圈包括 N 张图片,访问路径分别是 url......,包含一段文字 content 等等。业务服务器负载均衡方式不受限,轮询、hash、随机均可。
评论