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

一、朋友圈复杂度总体分析
朋友圈质量复杂度高,业务复杂度普通

朋友圈复杂度总体分析
质量复杂度分析:
节日、特殊事件高并发
动态扩容、快速访问
评论的跨机房(跨区)时序一致性
二、朋友圈高性能业务指标分析

朋友圈业务参考数据
高性能:
发消息:0.07 万 TPS(高峰 2 小时),赞/评论:0.34 万 TPS(高峰 8 小时)
【节日】:发表 0.14 万 TPS,评论与点赞 0.7 万 TPS
【突发事件】:发表 0.35 万 TPS,评论与点赞 1.5 万 TPS
高可用:
服务区内高可用,北方、南方、海外不同区域;多区域高可用
不同运营商网络之间高可用
可扩展
重大节日、突发事件与活动动态扩容
新业务上线与老业务升级扩容,例如朋友圈支持 20 张图片
参考数据:
三、朋友圈高性能复杂度应对思路

朋友圈高性能复杂度应对思路
3.1 发消息

朋友圈高性能方案-发消息

发消息架构图
3.2 评论

朋友圈高性能方案-评论

朋友圈评论架构图
3.3 动态

朋友圈高性能方案-动态

朋友圈动态架构图
四、朋友圈业务高性能整体架构

朋友圈业务高性能方案-整体架构

朋友圈整体架构图
五、设计理由

微信架构
按照架构设计简单原则:利用微信现有基础设施,如上图
保持现有分层架构,在逻辑层、存储代理层增加朋友圈业务
根据朋友圈业务的逻辑,基于分布式 Key/Value 存储,设计对应的存储结构
在设计动态时,采用拉取(Pull)模式。即在发布消息时,为各用户添加时间线记录。避免推送(Push)模式的计算复杂性,后者在拉取消息时进行计算

朋友圈存储结构示例
结合朋友圈的业务特点,将图片与视频资源采用 CDN
按照架构设计演化原则,在设计中考虑数据中心的扩展
高峰期的数据扩展:Key/Value 适合做水平扩展
基于用户或消息 Key 进行 Sharding
按照架构设计的合适原则,在设计评论功能时需要考虑评论展示的时序问题
采用因果一致性:即先看到因再看到果
本地消息 ID 保持递增,多个数据中心同步评论消息时根据因果进行排序计算
版权声明: 本文为 InfoQ 作者【唐尤华】的原创文章。
原文链接:【http://xie.infoq.cn/article/c8f000ade2cfb9aa07c24aee4】。文章转载请联系作者。
评论