尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

system-design-notes 第11章:如何设计可扩展的新闻流(News Feed)系统?完整指南

system-design-notes 第11章:如何设计可扩展的新闻流(News Feed)系统?完整指南 system-design-notes 第11章如何设计可扩展的新闻流News Feed系统完整指南【免费下载链接】system-design-notesNotes of the book System Desgin Interview - An Insiders Guide项目地址: https://gitcode.com/GitHub_Trending/sy/system-design-notes想要搞懂News Feed 系统新闻流/信息流系统的设计吗本文基于 system-design-notes 项目第 11 章带你从零开始理解 Facebook 动态、Instagram 主页这类新闻流系统设计的完整思路需求分析、高可用架构、Fanout 扇出机制、多层缓存策略与水平扩展优化。无论你是准备系统设计面试还是想搭建自己的 Feed 服务这份新手向指南都能帮你快速建立全局观 第一章要点速览本章原文位于 11. News Feed System/Readme.md核心内容可以概括为四个问题如何定义一个新闻流系统的需求与规模发布流程与Feed 构建流程两条主链路如何运转海量好友关系下Fanout扇出服务如何高效分发如何用多级缓存支撑高并发的信息流读取![新闻流系统发布流程总体架构图](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/11. News Feed System/images/feed-publishing-deep-dive.png?utm_sourcegitcode_repo_files) 如何定义需求与规模先估算再设计设计任何分布式系统之前第一步永远是明确需求。本书给出了一个典型的新闻流系统画像维度关键指标平台同时支持 Web 与移动端功能用户可发布帖子、查看好友动态排序按时间倒序最近内容优先好友规模单用户最多5,000 个好友用户规模1000 万日活DAU内容类型文本、图片、视频两个 API 接口构成了系统骨架POST /v1/me/feed发布一条帖子参数content、auth_tokenGET /v1/me/feed拉取自己的新闻流参数auth_token 新手提示规模数字10M DAU、5K 好友不是拍脑袋的数字它们直接决定了后续的分片Sharding、缓存容量与消息队列吞吐设计。️ 高可用架构两条核心主链路整个新闻流系统设计围绕两条链路展开Feed 发布链路用户发帖 → 负载均衡器 → Web 服务器 → 并行触发Post Service存库 缓存、Fanout Service推送到好友 Feed、Notification Service发通知News Feed 构建链路用户请求 → 负载均衡器 → Web 服务器 →News Feed Service从缓存读取帖子 ID再补齐完整帖子内容几个关键设计点Web 服务器无状态只做认证与限流可随时水平扩容Post Service 双写先写 Post Cache 再落 Post DB用缓存扛读流量负载均衡器 DNS流量入口天然具备冗余任何单点故障都不会拖垮系统。 深入拆解Fanout 服务如何把帖子扇出给好友这是本章最精华的部分详见 Readme.md 第 79-98 行。当用户发出一条帖子时Fanout 服务按 5 步把帖子推送给每个好友的 Feed获取好友 ID从图数据库Graph DB读取好友列表过滤好友从用户缓存读取设置剔除被屏蔽、被限制分享的好友投递消息队列把「好友列表 新帖子 ID」写入消息队列削峰解耦Fanout Workers 消费多个 Worker 并发处理队列消息写入 News Feed Cache把post_id, user_id追加到好友的 Feed 缓存且设置条数上限只保留最新内容控制缓存内存占用。![Fanout 扇出服务与消息队列工作原理](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/11. News Feed System/images/fanout-service.png?utm_sourcegitcode_repo_files)那为什么选写时扇出Fanout on Write书中对比了三种策略Fanout on Write写时推送更新实时、读取极快但好友多的用户写入成本高Fanout on Read读时拉取对不活跃用户高效但每次打开 Feed 都要聚合读取慢混合策略普通用户用推模式名人等高连接用户用拉模式 ✅ 用消息队列削峰是 Feed 系统的通用做法——发帖高峰比如深夜时 Worker 可以慢慢追赶保证主链路不被拖慢。 缓存架构5 层缓存支撑高并发读取读取侧的性能几乎全靠缓存。书中把缓存体系划分为5 层详见 Readme.md 第 102-110 行缓存层存放内容News Feed Cache每个用户的帖子 ID 列表快速取流Content Cache帖子详情热门帖子进 hot cacheSocial Graph Cache关注 / 粉丝关系数据Action Cache点赞、回复、转发等用户行为Counter Cache点赞数、回复数、粉丝数等计数器![新闻流系统五级缓存架构设计](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/11. News Feed System/images/cache-architecture.png?utm_sourcegitcode_repo_files)✨ 这种分层思路是可扩展架构的经典范例ID 列表、内容、关系、行为、计数各管一段互不干扰也方便独立扩容与失效管理。 可扩展性与可靠性优化清单要让新闻流系统从百万级走到千万级用户书中总结了四类优化手段数据库扩展水平扩展 按用户 ID 分片Sharding高流量查询走只读副本无状态 Web 层Web 服务器不保存会话状态加机器即扩容一致性哈希 消息队列哈希环均匀分发请求、降低扩容迁移成本队列解耦组件、缓冲流量洪峰监控指标重点盯QPS、延迟、缓存命中率三项核心指标命中率下滑时及时调整缓存策略。![水平扩展新闻流系统 Web 层横向扩容示意](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/01. Scaling/images/horizontal-scaling.png?utm_sourcegitcode_repo_files)延伸阅读本章的水平扩展、负载均衡思路可与项目 01. Scaling/Readme.md 中从单服务器扩展到百万用户的完整章节配合阅读理解更顺畅。✅ 本章小结新闻流系统设计的 5 个核心结论先估算再设计10M DAU、5K 好友这些数字决定了分片与缓存规模读多写少 → 推模式为主写时扇出让用户打开 Feed 秒开消息队列是解耦利器Fanout 通过队列削峰Worker 可独立扩缩容分层缓存分层治理Feed ID、内容、社交图、行为、计数器 5 层各司其职可靠性靠组合拳无状态 Web 层 数据库分片 一致性哈希 全链路监控。学完本章你已经掌握了设计可扩展新闻流系统的完整方法论——无论是应对系统设计面试还是落地真实的 Feed 业务这套估算 → 主链路 → 扇出 → 缓存 → 扩展的框架都可以直接复用 【免费下载链接】system-design-notesNotes of the book System Desgin Interview - An Insiders Guide项目地址: https://gitcode.com/GitHub_Trending/sy/system-design-notes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表