記憶體內複製
本主題介紹 Milvus 的記憶體內複製(複製)機制,可在工作記憶體中實現多段複製,以提高性能和可用性。
有關如何配置記憶體內複製的資訊,請參閱查詢節點相關配置。
概觀
複製可用性
使用記憶體內複製,Milvus 可以在多個查詢節點上載入相同的資料段。如果一個查詢節點失敗或忙於處理目前的搜尋請求,當另一個查詢節點到達時,系統可以將新的請求傳送到擁有相同網段複製的閒置查詢節點。
效能
內存複製可讓您充分利用額外的 CPU 和記憶體資源。如果您的資料集相對較小,但希望利用額外的硬體資源增加讀取吞吐量,這將非常有用。整體 QPS(每秒查詢次 數)和吞吐量可大幅提升。
可用性
如果查詢節點崩潰,記憶體內複製可幫助 Milvus 更快地恢復。當一個查詢節點失敗時,資料段不需要重新載入另一個查詢節點。相反地,搜尋要求可立即重新載入新的查詢節點,而無需再次重新載入資料。由於同時維護多個網段複本,系統在面臨故障轉移時會更有彈性。
關鍵概念
記憶體複製以複製群組的方式組織。每個複製群組包含分片複製。每個 shard 複製本都有一個串流複製本和一個歷史複製本,這兩個複製本對應於 shard(即 DML 通道)中成長和封閉的區段。
記憶體內複製如何運作的說明
複製群組
複製群組由負責處理歷史資料和複製的多個查詢節點組成。
分片複製
一個分片複製本由一個串流複製本和一個歷史複製本組成,兩者都屬於同一個分片。複製群組中的分片複製品數量由指定集合中的分片數量決定。
串流複製本
串流複製包含來自相同 DML 通道的所有成長區段。技術上來說,一個串流複製應該只由一個複製中的一個查詢節點提供服務。
歷史副本
歷史副本包含來自相同 DML 通道的所有封存區段。一個歷史副本的封存區段可以分佈在同一個副本群組內的多個查詢節點上。
分片領導者
分片領導者是為分片複製中的串流複製提供服務的查詢節點。
設計細節
平衡
需要載入的新區段將分配給多個不同的查詢節點。只要成功載入至少一個副本,就可以處理搜尋要求。
搜尋
快取記憶體
代理維護一個快取記憶體,將區段對應到查詢節點,並定期更新。當代理收到請求時,Milvus 會從快取記憶體取得所有需要搜尋的封存區段,並嘗試平均分配給查詢節點。
對於成長中的網段,proxy 也會維護通道到查詢節點的快取記憶體,並將要求傳送至對應的查詢節點。
故障轉換
代理伺服器上的快取記憶體並非總是最新的。當請求傳入時,有些網段或頻道可能已移到其他查詢節點。在這種情況下,代理伺服器會收到錯誤回應,更新快取記憶體,並嘗試將其指派給其他查詢節點。
如果代理在更新快取記憶體後仍然找不到某個區段,該區段就會被忽略。如果網段已被壓縮,就可能發生這種情況。
如果快取記憶體不精確,代理可能會遺漏某些區段。具備 DML 通道 (成長中的區段) 的查詢節點會傳回搜尋回應以及可靠的區段清單,讓代理可以比較和更新快取記憶體。
增強
代理無法完全平均分配搜尋要求給查詢節點,而且查詢節點可能有不同的資源來提供搜尋要求。為了避免資源的長尾分派,proxy 會將其他查詢節點上的有效網段分派給同樣擁有這些網段的閒置查詢節點。