Milvusはどのようにノード間のクエリ負荷を分散しているのか?
Binlog カバー画像
西葛 記
これまでのブログ記事で、Milvus 2.0のDeletion、Bitset、Compaction機能を順次紹介してきた。今回はその締めくくりとして、Milvusの分散クラスタにおける重要な機能であるロードバランスの設計についてご紹介したいと思います。
実装
クエリノードでバッファリングされるセグメントの数やサイズが異なると、クエリノード間の検索パフォーマンスも異なります。最悪のケースは、数台のクエリノードが大量のデータを検索し尽くしているにもかかわらず、新たに作成されたクエリノードにはセグメントが配布されないためアイドル状態のままとなり、CPUリソースが大量に浪費され、検索性能が大幅に低下してしまうことである。
このような状況を避けるために、クエリコーディネータ(query coordinator)は、各クエリノードのRAM使用量に応じて、各クエリノードに均等にセグメントを分配するようにプログラムされている。そのため、CPUリソースはノード間で均等に消費され、検索性能が大幅に向上します。
自動ロードバランスのトリガー
コンフィギュレーションqueryCoord.balanceIntervalSeconds
のデフォルト値に従って、クエリ・コーデックは 60 秒ごとにすべてのクエリ・ノードの RAM 使用率(パーセンテージ)をチェックします。以下の条件のいずれかが満たされると、クエリコーデックはクエリノード全体のクエリ負荷のバランスを取り始めます:
- クラスタ内のいずれかのクエリ・ノードのRAM使用率が
queryCoord.overloadedMemoryThresholdPercentage
(デフォルト:90)より大きい; - または、2 つのクエリ・ノードの RAM 使用量の差の絶対値が
queryCoord.memoryUsageMaxDifferencePercentage
(デフォルト: 30) より大きい。
ソースクエリノードからデスティネーションクエリノードへセグメントが転送された後、以下の両方の条件を満たす必要があります:
- 転送先クエリ・ノードのRAM使用率が
queryCoord.overloadedMemoryThresholdPercentage
(デフォルト:90)以下; - 負荷分散後のソース・クエリ・ノードと宛先クエリ・ノードのRAM使用量の差の絶対値が、負荷分散前のそれよりも小さい。
上記の条件が満たされると、クエリコーデックはノード間のクエリ負荷のバランスをとるために処理を進めます。
ロードバランス
ロードバランスがトリガーされると、クエリコーデックは最初にターゲットセグメントをデスティネーションクエリノードにロードします。両方のクエリノードは、検索結果の完全性を保証するために、この時点でどの検索リクエストでもターゲットセグメントからの検索結果を返します。
宛先クエリノードがターゲットセグメントのロードに成功すると、クエリコーデ ィネートはsealedSegmentChangeInfo
をクエリチャネルにパブリッシュする。以下に示すように、onlineNodeID
とonlineSegmentIDs
は、それぞれセグメントをロードしたクエリノードとロードしたセグメントを示し、offlineNodeID
とofflineSegmentIDs
は、それぞれセグメントを解放する必要があるクエリノードと解放するセグメントを示す。
sealedSegmentChangeInfo
sealedSegmentChangeInfo
を受け取ったソースクエリノードは、次にターゲットセグメントを解放する。
ロードバランスワークフロー
すべてのプロセスは、ソースクエリノードがターゲットセグメントを解放するときに成功する。つまり、すべてのクエリノードのRAM使用量がqueryCoord.overloadedMemoryThresholdPercentage
よりも大きくなく、負荷分散後のソースクエリノードとデスティネーションクエリノードのRAM使用量の差の絶対値が負荷分散前よりも小さくなります。
次は何ですか?
2.0新機能シリーズのブログでは、新機能の設計を説明することを目的としています。このブログシリーズの続きを読む
- Milvusが分散クラスタ内のストリーミングデータを削除する方法
- Milvusでデータをコンパクトにするには?
- Milvusはどのようにノード間のクエリ負荷をバランスするのか?
- Bitsetがベクトル類似検索の多様性を可能にする方法
Milvus 2.0新機能ブログシリーズは今回で最終回となります。本シリーズに続き、Milvus 2.0の基本アーキテクチャを紹介する新シリーズ「MilvusDeep Dive」を企画中です。どうぞご期待ください。
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word