優化資料通訊:Milvus 採用 NATS 訊息傳輸技術
在錯綜複雜的資料處理過程中,無縫溝通是將各項作業連結在一起的主線。開創先河的開放原始碼向量資料庫 Milvus,以其最新功能踏上了轉型之旅:NATS 訊息整合。在這篇全面的部落格文章中,我們將解開這個整合的複雜性,探索它的核心功能、設定過程、遷移效益,以及它與前身 RocksMQ 的優勢。
了解訊息佇列在 Milvus 中的角色
在 Milvus 的雲原生架構中,訊息佇列或 Log Broker 具有舉足輕重的地位。它是確保持久性資料流、同步、事件通知,以及系統復原時資料完整性的骨幹。傳統上,RocksMQ 是 Milvus Standalone 模式中最直接的選擇,尤其是與 Pulsar 和 Kafka 相較之下,但在大量資料和複雜的情況下,它的限制就顯而易見了。
Milvus 2.3 引入了單結點 MQ 實作 NATS,重新定義了如何管理資料流。與前代產品不同,NATS 將 Milvus 使用者從效能限制中解放出來,提供處理大量資料的無縫體驗。
什麼是 NATS?
NATS 是以 Go 實作的分散式系統連線技術。它支援多種通訊模式,例如跨系統的 Request-Reply 與 Publish-Subscribe,透過 JetStream 提供資料持久化,並透過內建的 RAFT 提供分散式功能。您可以參考NATS 官方網站來更詳細了解 NATS。
在 Milvus 2.3 Standalone 模式下,NATS、JetStream 和 PubSub 為 Milvus 提供了強大的 MQ 功能。
啟用 NATS
Milvus 2.3 提供了一個新的控制選項mq.type
,它允許使用者指定他們想要使用的 MQ 類型。要啟用 NATS,請設定mq.type=natsmq
。如果您在啟動 Milvus 實例後看到類似下面的日誌,表示您已成功啟用 NATS 作為訊息佇列。
[INFO] [dependency/factory.go:83] ["try to init mq"] [standalone=true] [mqType=natsmq]
為 Milvus 配置 NATS
NATS 自訂選項包括指定聆聽連接埠、JetStream 儲存目錄、最大有效負載大小和初始化逾時。微調這些設定可確保最佳效能與可靠性。
natsmq:
server: # server side configuration for natsmq.
port: 4222 # 4222 by default, Port for nats server listening.
storeDir: /var/lib/milvus/nats # /var/lib/milvus/nats by default, directory to use for JetStream storage of nats.
maxFileStore: 17179869184 # (B) 16GB by default, Maximum size of the 'file' storage.
maxPayload: 8388608 # (B) 8MB by default, Maximum number of bytes in a message payload.
maxPending: 67108864 # (B) 64MB by default, Maximum number of bytes buffered for a connection Applies to client connections.
initializeTimeout: 4000 # (ms) 4s by default, waiting for initialization of natsmq finished.
monitor:
trace: false # false by default, If true enable protocol trace log messages.
debug: false # false by default, If true enable debug log messages.
logTime: true # true by default, If set to false, log without timestamps.
logFile: /tmp/milvus/logs/nats.log # /tmp/milvus/logs/nats.log by default, Log file path relative to .. of milvus binary if use relative path.
logSizeLimit: 536870912 # (B) 512MB by default, Size in bytes after the log file rolls over to a new one.
retention:
maxAge: 4320 # (min) 3 days by default, Maximum age of any message in the P-channel.
maxBytes: # (B) None by default, How many bytes the single P-channel may contain. Removing oldest messages if the P-channel exceeds this size.
maxMsgs: # None by default, How many message the single P-channel may contain. Removing oldest messages if the P-channel exceeds this limit.
注意:
您必須指定
server.port
作為 NATS 伺服器的監聽。如果存在端口冲突,Milvus 将无法启动。設定server.port=-1
隨機選擇連接埠。storeDir
指定 JetStream 儲存目錄。我們建議將目錄儲存在高效能的固態硬碟 (SSD) 中,以獲得 Milvus 更佳的讀寫吞吐量。maxFileStore
設定 JetStream 儲存大小的上限。超過此上限將阻止進一步的資料寫入。maxPayload
限制個別訊息大小。您應該將其保持在 5MB 以上,以避免任何寫入拒絕。initializeTimeout
控制 NATS 服務器啟動超時。monitor
配置 NATS 的獨立日誌。retention
控制 NATS 消息的保留機制。
更多資訊請參考NATS 官方文件。
從 RocksMQ 遷移到 NATS
从RocksMQ迁移到NATS是一个无缝的过程,涉及到停止写操作、刷新数据、修改配置以及通过Milvus日志验证迁移等步骤。
在啟動遷移之前,請先在 Milvus 中停止所有寫入作業。
在 Milvus 中執行
FlushALL
作業,並等待其完成。這一步驟可確保所有待處理資料都已刷新,且系統已準備好關機。修改 Milvus 配置文件,在
natsmq
部分下設定mq.type=natsmq
並調整相關選項。啟動 Milvus 2.3。
備份並清理儲存在
rocksmq.path
目錄中的原始資料。(選擇性)
NATS vs. RocksMQ: 性能對決
Pub/Sub 性能測試
測試平台:M1 Pro 晶片 / 記憶體:16GB
測試情境:重複訂閱和發佈隨機資料封包到一個主題,直到收到最後發佈的結果。
結果:
對於較小的資料包(< 64kb),RocksMQ 在記憶體、CPU 和回應速度上都優於 NATS。
對於較大的資料包(> 64kb),NATS 則優於 RocksMQ,提供更快的回應時間。
測試類型 | MQ | 操作次數 | 每次操作成本 | 記憶體成本 | CPU 總時間 | 儲存成本 |
---|---|---|---|---|---|---|
5MB*100 Pub/Sub | NATS | 50 | 1.650328186 s/op | 4.29 GB | 85.58 | 25G |
5MB*100 Pub/Sub | RocksMQ | 50 | 2.475595131 s/op | 1.18 GB | 81.42 | 19G |
1MB*500 Pub/Sub | NATS | 50 | 2.248722593 S/OP | 2.60 GB | 96.50 | 25G |
1MB*500 Pub/Sub | RocksMQ | 50 | 2.554614279 s/op | 614.9 MB | 80.19 | 19G |
64KB*10000 Pub/Sub | NATS | 50 | 2.133345262 S/OP | 3.29 GB | 97.59 | 31G |
64KB*10000 發行/次 | RocksMQ | 50 | 3.253778195 s/op | 331.2 MB | 134.6 | 24G |
1KB*50000 發行/次 | NATS | 50 | 2.629391004 S/OP | 635.1 MB | 179.67 | 2.6G |
1KB*50000 發行/次 | RocksMQ | 50 | 0.897638581 s/op | 232.3 MB | 60.42 | 521M |
表 1:Pub/Sub 性能測試結果
Milvus 整合測試
資料大小:100M
結果:在 1 億向量資料集的廣泛測試中,NATS 展示了較低的向量搜尋與查詢延遲。
指標 | RocksMQ (ms) | NATS (ms) |
---|---|---|
平均向量搜尋延遲 | 23.55 | 20.17 |
每秒向量搜尋要求 (RPS) | 2.95 | 3.07 |
平均查詢延遲 | 7.2 | 6.74 |
每秒查詢請求 (RPS) | 1.47 | 1.54 |
表 2:100M 資料集的 Milvus 整合測試結果
資料集:<100M
結果:對於小於 100M 的資料集,NATS 和 RocksMQ 顯示出相似的效能。
結論:使用 NATS 消息傳輸增強 Milvus 的能力
在 Milvus 中整合 NATS 標誌著資料處理的一大進步。無論是研究即時分析、機器學習應用程式,或是任何資料密集的企業,NATS 都能讓您的專案更有效率、可靠且快速。隨著資料環境的演進,在 Milvus 中擁有像 NATS 這樣強大的訊息傳送系統,可確保無縫、可靠且高效能的資料通訊。
- 了解訊息佇列在 Milvus 中的角色
- 什麼是 NATS?
- 啟用 NATS
- 為 Milvus 配置 NATS
- 從 RocksMQ 遷移到 NATS
- NATS vs. RocksMQ: 性能對決
- 結論:使用 NATS 消息傳輸增強 Milvus 的能力
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word