Configuration de votre client ElastiCache pour un équilibrage de charge efficace - Amazon ElastiCache

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 client ElastiCache pour un équilibrage de charge efficace

Note

Cette section s’applique aux clusters Memcached à plusieurs nœuds auto-conçus.

Pour travailler efficacement avec plusieurs nœuds Memcached ElastiCache, 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 utilisez Java, PHP ou .NET, nous vous conseillons d'utiliser l'une des bibliothèques client Amazon ElastiCache.

Hachage cohérent utilisant la technologie Java

Le client Java Memcached ElastiCache est basé sur le client Java open source spymemcached, qui a des capacités de hachage cohérent intégrées. La bibliothèque comprend une classe KetamaConnectionFactory qui met en œuvre le hachage cohérent. Par défaut, le hachage cohérent est désactivé dans spymemcached.

Pour de plus amples informations, consultez la documentation KetamaConnectionFactory à l'adresse KetaConnectionFactory.

Hachage cohérent utilisant la technologie PHP

Le client PHP Memcached ElastiCache est un wrapper autour de la bibliothèque PHP Memcached intégrée. Par défaut, la bibliothèque PHP Memcached désactive le hachage cohérent.

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 pour Memcached PHP sur http://php.net/manual/en/memcached.configuration.php. Notez spécifiquement le paramètre memcached.sess_consistent_hash.

Hachage cohérent utilisant la technologie .NET

Le client .NET Memcached ElastiCache 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 documentation memcached/locator sur https://github.com/enyim/EnyimMemcached/wiki/MemcachedClient-Configuration#user-content-memcachedlocator.