Il progetto Dragonfly sta sviluppando un sostituto più veloce per Redis e Memcached

È disponibile la prima versione del sistema di caching in memoria Dragonfly, che fornisce supporto per i protocolli Memcached e Redis, ma consente di eseguire query con prestazioni molto più elevate e un minore consumo di memoria. Il sistema manipola i dati in formato chiave/valore e può essere utilizzato come soluzione leggera per accelerare il lavoro di siti ad alto carico, memorizzando nella cache query lente al DBMS e dati intermedi nella RAM. Il codice Dragonfly è scritto in C/C++ ed è distribuito sotto licenza BSL (Business Source License).

La licenza BSL è stata proposta dai cofondatori di MySQL come alternativa al modello Open Core. L'essenza di BSL è che il codice delle funzionalità avanzate è inizialmente disponibile per la modifica, ma per qualche tempo può essere utilizzato gratuitamente solo se vengono soddisfatte condizioni aggiuntive, che richiedono l'acquisto di una licenza commerciale per aggirarlo. Ulteriori termini di licenza del progetto Dragonfly richiedono che il codice venga trasferito alla licenza Apache 2.0 solo il 1 giugno 2027. Fino a quel momento la licenza consente l'utilizzo del codice solo per garantire il funzionamento dei suoi servizi e prodotti, ma ne vieta l'utilizzo per la creazione di servizi cloud a pagamento che fungano da add-on per Dragonfly.

Secondo gli sviluppatori e i test dimostrati, Dragonfly afferma di essere il sistema di archiviazione della memoria più veloce. Rispetto a Redis, Dragonfly ha ottenuto un aumento delle prestazioni di 25 volte e una riduzione di tre volte del consumo di memoria per carichi di lavoro tipici. Un server Dragonfly può elaborare milioni di richieste al secondo, ad esempio nell'ambiente Amazon EC2 c6gn.16xlarge è stato possibile raggiungere una prestazione di 3.8 milioni di richieste al secondo.

Il progetto Dragonfly sta sviluppando un sostituto più veloce per Redis e Memcached

Nei test per l'archiviazione di 5 GB di dati, Dragonfly ha richiesto il 30% di memoria in meno rispetto a Redis. Quando si creano istantanee con il comando "bgsave", il consumo di memoria aumenta, ma nei momenti di punta rimane quasi tre volte inferiore rispetto a Redis e l'operazione di registrazione delle istantanee stessa è molto più veloce (nel test, uno snapshot in Dragonfly è stato scritto in 30 secondi, mentre Redis - in 42 secondi).

Il progetto Dragonfly sta sviluppando un sostituto più veloce per Redis e Memcached

Le prestazioni elevate sono ottenute grazie a un'architettura multi-thread senza condivisione di risorse (shared-nothing), il che significa che a ogni thread viene assegnato un processore separato separato con la propria porzione di dati, lavorando senza mutex e spin lock. Per garantire l'atomicità quando si lavora con più chiavi, vengono utilizzati lucchetti VLL leggeri. Per archiviare in modo efficiente le informazioni in memoria, viene utilizzata la struttura dashtable, che implementa un tipo di tabella hash partizionata.

Tra le funzionalità disponibili nella prima versione si segnala il supporto per il protocollo RESP2 e 130 comandi Redis, che corrisponde approssimativamente alla funzionalità della versione Redis 2.8. Inoltre, Dragonfly supporta tutti i comandi memcached tranne CAS (check-and-set), fornisce supporto per operazioni asincrone per la creazione di istantanee, fornisce un consumo di memoria prevedibile, fornisce un interprete Lua 5.4 integrato e supporta tipi di dati complessi come hash, insiemi ed elenchi (ZSET, HSET, LIST, SETS e STRING).

È disponibile separatamente una modalità di memorizzazione nella cache, che sostituisce automaticamente i vecchi dati con nuovi dati una volta esaurita la memoria libera. È possibile allegare ai dati una durata di vita durante la quale i dati sono considerati rilevanti. Lo stato di archiviazione può essere scaricato su disco in background per un successivo ripristino dopo il riavvio. Per la gestione del sistema viene fornita una console HTTP (si lega alla porta TCP 6379) e un'API per la restituzione delle metriche, compatibile con Prometheus. Nelle versioni future prevediamo di espandere il supporto per i comandi Redis e implementare la capacità di replicare lo storage per fornire tolleranza agli errori e bilanciamento del carico.

Fonte: opennet.ru

Aggiungi un commento