架构实战营 第 4 期 模块二作业
微信朋友圈高性能复杂度分析
总体复杂度分析
微信有 10 亿以上用户,根据 2021 年数据微信朋友圈, 每天有 7.8 亿用户进入朋友圈,1.2 亿用户发表朋友圈,因此属于 高质量复杂度业务
微信朋友圈业务可以分为三块:发朋友圈,朋友圈动态点赞/评论、查看朋友圈列表,业务相对比较简单,因此属于 低业务复杂度业务
因此 微信朋友圈属于 高质量复杂度,低业务复杂度
各子业务复杂度分析
朋友圈业务相对比较简单,所以在架构设计阶段不需要考虑子业务(发朋友圈,朋友圈动态点赞/评论、查看朋友圈列表)的单机计算高性能
整体架构
架构设计方案
方案说明及理由
朋友圈动态数据使用 Mongo 集群分片存储。
原因:动态数据结构相对比较复杂,不适合使用关系型数据库存储,而且朋友圈数据量较大,所以采用 Mongo 集群分片存储
朋友圈点赞/评论使用 Redis 集群存储,存储结构:每个动态用 List 存储 点赞/评论数据。
原因:展示朋友圈列表时,动态点赞/评论数据会存在大量的查询操作,并且点赞/评论数据是有序的,如果使用关系数据库存储数据,每次都需要查库并排序,效率比较低,采用 Redis List 可以快速返回需要的数据
朋友圈列表采用 Redis 集群存储,存储结构:朋友圈列表用 List 存储我可见的动态 id
原因:每个人的朋友圈列表都是不同的,同时朋友圈列表存在大量的访问,使用数据库存储时每次都需要根据用户查询出他可见的所有动态,查询复杂度高,效率低。采用 Redis 将每个人可见的动态提前组装好,可以直接返回给用户,同时我的动态列表可以按年份分 key 存储,防止单个 key 数据量过大
朋友圈业务服务器,不需要再进行拆分,直接使用集群部署,用 Nginx 做负载均衡即可
使用异地多活,多机房部署
原因:微信用户量达到 10 亿以上,而且用户分散在全国各地,所以采用异地多活
评论