模块二作业 (架构实战训练营)
题目: 微信朋友圈的高性能复杂度分析
对照模块 2 讲述的复杂度分析方法,分析微信朋友圈的复杂度。
针对各个复杂度,画出你的架构设计方案(无需做备选方案,只需要最终的方案即可)
给出你的架构方案中关键的设计理由
3~5 页 PPT 即可,涵盖复杂度分析、架构分析、设计理由
1. 业务分析
业务包含发朋友圈、浏览朋友圈、评论等,对这三类业务进行分析
2. 数据分析
1 月 19 日,2021 微信公开课 PRO 在广州举办,在晚间的微信之夜中腾讯公司高级执行副总裁、微信事业群总裁张小龙披露,目前每天有 10.9 亿用户打开微信,3.3 亿用户进行了视频通话;有 7.8 亿用户进入朋友圈,其中有 1.2 亿用户发表朋友圈,有照片 6.7 亿张,有短视频 1 亿条;有 3.6 亿用户读公众号文章,4 亿用户使用小程序。
https://baijiahao.baidu.com/s?id=1689324779152371653&wfr=spider&for=pc
进入朋友圈的用户数为 7.8 亿/天
发朋友圈的用户数为 1.2 亿/天
3. 复杂度分析
3.1 质量复杂度分析
假设峰值为平均值的 5 倍
访问朋友圈总次数
假设用户一天中除开 8 个小时睡觉,剩余 16 个小时,每小时点击一次朋友圈,每个用户一天一共点击 16 次朋友圈
7.8 亿 x 16 次 ÷ 86400 秒 ≈ 14W QPS
峰值: 14W QPS x 5 倍 = 70W QPS
发评论总次数
假设每 1 个点进朋友圈的用户每天发送 1 条评论
7.8 亿 x 1 条 ÷ 86400 秒 ≈ 9K TPS
峰值: 9K TPS x 5 倍 = 4.5W TPS
发朋友圈总次数
假设 1 个用户每天发送 2 条朋友圈
1.2 亿 x 2 条 ÷ 86400 秒 ≈ 2.7K TPS
峰值: 2.7K TPS x 5 倍 = 1.35W TPS
3.2 业务复杂度分析
根据数据可以判断出朋友圈为质量复杂度高
根据思考逻辑,业务复杂度并不是很高,只有简单的读写加一些关系的处理
得出: 质量复杂度高, 业务复杂度不高(比红包复杂一点)
4. 架构设计方案
4.1 访问朋友圈架构设计
数据库采用多个分库,每个分库有一主多从,保障高可靠,也保障了读取数据库时的性能
redis 采用集群方式,确保高可用以及性能保障
每个业务服务都是无状态的,确保挂了一部分后,服务集群也都还能正常使用
如果查看的朋友圈内容中有图片或者视频,则通过索引到对象存储上进行下载
4.2 发评论架构设计
架构设计说明
数据库采用多个分库,每个分库有一主多从,保障高可靠,也保障了读取数据库时的性能
数据库采用异步的方式进行写数据库,先将消息写入到 MQ,然后再异步的写入到数据库中和缓存中(缓存主要考虑到访问朋友圈的场景需要)。因为发朋友圈和读朋友圈并不需要非常的实时,有时稍微延迟一点点也是能接受的,所以采用异步的方式进行写入
4.3 发朋友圈架构设计
架构设计说明
数据库采用多个分库,每个分库有一主多从,保障高可靠,也保障了读取数据库时的性能
数据库采用异步的方式进行写数据库,先将消息写入到 MQ,然后再异步的写入到数据库中和缓存中(缓存主要考虑到访问朋友圈的场景需要)。因为发朋友圈和读朋友圈并不需要非常的实时,有时稍微延迟一点点也是能接受的,所以采用异步的方式进行写入
因为发朋友圈还涉及到图片和视频,所以使用对象存储来进行存储这些文件,然后将文件索引保存到数据库中
评论