- Redis fait partie des technologies qui jouissent de la réputation la plus positive dans l’industrie tech
- C’est une technologie remarquablement bien conçue, sans défaut intrinsèque, mais elle n’est pas forcément nécessaire dans tous les cas
- Sur plus de 10 ans, dans 3 entreprises différentes, le même schéma s’est répété :
- Un problème surgissait et Redis semblait adapté, mais en réalité cela n’améliorait pas la situation ou ne résolvait pas le problème de fond
- Cela n’a fait qu’ajouter de la complexité pour le plaisir de la complexité
Premier cas : l’expérience chez Tantan
- Tantan est la deuxième plus grande application de rencontre en Chine et exploite 50 à 100 serveurs de base de données haute performance basés sur PostgreSQL
- Chaque serveur est shardé par ID utilisateur, de sorte que les données d’un utilisateur donné ne sont stockées que sur un seul serveur
- Le problème
- Un besoin est apparu : stocker le nombre de « swipes » et le mettre à jour rapidement
- Au départ, il a été jugé pertinent de le stocker dans Redis
- L’équipe a configuré la solution en pensant que quelques serveurs Redis haute performance suffiraient
- Réévaluation et solution
- L’équipe a discuté d’une approche consistant à stocker directement les données dans PostgreSQL plutôt que dans Redis
- Comme la charge des serveurs PostgreSQL était déjà élevée, la charge supplémentaire attendue devait rester marginale
- Après stockage dans PostgreSQL, aucune baisse de performance n’a été observée, et l’adoption de Redis s’est révélée inutile
Deuxième cas : l’expérience chez Bannerflow
- Contexte
- Bannerflow est une plateforme de création et de diffusion publicitaire
- Il a été décidé d’introduire Redis dans un nouveau microservice afin de prendre en charge la publication de publicités sur des réseaux sociaux comme Facebook
- Le problème
- Étant donné une charge nettement plus faible que chez Tantan, il n’était pas clair que l’introduction de Redis soit nécessaire
- Après le départ du développeur initial, plus personne ne pouvait expliquer clairement pourquoi Redis avait été adopté
- Résultat
- Redis n’était pas vraiment nécessaire compte tenu de la faible charge
- La conclusion a été qu’à long terme, le mieux serait de supprimer Redis
Troisième cas : l’expérience chez MAJORITY
- Contexte
- MAJORITY est une entreprise fintech qui a introduit Redis pour mettre en cache les résultats d’appels à des API externes
- Redis a été adopté pour mettre en cache des données de géolocalisation afin d’accélérer le traitement et de réduire les coûts
- Le problème
- Les mêmes données étaient également stockées dans la base de données (Azure SQL)
- Il était prévu que remplacer les appels Redis par des appels directs à la base n’augmenterait presque pas la charge
- L’utilisation de Redis devait être maintenue pour gérer les verrous (
lock), mais Azure SQL pouvait le faire suffisamment bien
- Résultat
- La conclusion a été que l’introduction de Redis était inutile
- Un plan a été établi pour passer d’une utilisation de Redis à Azure SQL
Conclusion
- Ces trois cas se sont produits dans des domaines, des stacks techniques et des conditions de charge différents
- Leur point commun était une adoption inutile de Redis
- Avant d’adopter Redis, il faut évaluer soigneusement le besoin réel et les gains de performance
- Recommandation de la conférence de Dan McKinley, "Choose Boring Technology"
5 commentaires
Que vous utilisiez Redis ou non, intercaler une couche de cache entre le domaine et la persistance (avec une implémentation par défaut en bypass) n’est pas du tout de l’over-engineering. Pour le logging, les fausses données, le débogage, le profiling, et peut-être même un vrai cache…
+1 Je suis d’accord aussi. Le simple fait d’ajouter une couche crée une
marge de manœuvreet ouvre un espace pour résoudre une multitude de problèmes.Il ne s’agit pas tant de dire qu’il y a un problème avec Redis, mais plutôt d’adopter le point de vue suivant : si la base de données seule suffit, pourquoi introduire un composant supplémentaire et alourdir la charge de gestion ?
L’explication reste assez succincte, donc il vaut mieux le prendre comme une invitation à réfléchir aussi à cette perspective.
Cela dit, il peut aussi y avoir des situations où l’introduction d’un cache Redis est un meilleur choix pour garder une logique applicative simple,
il faudra donc choisir en fonction du contexte.
Le titre est accrocheur, hein. Haha, je suis d’accord aussi~~
Avis Hacker News
En 2015, en travaillant chez Uber, il a été question de faire évoluer le découpage géographique basé sur les codes postaux vers une approche fondée sur des hexagones
Il y a eu un débat sur l’usage excessif de Redis
La culture d’utilisation de Redis n’a pas évolué à la hauteur de sa popularité
Ce n’est pas vraiment une question de Redis contre non-Redis, mais plutôt de la difficulté à travailler avec des données qui se sérialisent mal
Le développement logiciel tend souvent à répéter la manière de faire des autres
Redis est le seul « serveur de structures de données » réellement prêt pour la production
Il est possible que vous n’ayez pas besoin de cache
L’API de Redis est excellente, mais il existe des risques opérationnels
Il est surprenant de voir une telle tendance à déconseiller Redis
Redis convient comme cache temporaire, mais reste insuffisant pour les transactions ou le stockage distribué