背景介绍
极客大学业务架构实战营课程作业
作业 分析一下微信朋友圈的高性能复杂度
作业要求
对照模块 2 讲述的复杂度分析方法,分析微信朋友圈的复杂度;
针对各个复杂度,画出你的架构设计方案(无需做备选方案,只需要最终的方案即可);
给出你的架构方案中关键的设计理由。
3~5 页 PPT 即可,涵盖复杂度分析、架构设计、设计理由。
朋友圈复杂度总体分析
微信朋友圈属于高质量复杂度,低业务复杂度
微信朋友圈高性能业务指标
新闻信息搜集
微信朋友圈数据
微信最新数据:每天有10.9亿人打开微信,7.8亿人进入朋友圈
在微信公开课 Pro 直播演讲中,微信创始人张小龙披露微信最新数据:每天有 10.9 亿人打开微信,3.3 亿人进行视频通话,7.8 亿人进入朋友圈,1.2 亿人发朋友圈,朋友圈每天有 1 亿条视频内容,3.6 亿公众号,4 亿用户使用小程序。朋友圈每天有 1 亿条视频内容。每天有 3.6 亿人进入公众号,4 亿用户使用小程序。
腾讯最新财报显示,微信月活跃用户突破 12 亿(合并 WeChat),成为中国互联网历史上第一款月活用户突破 10 亿的产品。
微信用户活跃数据
近日,用户洞察调研机构PHD发布了一份微信用户洞察报告。报告显示,晚7点至晚9点,是微信用户最活跃的两小时,被称为“黄金两小时”。
10多亿微信用户每天都会在哪些时间段使用微信呢?调查发现:
- 早上9点—晚上6点,是微信使用的小高峰时段,并且随着时间的推移会一直呈现小幅度的增长;
- 晚上6点——晚上10点,是微信使用的大高峰时段,这也是用户最活跃的黄金时间段,并且会在晚上8点达到一天中的使用顶峰;
- 晚上10点—凌晨3点,微信使用开始迎来大幅下降,并在凌晨3点达到一天中最低值,但晚上10点—凌晨12点微信使用的活跃度依然不低。
- 而从早上6点开始,大部分用户从睡梦中悠然醒来,微信开始新的一天的使用爬坡,一直到早上9点微信使用都处于增速较快的状态中,随后达到一天中的第一个长时段的小高峰期,增幅也随之趋于平缓。
此外,微信小程序的使用情况与微信使用的时间分布曲线非常相似,不过小程序的使用高峰是下午5点,随后开始缓慢下降,并从晚上10点开始迎来断崖式下跌。
作者:德外5号 链接:https://www.zhihu.com/question/34008837/answer/772118646 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
关键数据
- 每天有7.8亿人进入朋友圈
- 1.2 亿人发朋友圈
- 朋友圈每天有 1 亿条视频内容
数据估算
根据微信活跃用户信息
粗略估计,我们设
- 早上9点到晚上6点,共9h,权重为0.5/h
- 晚上6点到晚上10点,共4h,权重为1/h
- 晚上10点—凌晨3点,共5h,权重为0.3/h
- 凌晨3点到早上9点,共6h,权重为0.1/h
那么,在高峰期的晚上6点到晚上10点,平均每小时权重占比占当天的比例为
\[\frac{1 * 1}{9 * 0.5 + 4 * 1 + 5 * 0.3 + 6 * 0.1} = 0.09434\]
朋友圈一般不会出现激增情况,于是我们假设峰值是普通高峰时期的3倍请求量,那么可以粗略估算
假设每个人一天平均进入3次朋友圈,巅峰时1s有 7.8 * 10 ^ 8 * 3 * 3 * 0.09434 / 3600 = 183963 人进入朋友圈,折合20万 QPS计算
巅峰时1s有 1.2 * 10 ^ 8 * 3 * 0.09434 / 3600 = 9434 人发朋友圈,按1万 TPS计算
巅峰时1s有 1 * 10 ^ 8 * 3 * 0.09434 / 3600 = 7862 条视频内容产生,先不做考虑
假设每条朋友圈评论点赞10条,巅峰时1s有 1.2 * 10 ^ 8 * 3 * 10 * 0.09434 / 3600 = 94340 条评论/点赞产生,按10万TPS计算
高性能复杂度分析
朋友圈高性能复杂度应对思路
朋友圈高性能方案 - 发布朋友圈
单机
计算高性能
- 进程模型
- 不做额外考虑
- 网络模型
- 无需考虑
- 缓存模型
- 不涉及
存储高性能
- 存储模型
- 利用关系型数据库MySQL存储朋友圈数据
- 利用形如阿里云OSS对象存储功能的服务存储图片和视频信息,并利用内部key值存储在MySQL中
集群
计算高性能
- 任务分配
- 负载均衡即可,无需再将发朋友圈拆分成不同任务了
存储高性能
- 任务分解
- 将朋友圈数据分片存储
- sharding策略按user_id进行范围分片