- La décision de Redis Inc de fermer son code source (passage à la SSPL) a ébranlé la confiance de la communauté, mais celle-ci s’est rassemblée autour du fork Valkey, entraînant une vague soutenue d’innovations et de contributions.
- Redis 8.0 est revenu à l’open source, et son créateur Antirez a fait son retour pour participer à de nouvelles fonctionnalités et optimisations ; les deux camps progressent donc rapidement.
- Selon les benchmarks les plus récents, Valkey 8.1.1 affiche, sur un environnement 8 vCPU, des performances SET supérieures de 37 % à Redis 8.0, avec une latence p99 plus faible (et un avantage de 16 % sur GET).
- Grâce à des techniques de tuning en conditions réelles comme les threads d’E/S et le core pinning, Valkey obtient plus de 3 fois plus de débit en environnement multithread tout en minimisant la latence.
- L’article partage aussi des benchmarks proches d’un usage réel et des conseils de tuning pratiques, en expliquant comment interpréter les résultats et les appliquer en production.
Fermeture du code source de Redis et arrivée de Valkey
- Il y a un an, Redis Inc (anciennement Garantia Data) a détérioré sa relation de confiance avec la communauté en changeant sa licence open source (adoption de la SSPL).
- Né comme réponse à ce problème, le fork ouvert Valkey est devenu un actif technologique largement utilisé pour les systèmes distribués, le cache et le traitement de données en temps réel.
- De son côté, Redis a tenté de rétablir la confiance avec le retour d’Antirez (le fondateur), le renforcement des performances et des fonctionnalités, ainsi que le retour de Redis 8.0 à l’open source.
Valkey 8.1 vs Redis 8.0 : comparaison des performances
- Benchmark SET sur la même instance AWS c8g.2xl à 8 vCPU, avec des objets de 1 KB, un keyspace de 3 M et 500 connexions
- Valkey 8.1.1 : 999.8K RPS (p99 0.8ms)
- Redis 8.0 : 729.4K RPS (p99 0.99ms)
- Valkey est supérieur de 37 % sur SET et de 16 % sur GET, avec un p99 plus rapide de 30 % sur SET et de 60 % sur GET
- Avec 6 threads d’E/S, Valkey passe de 239K à 678K RPS (x2,8), et le p99 de 1.68ms à 0.93ms (-44 %)
- Redis progresse aussi avec les threads d’E/S, de 235K à 563K RPS, et le p99 de 1.35ms à 0.84ms (-40 %)
Effets du multithreading et du tuning des cœurs
- Les threads d’E/S commencent à produire un effet important à partir de 3 threads, et Valkey creuse davantage l’écart avec Redis au-delà de 4 threads.
- En limitant les cœurs IRQ (interruptions) à 2, puis en fixant Redis/Valkey sur les 6 cœurs restants (pinning), on obtient un gain supplémentaire
- Valkey : 832K → 999.8K RPS (pinning des cœurs/IRQ, utilisation CPU à 80 %)
- La séparation entre cœurs IRQ et cœurs applicatifs améliore l’efficacité du cache et réduit la tail latency au minimum.
- Des exemples concrets sont fournis avec Docker via
cpuset-cpus,--io-threads, etc.
Reproduire les benchmarks et conseils pratiques
- Utilisation des dernières instances AWS Graviton4 (c8g.2xlarge), avec un cluster placement group
- Obtention des performances maximales via le core pinning / l’isolement des IRQ / l’ajustement du nombre de connexions (autour de 400 à 500)
- La taille du keyspace et des objets doit aussi être ajustée : des valeurs plus petites et un keyspace plus réduit améliorent le taux de hit du cache L3.
- Recommandation d’utiliser activement des outils de benchmark multithread comme valkey-benchmark ou rpc-perf (outil en Rust plus proche d’un usage réel)
docker run --network="host" --rm --cpuset-cpus="2-7" \ valkey/valkey:8.0.1 valkey-benchmark \ -h 172.31.4.92 -p 6379 -t SET,GET -n 100000000 -c 256 \ -r 3000000 --threads 6 -d 1024
Limites et points d’attention dans la mesure des performances
-
Les résultats de benchmark peuvent différer des environnements de production réels
- Les charges réelles combinent plusieurs facteurs : mélange SET:GET, variations de charge, objectifs de TPS, latence réseau, etc.
- Lors d’une forte hausse du nombre de connexions, on peut aussi observer davantage de latence en file d’attente, une baisse du throughput et une hausse de la tail latency.
- Les résultats peuvent varier fortement selon l’outil de benchmark, ses options et la topologie réseau.
Principales étapes de croissance et évolution de la communauté
Le projet Valkey a connu, au cours de l’année écoulée, des progrès soutenus sur plusieurs plans.
- Sur GitHub et ailleurs, de nombreux développeurs et entreprises ont collaboré pour ajouter des fonctionnalités, corriger des bugs et renforcer la sécurité.
- Des efforts ont aussi été menés sur la documentation et le support utilisateur afin de réduire la barrière à l’entrée pour les nouveaux utilisateurs.
- Le fonctionnement du projet met l’accent sur une prise de décision transparente et sur des votes communautaires.
Valeur sectorielle et technique
Valkey présente les atouts suivants :
- Tout le monde peut l’utiliser sans contrainte de licence, ce qui en fait une option attractive pour les fournisseurs de services cloud et les grandes entreprises du web.
- Sa forte compatibilité avec Redis facilite les migrations.
- Son développement piloté par la communauté permet d’intégrer des besoins variés et de publier rapidement des mises à jour continues.
Conclusion et enseignements
- Valkey a montré, en un an seulement comme fork de Redis, qu’il pouvait dépasser Redis sur les plans technique, des performances et de la communauté.
- Les conseils pratiques de tuning et les outils comme les threads d’E/S, la séparation cœurs/IRQ et l’ajustement des connexions sont déterminants.
- Les performances ne s’améliorent pas automatiquement : une optimisation continue adaptée au système, à la charge et à l’infrastructure reste indispensable.
- En environnement réel, il faut éviter de se fier uniquement aux chiffres de benchmark et adopter une approche pragmatique fondée sur des tests dans des situations variées.
4 commentaires
Redis a certes pris beaucoup de mauvaises décisions, mais c’est dommage de voir que celui qui fait tout le travail n’est pas celui qui en récolte les bénéfices.
Publié dans le « Redis User Group » sur Facebook
Il s’agit d’un document qui résume les améliorations apportées à Valkey 8.
https://www.facebook.com/groups/rediskorea/posts/3927030954110001/
Le lire en parallèle du contenu ci-dessus devrait aider à mieux comprendre.
En réalité, ce n’est pas tant que Valkey ait fait quelque chose… c’est plutôt que l’autre côté s’est effondré tout seul…
Avis Hacker News
write(2)/read(2)peuvent être très lents au moment du retour de l’event loop, et j’ai donc introduit une structure où seul l’I/O est traité en parallèle sur N threads, sans contention, à cet instant précis, avant de revenir immédiatement à un modèle single-thread. Je remercie l’équipe Valkey d’avoir fait évoluer ce système davantage. Ce système fonctionnait déjà depuis longtemps, et je suis gêné par la tendance de la presse à exagérer des données qui, en pratique, n’ont pas changé. En réalité, ces fonctionnalités intéressent davantage les utilisateurs en entreprise ou les fournisseurs cloud (Amazon, Google, etc.) que la majorité des utilisateurs classiques de Redis. Sauf à devoir gérer une charge énorme ou un très grand nombre d’utilisateurs en même temps, Redis consomme généralement peu de CPU, donc il n’est pas vraiment nécessaire d’activer cela. Récemment, en développant le type de données vector set dans Redis, nous faisons du threading le comportement par défaut et permettons aussi des écritures de vector set via VADD de manière threadée. Des structures de données comme HNSW introduisent pour la première fois dans l’histoire de Redis un coût constant énorme, ce qui change complètement l’espace de conception. Par le passé, nous avions déjà implémenté la prise en charge des threads pour les modules. L’usage des threads est une décision qui dépend du contexte.