土法炼钢兴趣小组的算法知识备份

【向量检索引擎】副本、负载与故障恢复:内存副本与 WAL 迁移

文章导航

分类入口
databasestorage
标签入口
#milvus#replica#failover#query-node#streaming-node#handoff#high-availability#vector-engine

目录

前几篇默认「一段在某处加载一次」。生产读放大与可用性靠 内存副本、写侧靠 WAL 可迁移、段分布靠 Coordinator handoff。本文合并这三条恢复与扩缩路径。

本文是「向量检索引擎」系列第 14 篇(共 18 篇)。→ 系列目录

版本锚定:Milvus 2.6.x In-Memory ReplicaStreaming ServiceData ProcessingArchitecture


一、In-Memory Replica:同一 Sealed 多份内存象

In-Memory Replica:允许同一 segment 加载到 多个 Query Node 的工作内存,以提升性能与可用性。

收益 官方表述
性能 用额外 CPU/内存换读吞吐;适合数据集相对不大、想堆硬件提 QPS 的场景
可用性 Query Node 故障或繁忙时,请求可转到仍持有该段副本的空闲节点,不必先重新加载

1.1 关键概念(官方)

概念 含义
Replica group 多个负责历史数据与副本的节点组成的组
Shard replica 同一 shard 上的 streaming replica + historical replica;组内 shard replica 数由 Collection shard 数决定
Streaming replica 同一 DML channel 上的 growing 段集合;文档称技术上由副本内单一节点服务
Historical replica 同一 channel 的 sealed 段集合;可分布在组内多个 Query Node
Shard leader 服务该 shard streaming replica 的节点

1.2 与 2.6 Streaming 架构的对照阅读

2.6 Architecture / Data ProcessingGrowing 放在 Streaming Node,Sealed 放在 Query NodeIn-Memory Replica 文档仍大量使用「Query Node 服务 growing」的表述——属于组件演进中的术语滞后。

本系列采用如下对齐(不伪造未文档化的内部表结构):

读源码或监控时同时搜 replicadelegator,避免只认旧名词。


二、Search 路径上的缓存与 Failover

In-Memory Replica · Search

  1. Proxy 缓存 segment→Query Node 映射,并周期性更新;请求到来时尽量均匀分配 sealed 段到各节点。
  2. Growing 侧维护 channel→节点缓存并发送请求。
  3. Failover:缓存可能过期;段已迁移则 Proxy 收到错误,更新缓存并改派。若更新后仍找不到段,可能因 compaction 已消除该段 而忽略。
  4. 持有 DML channel 的节点可在响应中带回 可靠段列表,供 Proxy 校对缓存。
  5. Enhancement:节点负载不均时,Proxy 可把其它节点上的活跃段请求派给同样持有该段、且更空闲的节点,缓解长尾。

这与第 4 篇「routing cache,缺则问 Coordinator」、第 9 篇多级 reduce 同一家族:正确性依赖 视图最终追上,短暂不一致靠重试与缓存刷新。


三、WAL 迁移与 Wait for Ready

Streaming Service:存算分离使 WAL 可从一 Streaming Node 迁到另一节点。迁移窗口:

写路径可用性的关键不是「Query Node 副本数」,而是 WAL 单所有者 + 快速恢复(第 5 篇 fencing)。副本再多也救不了「WAL 未就绪」的写入。


四、Handoff 与负载均衡

Data Processing:flush 或 compaction 后,Coordinator handoff,在 Query Node 间分配 Sealed,平衡内存、CPU、segment 数,释放冗余。

故障与扩缩时:

事件 典型动作
Query Node 宕机 有内存副本则可改派;否则需重新从对象存储加载(延迟尖刺,第 6、7 篇)
新节点加入 handoff / balance 迁入段
compaction 旧段消失,Proxy 缓存必须能忽略(见上)

五、代价:副本不是免费 QPS

代价 说明
内存 同段多份向量/索引驻留
对象 GET 多节点重复加载放大 API 与流量(第 6 篇)
删除广播 更多历史副本需要收到 Delete(第 13 篇)
协调复杂度 缓存失效、错派、长尾调度

小数据集 + 多硬件堆 QPS 是官方点名的甜区;十亿级全量多副本可能先被内存与对象费用打死。


六、学术谱系、工程间隙、开放问题

6.1 谱系

内存多副本 ≈ 只读副本组;与共识日志多副本不同——Milvus 写耐久在 WAL,读副本服务查询扩展。

6.2 工程间隙

6.3 开放问题

  1. 副本因子随 QPS 自动伸缩的策略?
  2. 跨可用区放置时,延迟与删除广播的 SLA?
  3. 与 Kubernetes 滚动升级的配合:先加副本再驱逐?

七、小结

读扩缩靠 Sealed 内存多副本 + Proxy 缓存改派;写可用靠 WAL 迁移与 Wait for Ready;段分布靠 handoff。下一批进入对照与收束:第 15–18 篇(Qdrant、Lance、排障、选型)。


参考资料

  1. Milvus Documentation v2.6.x, In-Memory Replica
  2. Milvus Documentation v2.6.x, Streaming Service(多 Delegator、WAL 迁移、Wait for Ready)。
  3. Milvus Documentation v2.6.x, Data Processing(handoff)、Architecture Overview
  4. 第 4、5、6、9、10 篇系列 index

返回 系列目录 | 上一篇:Delete · Upsert · TTL | 下一篇:Qdrant 对照

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-07-12 · database / storage

【向量检索引擎】Data Node:compaction 与 index build

说明 Milvus 2.6.x 中 Data Node 作为离线 Worker 如何承接 Coordinator 下发的建索引与 compaction,输入输出如何进出对象存储,以及索引堆积与 handoff 如何影响查询新鲜度与资源争用。


By .