ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

system-design-notes:缓存的5大作用,为什么每个百万级系统都离不开Cache?

system-design-notes:缓存的5大作用,为什么每个百万级系统都离不开Cache? system-design-notes缓存的5大作用为什么每个百万级系统都离不开Cache【免费下载链接】system-design-notesNotes of the book System Desgin Interview - An Insiders Guide项目地址: https://gitcode.com/GitHub_Trending/sy/system-design-notes在 system-design-notes《System Design Interview》笔记中缓存Cache是贯穿所有系统设计章节的核心组件从百万级用户系统到 KV 存储缓存把热点数据放进内存用极低的延迟换取数据库的喘息空间。本文带你一次看懂缓存的5 大作用以及它在读路径、CDN、News Feed 等真实场景中的落地方式。一、缓存是什么为什么百万级系统离不开它单服务器架构下Web 应用、数据库和缓存最初运行在同一台机器上。当用户量增长所有请求直接打到数据库磁盘 I/O 就成为瓶颈。缓存的本质一层比数据库快得多的临时内存数据层。高频读、低频写的数据被提前放到内存中请求命中缓存时直接返回延迟从毫秒级降到微秒级。![缓存读路径请求先查缓存再查数据库](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/06. Key-Value Store/images/read-path.png?utm_sourcegitcode_repo_files)作为对照没有缓存时每次读都要穿透到后端存储![无缓存读路径每次请求都直接访问数据库](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/06. Key-Value Store/images/read-path-without-cache.png?utm_sourcegitcode_repo_files)缓存层的完整设计考量用例、过期策略、一致性、故障缓解、淘汰策略见 01. Scaling/Readme.md。二、作用1加速读操作降低端到端延迟 缓存最直接的价值是读加速。以 Key-Value Store 为例读路径为先查内存缓存命中即返回未命中再回源 SSTable 磁盘文件。这就是典型的 Cache-Aside 模式。核心经验数据读多写少时缓存收益最大。同样的思想用在搜索引擎自动补全中在 Trie 树的每个节点上缓存 top-k 高频候选词避免遍历整棵树响应时间大幅下降相关设计见 13. Search Autocomplete/Readme.md。![Trie 节点缓存 top-k 建议词加速搜索自动补全](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/13. Search Autocomplete/images/cached-trie.png?utm_sourcegitcode_repo_files)三、作用2卸载数据库负载保护后端存储 ️百万级 QPS 下数据库是最贵也最脆弱的组件。缓存挡在最前面把大量重复读消化掉数据库只处理缓存未命中的少量请求。这正是 News Feed 系统的做法![News Feed 系统的多层缓存架构](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/11. News Feed System/images/cache-architecture.png?utm_sourcegitcode_repo_files)缓存被拆成5 层新闻 Feed 缓存存 post ID、内容缓存热点帖子、社交图谱缓存好友关系、行为缓存点赞/回复、计数器缓存粉丝数等。各层职责清晰数据库几乎只承担冷数据读写详见 11. News Feed System/Readme.md。四、作用3边缘缓存与 CDN 分发让内容离用户更近 缓存的第三个大作用发生在网络边缘。CDN 把静态资源图片、CSS、JS缓存到地理上分布的节点用户请求最近的 CDN 服务器命中即返回未命中才回源并回填缓存。![CDN 边缘缓存分发静态资源的架构](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/01. Scaling/images/cdn.png?utm_sourcegitcode_repo_files)CDN 的四个关键考量成本、过期时间、回源降级、文件失效见 01. Scaling/Readme.md。监控场景同样受益在时序数据库前面加一层查询缓存热点指标的查询直接命中缓存层避免反复压垮存储见 20. Metrics Monitoring and Alerting System/README.md。五、作用4承载热点业务数据支撑高并发写前校验 ⚡缓存不只是读加速它还能承载业务热数据参与核心流程。酒店预订系统中库存数据读多写少且一致性要求可容忍短暂不一致因此放入缓存加速下单前的库存校验并配合数据库约束兜底防超卖![酒店库存缓存读多写少的热数据放入缓存加速下单校验](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/22. Hotel Reservation System/images/inventory-cache.png?utm_sourcegitcode_repo_files)相关取舍讨论缓存与数据库短暂不一致对用户体验的影响见 22. Hotel Reservation System/README.md。六、作用5故障兜底提升系统可用性 单个缓存服务器是潜在的单点故障因此生产环境会部署跨数据中心的多个缓存节点。更重要的是当数据库抖动甚至不可用时缓存中仍保留的热点数据可以让系统带伤运行核心读接口继续可用只是数据略有延迟。写路径上同样需要缓存协同先写数据库再更新/失效缓存两者不在同一事务内就会出现窗口期不一致这也是所有缓存方案必须回答的问题![写路径先写存储再更新缓存窗口期可能不一致](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/06. Key-Value Store/images/write-path.png?utm_sourcegitcode_repo_files)七、缓存落地清单过期、一致性与淘汰策略 ✅根据 01. Scaling/Readme.md 的总结上缓存前核对这 5 点考量点要点适用场景读多写少、重复读多过期策略TTL无过期策略则数据永久驻留内存一致性数据源与缓存非同一事务需容忍短暂不一致故障缓解多缓存节点跨机房部署消除单点淘汰策略内存满时淘汰LRU 最常用八、小结一张图记住缓存的5大作用读加速—— 热点数据进内存延迟数量级下降卸载数据库—— 挡掉重复读保护最脆弱的后端CDN 边缘分发—— 静态内容离用户更近承载业务热数据—— 参与核心流程如库存校验故障兜底—— 数据库抖动时系统仍可服务缓存不是可选优化而是百万级系统设计的第一道防线。配合本仓库的 01. Scaling/Readme.md 与 06. Key-Value Store/Readme.md可以从零到一搭出完整的缓存分层架构。【免费下载链接】system-design-notesNotes of the book System Desgin Interview - An Insiders Guide项目地址: https://gitcode.com/GitHub_Trending/sy/system-design-notes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表