È disponibile il primo rilascio del sistema di caching in memoria Dragonfly, che supporta i protocolli Memcached e Redis, ma consente di eseguire richieste con prestazioni significativamente superiori e un minor consumo di memoria. Il sistema gestisce i dati in formato chiave/valore e può essere utilizzato come soluzione leggera per accelerare il funzionamento di siti web ad alto carico, memorizzando nella cache richieste lente ai database e dati intermedi in memoria. Il codice di Dragonfly è scritto in C/C++ ed è distribuito con licenza BSL (Business Source License).
La licenza BSL è stata proposta dai co-fondatori di MySQL come alternativa al modello Open Core. Il nocciolo della BSL è che il codice delle funzionalità avanzate è inizialmente disponibile per modifiche, ma per un certo periodo può essere utilizzato gratuitamente solo a condizione di rispettare ulteriori requisiti, per evitare i quali è necessaria l'acquisto di una licenza commerciale. I requisiti di licenza aggiuntivi del progetto Dragonfly prevedono che il codice venga trasferito alla licenza Apache 2.0 solo il 1° giugno 2027. Fino a quel momento, la licenza consente di utilizzare il codice solo per garantire il funzionamento dei propri servizi e prodotti, ma vieta l'uso per la creazione di servizi cloud a pagamento che si sovrappongono a Dragonfly.
Secondo quanto dichiarato dagli sviluppatori e i test dimostrati, Dragonfly aspira a diventare il sistema di archiviazione in memoria più veloce. Rispetto a Redis, con Dragonfly si è riusciti a ottenere un aumento delle prestazioni di 25 volte e una riduzione del consumo di memoria di tre volte sotto carichi di lavoro normali. server Dragonfly può gestire milioni di richieste al secondo; ad esempio, nell'ambiente Amazon EC2 c6gn.16xlarge si è raggiunta una prestazione di 3,8 milioni di richieste al secondo.

Nei test di archiviazione di 5 GB di dati, Dragonfly ha richiesto il 30% in meno di memoria rispetto a Redis. Durante la creazione di snapshot con il comando 'bgsave', il consumo di memoria aumenta, ma nei momenti di picco rimane quasi tre volte inferiore rispetto a Redis, e l'operazione di scrittura dello snapshot viene completata notevolmente più velocemente (nel test, lo snapshot in Dragonfly è stato scritto in 30 secondi, mentre in Redis in 42 secondi).

Le alte prestazioni sono raggiunte grazie a un'architettura multi-threading senza condivisione delle risorse (shared-nothing), che prevede che a ogni thread venga assegnato un gestore isolato con la propria porzione di dati, che opera senza mutex e spin-lock. Per garantire l'atomicità quando si lavora con più chiavi, vengono utilizzati blocchi leggeri VLL. Per una memorizzazione efficace delle informazioni in memoria, si utilizza una struttura dashtable che implementa una variante delle hash table suddivise.
Tra le funzionalità disponibili nel primo rilascio si segnala il supporto per il protocollo RESP2 e 130 comandi Redis, che corrispondono approssimativamente alla funzionalità della versione Redis 2.8. Inoltre, Dragonfly supporta tutti i comandi memcached, escluso CAS (check-and-set), offre supporto per operazioni asincrone per la creazione di snapshot, garantisce un consumo di memoria prevedibile, fornisce un interprete integrato Lua 5.4 e supporta tipi di dati complessi come hash, insiemi e liste (ZSET, HSET, LIST, SETS e STRING).
È disponibile in modo separato una modalità di caching, in cui le vecchie informazioni vengono automaticamente sostituite con nuove dopo l'esaurimento della memoria disponibile. È possibile associare ai dati un tempo di vita, durante il quale le informazioni sono considerate valide. Lo stato del deposito può essere registrato su disco in background per un successivo ripristino dopo il riavvio. Per la gestione del sistema è disponibile una console HTTP (collegata alla porta TCP 6379) e un'API per l'erogazione delle metriche compatibile con Prometheus. Nelle versioni successive è previsto di ampliare il supporto per i comandi Redis e implementare la possibilità di replica del deposito per garantire resilienza e bilanciamento del carico.
Fonte: opennet.ru
