写点什么

模块二作业:微信朋友圈高性能复杂度分析

作者:杨波
  • 2022 年 4 月 10 日
  • 本文字数:931 字

    阅读完需:约 3 分钟

1. 作业要求

  1. 基于高性能要求,分析微信朋友圈各业务场景复杂度;

  2. 画出架构设计方案;

  3. 给出关键设计理由。

2. 分析

2.1 可查业务数据

看朋友圈:7.8 亿人/天

发朋友圈:1.2 亿人/天

2.2 核心业务场景分析

2.2.1 看朋友圈

查询功能,结果集按朋友圈发布时间排序,有文字、图片、视频,以及每条朋友圈的点赞、评论情况。

2.2.2 发朋友圈

单条朋友圈发布,内容有文字、图片(最多 9 张)、视频,简单写操作。

2.2.3 点赞/评论

简单写操作,包含点赞(取消点赞)、评论(删除评论)

2.2.4 结论

整体业务场景较为简单;

查看朋友圈对于数据加载的性能要求较高;

发朋友圈、点赞/评论仅是对单条业务数据的操作,处理流程简单,且 A 发起的操作不需要 B 立刻看到,故对于数据实效性要求不高。

2.3 业务数据分析及假设

2.3.1 峰值假设

一般情况下,峰值按平均的 3 倍计算。考虑遇到热点话题,峰值流量会更大。故整体峰值流量按 10 倍于平均流量计算。

2.3.2 查看朋友圈:假设每人每天查看朋友圈 10 次

平均 QPS:

峰值 QPS:90W

2.3.3 发朋友圈:假设每人每天发 2 条朋友圈

平均 TPS:1.2 亿 * 2 / (24 * 60 * 60) = 2800

峰值 TPS:2.8W

2.3.4 点赞/评论:假设每人每天 2 次

平均 TPS:7.8 亿 * 2 / (24 * 60 * 60) = 1.8W

峰值 TPS:18W

2.3.5 总结

3. 设计

3.1 架构图


3.2 设计思路

3.2.1 发朋友圈 &点赞/评论

  1. 访问流量巨大,业务服务需要大量服务器组成集群提供服务。可将服务拆分成发朋友圈、查看朋友圈、点赞/评论 3 个微服务。

  2. 朋友圈数据量巨大,可考虑使用 MySql 集群+分库分表的方式实现。需要主从数据同步。

  3. 朋友圈的图片、视频等非文字信息存储到对象存储服务集群中。

  4. 朋友圈的访问有较强的时间效应,大部分的访问都是近期的数据,故每次发布朋友圈/点赞/评论都将数据双写至 redis 集群中,使得 redis 集群中始终缓存近期最新的数据,加快查看朋友圈的响应速度。

  5. 点赞/评论都是针对单条朋友圈的数据操作,逻辑较为简单,且只有文字或标志位信息。可以在 MySql 集群中结构化存储,也可以存储于 redis 集群中。

3.3.2 查看朋友圈

由于手机浏览的交互方式,本身就是按朋友圈发布时间倒序排列,所以绝大部分访问都是最近时间的朋友圈数据。通过发朋友圈/点赞/评论时的双写,redis 中保存有近期最新的数据,故查看朋友圈直接读取 redis 集群中数据。


用户头像

杨波

关注

还未添加个人签名 2018.06.26 加入

还未添加个人简介

评论

发布
暂无评论
模块二作业:微信朋友圈高性能复杂度分析_「架构实战营」_杨波_InfoQ写作平台