Release av Dragonfly 1.0, ett system för cachelagring av data i RAM

Dragonfly in-memory caching och lagringssystem har släppts, som manipulerar data i nyckel/värde-format och kan användas som en lätt lösning för att påskynda arbetet med högt belastade webbplatser, cachelagra långsamma frågor till DBMS och mellanliggande data i RAM. Dragonfly stöder Memcached- och Redis-protokollen, vilket gör att du kan använda befintliga klientbibliotek och överföra projekt med Memcached och Redis till Dragonfly utan att omarbeta koden.

Jämfört med Redis uppnådde Dragonfly en 2-faldig ökning av prestanda (6 miljoner förfrågningar per sekund) för typiska arbetsbelastningar i Amazon EC16 c25gn.3.8xlarge-miljön. Jämfört med Memcached i AWS c6gn.16xlarge-miljön kunde Dragonfly utföra 4.7 gånger fler skrivförfrågningar per sekund (3.8 miljoner mot 806 tusen) och 1.77 gånger fler läsbegäranden per sekund (3.7 miljoner mot 2.1 miljoner).

Release av Dragonfly 1.0, ett system för cachelagring av data i RAM

I tester för att lagra 5 GB data krävde Dragonfly 30 % mindre minne än Redis. När du skapar ögonblicksbilder med kommandot "bgsave" ökar minnesförbrukningen, men vid toppögonblick förblev den nästan tre gånger mindre än i Redis, och själva snapshotinspelningen är mycket snabbare (i testet skrevs en ögonblicksbild i Dragonfly i 30 sekunder, medan Redis - på 42 sekunder).

Release av Dragonfly 1.0, ett system för cachelagring av data i RAM

Hög prestanda uppnås tack vare en flertrådig arkitektur utan att dela resurser (shared-nothing), vilket innebär att varje tråd tilldelas en separat separat processor med sin egen del av data, som fungerar utan mutex och spin lock. För att säkerställa atomicitet när du arbetar med flera nycklar, används lätta VLL-lås. För att effektivt lagra information i minnet används dashtable-strukturen, som implementerar en typ av partitionerad hashtabell.

Några funktioner i Dragonfly:

  • Cachingläge, som automatiskt ersätter gammal data med ny data när det lediga minnet är slut.
  • Stöd för att binda till data en livstid under vilken data anses relevant.
  • Stöd för att spola lagringstillstånd till disk i bakgrunden för senare återställning efter omstart.
  • Närvaron av en HTTP-konsol (binder till TCP-port 6379) för systemhantering och ett API för att returnera mätvärden, kompatibel med Prometheus.
  • Stöd för 185 Redis-kommandon, vilket ungefär motsvarar funktionaliteten i Redis 5-utgåvan.
  • Stöder alla Memcached-kommandon utom CAS (check-and-set).
  • Stöd för asynkrona operationer för att skapa ögonblicksbilder.
  • Förutsägbar minnesförbrukning.
  • Inbyggd Lua 5.4-tolk.
  • Stöder komplexa datatyper som hash, uppsättningar, listor (ZSET, HSET, LIST, SETS och STRING) och JSON-data.
  • Stöder lagringsreplikering för feltolerans och lastbalansering.

Dragonfly-koden är skriven i C/C++ och distribueras under BSL (Business Source License). BSL-licensen föreslogs av medgrundarna av MySQL som ett alternativ till Open Core-modellen. Kärnan i BSL är att koden för avancerad funktionalitet initialt är tillgänglig för modifiering, men kan under en tid användas kostnadsfritt endast om ytterligare villkor är uppfyllda, som kräver köp av en kommersiell licens för att kringgå. Ytterligare licensvillkor för Dragonfly-projektet kräver att koden överförs till Apache 2.0-licensen den 15 mars 2028. Tills dess tillåter licensen användning av koden endast för att säkerställa driften av dess tjänster och produkter, men förbjuder användning för att skapa betalda molntjänster som fungerar som ett tillägg till Dragonfly.

Version Dragonfly 1.0 är känd för sin implementering av stöd för datareplikering från den primära servern till den sekundära. Dragonfly kan dock konfigureras för att användas som en sekundär lagring som tar emot data från en primär server antingen baserad på Dragonfly eller baserad på Redis. Replikeringshanterings-API:et är kompatibelt med Redis och är baserat på användningen av kommandona ROLE och REPLICAOF (SLAVEOF).

Källa: opennet.ru

Lägg en kommentar