微信朋友圈是全球最复杂的社交信息流系统之一,因为它采用严格的仅好友可见模型(没有公开帖子),有细粒度的隐私控制,规模巨大。这道题全面考察后端架构能力:存储、信息流生成、社交图谱遍历和隐私执行。
定义核心数据模型:帖子(内容、作者、时间戳、可见性设置)、社交图谱(好友关系、屏蔽用户、可见分组)、互动(点赞、评论)。
解释信息流生成策略:写扩散(发布时扇出到好友时间线)vs. 读扩散(读取时组装信息流),以及微信可能采用的混合方案。
设计隐私执行层:可见分组、屏蔽用户过滤、"仅展示最近三天"的时间限制,在写扩散和读取过滤两个环节同时执行。
处理互动模型:点赞和评论的存储,以及微信朋友圈特有的"共同好友可见评论"规则。
后端包含四个核心服务。帖子服务将内容存储在按用户ID分片的分布式KV存储中,元数据放在关系型数据库便于查询。社交图谱服务在图数据库中维护双向好友关系,Redis缓存加速查询,支持可见分组和屏蔽名单。信息流服务采用推拉结合的混合模型:用户发帖时,向活跃好友的时间线缓存推送(写扩散),但对好友数量极多的用户或不活跃用户,信息流按需组装(读扩散)。时间线是Redis中按用户维度的有序集合,以时间戳排序。隐私服务是核心差异化——它在每条读取路径上充当过滤器。每条帖子有可见性描述:全部好友、指定分组、排除特定好友或仅自己可见。写扩散时隐私过滤决定哪些好友会收到帖子,读取时重新验证以应对关系变更。朋友圈特有的评论可见性规则——只能看到共同好友的评论——需要对社交图谱做交集查询,这部分预计算并缓存。"仅展示最近三天"功能通过时间线缓存中的TTL实现,但帖子在作者的永久存储中保留。
强调隐私模型是核心架构挑战——这是朋友圈与Twitter、Instagram等公开信息流本质不同的地方。
专门讨论共同好友评论可见性规则——这是一个独特且复杂的需求,展示对微信的深入理解。
讨论写扩散的可扩展性:如何处理好友数量上千的用户,避免写放大风暴。
仅好友可见模型创造了更安全、更私密的分享环境,鼓励更高质量的个人内容发布。这符合中国社会对隐私和关系边界的文化规范。这一设计选择是刻意为之的,也是朋友圈十余年持续活跃的核心原因。
对高扇出用户(社交达人),完整的写扩散成本太高。系统切换为拉取模型:他们的帖子集中存储,好友在读取信息流时拉取并合并。通过阈值(如500个好友)决定使用哪种模型。