La sortie du systĂšme de mise en cache et de stockage en mĂ©moire vive, Dragonfly, a eu lieu. Ce systĂšme manipule les donnĂ©es au format clĂ©/valeur et peut ĂȘtre utilisĂ© comme une solution lĂ©gĂšre pour accĂ©lĂ©rer les performances des sites Ă fort trafic, en mettant en cache les requĂȘtes lentes Ă la SGBD et les donnĂ©es intermĂ©diaires en mĂ©moire vive. Dragonfly prend en charge les protocoles Memcached et Redis, permettant d'utiliser des bibliothĂšques clientes existantes et de migrer vers Dragonfly des projets utilisant Memcached et Redis sans retravailler le code.
ComparĂ© Ă Redis, Dragonfly a rĂ©ussi Ă obtenir un augment de performance 25 fois supĂ©rieur (3,8 millions de requĂȘtes par seconde) sous des charges de travail typiques dans un environnement Amazon EC2 c6gn.16xlarge. Par rapport Ă Memcached dans l'environnement AWS c6gn.16xlarge, Dragonfly a pu exĂ©cuter 4,7 fois plus de requĂȘtes par seconde Ă l'Ă©criture (3,8 millions contre 806 000) et 1,77 fois plus de requĂȘtes par seconde Ă la lecture (3,7 millions contre 2,1 millions).

Lors des tests de stockage de 5 Go de données, Dragonfly a nécessité 30% de mémoire en moins que Redis. Pendant la création de snapshots avec la commande «bgsave», la consommation de mémoire augmente, mais aux moments de pointe, elle restait prÚs de trois fois moins élevée que celle de Redis, et l'opération d'écriture du snapshot s'effectue de maniÚre significativement plus rapide (dans le test, le snapshot dans Dragonfly a été enregistré en 30 secondes, tandis que Redis a pris 42 secondes).

Une performance Ă©levĂ©e est atteinte grĂące Ă une architecture multithread sans partage de ressources (shared-nothing), impliquant qu'un gestionnaire sĂ©parĂ©, avec sa propre portion de donnĂ©es, est associĂ© Ă chaque thread, fonctionnant sans mutex ni spin-locks. Pour garantir l'atomicitĂ© lors de la manipulation de plusieurs clĂ©s, des verrous lĂ©gers VLL sont utilisĂ©s. Une structure dashtable, qui met en Ćuvre une variĂ©tĂ© de tables de hachage partitionnĂ©es, est appliquĂ©e pour un stockage efficace des informations en mĂ©moire.
Certaines fonctionnalités de Dragonfly :
- Mode de mise en cache avec lequel les anciennes données sont automatiquement remplacées par de nouvelles lorsque la mémoire libre est épuisée.
- Prise en charge de la liaison temporelle des données, pendant laquelle les données sont considérées comme valides.
- Prise en charge du rafraßchissement de l'état du stockage sur disque en arriÚre-plan pour une restauration ultérieure aprÚs un redémarrage.
- Présence d'une console HTTP (liée au port TCP 6379) pour gérer le systÚme et d'une API pour délivrer des métriques, compatible avec Prometheus.
- Prise en charge de 185 commandes Redis, ce qui correspond environ à la fonctionnalité de la version Redis 5.
- Prise en charge de toutes les commandes Memcached, sauf CAS (check-and-set).
- Prise en charge des opérations asynchrones pour la création de snapshots.
- Consommation de mémoire prévisible.
- Interpréteur Lua 5.4 intégré.
- Prise en charge de types de données complexes, tels que des hachages, des ensembles, des listes (ZSET, HSET, LIST, SETS et STRING) et des données au format JSON.
- Prise en charge de la réplication du stockage pour assurer la tolérance aux pannes et la répartition de la charge.
Le code de Dragonfly est Ă©crit en C/C++ et est distribuĂ© sous la licence BSL (Business Source License). La licence BSL a Ă©tĂ© proposĂ©e par les cofondateurs de MySQL comme alternative au modĂšle Open Core. L'idĂ©e de la BSL est que le code de la fonctionnalitĂ© avancĂ©e est initialement disponible pour modification, mais qu'il peut ĂȘtre utilisĂ© gratuitement pendant un certain temps uniquement sous certaines conditions, contournement desquelles nĂ©cessite l'achat d'une licence commerciale. Les conditions de licence supplĂ©mentaires du projet Dragonfly prĂ©voient un passage Ă la licence Apache 2.0 le 15 mars 2028. Jusqu'Ă cette date, la licence permet d'utiliser le code uniquement pour assurer le fonctionnement de ses services et produits, mais interdit son utilisation pour crĂ©er des services cloud payants qui s'appuient sur Dragonfly.
La version Dragonfly 1.0 se distingue par la mise en Ćuvre du support de la rĂ©plication des donnĂ©es de la source de serveurs vers la secondaire. Dans ce cadre, Dragonfly peut ĂȘtre configurĂ© pour ĂȘtre utilisĂ© comme un stockage secondaire, acceptant des donnĂ©es d'un serveur primaire basĂ© soit sur Dragonfly, soit sur Redis. L'API de gestion de la rĂ©plication est compatible avec Redis et repose sur les commandes ROLE et REPLICAOF (SLAVEOF).
Source : opennet.ru
