写点什么

架构师实战营 模块二作业 微信朋友圈高性能架构分析

用户头像
好吃不贵
关注
发布于: 2021 年 04 月 18 日

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

【作业要求】

  1. 对照模块 2 讲述的复杂度分析方法,分析微信朋友圈的复杂度;

  2. 针对各个复杂度,画出你的架构设计方案(无需做备选方案,只需要最终的方案即可);

  3. 给出你的架构方案中关键的设计理由。

  4. 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 的方式即可。

设计方案选择

初期选择方案一,慢慢演进到方案二。

用户头像

好吃不贵

关注

还未添加个人签名 2018.11.20 加入

还未添加个人简介

评论

发布
暂无评论
架构师实战营 模块二作业 微信朋友圈高性能架构分析