Configuration de votre ElastiCache client pour un équilibrage de charge efficace (Memcached) - 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 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 d'équilibrer la charge d'un cluster à n nœuds consiste à calculer le hachage de la clé de l'objet et à modifier le résultat par 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 Java, PHP 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.

Hachage cohérent à l'aide de PHP avec Memcached

Le client PHP ElastiCache Memcached 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 à l'adresse http://php. net/manual/en/memcached.configuration.php. Notez spécifiquement le paramètre memcached.sess_consistent_hash.

Hachage cohérent à l'aide de .NET avec Memcached

Le client .NET ElastiCache Memcached 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-Configuration# user-content-memcachedlocator.