读扩展组合

读多写少的系统按层次扩展读能力:本地缓存→分布式缓存→只读副本→搜索索引与物化视图;每层的新鲜度与运维成本不同,按查询特征分层选择。

读扩展组合是什么

读多写少的系统按层次叠加读能力:进程内本地缓存最快但一致性最弱,分布式缓存共享命中、容量更大,只读副本承接复杂查询与报表,搜索索引与物化视图处理多条件检索与预聚合。每层解决不同形态的读问题,新鲜度、延迟与运维成本各不相同。选择顺序应当由查询特征决定,而不是全都加上:低命中率的缓存层只会增加复杂度与不一致风险。

基本信息

本地缓存纳秒级读取,进程内,适合极高频小对象;多实例间可能不一致
分布式缓存亚毫秒级,共享命中,容量与命中率可度量,需治理热点与穿透
只读副本毫秒级,可跑复杂查询;受复制延迟影响
搜索索引毫秒级,支持多条件与全文检索;需维护索引同步管道
物化视图预聚合结果,查询最快;需重建与对账机制

典型使用场景

  • 配置与字典数据:数据量小、读取极频繁,用本地缓存加版本号刷新
  • 会话与登录态:分布式缓存承载,支持多实例共享与过期控制
  • 商品详情与列表:缓存加只读副本组合,缓存挡住大部分读流量
  • 复杂报表:独立只读副本或列式仓库执行,与在线链路隔离
  • 多条件检索:搜索索引承接筛选与排序,源数据留在主库
  • 跨库聚合:用物化视图预计算,避免每次查询多库关联

分层选择

层次延迟与新鲜度适用查询主要成本
本地缓存纳秒级,秒级陈旧热点配置、极高频小对象多实例一致性、内存占用
分布式缓存亚毫秒级,可控陈旧会话、商品详情热点与穿透治理、网络往返
只读副本毫秒级,复制延迟复杂查询、报表复制延迟、额外实例成本
搜索索引毫秒级,秒级延迟全文与多条件检索索引同步管道与重建成本
物化视图毫秒级,按刷新周期陈旧统计与预聚合重建耗时与一致性校验

分层校验与观测

分层校验与观测
# 1 先测基线:慢查询日志与执行计划,确认是查询本身慢还是并发高
# 2 命中率优先:计算 命中 / (命中 + 回源),低于预期先优化键与粒度
# 3 逐层加入:本地缓存 → 分布式缓存 → 只读副本,每加一层验证收益
# 4 观测三项:缓存命中率、源库读 QPS、复制延迟
# 5 回滚开关:每层都能单独关闭,避免缓存故障时无退路
读扩展的收益主要由缓存命中率决定:命中率低时继续加层只会同时增加复杂度与不一致风险,应先优化查询与数据模型。
报表与导出类查询要隔离到专用副本:它们扫描量大、耗时长,跑在承载在线流量的副本上会连带拖慢用户请求。

易错点

  • 缓存命中率低仍继续加缓存层:复杂度上升而收益微小
  • 报表查询直接跑在线库:抢占核心资源,影响面波及全部用户
  • 本地缓存不设刷新机制:数据更新后多实例长期不一致
  • 只加副本不做读路由:读流量仍全落在主库,扩展没有实际效果
  • 缓存与源库无一致性校验:偏差累积到业务发现时才处理

数据来源与参考

  • 《数据密集型应用系统设计》(Kleppmann)第 5、6 章
  • 《高性能 MySQL(第 4 版)》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌