Udgivelse af Dragonfly 1.0, et system til cachelagring af data i RAM

Dragonfly in-memory caching og lagringssystemet er blevet frigivet, som manipulerer data i nøgle/værdi-format og kan bruges som en letvægtsløsning til at accelerere arbejdet på stærkt belastede websteder, cache langsomme forespørgsler til DBMS og mellemliggende data i RAM. Dragonfly understøtter Memcached- og Redis-protokollerne, som giver dig mulighed for at bruge eksisterende klientbiblioteker og overføre projekter ved hjælp af Memcached og Redis til Dragonfly uden at omarbejde koden.

Sammenlignet med Redis opnåede Dragonfly en 2-dobling i ydeevnen (6 millioner anmodninger pr. sekund) for typiske arbejdsbelastninger i Amazon EC16 c25gn.3.8xlarge-miljøet. Sammenlignet med Memcached i AWS c6gn.16xlarge-miljøet var Dragonfly i stand til at udføre 4.7 gange flere skriveanmodninger pr. sekund (3.8 millioner mod 806 tusind) og 1.77 gange flere læseanmodninger pr. sekund (3.7 millioner mod 2.1 millioner).

Udgivelse af Dragonfly 1.0, et system til cachelagring af data i RAM

I test til lagring af 5 GB data krævede Dragonfly 30 % mindre hukommelse end Redis. Når du laver snapshots med kommandoen "bgsave", øges hukommelsesforbruget, men i spidsbelastningsperioder forblev det næsten tre gange mindre end i Redis, og selve snapshot-optagelsen er meget hurtigere (i testen blev et snapshot i Dragonfly skrevet i 30 sekunder, mens Redis - på 42 sekunder).

Udgivelse af Dragonfly 1.0, et system til cachelagring af data i RAM

Høj ydeevne opnås takket være en multi-threaded arkitektur uden at dele ressourcer (shared-nothing), hvilket betyder, at hver tråd er tildelt en separat separat processor med sin egen del af data, der fungerer uden mutexes og spin locks. For at sikre atomicitet, når du arbejder med flere nøgler, bruges lette VLL-låse. For effektivt at gemme information i hukommelsen bruges dashtable-strukturen, som implementerer en type partitioneret hash-tabel.

Nogle funktioner i Dragonfly:

  • Caching-tilstand, som automatisk erstatter gamle data med nye data, efter at den ledige hukommelse er opbrugt.
  • Understøttelse af binding til data i en levetid, hvor dataene anses for relevante.
  • Understøttelse af skylning af lagertilstand til disk i baggrunden til senere gendannelse efter genstart.
  • Tilstedeværelsen af ​​en HTTP-konsol (binder til TCP-port 6379) til systemadministration og en API til returnering af metrics, kompatibel med Prometheus.
  • Understøttelse af 185 Redis-kommandoer, hvilket nogenlunde svarer til funktionaliteten i Redis 5-udgivelsen.
  • Understøtter alle Memcached-kommandoer undtagen CAS (check-and-set).
  • Understøttelse af asynkrone operationer til oprettelse af snapshots.
  • Forudsigeligt hukommelsesforbrug.
  • Indbygget Lua 5.4 tolk.
  • Understøtter komplekse datatyper såsom hashes, sæt, lister (ZSET, HSET, LIST, SETS og STRING) og JSON-data.
  • Understøtter lagerreplikering til fejltolerance og belastningsbalancering.

Dragonfly-koden er skrevet i C/C++ og distribueres under BSL (Business Source License). BSL-licensen blev foreslået af medstifterne af MySQL som et alternativ til Open Core-modellen. Essensen af ​​BSL er, at koden for avanceret funktionalitet i første omgang er tilgængelig for ændring, men i nogen tid kun kan bruges gratis, hvis yderligere betingelser er opfyldt, som kræver køb af en kommerciel licens for at omgå. Yderligere licensvilkår for Dragonfly-projektet kræver, at koden overføres til Apache 2.0-licensen den 15. marts 2028. Indtil dette tidspunkt tillader licensen kun brugen af ​​koden for at sikre driften af ​​dens tjenester og produkter, men forbyder brug til oprettelse af betalte cloud-tjenester, der fungerer som en tilføjelse til Dragonfly.

Version Dragonfly 1.0 er kendt for sin implementering af understøttelse af datareplikering fra den primære server til den sekundære. Dragonfly kan dog konfigureres til at blive brugt som et sekundært lager, der modtager data fra en primær server enten baseret på Dragonfly eller baseret på Redis. Replikeringsstyrings-API'en er kompatibel med Redis og er baseret på brugen af ​​kommandoerne ROLE og REPLICAOF (SLAVEOF).

Kilde: opennet.ru

Tilføj en kommentar