模块 2 作业 2
一。业务需求描述:
张小龙在演讲中表示,每天有 10.9 亿用户打开微信,3.3 亿用户进行了视频通话;
有 7.8 亿用户进入朋友圈,1.2 亿用户发表朋友圈,其中照片 6.7 亿张,短视频 1 亿条;
峰值数据分析:假设是每天 24 个小时,按 2:8 原则,估计大概有 80%的用户是在中午 12 点到 13 点,以及晚上 8 点-11 点的 4 个小时访问朋友圈。且大致均匀分布。
二。峰值估算:
1.发朋友圈峰值: 1.2× 10^8× 80%÷ (4× 60× 60) = 1.2× 10^8× 0.8 / 14400 = 6666 TPS
2.发照片峰值: 6.7× 10^8× 80%÷ (4× 60× 60) = 6.7 * 10^8× 0.8 / 14400 = 37221 TPS
乘以一个系数 5,写的峰值大概是 186000TPS
3. 发视频峰值:1.1 *
4. 看朋友圈的峰值:7.8× 10^8 × 80% ÷ (4× 60× 60)=7.8× 10^8× 0.8 / 14400 = 43333 QPS
乘以一个系数 5,查的峰值大概是 216000QPS
三。高性能复杂度分析思路:
1.发朋友圈的高性能复杂度分析
1.1 单机
计算高性能 网络模型 - Netty 等高性能组件
缓存模型- Redis 集群存用户朋友圈数据
存储高性能 B+Tree;
1.2 集群
计算高性能 任务分配- F5 做负载均衡,hash 算法,均衡到 10 台 Nginx
任务分解- 按业务分解,朋友圈文本,视频,图片分别到不同的服务器处理
存储高性能 任务分配- Redis 集群存朋友圈文本
任务分解- CDN 存用户朋友圈照片和短视频;
2. 看朋友圈的高性能复杂度分析
2.1 单机
计算高性能 网络模型 - Netty 等高性能组件
缓存模型- Redis 集群读取用户朋友圈数据
存储高性能 B+Tree;CDN 分发读取朋友圈照片和短视频;
2.2 集群
计算高性能 任务分配- Nginx 做负载均衡,hash 算法,均衡到 10 台服务器
任务分解- 按业务分解,文本,视频,图片分别到不同的服务器处理
存储高性能 任务分配-
任务分解- 文本存入 redis 集群;视频存入 CDN
四。微信朋友圈架构图
五。设计关键点
微信用户数量是亿级别,且分布在全国;所以采用南北双机房的架构;
通过朋友圈的数据和 28 原则,估算业务的峰值 TPS 和 QPS 均为几十万/秒的量级,所以采用 F5 做负载均衡;
朋友圈的文字,图片和视频采用不同的存储策略:
文字的采用 mysql+redis 集群;
图片和视频采用 CDN 存储,并做全国或国外的访问加速;
4.降成本的方面,暂时没有好的思路。
版权声明: 本文为 InfoQ 作者【dwade】的原创文章。
原文链接:【http://xie.infoq.cn/article/a128eb2b75e5d8c972d0b4ecf】。未经作者许可,禁止转载。
评论