Utgivelse av Dragonfly 1.0, et databufringssystem i minnet

Dragonfly-minnebufrings- og lagringssystemet er utgitt, som manipulerer data i nøkkel/verdi-format og kan brukes som en lettvektsløsning for å akselerere arbeidet til høyt belastede nettsteder, hurtigbufring av trege spørringer til DBMS og mellomdata i RAM. Dragonfly støtter Memcached og Redis-protokollene, som lar deg bruke eksisterende klientbiblioteker og overføre prosjekter ved å bruke Memcached og Redis til Dragonfly uten å omarbeide koden.

Sammenlignet med Redis oppnådde Dragonfly en 2-dobling i ytelse (6 millioner forespørsler per sekund) for typiske arbeidsbelastninger i Amazon EC16 c25gn.3.8xlarge-miljøet. Sammenlignet med Memcached i AWS c6gn.16xlarge-miljøet, var Dragonfly i stand til å utføre 4.7 ganger flere skriveforespørsler per sekund (3.8 millioner mot 806 tusen) og 1.77 ganger flere leseforespørsler per sekund (3.7 millioner mot 2.1 millioner).

Utgivelse av Dragonfly 1.0, et databufringssystem i minnet

I tester for lagring av 5 GB data krevde Dragonfly 30 % mindre minne enn Redis. Når du lager øyeblikksbilder med "bgsave"-kommandoen, øker minneforbruket, men i toppøyeblikk forble det nesten tre ganger mindre enn i Redis, og selve snapshot-opptaksoperasjonen er mye raskere (i testen ble et øyeblikksbilde i Dragonfly skrevet i 30 sekunder, mens Redis - på 42 sekunder).

Utgivelse av Dragonfly 1.0, et databufringssystem i minnet

Høy ytelse oppnås takket være en flertrådsarkitektur uten å dele ressurser (shared-nothing), noe som betyr at hver tråd er tildelt en separat separat prosessor med sin egen del av data, som fungerer uten mutexes og spin-låser. For å sikre atomitet når du arbeider med flere nøkler, brukes lette VLL-låser. For å effektivt lagre informasjon i minnet, brukes dashtable-strukturen, som implementerer en type partisjonert hashtabell.

Noen funksjoner i Dragonfly:

  • Buffermodus, som automatisk erstatter gamle data med nye data etter at det ledige minnet er oppbrukt.
  • Støtte for binding til data en levetid der dataene anses som relevante.
  • Støtte for å skylle lagringstilstand til disk i bakgrunnen for senere gjenoppretting etter omstart.
  • Tilstedeværelsen av en HTTP-konsoll (binder til TCP-port 6379) for systemadministrasjon og en API for å returnere beregninger, kompatibel med Prometheus.
  • Støtte for 185 Redis-kommandoer, noe som omtrent tilsvarer funksjonaliteten til Redis 5-utgivelsen.
  • Støtter alle Memcached-kommandoer unntatt CAS (sjekk-og-sett).
  • Støtte for asynkrone operasjoner for å lage øyeblikksbilder.
  • Forutsigbart minneforbruk.
  • Innebygd Lua 5.4-tolk.
  • Støtter komplekse datatyper som hashes, sett, lister (ZSET, HSET, LIST, SETS og STRING) og JSON-data.
  • Støtter lagringsreplikering for feiltoleranse og lastbalansering.

Dragonfly-koden er skrevet i C/C++ og distribueres under BSL (Business Source License). BSL-lisensen ble foreslått av medgründerne av MySQL som et alternativ til Open Core-modellen. Essensen av BSL er at koden for avansert funksjonalitet i utgangspunktet er tilgjengelig for modifikasjon, men i noen tid kan brukes gratis bare hvis ytterligere betingelser er oppfylt, som krever kjøp av en kommersiell lisens for å omgå. Ytterligere lisensvilkår for Dragonfly-prosjektet krever at koden overføres til Apache 2.0-lisensen 15. mars 2028. Inntil dette tidspunktet tillater lisensen bruk av koden kun for å sikre driften av tjenestene og produktene, men forbyr bruk for å lage betalte skytjenester som fungerer som et tillegg til Dragonfly.

Versjon Dragonfly 1.0 er kjent for sin implementering av støtte for datareplikering fra den primære serveren til den sekundære. Dragonfly kan imidlertid konfigureres til å brukes som en sekundær lagring som mottar data fra en primær server enten basert på Dragonfly eller basert på Redis. Replikeringsadministrasjons-APIet er kompatibelt med Redis og er basert på bruk av kommandoene ROLE og REPLICAOF (SLAVEOF).

Kilde: opennet.ru

Legg til en kommentar