Dragonfly-projektet utvecklar en snabbare ersättning för Redis och Memcached

Den första versionen av Dragonfly in-memory caching-system är tillgänglig, vilket ger stöd för protokollen Memcached och Redis, men gör det möjligt att utföra frågor med mycket högre prestanda och mindre minnesförbrukning. Systemet manipulerar data i nyckel-/värdeformat och kan användas som en lättviktslösning för att påskynda arbetet med högbelastningswebbplatser, cachelagra långsamma frågor till DBMS och mellanliggande data i RAM. 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 endast den 1 juni 2027. 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.

Enligt utvecklarna och demonstrerade tester, hävdar Dragonfly sig vara det snabbaste minneslagringssystemet. Jämfört med Redis uppnådde Dragonfly en 25-faldig ökning av prestanda och en trefaldig minskning av minnesförbrukningen för typiska arbetsbelastningar. En Dragonfly-server kan behandla miljontals förfrågningar per sekund, till exempel var det i Amazon EC2 c6gn.16xlarge-miljön möjligt att uppnå en prestanda på 3.8 miljoner förfrågningar per sekund.

Dragonfly-projektet utvecklar en snabbare ersättning för Redis och Memcached

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 i toppögonblick förblir 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).

Dragonfly-projektet utvecklar en snabbare ersättning för Redis och Memcached

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.

Bland funktionerna som finns tillgängliga i den första utgåvan noteras stöd för RESP2-protokollet och 130 Redis-kommandon, vilket ungefär motsvarar funktionaliteten i Redis 2.8-utgåvan. Dessutom stöder Dragonfly alla memcachade kommandon utom CAS (check-and-set), ger stöd för asynkrona operationer för att skapa ögonblicksbilder, ger förutsägbar minnesförbrukning, tillhandahåller en inbyggd Lua 5.4-tolk och stöder komplexa datatyper som hash, uppsättningar och listor (ZSET, HSET, LIST, SETS och STRING).

Ett cachningsläge är separat tillgängligt, som automatiskt ersätter gamla data med nya data efter att det lediga minnet är slut. Det är möjligt att koppla en livstid till uppgifterna under vilka uppgifterna anses relevanta. Lagringsstatus kan spolas till disken i bakgrunden för senare återställning efter omstart. För att hantera systemet tillhandahålls en HTTP-konsol (binder till TCP-port 6379) och ett API för att returnera mätvärden, kompatibelt med Prometheus. I framtida versioner planerar vi att utöka stödet för Redis-kommandon och implementera lagringsreplikeringsmöjligheter för feltolerans och lastbalansering.

Källa: opennet.ru

Lägg en kommentar