写点什么

模块二:课后作业

用户头像
菲尼克斯
关注
发布于: 2021 年 04 月 18 日

分析一下微信朋友圈的高性能复杂度


【作业要求】


对照模块 2 讲述的复杂度分析方法,分析微信朋友圈的复杂度;针对各个复杂度,画出你的架构设计方案(无需做备选方案,只需要最终的方案即可);给出你的架构方案中关键的设计理由。3~5 页 PPT 即可,涵盖复杂度分析、架构设计、设计理由。
复制代码

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、随机均可。

用户头像

菲尼克斯

关注

还未添加个人签名 2018.05.14 加入

还未添加个人简介

评论

发布
暂无评论
模块二:课后作业