架构实战营第 10 期 - 模块二作业:微信朋友圈高性能复杂度分析
微信朋友圈功能在 质量四象限中,个人认为属于 质量复杂度低,业务复杂度低的象限中。
原因是:
业务复杂度上,朋友圈的功能大致分为:查询,发布/删除,评论/点赞,草稿箱。很常见的增删查三个功能。并没有复杂的业务逻辑。
质量复杂度上,虽然微信的质量复杂度很高,但是单独分析朋友圈功能的话,它所提供的非实时的社交需求,则会让他并没有高质量的要求。用户可以容忍自己的动态偶尔发布失败,评论失败等情况。并不会影响特别到用户需求。在这个场景下不会有很急迫的事情。
如何设计出高性能的微信朋友圈?
从高性能复杂度模型来看,微信朋友圈是依托在微信架构之上的,所以我们只需要考虑集群模式下的高性能。
集群分为:计算高性能,存储高性能,然后均有任务分配与任务分解
我们可以发现朋友圈的功能都类似 增删查,所以我们并不对架构进行功能分解。
查询功能
用户查看自己好友们的朋友圈,也就是两个 filter 条件,好友们的 IDs 以及时间区间。我们提高高性能的方法便是,将好友朋友圈以好友 ID 进行 hash 进行分库分表存放,从而提高查询性能,同时再对近 3 天的朋友圈进行热数据存放,将近期数据存放在缓存中。同时对朋友圈内容分为结构化内容与非结构化内容,飞结构化内容存在对象存储中,增加可承载的访问频率。 朋友圈的内容是按时间线进行排序的,且内容只能删除不能更改,因此朋友圈内容每个好友按时间线倒序存储,时序性存放,增加查询效率。
发布/删除功能、评论/点赞功能
这几个功能,与查询功能近乎一致,也是时序性数据。同样利用 hash 进行分库分表存放。
总体架构设计
由朋友圈地域特点明显,因此我们直接沿用微信的异地多活,多机房,根据位置自动选择最近的机房。
评论