Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Configuration de votre ElastiCache client pour un équilibrage de charge efficace (Memcached)
Note
Cette section s’applique aux clusters Memcached à plusieurs nœuds auto-conçus.
Pour utiliser efficacement plusieurs nœuds ElastiCache Memcached, vous devez être en mesure de répartir vos clés de cache entre les nœuds. Un moyen simple pour équilibrer un cluster avec n nœuds consiste à calculer le hachage de la clé de l’objet et à appliquer l’opérateur mod au résultat, soit n - hash(key) mod n
. La valeur résultante (0 à n–1) est le numéro du nœud où vous placez l'objet.
Cette approche est simple et fonctionne bien tant que le nombre de nœuds (n) est constant. Cependant, chaque fois que vous ajoutez ou supprimez un nœud du cluster, le nombre de clés qui doivent être déplacées est (n - 1) / n (où n correspond au nouveau nombre de nœuds). Ainsi, cette approche génère le déplacement d'un grand nombre de clés, ce qui se traduit par un grand nombre d'échecs de l'accès aux données du cache initial, surtout quand le nombre de nœuds devient important. La mise à l'échelle de 1 à 2 nœuds entraîne le déplacement de (2-1) / 2 (50 %) des clés, dans le meilleur des cas. La mise à l'échelle de 9 à 10 nœuds entraîne le déplacement de (10-1) / 10 (90 %) des clés. Si vous augmentez à cause d'un pic de trafic, vous ne voulez pas avoir un nombre important d'échecs de l'accès aux données du cache. Un grand nombre d'échecs de l'accès aux données du cache génère des requêtes dans la base de données, qui est déjà surchargée en raison du pic de trafic.
Un hachage cohérent est la solution à ce problème. Un hachage cohérent utilise un algorithme de façon à ce que chaque fois qu'un nœud est ajouté ou supprimé d'un cluster, le nombre de clés qui doivent être déplacées est d'environ 1 / n (où n correspond au nouveau nombre de nœuds). Passer de 1 à 2 nœuds revient à ce que 1/2 (50 %) des clés soient déplacées, le pire des cas. Passer de 9 à 10 nœuds revient à ce que (10-1) / 10 (10 %) des clés soient déplacées.
En tant que l'utilisateur, vous contrôlez les l'algorithme de hachage qui est utilisé pour les clusters à plusieurs nœuds. Nous vous recommandons de configurer vos clients pour appliquer un hachage cohérent. Heureusement, il existe de nombreuses bibliothèques client Memcached dans les langages les plus utilisés qui mettent en œuvre un hachage cohérent. Consultez la documentation de la bibliothèque que vous utilisez pour voir si elle prend en charge le hachage cohérent et comment le mettre en œuvre.
Si vous travaillez en JavaPHP, ou. NET, nous vous recommandons d'utiliser l'une des bibliothèques ElastiCache clientes Amazon.
Hachage cohérent utilisant la technologie Java
Le client Java ElastiCache Memcached est basé sur le client Java open-source spymemcached, qui intègre des fonctionnalités de hachage cohérentes. La bibliothèque inclut une KetamaConnectionFactory classe qui implémente un hachage cohérent. Par défaut, le hachage cohérent est désactivé dans spymemcached.
Pour plus d'informations, consultez la KetamaConnectionFactory documentation à l'adresse KetamaConnectionFactory
Utilisation cohérente du hachage PHP avec Memcached
Le PHP client ElastiCache Memcached est une enveloppe entourant la bibliothèque Memcached intégrée. PHP Par défaut, le hachage cohérent est désactivé par la bibliothèque MemcachedPHP.
Utilisez le code suivant pour activer le hachage cohérent.
$m = new Memcached(); $m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
En plus du code précédent, nous vous conseillons d'activer également memcached.sess_consistent_hash
dans votre fichier php.ini.
Pour plus d'informations, consultez la documentation de configuration d'exécution de Memcached à l'adresse http://php.net/manual/en/memcached.configuration.phpPHP.memcached.sess_consistent_hash
.
Utilisation cohérente du hachage. NETavec Memcached
Le ElastiCache Memcached. NETle client est un wrapper autour d'Enyim Memcached. Par défaut, le hachage cohérent est activé par le client Enyim Memcached.
Pour plus d'informations, consultez la memcached/locator
documentation sur https://github.com/enyim/EnyimMemcached/wiki/ MemcachedClient