写点什么

作业:架构实战营模块 2

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

    阅读完需:约 3 分钟

题目

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


作业要求

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

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

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

  4. 3~5 页 PPT 即可,涵盖复杂度分析、架构设计、设计理由。

提示

1. 分析过程可以参考模块 2 第 5 课的实战案例,但是不需要将分析过程一一列举出来。

2. 如果某个地方被卡主了,请及时联系助教或者老师讨论。

作业

复杂度总体分析

微信朋友圈业务场景主要分为:发朋友圈、刷朋友圈、点赞、评论、权限控制等。

总体来看业务复杂度不高,质量复杂度主要在于存储高性能。


性能业务指标

每天有 7.8 亿用户进入朋友圈,每天有 1.2 亿用户发表朋友圈,其中照片 6.7 亿,短视频 1 亿条。

性能复杂度分析

本文内容中未考虑,发朋友圈时,单独设计权限的业务场景。该场景需要额外增加群组表,用于过滤群组用户。

性能复杂度应对思路

发/刷朋友圈



单机计算高性能:需要在本地对朋友圈内容进行过滤。可以对当天的数据增加本地缓存。

存储模型:

  1. 朋友圈信息表

  2. 并发不高 -- 每个人的通讯录好友是有限的

  3. 查询条件及排序方式十分单一 -- 只有 uid+分页条件+按时间倒序

  4. 写少读多,没有修改功能,无需支持事物 -- 因此不必使用关系型数据库

  5. 因此采用 mongoDB 就可以满足需求,并且很容易使用 uid 进行分片,优化性能优化。

  6. 多媒体内容,由 OSS+CDN 提供访问能力。

  7. 数据量大

  8. 要求带宽高

  9. 因此和业务数据拆分,使用 OSS 进行存储,且可以加 CDN 来进行优化。

  10. 朋友圈权限需要访问用户设置表进行查询。

评论点赞

朋友圈评论点赞表:查询条件异常单一 -- 只有通过消息 id 进行查询

因此在朋友圈信息表中的子文档进行存储即可。

整体架构


架构图


设计理由

  1. 采用负载均衡的方式,将流量转发给不同的服务器实例进行处理,提升性能。

  2. 朋友圈消息因为业务场景单一,数据读写模式单一,因此采用能支持排序及索引的数据库即可满足需求,并且采用 uid hash 的方式,提升读写性能。

  3. 因为没有过多的写操作,数据复制格式采用命令形式即可。

  4. 数据复制方式,采用多数同步。

  5. 状态决策,采用民主式即可。因为对一致性有一定要求。

  6. 用户设置及通讯录集群表,采用关系型数据库,并分库分表,以提升读写性能。

发布于: 11 小时前阅读数: 9
用户头像

Poplar89

关注

还未添加个人签名 2018.12.07 加入

还未添加个人简介

评论

发布
暂无评论
作业:架构实战营模块 2