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?
Antwort
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:
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.
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.
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.
Ι 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:
die Menge von Meister
Erhalten Sie die Gesamtzahl der Schlüssel, die sie halten
der Hostname Für jeden Master-Knoten speichern Finden , Port und Anzahl der Schlüssel
Berechnen Sie die Schlüssel, die jeder Master halten muss, damit die Verteilung ution von Tasten ausgewogen (total Tasten cluster/Anzahl der Master)
Finden welcher Master-Knoten werden, müssen Schlüssel und die Gesamtmenge von Schlüsseln, die sie müssen geben/nehmen nehmen oder geben
Charakterisieren Masters als Quell- oder Zielknoten je nachdem, ob sie Schlüssel empfangen oder weitergeben
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
- 1. Wie man SCAN-Befehle in Jedis verwendet
- 2. kann keine Verbindung jedis
- 3. Wie funktioniert Jedis Pool?
- 4. Wie kann man die Multiwindow-Funktion in Android N aktivieren?
- 5. Wie kann man die Klasse li dynamisch in Laravel aktivieren?
- 6. pgpool-II - Lastverteilung PostgreSQL-Instanzen
- 7. Jedis Schlüsselablauf
- 8. Jedis, kann nicht Jedis-Verbindung erhalten: kann keine Ressource aus Pool
- 9. ToggleSwitch - wie kann man Text aktivieren?
- 10. Wie man event.preventDefault wieder aktivieren kann?
- 11. Wie kann man jackson SerializationFeature.WRAP_ROOT_VALUE deaktivieren/aktivieren?
- 12. Python, wie kann man alle Warnungen aktivieren?
- 13. Unterstützt Jedis asynchrone Operationen
- 14. Kann Jedis ein Java POJO bekommen/setzen?
- 15. Jedis 'Frontend' für ES
- 16. Wo kann man Kors aktivieren?
- 17. Jedis erhalten veraltete Daten
- 18. Abgelaufener Wert mit Jedis erhalten
- 19. Wie kann ich die Breakpoint-Marge in VS2010 aktivieren
- 20. Wie kann ich die Versionierung aktivieren?
- 21. Jedis (Redis) verlangsamt sich
- 22. Konfigurieren Jedis Timeout
- 23. Wie kann man Dropwizard-Metriken in Play 2.5 HikariCP aktivieren?
- 24. Verwendung von Jedis Client in Aws Lambda
- 25. Jedis als Leistung der Nachrichtenwarteschlange
- 26. Kann ich die Verfolgung in OWIN aktivieren?
- 27. Weird rediskey mit Federdaten Jedis
- 28. Antwortobjekt in Jedis - löst ClassCastException aus
- 29. Logging Jedis-Client mit Spring
- 30. Wie kann ich die Anmeldung in android Chrom aktivieren?
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