Konfiguration Ihres ElastiCache Clients für einen effizienten Lastenausgleich (Memcached) - 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.

Konfiguration Ihres ElastiCache Clients für einen effizienten Lastenausgleich (Memcached)

Anmerkung

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

Um mehrere ElastiCache Memcached-Knoten effektiv nutzen zu können, müssen Sie in der Lage sein, Ihre Cache-Schlüssel auf die Knoten zu verteilen. 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 arbeitenPHP, oder. NET, wir empfehlen Ihnen, eine der ElastiCache Amazon-Clientbibliotheken zu verwenden.

Konsistentes Hashing mithilfe von Java

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

Weitere Informationen finden Sie in der KetamaConnectionFactory Dokumentation unter KetamaConnectionFactory.

Konsistentes Hashing unter Verwendung von PHP Memcached

Der ElastiCache PHP Memcached-Client ist ein Wrapper rund um die integrierte Memcached-Bibliothek. PHP Standardmäßig ist konsistentes Hashing von der Memcached-Bibliothek deaktiviert. PHP

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 finden Sie in der Dokumentation zur Laufzeitkonfiguration für Memcached unter http://php.net/manual/en/memcached.configuration.php. PHP Beachten Sie insbesondere den Parameter memcached.sess_consistent_hash.

Konsistentes Hashing unter Verwendung von. NETmit Memcached

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

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