架构实战营 -- 模块二
微信朋友圈高性能复杂度分析
总体复杂度分析
参照质量、业务复杂度四象限分析,朋友圈核心业务:发朋友圈、看朋友圈、评论、点赞,整体业务层面并不复杂,但是对质量复杂度,高性能、高可用,安全等方面都要较高要求
高性能指标分析
参考微信十年演讲中提到,当前 7.8 亿用户进入朋友圈,1.2 亿用户发表朋友圈,其中照片 6.7 亿张,短视频 1 亿条;有 3.6 亿用户读公众号文章,4 亿用户使用小程序测算性能指标数据。
发朋友圈场景:假设 1 发朋友圈的 1.2 亿用户每天发 3 条,TPS=4200
看圈场景:假设 7.8 亿用户,每天刷 20 次朋友圈,QPS=18W
评论、点赞场景:假设每天发的 3.6 亿条朋友圈,有 1/3 点赞评论,TPS=1400
根据性能指标分析,整体系统特征,读多写少,朋友圈,数据只增减,不存在修改
高性能方案分析
1.发朋友圈场景
功能场景描述:发朋友圈,写入朋友圈发布内容基础数据,同时将图片,视频等信息上传到文件存储,成功后更新自己的时间线,并通知好友,有新的朋友圈消息。
单机高性能维度主要考虑点:
进程模型:耗时操作的异步处理,比如内容发布后,批量异步通知好友有新的朋友圈消息
缓存模型:一些不常改变,频繁读取的内容进行缓存,比如好友关系等
集群高性能维度主要考虑点:
任务分配:计算高性能,需要考虑负载均衡访问,存储的高性能,不论是缓存数据、基础内容数据、异步任务消息数据,数据量都非常大,读写性能要求较高,都需要考虑分段分片存储机制,
任务分解:需要将发朋友圈的过程进行分解,如提供写入基本朋友内容的服务(ID,内容,文件 URL 等),以及专门针对图片,视频上传的服务,需要上传到分布式文件系统,同时也需要考虑读写请求分离
2.看朋友圈场景
功能描述: 当在微信客户端接收到服务端推送有新朋友圈消息时,进入朋友圈查看朋友圈信息,包括基本信息,图片、视频、评论点赞信息。
看朋友圈场景基本同发朋友圈,看朋友圈场景会多出看评论和点赞数据,因此在考虑集群高性能时,任务分解,需要考虑这个场景
3.评论、点赞场景
功能描述: 浏览朋友圈信息时,选择感兴趣的内容进行点赞评论,同时共同的好友关系的都可以收到评论点赞的内容
高性能方案设计
整体方案描述:
整体按功能职责进行拆分为:接入层、前台业务层、后台作业层、存储层、基础服务层。
接入层考虑负载均衡集群,负责提供基础数据的读写请求,静态资源、图片、视频则通过 CDN 进行分发加速。
同时根据业务特点,将实效性高的服务和耗时的实效性不高的业务进行任务分解,划分为前台业务集群,和后台作业集群。后台作业集群主要需要处理耗时的,图片裁剪压缩、视频处理,以及异步刷好友的时间线。
存储方面,需要缓存集群,异步任务消息等需要 kafka 集群,基础数据则需要 MySQL 集群,处于容量和性能考虑,需要对数据分片,考虑主从、读写分离。
评论