REmote DIctionary Server
Redis est la mémoire partagée de votre application en production.
Redis est simple. C'est une base clef/valeur en RAM mais qui sait écrire ses données sur le disque dur (soit dans un gros log, soit des instantanés, soit les deux). Son protocole est élégant, sa gestion du réseau efficace, et il sait gérer de la réplication.
Concrètement, Redis va vite, mais ne peut pas contenir plus de données que la RAM disponible, ses données sont typées, mais sans possibilité de définir un modèle ou des relations. Au-delà du simple stockage, redis est aussi capable de gérer des fils d'attente, et des messages en publication/souscription.
Redis a des usages différents:
- Cache (et de sessions, par extension)
- Fils d'attente
- Pubsub
- Lien non bloquant entre services
Cache et sessions
Redis, en plus de mettre a disposition des types complexes, permet de gérer le cycle de vie des clefs : soit avec une durée de vie, soit en évinçant les clefs qui n'ont pas été utilisées récemment.
Les frameworks web vous proposeront de gérer les sessions avec Redis, comme le fait PHP, et notre image Docker pour PHP , Flask , ExpressJS et bien d'autres.
Fils d'attente
Pour rendre soyeux le poil de son application web, il faut des temps de réponses rapides, et donc utiliser des fils d'attentes pour toutes les taches un peu longues. C'est aussi un prérequis pour encaisser des pics d'utilisation.
Confortable pour les technos asynchrones (golang, nodejs, python aio…), les fils d'attente sont indispensables pour les technos synchrones (php, python, ruby…), dès que l'application va être un tant soit peu sollicité.
Sidekiq est l'indispensable compagnon de Ruby On Rails (vous savez, le truc qui fait tourner Giltab), Python a lui son Celery challengé par rq , en PHP c'est plus confus, enqueue peut-être ?
Pubsub
Redis propose un pattern de publication/abonnement efficace, mais sans mailbox, les clients déconnectés pourront rater des messages.
Dans Redis 5 est apparus la notion de STREAMS qui permet à plusieurs workers de suivre un flot d'événement.
Lien
Redis est de plus en plus utilisé comme lien entre différents services. Ça permet simplement à un service d'envoyer un flot d'événements sans risquer d'être bloqué, charge ensuite à un autre service de dépiler tout ça.
Elastic Beats peut utiliser Redis comme output , tout comme Suricata et tant d'autres.
Exploitation
Voilà, vous avez un joli Redis en prod, seul ou en sentinelles , mais vous voudriez bien savoir ce qu'il se passe.
Redistop
C'est ici qu'entre en lice redistop , notre outil pour visualiser (une partie de) ce qu'il se passe dans un redis, dans un terminal, mais avec une interface.
Il n'y avait pas grand-chose de disponible, donc "gratte ton coude" comme on dit dans le logiciel libre.
Redis fournit un ensemble de commandes pour voir ce qu'il se passe à l'intérieur .
INFO fournit une foule d'information sur l'état du serveur, sans le perturber. Ensuite Redis a rajouté des commandes plus précises : les * STATS
comme MEMORY STATS
.
MONITOR est nettement plus violent : il permet de voir le flot de commandes soumises au serveur. Attention, cette commande est coûteuse, et va manger une partie des ressources, c'est très pratique pour du debug, mais mieux vaut éviter de le laisser tourner sur de longue période, surtout si le serveur est chargé.
Golang (oui encore lui) est le langage adéquat pour créer un outil en ligne de commande simple à installer et disponible sans trop d'effort sur la majorité des système d'exploitation. Grâce à l'écosystème riche en librairies, le code de l'interface utilisateur est délégué à termui .
Vous pouvez amener redistop
prés de votre serveur (c'est un simple binaire), ou l'utiliser en local avec un tunnel SSH vers votre serveur : ssh -N -L 6379:127.0.0.1:6379 bob@mon-serveur
.
Redistop va afficher un peu de contexte, un peu de statistiques, mais surtout un graphique avec le nombre de commandes, toutes les 2 secondes, et deux tableaux, un avec les commandes et le nombre d'occurrences, un autre avec les IPs des clients et le nombre de commandes. Normalement, vous devriez apercevoir votre monitoring, qui passe quelques commandes et l'application qui va être nettement plus gourmande.
Attention, Redis a des usages divers, qui peuvent être cumulés, vous devriez rapidement repérer son usage, il faudra ensuite repérer les abus.
Redistop est un logiciel libre sous licence GPL, tout neuf. Il doit surement manquer des fonctionnalités et c'est même imaginable qu'il y ait des bogues. N'hésitez pas à le tester, créer des tickets (qualifiés) et même des pull requests .
Redistop ne remplacera jamais votre joli Grafana pour voir les usages et fluctuations sur un temps long, mais il sera là pour combler votre curiosité, et pour démarrer la réparation d'un incident.