Un guide SRE sur Memcached pour créer des applications évolutives

Memcached est un système de mise en cache de mémoire à usage général. Cela signifie qu’il est conçu pour enregistrer (ou mettre en cache) les réponses aux questions qui prennent un beaucoup de temps pour calculer ou récupérer et sont susceptible d’être redemandé. Un cas d’utilisation courant consiste à accélérer l’utilisation d’une base de données: par exemple, si nous nous attendons à avoir besoin à plusieurs reprises de la liste des « noms de toutes les personnes qui font partie de l’équipe X », nous pourrions mettre ces données dans Memcached plutôt que d’exécuter une requête SQL chaque fois. (Remarque: Memcached est parfois appelé «memcache». Nous nous en tiendrons au nom complet tout au long de cet article.)

Les caches sont utiles pour créer des applications et une infrastructure évolutives, qui sont au cœur de l’ingénierie de la fiabilité des sites (SRE). Cet article examine ce qu’il faut pour utiliser Memcached efficacement.

Recommandations de mémoire et démonétisation de Memcached

Memcached fonctionne mieux lorsqu’il est limité à la quantité de mémoire disponible du système: il expulser données lorsqu’il prend plus d’espace que la limite de mémoire. Un certain espace mémoire sera nécessaire pour ce que nous pouvons appeler des «frais généraux» – mémoire nécessaire pour les opérations administratives de Memcached, le système d’exploitation et les processus auxiliaires.

Ceci est défini via le -m indicateur de ligne de commande, qui est probablement le seul indicateur dont vous aurez besoin pour exécuter Memcached. le -ré L’indicateur (daemonize) n’est généralement pas utile: sur les systèmes d’exploitation modernes basés sur systemd, Memcached ne devrait pas se démoniser lui-même. De même, si vous l’exécutez sous Docker, il ne doit pas non plus se démoniser.

L’exécution de Memcached dans un conteneur est très bien, mais il est important de considérer ce qui s’exécute sur l’hôte et d’ajuster soigneusement les besoins en mémoire.

Regarder les données Memcached avec des statistiques

Lorsque vous exécutez Memcached, c’est souvent une bonne idée de se connecter directement et de jouer pour voir ce qui se passe. Il est raisonnablement sûr, même avec des instances de production, tant que vous y prenez un peu de soin.

La commande la plus sûre à exécuter est Statistiques. Cela amènera Memcached à cracher un grand nombre de statistiques et de détails qui sont souvent utiles:

$ écho Statistiques | nc localhost 11211

STAT disponibilité 1346

STAT max_connections 1024
STAT curr_connections 2
STAT total_connections 6
STAT rejeté_connexions 4

STAT get_hits 0
STAT get_misses 0
STAT get_expired 0

FIN


Les statistiques les plus intéressantes sont généralement les «coups sûrs», les «ratés» et les «expirés». Ceux-ci peuvent souvent raconter une histoire intéressante sur l’efficacité du cache. Si l’efficacité est réduite, cela est une source de préoccupation, car cela pourrait dégrader les performances de l’application.

Une chose un peu moins sûre à essayer est un stockage et une récupération. C’est un bon moyen de « botter les pneus » et d’apprendre comment cela fonctionne:

$ écho Statistiques | nc localhost 11211
ensemble ma clé 0 0 8
ma_valeur ^ M
STOCKÉE
obtenir ma_ clé
VALUE my_key 0 8
ma_valeur
FIN


Après avoir tapé ma_valeur, vous devez envoyer une fin de ligne de style DOS: return et newline. Cela se fait dans une console Linux en utilisant Ctrl + V puis en appuyant sur Entrer, qui affichera le revenir (ASCII 13), puis appuyez sur Entrer comme d’habitude pour sortir le nouvelle ligne caractère (ASCII 10).

La première 0 est pour les « métadonnées », et en passant 0 signifie qu’il n’y a pas de métadonnées intéressantes. Il est traité comme un masque de bits, donc 0 a tous les bits désactivés. La deuxième 0 est pour la date d’expiration. Cela signifie «n’expirez pas». En général, cela convient pour les tests. Dans les paramètres de production, il est bon de définir une heure d’expiration pour les clés.

S’il s’agit d’une instance importante, il faut veiller à ne pas écraser une clé importante. Cependant, la possibilité de stocker et de récupérer rapidement via la ligne de commande permet de s’assurer que Memcached fonctionne correctement.

Partager Memcached en tant que service

Notez que dans une configuration de microservices moderne, de nombreux services voudront enregistrer des données dans Memcache, et il vaut la peine de trouver une stratégie pour gérer cela. Une option consiste à exécuter un Memcache, ou un cluster, par service. Cependant, cela est souvent compliqué et nécessite un entretien élevé. Souvent, la bonne chose est que les services partagent un Memcache. Dans ce cas, c’est une bonne idée de mettre en œuvre des politiques raisonnables; par exemple, rendre obligatoire le préfixe du nom du service à la clé. Cela permet de vérifier quels services utilisent combien d’espace en utilisant le cachedump commander:

$ écho «éléments de statistiques» | NC -w 1 localhost 11211|grep ‘:nombre ‘
Éléments STAT:1:nombre 2


Cette commande affichera tous les ID « slab ». Memcache stocke des clés de taille similaire dans des dalles; cet exemple n’a qu’une seule dalle:

$ écho ‘stats cachedump 1 1000’ | NC -w 1 localhost 11211
ITEM my_key [[8 b; 0 s]
ARTICLE foo [[5 b; 0 s]
FIN


Ici, il y a deux clés: une avec une valeur de 8 octets et une avec une valeur de 5 octets.

Dans un scénario plus réaliste avec de nombreuses clés, vous souhaiterez peut-être traiter ces données avec awk ou un script et, en utilisant une convention locale, déterminez l’espace utilisé par chaque service.

Cela peut être intégré dans un système de surveillance, comme Prometheus, pour suivre le comportement au fil du temps.

De plus, comme de nombreuses équipes partagent le même service, il est utile de suggérer que les services chiffrent et authentifient les données qu’ils mettent en cache. Le chiffrement symétrique sur les processeurs modernes est performant, ce qui permet des modèles de sécurité beaucoup plus simples. Un exemple de bibliothèque qui prend en charge cela est Fernet de la cryptographie. (Faites-moi savoir dans les commentaires si vous souhaitez en savoir plus à ce sujet.)

Conclusion

Memcached est une technologie open source commune à prendre en charge par un SRE. Dans cet article, j’ai regardé comment interroger des statistiques courantes à ce sujet, offert quelques conseils de configuration et montré comment aider plusieurs équipes à partager un seul cluster Memcached de manière facile à surveiller et sécurisée. Avez-vous d’autres questions sur la gestion de Memcached? Demandez dans les commentaires, et je partagerai avec plaisir plus de conseils.

Source : https://opensource.com/article/20/3/sre-memcached Traduit de l’anglais sous licence CC BY-SA 4.0

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *