El projecte Dragonfly desenvolupa un reemplaçament més ràpid de Redis i Memcached

La primera versió del sistema d'emmagatzematge en memòria cau de Dragonfly està disponible, que proporciona suport per als protocols Memcached i Redis, però permet executar consultes amb un rendiment molt superior i menys consum de memòria. El sistema manipula dades en format clau/valor i es pot utilitzar com a solució lleugera per accelerar el treball dels llocs d'alta càrrega, guardant a la memòria cau consultes lentes al DBMS i dades intermèdies a la memòria RAM. El codi Dragonfly està escrit en C/C++ i es distribueix sota la BSL (Business Source License).

La llicència BSL va ser proposada pels cofundadors de MySQL com una alternativa al model Open Core. L'essència de BSL és que el codi de funcionalitat avançada està inicialment disponible per a la modificació, però durant algun temps només es pot utilitzar de forma gratuïta si es compleixen condicions addicionals, que requereixen la compra d'una llicència comercial per evitar-la. Els termes de llicència addicionals del projecte Dragonfly requereixen que el codi es transfereixi a la llicència Apache 2.0 només l'1 de juny de 2027. Fins a aquest moment, la llicència permet l'ús del codi només per garantir el funcionament dels seus serveis i productes, però prohibeix l'ús per a la creació de serveis de núvol de pagament que actuen com a complement a Dragonfly.

Segons els desenvolupadors i les proves demostrades, Dragonfly afirma ser el sistema d'emmagatzematge de memòria més ràpid. En comparació amb Redis, Dragonfly va aconseguir un augment de 25 vegades en el rendiment i una reducció de tres vegades en el consum de memòria per a les càrregues de treball típiques. Un servidor Dragonfly pot processar milions de sol·licituds per segon, per exemple, a l'entorn Amazon EC2 c6gn.16xlarge va ser possible aconseguir un rendiment de 3.8 milions de sol·licituds per segon.

El projecte Dragonfly desenvolupa un reemplaçament més ràpid de Redis i Memcached

En les proves per emmagatzemar 5 GB de dades, Dragonfly va requerir un 30% menys de memòria que Redis. Quan es creen instantànies amb l'ordre "bgsave", el consum de memòria augmenta, però en els moments punta es manté gairebé tres vegades menys que a Redis, i l'operació d'enregistrament d'instantànies és molt més ràpida (a la prova, es va escriure una instantània a Dragonfly l'any 30). segons, mentre que Redis - en 42 segons).

El projecte Dragonfly desenvolupa un reemplaçament més ràpid de Redis i Memcached

L'alt rendiment s'aconsegueix gràcies a una arquitectura de múltiples fils sense compartir recursos (shared-nothing), el que significa que a cada fil se li assigna un processador independent amb la seva pròpia porció de dades, que funciona sense mutex ni bloquejos de rotació. Per garantir l'atomicitat quan es treballa amb diverses claus, s'utilitzen panys VLL lleugers. Per emmagatzemar informació de manera eficient a la memòria, s'utilitza l'estructura de taulers, que implementa un tipus de taula hash particionada.

Entre les característiques disponibles a la primera versió, es destaca el suport per al protocol RESP2 i 130 ordres Redis, que correspon aproximadament a la funcionalitat de la versió Redis 2.8. A més, Dragonfly admet totes les ordres memcached excepte CAS (comprovació i configuració), proporciona suport per a operacions asíncrones per crear instantànies, proporciona un consum de memòria previsible, proporciona un intèrpret Lua 5.4 integrat i admet tipus de dades complexos com ara hash, conjunts i llistes (ZSET, HSET, LIST, SETS i STRING).

Hi ha disponible un mode de memòria cau per separat, que substitueix automàticament les dades antigues per dades noves després d'esgotar la memòria lliure. És possible adjuntar una vida útil a les dades durant la qual es consideren rellevants. L'estat d'emmagatzematge es pot esborrar al disc en segon pla per a una recuperació posterior després del reinici. Per gestionar el sistema, es proporciona una consola HTTP (enllaç amb el port TCP 6379) i una API per retornar mètriques, compatible amb Prometheus. En futures versions, tenim previst ampliar la compatibilitat amb les ordres Redis i implementar la capacitat de replicar l'emmagatzematge per proporcionar tolerància a errors i equilibri de càrrega.

Font: opennet.ru

Afegeix comentari