🚀 Testen Sie Zilliz Cloud, die vollständig verwaltete Milvus, kostenlos – erleben Sie 10x schnellere Leistung! Jetzt testen>>

milvus-logo
LFAI
  • Home
  • Blog
  • Wie gleicht Milvus die Abfragelast über die Knoten aus?

Wie gleicht Milvus die Abfragelast über die Knoten aus?

  • Engineering
February 28, 2022
Xi Ge

Binlog Cover Image Binlog Titelbild

Von Xi Ge.

In früheren Blog-Artikeln haben wir nacheinander die Funktionen Deletion, Bitset und Compaction in Milvus 2.0 vorgestellt. Zum Abschluss dieser Serie möchten wir das Design hinter Load Balance, einer wichtigen Funktion im verteilten Cluster von Milvus, vorstellen.

Implementierung

Während die Anzahl und Größe der in den Abfrageknoten gepufferten Segmente unterschiedlich ist, kann auch die Suchleistung zwischen den Abfrageknoten variieren. Der schlimmste Fall könnte eintreten, wenn einige Abfrageknoten mit der Suche nach einer großen Datenmenge ausgelastet sind, neu erstellte Abfrageknoten aber untätig bleiben, weil kein Segment an sie verteilt wird, was zu einer massiven Verschwendung von CPU-Ressourcen und einem enormen Abfall der Suchleistung führt.

Um solche Umstände zu vermeiden, ist der Abfragekoordinator (query coord) so programmiert, dass er die Segmente gleichmäßig auf jeden Abfrageknoten entsprechend der RAM-Nutzung der Knoten verteilt. Dadurch werden die CPU-Ressourcen gleichmäßig auf die Knoten verteilt, was die Suchleistung erheblich verbessert.

Automatischen Lastausgleich auslösen

Gemäß dem Standardwert in der Konfiguration queryCoord.balanceIntervalSeconds überprüft das Abfragekoordinatensystem alle 60 Sekunden die RAM-Auslastung (in Prozent) aller Abfrageknoten. Wenn eine der folgenden Bedingungen erfüllt ist, beginnt der Abfragekoordinator, die Abfragelast auf die Abfrageknoten zu verteilen:

  1. Die RAM-Auslastung eines beliebigen Abfrageknotens im Cluster ist größer als queryCoord.overloadedMemoryThresholdPercentage (Standard: 90);
  2. Oder der absolute Wert des Unterschieds zwischen der RAM-Nutzung von zwei beliebigen Abfrageknoten ist größer als queryCoord.memoryUsageMaxDifferencePercentage (Standard: 30).

Nachdem die Segmente vom Quellabfrageknoten zum Zielabfrageknoten übertragen wurden, sollten sie auch die beiden folgenden Bedingungen erfüllen:

  1. Der RAM-Verbrauch des Ziel-Abfrageknotens ist nicht größer als queryCoord.overloadedMemoryThresholdPercentage (Standardwert: 90);
  2. Der absolute Wert der Differenz zwischen der RAM-Nutzung des Quell- und des Ziel-Abfrageknotens ist nach dem Lastausgleich geringer als vor dem Lastausgleich.

Wenn die oben genannten Bedingungen erfüllt sind, fährt das Abfragekoordinatensystem fort, die Abfragelast auf die Knoten zu verteilen.

Lastausgleich

Wenn der Lastausgleich ausgelöst wird, lädt der Abfragekoordinator zunächst das/die Zielsegment(e) in den Zielabfrageknoten. Beide Abfrageknoten geben bei jeder Suchanfrage zu diesem Zeitpunkt Suchergebnisse aus dem/den Zielsegment(en) zurück, um die Vollständigkeit des Ergebnisses zu gewährleisten.

Nachdem der Zielabfrageknoten das Zielsegment erfolgreich geladen hat, veröffentlicht der Abfragekoordinator eine sealedSegmentChangeInfo an den Abfragekanal. Wie unten dargestellt, geben onlineNodeID und onlineSegmentIDs den Abfrageknoten an, der das Segment lädt bzw. das geladene Segment, und offlineNodeID und offlineSegmentIDs geben den Abfrageknoten an, der das Segment freigeben muss bzw. das freizugebende Segment.

sealedSegmentChangeInfo sealedSegmentChangeInfo

Nach Erhalt der sealedSegmentChangeInfo gibt der Quell-Abfrageknoten das Zielsegment frei.

Load Balance Workflow Lastausgleichs-Workflow

Der gesamte Prozess ist erfolgreich, wenn der Quellabfrageknoten das Zielsegment freigibt. Damit ist die Abfragelast über die Abfrageknoten hinweg ausgeglichen, d. h. die RAM-Nutzung aller Abfrageknoten ist nicht größer als queryCoord.overloadedMemoryThresholdPercentage, und der absolute Wert der Differenz zwischen der RAM-Nutzung des Quell- und des Zielabfrageknotens ist nach dem Lastausgleich geringer als vor dem Lastausgleich.

Was kommt als Nächstes?

Im Blog zur Serie der neuen Funktionen 2.0 wollen wir das Design der neuen Funktionen erklären. Lesen Sie mehr in dieser Blogserie!

Dies ist das Finale der Blogserie zu den neuen Funktionen von Milvus 2.0. Im Anschluss an diese Serie planen wir eine neue Serie von Milvus Deep Dive, in der die grundlegende Architektur von Milvus 2.0 vorgestellt wird. Bitte bleiben Sie auf dem Laufenden.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Weiterlesen