10 points par kunggom 2020-09-03 | 1 commentaires | Partager sur WhatsApp

Redis est une base de données en mémoire largement utilisée pour la mise en cache des services en ligne. Mais si on l’utilise mal, cela peut provoquer des problèmes inattendus, voire de graves incidents. Récemment, je suis allé dans une librairie et j’ai croisé par hasard un ingénieur en activité qui travaille dans l’équipe SRE d’une certaine entreprise. Au cours de notre conversation, il m’a même dit : « Redis est en réalité un mal nécessaire. Il faut l’utiliser en pensant qu’un incident lié finira bien par se produire un jour. »

Référence - Kakao "Avec Redis, si on l’utilise mal, c’est la catastrophe" :

https://zdnet.co.kr/view/?no=20131119174125

Référence - La cause de l’erreur de Coupang vient de la base de données open source "Redis DB" :

http://www.digitaltoday.co.kr/news/articleView.html?idxno=212904

Redis est donc un outil qui exige une bonne compréhension et une utilisation très soigneuse.

L’introduction a été longue. Voici la présentation d’un document de NHN, fondé sur une intervention de RedisConf 2020, qui pointe trois domaines où des problèmes de performances peuvent apparaître lorsqu’on utilise Redis comme cache dans un environnement à très fort trafic, et qui en explique les solutions. (coréen)

  • Cache Stampede : l’espace de cache étant limité, il est courant de définir une durée d’expiration (TTL) pour les données stockées. Mais si des requêtes de lecture continuent d’arriver sur ces données au moment où l’expiration survient, ces lectures se concentrent soudainement sur la base de données, puis se transforment à nouveau en requêtes d’écriture dupliquées vers Redis. C’est ce qu’on appelle un cache stampede. Parmi les solutions, on peut soit renouveler à l’avance la valeur du TTL à l’aide d’un algorithme fondé sur une distribution de probabilité, soit introduire le concept de debounce (n’exécuter que le dernier événement parmi plusieurs événements répétés).

  • Hot Keys : les performances peuvent aussi se dégrader lorsque les lectures se concentrent sur une seule clé. L’article présente comme contre-mesure une méthode consistant à ajouter un préfixe au nom de la clé pour créer plusieurs répliques, puis à répartir aléatoirement les lectures sur ces répliques préfixées.

  • Compression : stocker des données volumineuses dans Redis peut également entraîner une baisse des performances. Dans ce cas, le simple fait d’appliquer une compression appropriée peut apporter des gains importants à la fois en vitesse et en consommation mémoire. Comme la méthode de compression adaptée et son taux peuvent varier selon la situation et l’environnement, il est indispensable de réaliser des benchmarks reproduisant l’environnement d’utilisation avant de l’appliquer.

1 commentaires

 
kunggom 2020-09-03

Référence — un article contenant un exemple de code de l’algorithme basé sur une distribution de probabilité mentionné ci-dessus (Probablistic Early Recomputation) :

https://engineering.linecorp.com/ko/blog/…