Konfigurieren Ihres ElastiCache-Clients für ein effizientes Load Balancing - Amazon ElastiCache

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Konfigurieren Ihres ElastiCache-Clients für ein effizientes Load Balancing

Anmerkung

Dieser Abschnitt trifft auf selbst entworfene Memcached-Cluster mit mehreren Knoten zu.

Um mehrere ElastiCache Memcached-Knoten effektiv zu verwenden, müssen Sie Ihre Cache-Schlüssel auf die Knoten verteilen können. Eine einfache Methode für den Lastausgleich eines Clusters mit n Knoten besteht in der Berechnung des Hash-Wertes des Objektschlüssels und Verschiebung des Ergebnisses um n - hash(key) mod n. Der resultierende Wert (0 bis n–1) ist die Nummer des Knotens, auf dem Sie das Objekt platzieren.

Diese Methode ist einfach und funktioniert gut, solange die Anzahl der Knoten (n) konstant bleibt. Wenn Sie einen Knoten zum Cluster hinzufügen oder daraus entfernen, beträgt die Anzahl der zu verschiebenden Schlüssel jedoch jedes Mal (n - 1) / n (dabei entspricht n der neuen Anzahl von Knoten). Diese Methode führt daher dazu, dass eine große Anzahl von Schlüsseln verschoben werden. Dies ist mit einer großen Anzahl anfänglicher Cache-Fehlelemente verbunden, insbesondere bei einer umfangreichen Anzahl von Knoten. Die Skalierung von 1 auf 2 Knoten führt bestenfalls dazu, dass (2-1) / 2 (50 %) der Schlüssel verschoben werden. Eine Skalierung von 9 auf 10 Knoten hat bestenfalls zur Folge, dass (10–1) / 10 (90 %) der Schlüssel verschoben werden. Ist die Aufwärtsskalierung durch einen sprunghaften Anstieg im Datenverkehr bedingt, ist eine große Anzahl von Cache-Fehlelementen nicht wünschenswert. Eine große Anzahl von Cache-Fehlelementen führt zu Anfragen bei der Datenbank, die aufgrund des sprunghaften Anstiegs im Datenverkehr bereits überlastet ist.

Die Lösung zu diesem Dilemma ist konsistentes Hashing. Beim konsistenten Hashing wird ein Algorithmus verwendet, bei dem jedes Mal, wenn ein Knoten zu einem Cluster hinzugefügt oder daraus entfernt wird, die Anzahl der zu verschiebenden Schlüssel ungefähr 1 / n beträgt (wobei n die neue Anzahl von Knoten ist). Eine Skalierung von 1 auf 2 Knoten hat schlimmstenfalls zur Folge, dass 1/2 (50 Prozent) der Schlüssel verschoben werden. Eine Skalierung von 9 auf 10 Knoten hat zur Folge, dass 1/10 (10 Prozent) der Schlüssel verschoben werden.

Sie als Benutzer steuern, welcher Hashalgorithmus für Mehrknoten-Cluster verwendet wird. Wir empfehlen, dass Sie Ihre Clients zur Verwendung von konsistentem Hashing konfigurieren. Glücklicherweise sind viele Memcached-Clientbibliotheken in den meisten gängigen Sprachen verfügbar, die konsistentes Hashing implementieren. Überprüfen Sie die Dokumentation der von Ihnen verwendeten Bibliothek darauf, ob sie konsistentes Hashing unterstützt und wie es implementiert wird.

Wenn Sie in Java, PHP oder .NET arbeiten, empfehlen wir Ihnen, eine der Amazon-ElastiCache-Clientbibliotheken zu verwenden.

Konsistentes Hashing mithilfe von Java

Der ElastiCache Memcached Java-Client basiert auf dem Open-Source-Spymemcached-Java-Client, der über konsistente Hashing-Funktionen verfügt. Die Bibliothek enthält eine KetamaConnectionFactory-Klasse, mit der konsistentes Hashing implementiert wird. Konsistentes Hashing ist in spymemcached standardmäßig deaktiviert.

Weitere Informationen finden Sie in der KetamaConnectionFactory-Dokumentation unter KetamaConnectionFactory.

Konsistentes Hashing mit PHP

Der ElastiCache Memcached PHP-Client ist ein Wrapper um die integrierte Memcached-PHP-Bibliothek. Konsistentes Hashing wird von der Memcached-PHP-Bibliothek standardmäßig deaktiviert.

Verwenden Sie den folgenden Code, um konsistentes Hashing zu aktivieren.

$m = new Memcached(); $m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);

Zusätzlich zum obigen Code wird empfohlen, ebenfalls memcached.sess_consistent_hash in der Datei php.ini einzuschalten.

Weitere Informationen erhalten Sie in der Dokumentation zur Laufzeitkonfiguration für Memcached-PHP unter http://php.net/manual/en/memcached.configuration.php. Beachten Sie insbesondere den Parameter memcached.sess_consistent_hash.

Konsistentes Hashing mit .NET

Der ElastiCache Memcached .NET-Client ist ein Wrapper um Enyim Memcached. Konsistentes Hashing wird vom Enyim-Memcached-Client standardmäßig aktiviert.

Weitere Informationen erhalten Sie in der Dokumentation zu memcached/locator unter https://github.com/enyim/EnyimMemcached/wiki/MemcachedClient-Configuration#user-content-memcachedlocator.