写点什么

架构实战营 4 期 - 第 2 周作业

作者:周念
  • 2021 年 12 月 16 日
  • 本文字数:969 字

    阅读完需:约 3 分钟

架构实战营 4 期 - 第2周作业

作业要求

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

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

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

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


微信朋友圈业务背景

2021 年 1 月 19 日晚,在微信公开课 Pro 上,微信创始人张小龙披露微信最新数据:每天有 10.9 亿用户打开微信,3.3 亿用户进行了视频通话;有 7.8 亿用户进入朋友圈,1.2 亿用户发表朋友圈,其中照片 6.7 亿张,短视频 1 亿条;有 3.6 亿用户读公众号文章,4 亿用户使用小程序。


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

朋友圈访问还算均衡,不会有秒杀这种峰值, 不过每个人都要睡觉,我们按照 每天 16 小时来算。


读朋友圈 qps = 780000000 / (16*60*60) = 13542

写朋友圈 tps = 120000000 / (16*60*60) = 2083

小文件存储 tps = 670000000 / (16*60*60) = 11632

大文件存储 tps = 100000000 / (16*60*60) = 1736


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

微信朋友圈任务分解

首先,对微信朋友圈进行任务分解,因为业务复杂度不复杂,但是要支持亿级用户,这些模块的规模会相当复杂和庞大。

整理出用户常用的功能模块,方便后续思路的规划。

发圈架构图


发圈架构说明:

1、发圈要求高性能,采用 nginx 做任务分配,目的采用轮询/随机算法,通过负载均衡协调 feed 服务器集群,上传发圈信息和推送好友。

2、存储高性能设计,由于发圈内容有图片、视频等非文本格式,可以直接上传至 CDN。

3、采用地域范围分片,存储朋友圈动态文本、发布人、微信号、时间、可见人员等信息,到 NOSQL 数据库中,此设计方案采用的 NOSQL 集群。

看圈架构图


看圈架构说明:

1、看圈要求高性能,采用 nginx 做任务分配,目的采用轮询/随机算法,通过负载均衡协调 feed 服务器集群访问,feed 流服务器通过 Timeline(不对用户主动接收到的内容进行筛选,对所有的内容按照时间更新的顺序排列)拉取自己动态,通过实例定位到 NOSQL 集群检索用户的关注表,然后根据关注表检索新发的 feed。如果一个用户关注过多的时候,查询该用户的关注列表也是有很大数据成本。。

2、客户端找到最近的 cdn 资源,依次获取到图文与视频。


备注:

设计了二个微信朋友圈核心功能架构,评论、转发、点赞相对核心业务的重要性不是太大,而且也相对简单,就不一一设计了。

用户头像

周念

关注

还未添加个人签名 2018.07.18 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营 4 期 - 第2周作业