Die erste Ausgabe des Dragonfly-Datencache-Systems im Arbeitsspeicher ist verfügbar und unterstützt die Protokolle Memcached und Redis, ermöglicht jedoch Anfragen mit deutlich höherer Leistung und geringerem Speicherverbrauch. Das System manipuliert Daten im Schlüssel/Wert-Format und kann als leichtgewichtige Lösung zur Beschleunigung hochlastiger Websites eingesetzt werden, die langsame Anfragen an Datenbanksysteme und Zwischenspeicher im Arbeitsspeicher cachen. Der Code von Dragonfly ist in C/C++ geschrieben und unter der BSL (Business Source License) lizenziert.
Die BSL-Lizenz wurde von den Mitbegründern von MySQL als Alternative zum Open-Core-Modell vorgeschlagen. Der Kern der BSL besteht darin, dass der Code der erweiterten Funktionalität anfangs für Änderungen verfügbar ist, aber für eine bestimmte Zeit kostenlos genutzt werden kann, sofern zusätzliche Bedingungen erfüllt sind, deren Umgehung den Erwerb einer kommerziellen Lizenz erfordert. Die zusätzlichen Lizenzbedingungen für das Dragonfly-Projekt legen fest, dass der Code erst am 1. Juni 2027 auf die Apache 2.0-Lizenz ü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 Erstellung kostenpflichtiger Cloud-Dienste, die auf Dragonfly aufbauen.
Laut den Entwicklern und den durchgeführten Tests beansprucht Dragonfly den Titel des schnellsten Speichersystems im Arbeitsspeicher. Im Vergleich zu Redis konnte Dragonfly bei typischen Lastarten eine 25-fache Leistungssteigerung und eine dreifache Einsparung des Speicherverbrauchs erreichen. Ein Server Dragonfly kann Millionen von Anfragen pro Sekunde verarbeiten; beispielsweise wurde in der Umgebung von Amazon EC2 c6gn.16xlarge eine Leistung von 3,8 Millionen Anfragen pro Sekunde erreicht.

In Tests mit der Speicherung von 5 GB Daten benötigte Dragonfly 30% weniger Speicher als Redis. Während der Erstellung von Snapshots durch das Kommando "bgsave" steigt der Speicherverbrauch an, bleibt jedoch zu Spitzenzeiten fast dreimal geringer als bei Redis, während die Snapshot-Schreiboperation erheblich schneller durchgeführt wird (im Test wurde der Snapshot in Dragonfly in 30 Sekunden, in Redis in 42 Sekunden geschrieben).

Die hohe Leistung wird durch die mehrstufige Architektur ohne Ressourcenteilung (shared-nothing) erreicht, die besagt, dass jedem Thread ein separater, isolierter Prozess mit einem eigenen Datenpaket zugeordnet wird, der ohne Mutexe und Spinlocks arbeitet. Um die Atomarität bei der Arbeit mit mehreren Schlüsseln zu gewährleisten, werden leichte VLL-Sperren verwendet. Für die effektive Speicherung von Informationen im Speicher wird eine dashtable-Struktur verwendet, die eine Variante von partitionierten Hash-Tabellen implementiert.
In der ersten Version wird die Unterstützung des RESP2-Protokolls und von 130 Redis-Befehlen hervorgehoben, was ungefähr der Funktionalität von Redis 2.8 entspricht. Darüber hinaus unterstützt Dragonfly alle Memcached-Befehle, mit Ausnahme von CAS (Check-and-Set), bietet Unterstützung für asynchrone Operationen zur Erstellung von Snapshots, gewährleistet vorhersehbaren Speicherverbrauch, enthält einen integrierten Interpreter für Lua 5.4 und unterstützt komplexe Datentypen wie Hashes, Mengen und Listen (ZSET, HSET, LIST, SET und STRING).
Ein separater Cache-Modus ist verfügbar, bei dem automatisch alte Daten durch neue ersetzt werden, wenn der verfügbare Speicher aufgebraucht ist. Es ist möglich, eine Lebensdauer für die Daten festzulegen, während der die Daten als aktuell gelten. Der Zustand des Speichers kann im Hintergrund auf die Festplatte gespeichert werden, um nach einem Neustart wiederhergestellt zu werden. Um das System zu verwalten, steht eine HTTP-Konsole zur Verfügung (gebunden an den TCP-Port 6379) sowie eine API zur Bereitstellung von Metriken, die mit Prometheus kompatibel ist. In zukünftigen Versionen ist geplant, die Unterstützung für Redis-Befehle zu erweitern und die Möglichkeit zur Replikation des Speichers zur Gewährleistung von Ausfallsicherheit und Lastenausgleich zu implementieren.
Quelle: opennet.ru
