架构实战营 第 4 期 模块二作业
微信朋友圈高性能复杂度分析
总体复杂度分析
各子业务复杂度分析
朋友圈业务相对比较简单,所以在架构设计阶段不需要考虑子业务(发朋友圈,朋友圈动态点赞/评论、查看朋友圈列表)的单机计算高性能

整体架构

架构设计方案

方案说明及理由
原因:动态数据结构相对比较复杂,不适合使用关系型数据库存储,而且朋友圈数据量较大,所以采用Mongo集群分片存储
原因:展示朋友圈列表时,动态点赞/评论数据会存在大量的查询操作,并且点赞/评论数据是有序的,如果使用关系数据库存储数据,每次都需要查库并排序,效率比较低,采用Redis List 可以快速返回需要的数据
原因:每个人的朋友圈列表都是不同的,同时朋友圈列表存在大量的访问,使用数据库存储时每次都需要根据用户查询出他可见的所有动态,查询复杂度高,效率低。采用Redis将每个人可见的动态提前组装好,可以直接返回给用户,同时我的动态列表可以按年份分key存储,防止单个key数据量过大
原因:微信用户量达到10亿以上,而且用户分散在全国各地,所以采用异地多活