架构师实战营 模块二作业 微信朋友圈高性能架构分析
分析一下微信朋友圈的高性能复杂度
【作业要求】
对照模块 2 讲述的复杂度分析方法,分析微信朋友圈的复杂度;
针对各个复杂度,画出你的架构设计方案(无需做备选方案,只需要最终的方案即可);
给出你的架构方案中关键的设计理由。
3~5 页 PPT 即可,涵盖复杂度分析、架构设计、设计理由。
需求分析
发朋友圈
假设每人平均发 2 条朋友圈,每天 80%的朋友圈是在 20%的时间里发的,即约 1.9 亿条朋友圈是在 5 小时内发的,平均约 1 万条/秒 发朋友圈,峰值 TPS 设为 5 倍则为 5 万条/秒。
看朋友圈
每天有 7.8 亿人进入朋友圈,假设每人查看 10 条,利用二八原则,即每天 80%的朋友圈是在 20%的时间查看的,也就是 7.8 X 10 X 0.8 = 62 亿是在 5 小时内看的,平均每秒约等于 25 万条/秒。
评论
假设每天平均发 2 条朋友圈,平均每条朋友圈 3 条评论,每天 80%的评论是在 20%的时间里发的,即约 1.9 亿条朋友圈是在 5 小时内发的,平均 2.3 万条/秒,峰值假设为 5 倍则为 16 万条/秒。
复杂度分析
复杂度分析有质量复杂度和业务复杂度两个维度。
朋友圈的质量复杂度高,因为微信日活用户已经超过 2 亿。业务复杂度也高。
业务复杂度分析
业务拆分如下:
高性能复杂度分析
发朋友圈、看朋友圈、点赞功能的高性能复杂度分析。三个架构类似,见下图。
架构设计
方案一,单机房架构
最简单的方式,业务初期可以采用这种方式,符合简单原则,合适原则,演进原则。试运行一段时间后,再演进到方案二。
方案二,采用微服务的多机房方案
分层设计
最上面是接入层,android 需要长连接,IOS 需要通知服务。逻辑层是业务逻辑,存储代理层下面连接具体存储,比如 redis 缓存,关系数据库 MySQL。
数据库表设计
详细设计
发朋友圈(写扩散的模型)
A 发了图片->先上传到腾讯最近的 CDN->通知微信朋友圈 CDN 的服务器->写到发布表。
通知 A 的好友,A 有一个新发布->发布到每个好友的时间线
写扩散的好处在于写到每个具体用户的时间线,不容易出错。从每个用户的数据库去读,可能在不同机房,不同数据库里,复杂度太高。
看朋友圈
读自己的时间线即可。
点赞评论
同时把评论插入到发布内容的下方即可。
异地多活
容灾设计,可以有多个机房,部署相同的微服务。不同机房走专线,专线出问题的时候,走公网。数据都经过加密比如 crypto,加密可以采用 IPSec,可以通过 DPDK 软件或加密硬件 offload 实现。
数据同步可以使用 idcqueue,异步的数据同步方式。TCP 在高延迟环境无法满足要求,可以自己开发协议,比如 UDP 加上 ack 的方式即可。
设计方案选择
初期选择方案一,慢慢演进到方案二。
评论