架构实战营 4 期 - 第 2 周作业
作业要求
对照模块 2 讲述的复杂度分析方法,分析微信朋友圈的复杂度。
针对各个复杂度,画出你的架构设计方案(无需做备选方案,只需要最终的方案即可)。
给出你的架构方案中关键的设计理由。
3~5 页 PPT 即可,涵盖复杂度分析、架构设计、设计理由。
微信朋友圈业务背景
2021 年 1 月 19 日晚,在微信公开课 Pro 上,微信创始人张小龙披露微信最新数据:每天有 10.9 亿用户打开微信,3.3 亿用户进行了视频通话;有 7.8 亿用户进入朋友圈,1.2 亿用户发表朋友圈,其中照片 6.7 亿张,短视频 1 亿条;有 3.6 亿用户读公众号文章,4 亿用户使用小程序。
有 7.8 亿用户进入朋友圈,1.2 亿用户发表朋友圈,其中照片 6.7 亿张,短视频 1 亿条;
朋友圈访问还算均衡,不会有秒杀这种峰值, 不过每个人都要睡觉,我们按照 每天 16 小时来算。
读朋友圈 qps = 780000000 / (16*60*60) = 13542
写朋友圈 tps = 120000000 / (16*60*60) = 2083
小文件存储 tps = 670000000 / (16*60*60) = 11632
大文件存储 tps = 100000000 / (16*60*60) = 1736
微信朋友圈高性能复杂度分析
微信朋友圈任务分解
首先,对微信朋友圈进行任务分解,因为业务复杂度不复杂,但是要支持亿级用户,这些模块的规模会相当复杂和庞大。
整理出用户常用的功能模块,方便后续思路的规划。
发圈架构图
发圈架构说明:
1、发圈要求高性能,采用 nginx 做任务分配,目的采用轮询/随机算法,通过负载均衡协调 feed 服务器集群,上传发圈信息和推送好友。
2、存储高性能设计,由于发圈内容有图片、视频等非文本格式,可以直接上传至 CDN。
3、采用地域范围分片,存储朋友圈动态文本、发布人、微信号、时间、可见人员等信息,到 NOSQL 数据库中,此设计方案采用的 NOSQL 集群。
看圈架构图
看圈架构说明:
1、看圈要求高性能,采用 nginx 做任务分配,目的采用轮询/随机算法,通过负载均衡协调 feed 服务器集群访问,feed 流服务器通过 Timeline(不对用户主动接收到的内容进行筛选,对所有的内容按照时间更新的顺序排列)拉取自己动态,通过实例定位到 NOSQL 集群检索用户的关注表,然后根据关注表检索新发的 feed。如果一个用户关注过多的时候,查询该用户的关注列表也是有很大数据成本。。
2、客户端找到最近的 cdn 资源,依次获取到图文与视频。
备注:
设计了二个微信朋友圈核心功能架构,评论、转发、点赞相对核心业务的重要性不是太大,而且也相对简单,就不一一设计了。
评论