Die erste Version des Dragonfly-Daten-Caching-Systems ist verfügbar. Es unterstützt die Protokolle Memcached und Redis, bietet jedoch deutlich höhere Leistung und geringeren Speicherverbrauch bei Anfragen. Das System verarbeitet Daten im Schlüssel-Wert-Format und eignet sich als leichtgewichtiges Mittel zur Beschleunigung von stark frequentierten Websites, indem es langsame Datenbankabfragen und Zwischenspeicherungen im Arbeitsspeicher optimiert. Der Dragonfly-Code ist in C/C++ geschrieben und wird unter der BSL (Business Source License) vertrieben.
Die BSL-Lizenz wurde von den Mitgründern von MySQL als Alternative zum Open-Core-Modell angeboten. Der Kern der BSL besteht darin, dass der Code für erweiterte Funktionen zunächst zur Bearbeitung verfügbar ist, jedoch für eine gewisse Zeit nur unter Einhaltung zusätzlicher Bedingungen kostenlos verwendet werden kann, die wiederum den Erwerb einer kommerziellen Lizenz erfordern. Die zusätzlichen Lizenzbedingungen des Projekts Dragonfly sehen vor, dass der Code erst am 1. Juni 2027 auf die Lizenz Apache 2.0 übertragen werden darf. Bis zu diesem Zeitpunkt erlaubt die Lizenz die Nutzung des Codes nur zur Unterstützung eigener Dienste und Produkte, verbietet jedoch die Verwendung zur Schaffung kostenpflichtiger Cloud-Dienste, die auf Dragonfly basieren.
Laut den Entwicklern und den durchgeführten Tests beansprucht Dragonfly den Titel als das schnellste In-Memory-Speichersystem. Im Vergleich zu Redis konnte Dragonfly unter typischen Lastarten eine 25-fache Leistungssteigerung und eine dreifache Reduzierung des Speicherverbrauchs erreichen. Ein der Server Dragonfly kann Millionen von Anfragen pro Sekunde verarbeiten. So wurde in einer Amazon EC2 c6gn.16xlarge-Umgebung eine Leistung von 3,8 Millionen Anfragen pro Sekunde erreicht.

In Tests mit 5 GB Daten benötigte Dragonfly 30 % weniger Speicher als Redis. Während der Erstellung von Snapshots durch das Team „bgsave“ steigt der Speicherbedarf, bleibt aber zu Spitzenzeiten fast dreimal niedriger als bei Redis. Die Snapshot-Schreiboperation wird zudem deutlich schneller abgeschlossen (im Test wurde ein Snapshot in Dragonfly in 30 Sekunden und in Redis in 42 Sekunden geschrieben).

Die hohe Leistung wird durch eine mehrschichtige Architektur ohne Ressourcenteilung (shared-nothing) erreicht, bei der jedem Thread ein separater, separierter Handler mit einem eigenen Datensatz zugeordnet ist, der ohne Mutexe und Spin-Locks arbeitet. Zur Gewährleistung der Atomizität bei der Arbeit mit mehreren Schlüsseln kommen leichte VLL-Locks zum Einsatz. Für die effektive Speicherung von Informationen im Speicher wird eine Datenstruktur namens dashtable verwendet, die eine spezielle Art von partitionierten Hash-Tabellen implementiert.
Zu den Funktionen der ersten Version gehören die Unterstützung des RESP2-Protokolls und 130 Redis-Befehle, was ungefähr der Funktionalität von Redis 2.8 entspricht. Darüber hinaus unterstützt Dragonfly alle memcached-Befehle außer CAS (check-and-set), bietet Unterstützung für asynchrone Operationen zur Snapshot-Erstellung, stellt vorhersehbaren Speicherverbrauch sicher, bietet einen integrierten Lua 5.4-Interpreter und unterstützt komplexe Datentypen wie Hashes, Mengen und Listen (ZSET, HSET, LIST, SETS und STRING).
Ein separater Cache-Modus ist verfügbar, der automatisch veraltete Daten durch neue ersetzt, sobald der verfügbare Speicher erschöpft ist. Eine zeitliche Bindung der Daten, während der sie als aktuell gelten, ist möglich. Der Zustand des Speichers kann im Hintergrund auf die Festplatte geschrieben werden, um eine Wiederherstellung nach einem Neustart zu ermöglichen. Für das Systemmanagement steht eine HTTP-Konsole zur Verfügung (gebunden an TCP-Port 6379) sowie eine API zur Bereitstellung von Metriken, die mit Prometheus kompatibel ist. In zukünftigen Versionen ist eine Erweiterung der Unterstützung der Redis-Befehle sowie die Implementierung von Speicherreplikation zur Gewährleistung der Fehlertoleranz und Lastverteilung vorgesehen.
Quelle: opennet.ru
