🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
  • Home
  • Blog
  • 優化資料通訊:Milvus 採用 NATS 訊息傳輸技術

優化資料通訊:Milvus 採用 NATS 訊息傳輸技術

  • Engineering
November 24, 2023
Zhen Ye

在錯綜複雜的資料處理過程中,無縫溝通是將各項作業連結在一起的主線。開創先河的開放原始碼向量資料庫 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日志验证迁移等步骤。

  1. 在啟動遷移之前,請先在 Milvus 中停止所有寫入作業。

  2. 在 Milvus 中執行FlushALL 作業,並等待其完成。這一步驟可確保所有待處理資料都已刷新,且系統已準備好關機。

  3. 修改 Milvus 配置文件,在natsmq 部分下設定mq.type=natsmq 並調整相關選項。

  4. 啟動 Milvus 2.3。

  5. 備份並清理儲存在rocksmq.path 目錄中的原始資料。(選擇性)

NATS vs. RocksMQ: 性能對決

Pub/Sub 性能測試

  • 測試平台:M1 Pro 晶片 / 記憶體:16GB

  • 測試情境:重複訂閱和發佈隨機資料封包到一個主題,直到收到最後發佈的結果。

  • 結果:

    • 對於較小的資料包(< 64kb),RocksMQ 在記憶體、CPU 和回應速度上都優於 NATS。

    • 對於較大的資料包(> 64kb),NATS 則優於 RocksMQ,提供更快的回應時間。

測試類型MQ操作次數每次操作成本記憶體成本CPU 總時間儲存成本
5MB*100 Pub/SubNATS501.650328186 s/op4.29 GB85.5825G
5MB*100 Pub/SubRocksMQ502.475595131 s/op1.18 GB81.4219G
1MB*500 Pub/SubNATS502.248722593 S/OP2.60 GB96.5025G
1MB*500 Pub/SubRocksMQ502.554614279 s/op614.9 MB80.1919G
64KB*10000 Pub/SubNATS502.133345262 S/OP3.29 GB97.5931G
64KB*10000 發行/次RocksMQ503.253778195 s/op331.2 MB134.624G
1KB*50000 發行/次NATS502.629391004 S/OP635.1 MB179.672.6G
1KB*50000 發行/次RocksMQ500.897638581 s/op232.3 MB60.42521M

表 1:Pub/Sub 性能測試結果

Milvus 整合測試

資料大小:100M

結果:在 1 億向量資料集的廣泛測試中,NATS 展示了較低的向量搜尋與查詢延遲。

指標RocksMQ (ms)NATS (ms)
平均向量搜尋延遲23.5520.17
每秒向量搜尋要求 (RPS)2.953.07
平均查詢延遲7.26.74
每秒查詢請求 (RPS)1.471.54

表 2:100M 資料集的 Milvus 整合測試結果

資料集:<100M

結果:對於小於 100M 的資料集,NATS 和 RocksMQ 顯示出相似的效能。

結論:使用 NATS 消息傳輸增強 Milvus 的能力

在 Milvus 中整合 NATS 標誌著資料處理的一大進步。無論是研究即時分析、機器學習應用程式,或是任何資料密集的企業,NATS 都能讓您的專案更有效率、可靠且快速。隨著資料環境的演進,在 Milvus 中擁有像 NATS 這樣強大的訊息傳送系統,可確保無縫、可靠且高效能的資料通訊。

Like the article? Spread the word

繼續閱讀