副本(replica)

内存复制

本主题介绍Milvus中的内存复制(复制)机制,该机制使得在工作内存中进行多个段复制以提高性能和可用性。 概述

Replica_Availiability (opens in a new tab)

内存副本提高了系统的可用性。

使用内存副本,Milvus可以在多个查询节点上加载相同的段。如果一个查询节点在另一个查询到达时已经失败或忙于当前的搜索请求,则系统可以将新请求发送到具有同一段副本的空闲查询节点。

性能

内存副本允许您利用额外的CPU和内存资源。如果您有一个相对较小的数据集但想要通过额外的硬件资源增加读取吞吐量,则非常有用。整体QPS(每秒查询数)和吞吐量可以得到显着改进。

可用性

内存副本有助于Milvus在查询节点崩溃时更快地恢复。当查询节点失败时,段不必重新加载到另一个查询节点上。相反,搜索请求可以立即重新发送到新的查询节点,而无需重新加载数据。通过同时维护多个段副本,系统在故障转移面前更具有弹性。

关键概念

内存副本的组织方式为副本组。每个副本组包含多个分片(shard)副本。每个分片副本都有一个流式副本和一个历史副本,对应于分片(即DML通道)中正在增长和已封存的段(segment)。

内存副本的工作原理 (opens in a new tab)

副本组

副本组由多个负责处理历史数据和副本的查询节点组成。

分片副本

分片副本由流式副本和历史副本组成,两者均属于同一个分片 (opens in a new tab)。副本组中分片副本的数量由指定集合中的分片数量确定。

流式复制

流式复制包含来自同一DML通道的所有增长分段。从技术上讲,流式复制应该由一个副本中的一个查询节点提供服务。

历史副本

历史副本包含同一DML通道的所有密封段。一个历史副本的密封段可以分布在同一个副本组内的多个查询节点上。

分片领导者

分片领导者是在分片副本中为流式副本提供查询节点的节点。

设计细节

平衡

需要加载的新段将分配给多个不同的查询节点。一旦至少有一个副本成功加载,就可以处理搜索请求。

搜索

Cache

代理服务器维护一个映射段到查询节点的缓存,并定期更新它。当代理服务器收到请求时,Milvus从缓存中获取所有需要搜索的封装段,并尝试将它们均匀地分配给查询节点。

对于增长中的段,代理服务器还维护一个通道到查询节点的缓存,并将请求发送到相应的查询节点。

故障转移

代理服务器上的缓存并不总是最新的。当请求到来时,某些段或通道可能已被移动到其他查询节点。在这种情况下,代理服务器将收到错误响应,更新缓存并尝试将其分配给另一个查询节点。

如果代理在更新缓存后仍然找不到某个段,该段将被忽略。这可能发生在段已经被压缩的情况下。

如果缓存不准确,代理可能会错过一些段。具有DML通道(增长段)的查询节点会返回搜索响应以及可靠段列表,代理可以将其与缓存进行比较并更新。

增强

代理无法将搜索请求完全平均地分配到查询节点上,并且查询节点可能具有不同的资源来处理搜索请求。为避免资源的长尾分布,代理将在其他具有这些段的空闲查询节点上分配活动段给空闲查询节点。

接下来是什么