架构实战营 - 模块二作业
题目
1. 分析一下微信朋友圈的高性能复杂度
【作业要求】
1)对照模块 2 讲述的复杂度分析方法,分析微信朋友圈的复杂度;
2)针对各个复杂度,画出你的架构设计方案(无需做备选方案,只需要最终的方案即可);
3)给出你的架构方案中关键的设计理由。
4)3~5 页 PPT 即可,涵盖复杂度分析、架构设计、设计理由。
【提示】
1. 分析过程可以参考模块 2 第 5 课的实战案例,但是不需要将分析过程一一列举出来。
2. 如果某个地方被卡主了,请及时联系助教或者老师讨论。
微信朋友圈运营业务数据
2021 年 1 月 19 日消息 在微信公开课 Pro 直播演讲中,微信创始人张小龙披露微信最新数据:每天有 10.9 亿人打开微信,3.3 亿人进行视频通话,7.8 亿人进入朋友圈,1.2 亿人发朋友圈,朋友圈每天有 1 亿条视频内容,6.7 亿张照片,3.6 亿公众号,4 亿用户使用小程序。
朋友圈高性能复杂度分析
业务数据
假设用户发朋友圈,主要集中在早上(7-9 点),中午(12-14 点),晚上(18 点-20 点),临睡(22 点-24 点),占有 80%发送量。可以估算,平均用户发送数为 0.4 万次/秒,节假日按照平时两倍估算,即 0.8 万次/秒,突发事件以平时 5 倍流量计算,即 2.0 万次/秒。
互动(点赞、评论),假设每条朋友圈,有 5 个赞,3 条评论。则 TPS 为 3.2 万次/秒
假设用户访问朋友圈时间和发朋友圈一致,主要集中在早上(7-9 点),中午(12-14 点),晚上(18 点-20 点),临睡(22 点-24 点),占有 80%访问量,每次看十条朋友圈。可以估算,平均用户访问数为 21.7 万次/秒,节假日按照平时两倍估算,即 43.3 万次/秒,突发事件以平时 5 倍流量计算,即 108.3 万次/秒。
假设用户发布的图片,平均每张大小为 500KB,每条短视频平均大小为 10MB,则每天照片存储空间为:312TB/日,短视频存储空间为:954TB/日
总体分析
主要业务:发布、查看、点赞、评论
业务复杂度分析:朋友圈类似消息队列的订阅/发布模式的信息推送业务,实现方式,可以有 pull、push 等多种组合来保证数据的有效和最终一致性。整体上无太大业务复杂度
质量复杂度分析:发布朋友圈,属于用户单向生产数据,无共享资源占用;浏览朋友圈,需要将用户发布的内容同步至所有可以访问该朋友圈用户的时间线中(不显示,可以理解为推送一条反向消息),需要注意浏览者看到的时间顺序,包括发布内容、点赞、评论。结合前面业务情况,存储数据量很大,综合来说,质量复杂度,主要集中在,高性能、高可用、成本控制上。
总体约束
前述分析,可知,朋友圈低业务复杂度,高质量复杂度。
质量复杂度的核心在于:
图片、视频数据的存储、高速访问以及成本控制;
不同机房朋友圈视图一致性;
高并发下服务可用性;
应对突发流量请求时资源的弹性伸缩能力
架构设计
朋友圈高性能方案-发朋友圈
发朋友圈架构图
朋友圈高性能方案-看朋友圈
总体架构图-单机房
设计理由
发朋友圈和看朋友圈的访问量都超过了单机的处理能力(单机 mysql,3000tps 左右)
所以采用分库分表
假设 B 和 C 是用户 A 的好友
1.用户 A 发送朋友圈请求
2.上传成功后,同步到 CDN 服务器
3.B 和 C 查看,朋友圈时,先更新最新的朋友圈权限信息
4.服务器返回,对应权限的朋友圈信息
5.显示朋友圈信息,并通过 CDN 地址获取图片和视频资源
评论