读扩展组合是什么
读多写少的系统按层次叠加读能力:进程内本地缓存最快但一致性最弱,分布式缓存共享命中、容量更大,只读副本承接复杂查询与报表,搜索索引与物化视图处理多条件检索与预聚合。每层解决不同形态的读问题,新鲜度、延迟与运维成本各不相同。选择顺序应当由查询特征决定,而不是全都加上:低命中率的缓存层只会增加复杂度与不一致风险。
基本信息
| 本地缓存 | 纳秒级读取,进程内,适合极高频小对象;多实例间可能不一致 |
|---|---|
| 分布式缓存 | 亚毫秒级,共享命中,容量与命中率可度量,需治理热点与穿透 |
| 只读副本 | 毫秒级,可跑复杂查询;受复制延迟影响 |
| 搜索索引 | 毫秒级,支持多条件与全文检索;需维护索引同步管道 |
| 物化视图 | 预聚合结果,查询最快;需重建与对账机制 |
典型使用场景
- 配置与字典数据:数据量小、读取极频繁,用本地缓存加版本号刷新
- 会话与登录态:分布式缓存承载,支持多实例共享与过期控制
- 商品详情与列表:缓存加只读副本组合,缓存挡住大部分读流量
- 复杂报表:独立只读副本或列式仓库执行,与在线链路隔离
- 多条件检索:搜索索引承接筛选与排序,源数据留在主库
- 跨库聚合:用物化视图预计算,避免每次查询多库关联
分层选择
| 层次 | 延迟与新鲜度 | 适用查询 | 主要成本 |
|---|---|---|---|
| 本地缓存 | 纳秒级,秒级陈旧 | 热点配置、极高频小对象 | 多实例一致性、内存占用 |
| 分布式缓存 | 亚毫秒级,可控陈旧 | 会话、商品详情 | 热点与穿透治理、网络往返 |
| 只读副本 | 毫秒级,复制延迟 | 复杂查询、报表 | 复制延迟、额外实例成本 |
| 搜索索引 | 毫秒级,秒级延迟 | 全文与多条件检索 | 索引同步管道与重建成本 |
| 物化视图 | 毫秒级,按刷新周期陈旧 | 统计与预聚合 | 重建耗时与一致性校验 |
分层校验与观测
分层校验与观测
# 1 先测基线:慢查询日志与执行计划,确认是查询本身慢还是并发高
# 2 命中率优先:计算 命中 / (命中 + 回源),低于预期先优化键与粒度
# 3 逐层加入:本地缓存 → 分布式缓存 → 只读副本,每加一层验证收益
# 4 观测三项:缓存命中率、源库读 QPS、复制延迟
# 5 回滚开关:每层都能单独关闭,避免缓存故障时无退路读扩展的收益主要由缓存命中率决定:命中率低时继续加层只会同时增加复杂度与不一致风险,应先优化查询与数据模型。
报表与导出类查询要隔离到专用副本:它们扫描量大、耗时长,跑在承载在线流量的副本上会连带拖慢用户请求。