データ通信の最適化:Milvus、NATSメッセージングを採用
データ処理という複雑なタペストリーにおいて、シームレスなコミュニケーションは業務を結びつける糸である。オープンソースのベクターデータベースの先駆者であるMilvusは、その最新機能で変革の旅に出ました:NATSメッセージングの統合です。この包括的なブログポストでは、この統合の複雑さを解き明かし、そのコア機能、セットアッププロセス、移行のメリット、そして前身であるRocksMQとの違いを探ります。
Milvusにおけるメッセージキューの役割を理解する
Milvusのクラウドネイティブアーキテクチャにおいて、メッセージキュー(Log Broker)は極めて重要な役割を担っている。これは、永続的なデータストリーム、同期、イベント通知、システム復旧時のデータ整合性を保証するバックボーンです。従来、Milvusスタンドアロン・モードでは、特にPulsarやKafkaと比較した場合、RocksMQが最も分かりやすい選択肢でしたが、膨大なデータや複雑なシナリオでは、その限界が明らかになりました。
Milvus 2.3では、シングル・ノードMQ実装であるNATSが導入され、データ・ストリームの管理方法が再定義されました。NATSは従来のものとは異なり、Milvusユーザをパフォーマンスの制約から解放し、大容量のデータをシームレスに処理できるようにします。
NATSとは?
NATSはGoで実装された分散システム接続技術です。システム間のRequest-ReplyやPublish-Subscribeのような様々な通信モードをサポートし、JetStreamによるデータの永続性を提供し、組み込みのRAFTによる分散機能を提供します。NATSの詳細についてはNATS公式サイトを参照してください。
Milvus2.3スタンドアロンモードでは、NATS、JetStream、PubSubはMilvusに堅牢なMQ機能を提供します。
NATSの有効化
Milvus2.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.
注意してください:
NATSサーバーのリスニングには、
server.port
を指定する必要があります。ポートが競合すると、Milvusは起動できません。server.port=-1
をランダムにポートを選択するように設定してください。storeDir
JetStreamストレージのディレクトリを指定します。Milvusの読み書きスループットを向上させるため、高性能なソリッドステートドライブ(SSD)にディレクトリを保存することを推奨します。maxFileStore
JetStreamストレージサイズの上限を設定します。この上限を超えると、それ以降のデータ書き込みができなくなります。maxPayload
個々のメッセージサイズを制限します。書き込み拒否を避けるため、5MB以上にしておく必要があります。initializeTimeout
NATSサーバーの起動タイムアウトを制御します。monitor
NATSの独立ログを設定します。retention
NATSメッセージの保持メカニズムを制御します。
詳細はNATSの公式ドキュメントを参照してください。
RocksMQからNATSへの移行
RocksMQからNATSへの移行は、書き込み操作の停止、データのフラッシュ、設定の変更、milvusのログによる移行の検証といったステップを含むシームレスなプロセスです。
移行を開始する前に、milvusで全ての書き込み操作を停止します。
Milvusで
FlushALL
操作を実行し、その完了を待ちます。このステップにより、保留中のデータがすべてフラッシュされ、システムがシャットダウンできる状態になります。Milvus設定ファイルを変更し、
mq.type=natsmq
を設定し、natsmq
セクションの関連オプションを調整します。Milvus 2.3 を起動する。
rocksmq.path
ディレクトリに保存されているオリジナルデータをバックアップし、クリーンアップする。(オプション)
NATS vs. RocksMQ: パフォーマンス対決
Pub/Sub パフォーマンステスト
テスト・プラットフォームM1 Proチップ / メモリ:16GB
テストシナリオトピックへのランダムなデータパケットのサブスクライブとパブリッシュを、最後にパブリッシュされた結果を受信するまで繰り返す。
結果
小さいデータパケット(64kb未満)では、RocksMQがメモリ、CPU、応答速度でNATSを上回る。
より大きなデータパケット(64kb以上)では、NATSがRocksMQを凌駕し、レスポンスタイムがはるかに速い。
テストタイプ | MQ | 演算回数 | opあたりのコスト | メモリコスト | CPU総時間 | ストレージコスト |
---|---|---|---|---|---|---|
5MB*100 Pub/Sub | NATS | 50 | 1.650328186 s/op | 4.29 GB | 85.58 | 25G |
5MB*100 Pub/Sub | ロックMQ | 50 | 2.475595131 s/op | 1.18 GB | 81.42 | 19G |
1MB*500 パブ/サブ | NATS | 50 | 2.248722593 S/OP | 2.60 GB | 96.50 | 25G |
1MB*500 パブ/サブ | ロックMQ | 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 Pub/Sub | ロックMQ | 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 パブ/サブ | ロックMQ | 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