🚀 Zilliz Cloudを無料で試す、完全管理型のMilvus—10倍の高速パフォーマンスを体験しよう!今すぐ試す>>

milvus-logo
LFAI
  • Home
  • Blog
  • Milvusはどのようにノード間のクエリ負荷を分散しているのか?

Milvusはどのようにノード間のクエリ負荷を分散しているのか?

  • Engineering
February 28, 2022
Xi Ge

Binlog Cover Image Binlog カバー画像

西葛

これまでのブログ記事で、Milvus 2.0のDeletion、Bitset、Compaction機能を順次紹介してきた。今回はその締めくくりとして、Milvusの分散クラスタにおける重要な機能であるロードバランスの設計についてご紹介したいと思います。

実装

クエリノードでバッファリングされるセグメントの数やサイズが異なると、クエリノード間の検索パフォーマンスも異なります。最悪のケースは、数台のクエリノードが大量のデータを検索し尽くしているにもかかわらず、新たに作成されたクエリノードにはセグメントが配布されないためアイドル状態のままとなり、CPUリソースが大量に浪費され、検索性能が大幅に低下してしまうことである。

このような状況を避けるために、クエリコーディネータ(query coordinator)は、各クエリノードのRAM使用量に応じて、各クエリノードに均等にセグメントを分配するようにプログラムされている。そのため、CPUリソースはノード間で均等に消費され、検索性能が大幅に向上します。

自動ロードバランスのトリガー

コンフィギュレーションqueryCoord.balanceIntervalSeconds のデフォルト値に従って、クエリ・コーデックは 60 秒ごとにすべてのクエリ・ノードの RAM 使用率(パーセンテージ)をチェックします。以下の条件のいずれかが満たされると、クエリコーデックはクエリノード全体のクエリ負荷のバランスを取り始めます:

  1. クラスタ内のいずれかのクエリ・ノードのRAM使用率がqueryCoord.overloadedMemoryThresholdPercentage (デフォルト:90)より大きい;
  2. または、2 つのクエリ・ノードの RAM 使用量の差の絶対値がqueryCoord.memoryUsageMaxDifferencePercentage (デフォルト: 30) より大きい。

ソースクエリノードからデスティネーションクエリノードへセグメントが転送された後、以下の両方の条件を満たす必要があります:

  1. 転送先クエリ・ノードのRAM使用率がqueryCoord.overloadedMemoryThresholdPercentage (デフォルト:90)以下;
  2. 負荷分散後のソース・クエリ・ノードと宛先クエリ・ノードのRAM使用量の差の絶対値が、負荷分散前のそれよりも小さい。

上記の条件が満たされると、クエリコーデックはノード間のクエリ負荷のバランスをとるために処理を進めます。

ロードバランス

ロードバランスがトリガーされると、クエリコーデックは最初にターゲットセグメントをデスティネーションクエリノードにロードします。両方のクエリノードは、検索結果の完全性を保証するために、この時点でどの検索リクエストでもターゲットセグメントからの検索結果を返します。

宛先クエリノードがターゲットセグメントのロードに成功すると、クエリコーデ ィネートはsealedSegmentChangeInfo をクエリチャネルにパブリッシュする。以下に示すように、onlineNodeIDonlineSegmentIDs は、それぞれセグメントをロードしたクエリノードとロードしたセグメントを示し、offlineNodeIDofflineSegmentIDs は、それぞれセグメントを解放する必要があるクエリノードと解放するセグメントを示す。

sealedSegmentChangeInfo sealedSegmentChangeInfo

sealedSegmentChangeInfo を受け取ったソースクエリノードは、次にターゲットセグメントを解放する。

Load Balance Workflow ロードバランスワークフロー

すべてのプロセスは、ソースクエリノードがターゲットセグメントを解放するときに成功する。つまり、すべてのクエリノードのRAM使用量がqueryCoord.overloadedMemoryThresholdPercentage よりも大きくなく、負荷分散後のソースクエリノードとデスティネーションクエリノードのRAM使用量の差の絶対値が負荷分散前よりも小さくなります。

次は何ですか?

2.0新機能シリーズのブログでは、新機能の設計を説明することを目的としています。このブログシリーズの続きを読む

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 Started

Like the article? Spread the word

続けて読む