微信朋友圈高性能架构 _ 模块二作业
朋友圈复杂度分析:
业务复杂度:朋友圈的业务复杂度比较低,只有内容发布、查看和评论和点赞等内容。
质量复杂度:朋友圈的用户非常多,微信的用户数量都会有朋友圈功能,根据张小龙在“2021 微信公开课 PRO”中的演讲,每天有 10.9 亿用户打开微信,3.3 亿用户进行了视频通话;有 7.8 亿用户进入朋友圈,1.2 亿用户发表朋友圈,其中照片 6.7 亿张,短视频 1 亿条;有 3.6 亿用户读公众号文章,4 亿用户使用小程序。
可知,微信朋友圈的 PV 每天约为 7.8 亿,绝大部分人都会在白天查看朋友圈,在 0 点-6 点相对是朋友圈活跃度最低的时间段,这部分的 PV 忽略不计,按 18 小时计算。
可以得到平均的 QPS 为 12000,考虑到在某些时间段如中午吃饭、上下班路上使用朋友圈的情况会相对集中,因此,可以考虑峰值是平均值的 5 倍,那么高峰期的 QPS 大约为 60000/s。
再查看朋友圈的时候,基本上查看朋友的人都会点赞,那么点赞功能的 TPS 可能是查看 QPS 的百分之八十左右,约为 50000/s
对评论朋友圈的情况,评论的概率会低于点赞,按缩减五倍计算,评论的 TPS 大概为 10000/s
对于发布朋友圈的情况,会存在很多用户都是查看朋友圈,而不会发布朋友圈,因此与评论持平即可,TPS 为 10000/s
此外,还需要考虑朋友圈的业务特点,朋友圈的单条数据,查看量的上限是朋友的人数上限,微信朋友的人数,上限为 5000。考虑到重复的查看次数,一条朋友圈的数据,发布之后,总的查看次数,大部分不会超过 500 次。大量用户的朋友圈数据会低于 100。
因此对于朋友圈的架构涉及,最关键的部分是将用户分片,将用户的数据通过 hash 的方式分片到多个服务器,让同一个用户的数据被集中到某一个服务器来访问。
发布功能:
发布功能考虑到图片,gif 以及短视频等内容,因此需要将这些文件放置到文件服务器上。采用分布式的文件服务器 FastDFS 是一个不错的解决方案。
点赞和评论朋友圈:
点赞和评论数据,数据量不大,但是操作的时效性要求比较高,可以考虑加一层 redis 缓存。数据的读写先操作缓存,之后再同步到数据库。
查看朋友圈:
查看朋友圈的时候,除了需要根据 mysql 中的数据进行渲染之外,还需要从文件服务器读取文件数据,从 redis 中读取点赞和动态。
此外还有广告数据,广告数据一般是链接的方式,直接加载,之后广告的内容通常都放在 cdn。
评论