Wie gleicht Milvus die Abfragelast über die Knoten aus?
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:
- Die RAM-Auslastung eines beliebigen Abfrageknotens im Cluster ist größer als
queryCoord.overloadedMemoryThresholdPercentage
(Standard: 90); - 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:
- Der RAM-Verbrauch des Ziel-Abfrageknotens ist nicht größer als
queryCoord.overloadedMemoryThresholdPercentage
(Standardwert: 90); - 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
Nach Erhalt der sealedSegmentChangeInfo
gibt der Quell-Abfrageknoten das Zielsegment frei.
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!
- Wie Milvus Streaming-Daten in einem verteilten Cluster löscht
- Wie verdichtet man Daten in Milvus?
- Wie gleicht Milvus die Abfragelast über die Knoten aus?
- Wie Bitset die Vielseitigkeit der vektoriellen Ähnlichkeitssuche ermöglicht
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 StartedLike the article? Spread the word