写点什么

架构实战营 第 4 期 模块二作业

作者:
  • 2021 年 12 月 19 日
  • 本文字数:708 字

    阅读完需:约 2 分钟

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

总体复杂度分析

  1. 微信有 10 亿以上用户,根据 2021 年数据微信朋友圈, 每天有 7.8 亿用户进入朋友圈,1.2 亿用户发表朋友圈,因此属于 高质量复杂度业务

  2. 微信朋友圈业务可以分为三块:发朋友圈,朋友圈动态点赞/评论、查看朋友圈列表,业务相对比较简单,因此属于 低业务复杂度业务

  3. 因此 微信朋友圈属于 高质量复杂度,低业务复杂度

各子业务复杂度分析

朋友圈业务相对比较简单,所以在架构设计阶段不需要考虑子业务(发朋友圈,朋友圈动态点赞/评论、查看朋友圈列表)的单机计算高性能



整体架构


架构设计方案

方案说明及理由

  1. 朋友圈动态数据使用 Mongo 集群分片存储。

原因:动态数据结构相对比较复杂,不适合使用关系型数据库存储,而且朋友圈数据量较大,所以采用 Mongo 集群分片存储

  1. 朋友圈点赞/评论使用 Redis 集群存储,存储结构:每个动态用 List 存储 点赞/评论数据。

原因:展示朋友圈列表时,动态点赞/评论数据会存在大量的查询操作,并且点赞/评论数据是有序的,如果使用关系数据库存储数据,每次都需要查库并排序,效率比较低,采用 Redis List 可以快速返回需要的数据

  1. 朋友圈列表采用 Redis 集群存储,存储结构:朋友圈列表用 List 存储我可见的动态 id

原因:每个人的朋友圈列表都是不同的,同时朋友圈列表存在大量的访问,使用数据库存储时每次都需要根据用户查询出他可见的所有动态,查询复杂度高,效率低。采用 Redis 将每个人可见的动态提前组装好,可以直接返回给用户,同时我的动态列表可以按年份分 key 存储,防止单个 key 数据量过大

  1. 朋友圈业务服务器,不需要再进行拆分,直接使用集群部署,用 Nginx 做负载均衡即可

  2. 使用异地多活,多机房部署

原因:微信用户量达到 10 亿以上,而且用户分散在全国各地,所以采用异地多活

用户头像

关注

还未添加个人签名 2018.08.10 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营 第 4 期 模块二作业