Sortie de Dragonfly 1.0, un système de mise en cache des données en RAM

Le système de mise en cache et de stockage en mémoire Dragonfly a été lancé. Il manipule les données au format clé/valeur et peut être utilisé comme une solution légère pour accélérer le travail des sites très chargés, en mettant en cache les requêtes lentes vers le SGBD et les données intermédiaires dans la RAM. Dragonfly prend en charge les protocoles Memcached et Redis, ce qui vous permet d'utiliser les bibliothèques clientes existantes et de transférer des projets à l'aide de Memcached et Redis vers Dragonfly sans retravailler le code.

Par rapport à Redis, Dragonfly a obtenu des performances multipliées par 2 (6 millions de requêtes par seconde) pour les charges de travail typiques dans l'environnement Amazon EC16 c25gn.3.8xlarge. Par rapport à Memcached dans l'environnement AWS c6gn.16xlarge, Dragonfly a pu effectuer 4.7 fois plus de requêtes d'écriture par seconde (3.8 millions contre 806 1.77) et 3.7 fois plus de requêtes de lecture par seconde (2.1 millions contre XNUMX millions).

Sortie de Dragonfly 1.0, un système de mise en cache des données en RAM

Lors des tests de stockage de 5 Go de données, Dragonfly nécessitait 30 % de mémoire en moins que Redis. Lors de la création d'instantanés avec la commande "bgsave", la consommation de mémoire augmente, mais aux moments de pointe, elle reste presque trois fois inférieure à celle de Redis, et l'opération d'enregistrement d'instantané elle-même est beaucoup plus rapide (dans le test, un instantané dans Dragonfly a été écrit en 30 secondes, tandis que Redis - en 42 secondes).

Sortie de Dragonfly 1.0, un système de mise en cache des données en RAM

Les hautes performances sont obtenues grâce à une architecture multithread sans partage de ressources (shared-nothing), ce qui signifie que chaque thread se voit attribuer un processeur distinct avec sa propre partie de données, fonctionnant sans mutex ni verrous de rotation. Pour garantir l'atomicité lorsque vous travaillez avec plusieurs clés, des verrous VLL légers sont utilisés. Pour stocker efficacement les informations en mémoire, la structure dashtable est utilisée, qui implémente un type de table de hachage partitionnée.

Quelques fonctionnalités de Dragonfly :

  • Mode de mise en cache, qui remplace automatiquement les anciennes données par de nouvelles données une fois la mémoire libre épuisée.
  • Prise en charge de la liaison aux données pendant une durée de vie pendant laquelle les données sont considérées comme pertinentes.
  • Prise en charge du vidage de l'état de stockage sur le disque en arrière-plan pour une récupération ultérieure après le redémarrage.
  • La présence d'une console HTTP (liée au port TCP 6379) pour la gestion du système et d'une API pour renvoyer les métriques, compatible avec Prometheus.
  • Prise en charge de 185 commandes Redis, ce qui équivaut à peu près aux fonctionnalités de la version Redis 5.
  • Prend en charge toutes les commandes Memcached sauf CAS (check-and-set).
  • Prise en charge des opérations asynchrones pour la création d'instantanés.
  • Consommation de mémoire prévisible.
  • Interpréteur Lua 5.4 intégré.
  • Prend en charge les types de données complexes tels que les hachages, les ensembles, les listes (ZSET, HSET, LIST, SETS et STRING) et les données JSON.
  • Prend en charge la réplication du stockage pour la tolérance aux pannes et l'équilibrage de charge.

Le code Dragonfly est écrit en C/C++ et est distribué sous licence BSL (Business Source License). La licence BSL a été proposée par les co-fondateurs de MySQL comme alternative au modèle Open Core. L'essence de BSL est que le code des fonctionnalités avancées est initialement disponible pour modification, mais pendant un certain temps, il ne peut être utilisé gratuitement que si des conditions supplémentaires sont remplies, qui nécessitent l'achat d'une licence commerciale pour être contournées. Des conditions de licence supplémentaires pour le projet Dragonfly nécessitent que le code soit transféré vers la licence Apache 2.0 le 15 mars 2028. Jusqu'à présent, la licence autorise l'utilisation du code uniquement pour assurer le fonctionnement de ses services et produits, mais interdit son utilisation pour la création de services cloud payants qui servent de module complémentaire à Dragonfly.

La version Dragonfly 1.0 se distingue par la mise en œuvre de la prise en charge de la réplication des données du serveur principal vers le serveur secondaire. Cependant, Dragonfly peut être configuré pour être utilisé comme stockage secondaire recevant les données d'un serveur principal basé sur Dragonfly ou sur Redis. L'API de gestion de réplication est compatible avec Redis et repose sur l'utilisation des commandes ROLE et REPLICAOF (SLAVEOF).

Source: opennet.ru

Ajouter un commentaire