Veröffentlichung von Dragonfly 1.0, einem System zum Zwischenspeichern von Daten im RAM

Das In-Memory-Caching- und Speichersystem Dragonfly wurde veröffentlicht, das Daten im Schlüssel/Wert-Format manipuliert und als leichte Lösung zur Beschleunigung der Arbeit stark ausgelasteter Websites, zum Zwischenspeichern langsamer Abfragen an das DBMS und Zwischendaten im RAM verwendet werden kann. Dragonfly unterstützt die Protokolle Memcached und Redis, wodurch Sie vorhandene Client-Bibliotheken nutzen und Projekte mit Memcached und Redis an Dragonfly übertragen können, ohne den Code überarbeiten zu müssen.

Im Vergleich zu Redis erreichte Dragonfly eine 2-fache Leistungssteigerung (6 Millionen Anfragen pro Sekunde) für typische Workloads in der Amazon EC16 c25gn.3.8xlarge-Umgebung. Im Vergleich zu Memcached in der AWS c6gn.16xlarge-Umgebung konnte Dragonfly 4.7-mal mehr Schreibanfragen pro Sekunde (3.8 Millionen gegenüber 806) und 1.77-mal mehr Leseanfragen pro Sekunde (3.7 Millionen gegenüber 2.1 Millionen) ausführen.

Veröffentlichung von Dragonfly 1.0, einem System zum Zwischenspeichern von Daten im RAM

Bei Tests zur Speicherung von 5 GB Daten benötigte Dragonfly 30 % weniger Speicher als Redis. Beim Erstellen von Snapshots mit dem Befehl „bgsave“ steigt der Speicherverbrauch, in Spitzenzeiten blieb er jedoch fast dreimal geringer als in Redis, und der Snapshot-Aufzeichnungsvorgang selbst ist viel schneller (im Test wurde ein Snapshot in Dragonfly in 30 geschrieben). Sekunden, während Redis - in 42 Sekunden).

Veröffentlichung von Dragonfly 1.0, einem System zum Zwischenspeichern von Daten im RAM

Eine hohe Leistung wird durch eine Multithread-Architektur ohne gemeinsame Nutzung von Ressourcen (Shared-Nothing) erreicht, was bedeutet, dass jedem Thread ein separater separater Prozessor mit seinem eigenen Datenanteil zugewiesen wird, der ohne Mutexe und Spin-Locks arbeitet. Um die Atomizität beim Arbeiten mit mehreren Schlüsseln sicherzustellen, werden leichte VLL-Sperren verwendet. Um Informationen effizient im Speicher zu speichern, wird die Dashtable-Struktur verwendet, die eine Art partitionierte Hash-Tabelle implementiert.

Einige Funktionen von Dragonfly:

  • Caching-Modus, der alte Daten automatisch durch neue Daten ersetzt, nachdem der freie Speicher erschöpft ist.
  • Unterstützung für die Bindung an Daten über einen Zeitraum, in dem die Daten als relevant gelten.
  • Unterstützung für das Flushen des Speicherstatus auf die Festplatte im Hintergrund für eine spätere Wiederherstellung nach dem Neustart.
  • Das Vorhandensein einer HTTP-Konsole (bindet an TCP-Port 6379) für die Systemverwaltung und einer API zur Rückgabe von Metriken, kompatibel mit Prometheus.
  • Unterstützung für 185 Redis-Befehle, was in etwa der Funktionalität der Redis 5-Version entspricht.
  • Unterstützt alle Memcached-Befehle außer CAS (Check-and-Set).
  • Unterstützung für asynchrone Vorgänge zum Erstellen von Snapshots.
  • Vorhersehbarer Speicherverbrauch.
  • Integrierter Lua 5.4-Interpreter.
  • Unterstützt komplexe Datentypen wie Hashes, Sets, Listen (ZSET, HSET, LIST, SETS und STRING) und JSON-Daten.
  • Unterstützt die Speicherreplikation für Fehlertoleranz und Lastausgleich.

Der Dragonfly-Code ist in C/C++ geschrieben und wird unter der BSL (Business Source License) vertrieben. Die BSL-Lizenz wurde von den Mitbegründern von MySQL als Alternative zum Open-Core-Modell vorgeschlagen. Der Kern von BSL besteht darin, dass der Code mit erweiterter Funktionalität zunächst zur Änderung verfügbar ist, für einige Zeit jedoch nur dann kostenlos genutzt werden kann, wenn zusätzliche Bedingungen erfüllt sind, deren Umgehung den Erwerb einer kommerziellen Lizenz erfordert. Zusätzliche Lizenzbedingungen für das Dragonfly-Projekt erfordern die Übertragung des Codes auf die Apache 2.0-Lizenz am 15. März 2028. Bis zu diesem Zeitpunkt erlaubt die Lizenz die Nutzung des Codes nur zur Gewährleistung des Betriebs seiner Dienste und Produkte, verbietet jedoch die Nutzung für die Erstellung kostenpflichtiger Cloud-Dienste, die als Add-on zu Dragonfly dienen.

Version Dragonfly 1.0 zeichnet sich durch die Implementierung der Unterstützung für die Datenreplikation vom Primärserver zum Sekundärserver aus. Gleichzeitig kann Dragonfly so konfiguriert werden, dass es als sekundärer Speicher verwendet wird und Daten von einem primären Server empfängt, der entweder auf Dragonfly oder Redis basiert. Die Replikationsverwaltungs-API ist mit Redis kompatibel und basiert auf der Verwendung der Befehle ROLE und REPLICAOF (SLAVEOF).

Source: opennet.ru

Kommentar hinzufügen