Rilascio di Dragonfly 1.0, un sistema di caching dei dati in memoria

È stato rilasciato il sistema di caching e archiviazione in memoria Dragonfly, che manipola i dati in formato chiave/valore e può essere utilizzato come soluzione leggera per accelerare il lavoro di siti altamente caricati, memorizzando nella cache query lente nel DBMS e dati intermedi nella RAM. Dragonfly supporta i protocolli Memcached e Redis, che ti consentono di utilizzare le librerie client esistenti e trasferire progetti utilizzando Memcached e Redis su Dragonfly senza rielaborare il codice.

Rispetto a Redis, Dragonfly ha ottenuto un aumento delle prestazioni di 2 volte (6 milioni di richieste al secondo) per carichi di lavoro tipici nell'ambiente Amazon EC16 c25gn.3.8xlarge. Rispetto a Memcached nell'ambiente AWS c6gn.16xlarge, Dragonfly è stato in grado di eseguire 4.7 volte più richieste di scrittura al secondo (3.8 milioni contro 806mila) e 1.77 volte più richieste di lettura al secondo (3.7 milioni contro 2.1 milioni).

Rilascio di Dragonfly 1.0, un sistema di caching dei dati in memoria

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 è rimasto 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).

Rilascio di Dragonfly 1.0, un sistema di caching dei dati in memoria

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.

Alcune caratteristiche di Dragonfly:

  • Modalità caching, che sostituisce automaticamente i vecchi dati con nuovi dati una volta esaurita la memoria libera.
  • Supporto per associare ai dati un periodo di tempo durante il quale i dati sono considerati rilevanti.
  • Supporto per lo scaricamento dello stato di archiviazione sul disco in background per un successivo ripristino dopo il riavvio.
  • La presenza di una console HTTP (si lega alla porta TCP 6379) per la gestione del sistema e di un'API per la restituzione delle metriche, compatibile con Prometheus.
  • Supporto per 185 comandi Redis, che equivale più o meno alla funzionalità della versione Redis 5.
  • Supporta tutti i comandi Memcached tranne CAS (check-and-set).
  • Supporto per operazioni asincrone per la creazione di snapshot.
  • Consumo di memoria prevedibile.
  • Interprete Lua 5.4 integrato.
  • Supporta tipi di dati complessi come hash, set, elenchi (ZSET, HSET, LIST, SETS e STRING) e dati JSON.
  • Supporta la replica dello storage per la tolleranza agli errori e il bilanciamento del carico.

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 per il progetto Dragonfly richiedono che il codice venga trasferito alla licenza Apache 2.0 il 15 marzo 2028. 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.

La versione Dragonfly 1.0 si distingue per l'implementazione del supporto per la replica dei dati dal server primario a quello secondario. Tuttavia, Dragonfly può essere configurato per essere utilizzato come archivio secondario che riceve dati da un server primario basato su Dragonfly o basato su Redis. L'API di gestione della replica è compatibile con Redis e si basa sull'utilizzo dei comandi ROLE e REPLICAOF (SLAVEOF).

Fonte: opennet.ru

Aggiungi un commento