2016-10-28 5 views
2

Ich möchte Jedis für Redis-Cluster oder nur für Redis-Server verwenden. Ich frage mich, wie man Round Robin für Leseoperationen aktiviert. Egal, was ich Redis-Cluster oder Redis-Server mit Sentinel verwenden werde. Ich werde mehrere Meister haben und jeder Meister wird seine eigenen Sklaven haben. Wie verteilt man Leseoperationen auf alle Slaves für einen bestimmten Hash-Slot (oder für einen bestimmten Shard)?Wie kann man die Lastverteilung in Jedis aktivieren?

+0

Jedis bietet keine integrierte Lastverteilung. Sie können es auf Jedis bauen, aber das erfordert einige Anstrengungen. Werfen Sie einen Blick auf [Salat] (https://github.com/mp911/letcutus) oder [Redisson] (https://github.com/redisson/redisson). – mp911de

Antwort

2

Load Balancing ist ein sehr bedeutendes Problem in verteilten Systemen. Eine Überlegung ist zu definieren, was Lastausgleich bedeutet.

Lastausgleichsmechanismen in IMKVS können unter drei Linsen untersucht werden, wenn wir nur die intrinsischen Faktoren von ungleicher Lastverteilung berücksichtigen:

  1. Lastausgleich basierend auf Schlüssel Popularität: Die Häufigkeit, dass bestimmte Elemente aufgerufen werden scheint sich auf die Leistung des IMKVS-Knotens und -Systems beziehen.

  2. Lastverteilung basierend auf Schlüsselverteilung: In vielen Systemen ist die Verteilung der Schlüssel in den verfügbaren Knoten inhärent eine Lastverteilung Herausforderung. Die Untersuchung des Problems isoliert von den vorherigen sowie von den Fähigkeiten der zugrunde liegenden Knoten kann riskant sein, ist jedoch in Bezug auf die Implementierung viel einfacher, obwohl es auf bloßen Statistiken basiert.

  3. Lastenausgleich basierend auf Abfragevolumen: Die Anzahl der Schlüssel, die gleichzeitig von einer IMKVS-Bereitstellung und folglich von einem Knoten angefordert werden, scheint in einigen Lastausgleichsbereitstellungen eine Metrik von Interesse zu sein.

So zusammenzufassen, Untersuchung des Lastausgleichs Problem der Prüfung von zumindest diese Faktoren erfordert:

  • Frequenz von eingehenden Anfragen

  • Menge der eingehenden Anfragen

  • wie die Schlüssel im System verteilt sind

  • Schlüssellänge und Wertlänge

Experimente

meine Experimente nach:

  • Die Reaktionszeit (RT) eine bestimmte Taste kaum verändert zu bekommen, wie der Anzahl der im Knoten geänderten Schlüssel.
  • Die RT wuchs schnell, mit einer größeren Länge des Schlüssels.
  • Der Unterschied zwischen den Antwortzeiten zwischen den Werten der Werte ist unbedeutend und daher wirkt sich die Wertgröße nicht auf RT aus.
  • Die Wachstumsrate von RT ist proportional zur Anzahl der Client-Anrufe.

Die Verteilung der Schlüssel spielt eine wichtige Rolle im Lastenausgleichsfaktor.Daher war mein Ziel im letzten Experiment zu beobachten, wie sich die Antwortzeit durch die Migration von Schlüsseln von einem Knoten zu einem anderen in Redis Cluster ändert. Für die Bedürfnisse meines Experiments habe ich 33000 in einen Masterknoten (M1) und 0 in den anderen Master (M2) geladen. Ich habe 4 gleichzeitige Client-Anrufe in M1 und ich begann die Migration zum Zeitpunkt 7 und hielt zum Zeitpunkt 36.

enter image description here

Ι beobachtet, dass die RT für 4 gleichzeitige Client ruft eine 25 ms gemittelt. Zu Beginn des Migrationsprozesses kommt es zu einem plötzlichen Anstieg der Antwortzeiten und am Ende des Prozesses zu einer Verringerung der Größenordnung von 9 ms. Diese Verbesserung zeigt eine 3fache Beschleunigung an. Die Spikes sind auf den Overhead des Migrationsbefehls zurückzuführen. Dieser Befehl führt tatsächlich eine Operation DUMP + DEL in der Quellinstanz und eine RESTORE-Operation in der Zielnstance aus. Es ist also klar, dass mit der Migration von Schlüsseln von einem schwer belasteten Knoten nach ein weiterer die Antwortzeit deutlich reduziert wird.

Aus dem Vorstehenden wird deutlich, dass mit der Verteilung von Leseanforderungen unter den Knoten, ist es nicht sicher ist, dass Sie eine Last distirbution (Balancing) in Redis haben werden, weil die Ergebnisse zeigen, dass:

  • Faktoren wie Schlüssel Popularität und Wertvolumen scheinen eine kleinere Wirkung

  • Schlüsselverteilung und Schlüssellänge zu haben, sind Faktoren, die zur Last Ausgleich Problem und Auswirkungen des Clusters RTs beitragen

  • RT können durch Migration die Schlüssel von einem Knoten zum anderen reduziert werden kann, in solche Weise, dass jeder Knoten in dem Cluster die gleiche Anzahl von Tasten hat

Somit Sie benötigen einen Mechanismus zu schaffen, die verbindet alle diese Faktoren. Sie können mit einem Algorithmus beginnen, der die Schlüssel zwischen den Knoten unterscheidet.

Die Schritte des Algorithmus sind wie folgt:

  1. die Menge von Meister

  2. Erhalten Sie die Gesamtzahl der Schlüssel, die sie halten

  3. der Hostname Für jeden Master-Knoten speichern Finden , Port und Anzahl der Schlüssel

  4. Berechnen Sie die Schlüssel, die jeder Master halten muss, damit die Verteilung ution von Tasten ausgewogen (total Tasten cluster/Anzahl der Master)

  5. Finden welcher Master-Knoten werden, müssen Schlüssel und die Gesamtmenge von Schlüsseln, die sie müssen geben/nehmen nehmen oder geben

  6. Charakterisieren Masters als Quell- oder Zielknoten je nachdem, ob sie Schlüssel empfangen oder weitergeben

  7. Beginnen Sie mit der Migration von Quellknoten zu Zielknoten, zuerst die Hashslots und dann die relevanten Schlüssel, und wiederholen Sie diese, bis alle Master die gleiche Anzahl an Schlüsseln haben

Und dann können Sie die nächsten Algorithmen erstellen, um einen Mechanismus zu erstellen, der LB bietet, um die RT zu minimieren.

Hinweis: weitere Informationen werde ich in meinem Artikel in einem halben Monat hinzufügen sowie einen Link zu Github mit meiner Algorithmusimplementierung.

Link zu Papier: https://www.researchgate.net/publication/309732099_Load_Balancing_in_In-Memory_Key-Value_Stores_for_Response_Time_Minimization