Dragonfly-Projekt entwickelt schnelleren Ersatz für Redis und Memcached

Die erste Version des In-Memory-Caching-Systems Dragonfly ist verfügbar und bietet Unterstützung für die Protokolle Memcached und Redis, ermöglicht aber die Ausführung von Abfragen mit deutlich höherer Leistung und geringerem Speicherverbrauch. Das System manipuliert Daten im Schlüssel/Wert-Format und kann als leichte Lösung verwendet werden, um die Arbeit von Websites mit hoher Auslastung zu beschleunigen, indem langsame Abfragen an das DBMS und Zwischendaten im RAM zwischengespeichert werden. 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 des Dragonfly-Projekts erfordern, dass der Code erst am 2.0. Juni 1 auf die Apache 2027-Lizenz übertragen wird. 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.

Laut den Entwicklern und nachgewiesenen Tests behauptet Dragonfly, das schnellste Speichersystem zu sein. Im Vergleich zu Redis erreichte Dragonfly eine 25-fache Leistungssteigerung und eine dreifache Reduzierung des Speicherverbrauchs für typische Workloads. Ein Dragonfly-Server kann Millionen von Anfragen pro Sekunde verarbeiten, in der Amazon EC2 c6gn.16xlarge-Umgebung konnte beispielsweise eine Leistung von 3.8 Millionen Anfragen pro Sekunde erreicht werden.

Dragonfly-Projekt entwickelt schnelleren Ersatz für Redis und Memcached

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 bleibt 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).

Dragonfly-Projekt entwickelt schnelleren Ersatz für Redis und Memcached

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.

Zu den in der ersten Version verfügbaren Funktionen gehört die Unterstützung des RESP2-Protokolls und von 130 Redis-Befehlen, was in etwa der Funktionalität der Redis 2.8-Version entspricht. Darüber hinaus unterstützt Dragonfly alle zwischengespeicherten Befehle außer CAS (Check-and-Set), bietet Unterstützung für asynchrone Vorgänge zum Erstellen von Snapshots, sorgt für einen vorhersehbaren Speicherverbrauch, bietet einen integrierten Lua 5.4-Interpreter und unterstützt komplexe Datentypen wie Hashes, Mengen und Listen (ZSET, HSET, LIST, SETS und STRING).

Separat verfügbar ist ein Caching-Modus, der alte Daten automatisch durch neue Daten ersetzt, nachdem der freie Speicher erschöpft ist. Es ist möglich, den Daten eine Lebensdauer zuzuordnen, während der die Daten als relevant gelten. Der Speicherstatus kann im Hintergrund zur späteren Wiederherstellung nach dem Neustart auf die Festplatte geschrieben werden. Zur Verwaltung des Systems stehen eine HTTP-Konsole (Bindung an TCP-Port 6379) und eine mit Prometheus kompatible API zur Rückgabe von Metriken zur Verfügung. In zukünftigen Versionen planen wir, die Unterstützung für Redis-Befehle zu erweitern und die Möglichkeit zu implementieren, Speicher zu replizieren, um Fehlertoleranz und Lastausgleich bereitzustellen.

Source: opennet.ru

Kommentar hinzufügen