Die Veröffentlichung des Cache- und Datenspeichersystems Dragonfly ist erfolgt, das mit Daten im Schlüssel-Wert-Format arbeitet und als leichtgewichtige Lösung zur Beschleunigung von stark frequentierten Websites eingesetzt werden kann. Es cached langsame Anfragen an die Datenbank und Zwischenwerte im Arbeitsspeicher. Dragonfly unterstützt die Protokolle Memcached und Redis, wodurch bestehende Client-Bibliotheken verwendet und Projekte, die Memcached und Redis nutzen, ohne Code-Änderungen auf Dragonfly umgestellt werden können.
Im Vergleich zu Redis konnte Dragonfly bei typischen Lasten in einer Amazon EC2 c6gn.16xlarge Umgebung eine 25-fache Leistungssteigerung (3,8 Millionen Anfragen pro Sekunde) erreichen. Im Vergleich zu Memcached in der AWS-Umgebung c6gn.16xlarge gelang es Dragonfly, die Anzahl der Schreibanfragen pro Sekunde um das 4,7-Fache zu steigern (3,8 Millionen gegenüber 806.000) und die Anzahl der Leseanfragen um das 1,77-Fache (3,7 Millionen gegenüber 2,1 Millionen).

In Tests zur Speicherung von 5 GB Daten benötigte Dragonfly 30 % weniger Speicher als Redis. Während der Erstellung von Snapshots mit dem Befehl „bgsave“ steigt der Speicherverbrauch, bleibt jedoch in Spitzenmomenten fast dreimal geringer als bei Redis, und die Snapshot-Schreiboperation wird deutlich schneller ausgeführt (im Test wurde das 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.
Einige Funktionen von Dragonfly:
- Ein Cache-Modus, der automatisch das Verdrängen alter Daten durch neue nach Erschöpfung des verfügbaren Speichers sicherstellt.
- Unterstützung der Bindung an die Lebensdauer von Daten, in der die Daten als aktuell betrachtet werden.
- Unterstützung des Hintergrundspeichers, um den Zustand auf die Festplatte zurückzusetzen und anschließend nach einem Neustart wiederherzustellen.
- Verfügbarkeit einer HTTP-Konsole (gebunden an TCP-Port 6379) zur Verwaltung des Systems und einer API zur Bereitstellung von Metriken, die mit Prometheus kompatibel ist.
- Unterstützung von 185 Redis-Befehlen, was in etwa der Funktionalität der Redis-Version 5 entspricht.
- Unterstützung aller Memcached-Befehle, mit Ausnahme von CAS (check-and-set).
- Unterstützung für asynchrone Vorgänge zum Erstellen von Snapshots.
- Vorhersehbare Speichernutzung.
- Integrierter Interpreter für Lua 5.4.
- Unterstützung komplexer Datentypen wie Hashes, Mengen, Listen (ZSET, HSET, LIST, SETS und STRING) sowie Daten im JSON-Format.
- Unterstützung der Replikation von Speichern zur Gewährleistung der Ausfallsicherheit und Lastverteilung.
Der Dragonfly-Code ist in C/C++ geschrieben und wird unter der BSL (Business Source License) vertrieben. Die BSL wurde von den Mitbegründern von MySQL als Alternative zum Open-Core-Modell eingeführt. Das Wesentliche der BSL ist, dass der Code für erweiterte Funktionalitäten zunächst zur Änderung verfügbar ist, aber für einen bestimmten Zeitraum nur unter Einhaltung weiterer Bedingungen kostenlos genutzt werden kann, für deren Umgehung eine kommerzielle Lizenz erforderlich ist. Die zusätzlichen Lizenzbedingungen des Dragonfly-Projekts schreiben vor, dass der Code am 15. März 2028 unter die Apache 2.0-Lizenz übertragen wird. Bis zu diesem Zeitpunkt erlaubt die Lizenz die Nutzung des Codes nur zur Unterstützung Ihrer eigenen Dienste und Produkte, verbietet jedoch die Verwendung zur Erstellung kostenpflichtiger Cloud-Dienste, die auf Dragonfly aufbauen.
Die Version Dragonfly 1.0 zeichnet sich durch die Implementierung der Unterstützung für die Datenreplikation von Primär Server Für die sekundäre Nutzung kann Dragonfly so eingerichtet werden, dass es als sekundärer Speicher dient, der Daten vom primären Server sowohl auf der Dragonfly- als auch auf der Redis-Plattform empfängt. Die API zur Verwaltung der Replikation ist mit Redis kompatibel und basiert auf den Befehlen ROLE und REPLICAOF (SLAVEOF).
Quelle: opennet.ru
