儲存/計算分解
依據資料平面與控制平面分解的原則,Milvus 包含四個層級,在可擴充性及災難復原方面相互獨立。
存取層
存取層由一組無狀態代理所組成,是系統的前端層,也是使用者的終點。它驗證用戶端的請求,並減少返回的結果:
- 代理本身是無狀態的。它使用負載平衡元件(如 Nginx、Kubernetes Ingress、NodePort 和 LVS)提供統一的服務位址。
- 由於 Milvus 採用大規模平行處理 (MPP) 架構,因此 Proxy 會先彙集並後加工中間結果,再將最終結果傳回給用戶端。
協調器服務
協調器服務會指派任務給工作節點,並扮演系統大腦的角色。它負責的任務包括群集拓樸管理、負載平衡、時間戳記產生、資料宣告和資料管理。
有三種協調器類型:根協調器 (root coordinator)、資料協調器 (data coordinator) 和查詢協調器 (query coordinator)。
根協調器 (root coordinator)
根協調器處理資料定義語言 (DDL) 和資料控制語言 (DCL) 請求,例如建立或刪除集合、分割或索引,以及管理 TSO(時戳 Oracle)和時間記錄發行。
查詢協調員 (query coordinator)
查詢協調員管理查詢節點的拓樸和負載平衡,以及從成長中的區段到封閉區段的交接。
資料協調器 (資料協調器)
資料協調器管理資料節點和索引節點的拓樸結構、維護元資料、觸發刷新、壓縮和索引建立以及其他背景資料作業。
工作節點
手臂和腿。工作節點是遵循協調器服務指示的啞巴執行器,並執行來自代理的資料處理語言 (DML) 指令。由於儲存與計算的分離,工作節點是無狀態的,當部署在 Kubernetes 上時,可促進系統擴充與災難復原。Worker 節點有三種類型:
查詢節點
查詢節點擷取增量日誌資料,並透過訂閱日誌經紀人將其轉換為成長中的區段,從物件儲存載入歷史資料,並執行向量與標量資料之間的混合搜尋。
資料節點
資料節點透過訂閱日誌中介擷取增量日誌資料、處理突變請求、將日誌資料打包成日誌快照並儲存在物件儲存空間。
索引節點
索引節點建立索引。 索引節點不需要駐留記憶體,可以使用無伺服器框架實作。
儲存空間
儲存是系統的骨骼,負責資料的持久化。它包括元儲存、日誌中介和物件儲存。
元儲存
元存儲會儲存元資料的快照,例如集合模式和訊息消耗檢查點。儲存元資料需要極高的可用性、強大的一致性和交易支援,因此 Milvus 選擇 etcd 作為元儲存。Milvus 也使用 etcd 進行服務註冊和健康檢查。
物件儲存
物件儲存存放日誌的快照檔案、標量與向量資料的索引檔案,以及中間查詢結果。Milvus 使用 MinIO 作為物件儲存,並可隨時部署在 AWS S3 和 Azure Blob 這兩種全球最流行、最具成本效益的儲存服務上。然而,物件儲存有很高的存取延遲,並且會依據查詢次數收費。為了改善效能並降低成本,Milvus 計劃在記憶體或 SSD 為基礎的快取記憶體池上實施冷熱資料分離。
日誌中介
日誌經紀人是一個支援播放的 pub-sub 系統。它負責串流資料的持久化和事件通知。當工作節點從系統故障中復原時,它也會確保增量資料的完整性。Milvus 集群使用 Pulsar 作為日誌代理;Milvus 單機版使用 RocksDB 作為日誌代理。此外,日誌經紀人也可以隨時以 Kafka 等串流資料儲存平台取代。
Milvus 是以 log broker 為核心,並遵循「log as data」的原則,因此 Milvus 不會維護實體表,但會透過 logging persistence 與快照 log 來保證資料的可靠性。
日誌機制
日誌代理是 Milvus 的骨幹。由於其天生的 pub-sub 機制,它負責資料的持久性和讀寫分解。上圖顯示了該機制的簡化描述,系統分為兩個角色,日誌經紀人(負責維護日誌順序)和日誌訂閱者。前者記錄所有改變收集狀態的作業;後者訂閱日誌序列以更新本機資料,並以唯讀副本的形式提供服務。pub-sub 機制也為系統在變更資料擷取 (CDC) 和全球分散部署方面的擴充能力預留了空間。
下一步
- 請閱讀「主要元件」以瞭解更多有關 Milvus 架構的詳細資訊。