GNU/Linux >> Tutoriels Linux >  >> Linux

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

Memcached est un système de mise en cache 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 longtemps à calculer ou à récupérer et sont susceptibles d'être redemandés . 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 de la liste des "noms de toutes les personnes qui font partie de l'équipe X" à plusieurs reprises, nous pourrions mettre ces données en 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, ce qui est au cœur du métier d'ingénieur en fiabilité de site (SRE). Cet article examine ce qu'il faut pour faire fonctionner efficacement Memcached.

Recommandations de mémoire et démonisation de Memcached

Memcached fonctionne mieux lorsqu'il est limité à la quantité de mémoire dont le système dispose :il expulse données lorsqu'elles occupent plus d'espace que la limite de mémoire. Un peu d'espace mémoire sera nécessaire pour ce que nous pouvons appeler la « surcharge », la mémoire nécessaire aux opérations administratives de Memcached, au système d'exploitation et aux processus auxiliaires.

Plus de contenu de qualité

  • Cours en ligne gratuit :Présentation technique de RHEL
  • Apprenez les commandes avancées de Linux
  • Télécharger les aide-mémoire
  • Trouvez une alternative open source
  • Lire le meilleur contenu Linux
  • Découvrez les ressources open source

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 -d (daemonize) n'est généralement pas utile :sur les systèmes d'exploitation modernes basés sur systemd, Memcached ne doit pas se démoniser. 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 acceptable, mais il est important de considérer ce qui s'exécute d'autre sur l'hôte et d'ajuster soigneusement les besoins en mémoire.

Regarder les données Memcached avec des statistiques

Lorsque vous utilisez Memcached, il est souvent judicieux 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, à condition d'être prudent.

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

$ echo stats | nc localhost 11211
...
STAT uptime 1346
...
STAT max_connections 1024
STAT curr_connections 2
STAT total_connections 6
STAT disabled_connections 4
STAT get_hits 0
STAT get_misses 0
STAT get_expired 0
END

Les statistiques les plus intéressantes sont généralement les « succès », 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 préoccupant, car cela pourrait dégrader les performances de l'application.

Une chose légèrement moins sûre à essayer est un stockage et une récupération. C'est un bon moyen de "défoncer les pneus" et d'apprendre comment cela fonctionne :

$ echo stats | nc localhost 11211
set my_key 0 0 8
my_value^M
STORED
get my_key
VALUE my_key 0 8
my_value
END

Après avoir tapé my_value , 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 Entrée , qui affichera le retour caractère (ASCII 13), puis appuyez sur Entrée comme d'habitude pour afficher la nouvelle ligne caractère (ASCII 10).

Le premier 0 est pour les "métadonnées" et en passant par 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. Le deuxième 0 est pour le temps d'expiration. Cela signifie "n'expire pas". En général, c'est bien pour les tests. Dans les paramètres de production, il est bon de définir un délai d'expiration pour les clés.

S'il s'agit d'une instance importante, veillez à 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.

Partage de 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 proposer 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 demande beaucoup d'entretien. Souvent, la bonne chose à faire 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, obliger à préfixer le nom du service à la clé. Cela permet de vérifier quels services utilisent combien d'espace en utilisant le cachedump commande :

$ echo 'éléments statistiques' | nc -w 1 localhost 11211|grep ':numéro '
Éléments STAT :1:numéro 2

Cette commande affichera tous les identifiants "slab". Memcache stocke des clés de taille similaire dans des dalles ; cet exemple n'a qu'une dalle :

$ echo 'statistiques cachedump 1 1000' | nc -w 1 localhost 11211
ITEM my_key [8 b; 0 s]
ÉLÉMENT 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 voudrez 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, étant donné que 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 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 examiné comment interroger des statistiques courantes à ce sujet, proposé des conseils de configuration et montré comment aider plusieurs équipes à partager un seul cluster Memcached de manière facilement surveillée 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.


Linux
  1. Un guide du terminal Linux pour les débutants

  2. Comment empaqueter des applications Python pour Linux

  3. 3 approches de la gestion des secrets pour les applications Flatpak

  4. 4 outils pour construire des systèmes Linux embarqués

  5. Écrire des applications Python, créer des laboratoires Linux et plus de conseils pour les administrateurs système

Guide d'installation et d'utilisation du pare-feu CSF

Guide de démarrage rapide d'Ansible pour les administrateurs système Linux

Guide de configuration du serveur SFTP sous Linux

DEFT Linux Une distribution Linux pour l'informatique judiciaire

Un guide pratique pour la commande chroot sous Linux

Comment installer et sécuriser Memcached sur Ubuntu 18.04