设计朋友圈(WeChat Moments)或微博(Weibo/Twitter)这类信息流(News Feed)系统,核心难点在于海量数据的读写扩散问题。 一个用户发布一条内容,可能需要分发给几百个好友(朋友圈),也可能需要分发给几千万粉丝(微博大V)。 设计时主要围绕两种核心模式:推模式(Push)和拉模式(Pull),以及工业界常用的混合模式(Hybrid)。 --- 1. 基本概念定义 在深入讨论之前,我们需要定义两个数据存储概念: Outbox(发件箱):存储用户自己发布的内容列表。 Inbox(收件箱):存储用户应该看到的内容列表(即聚合后的信息流)。 --- 2. 推模式 (Push / Fan-out-on-write) 机制: 当用户发布一条消息时,系统立即将这条消息的 ID “推”送写入到所有粉丝(Followers)的 Inbox 中。 写流程: Alice 发布微博 -> 系统查找 Alice 的所有粉丝 -> 遍历粉丝列表 -> 将微博 ID 插入每个粉丝的 Inbox 列表。 读流程: Bob 刷新时间线 -> 直接读取自己的 Inbox 列表 -> 根据...