Den första versionen av Dragonflys datacachningssystem i minnet Àr tillgÀnglig, vilket erbjuder stöd för protokollen Memcached och Redis, men som möjliggör förfrÄgningar med betydligt högre prestanda och lÀgre minnesförbrukning. Systemet manipulerar data i nyckel/vÀrde-format och kan tillÀmpas som en lÀttviktslösning för att förbÀttra prestanda pÄ högt belastade webbplatser, som cacherar lÄngsamma förfrÄgningar till databashanterare och mellanlagrar data i minnet. Dragonfly-koden Àr skriven i C/C++ och distribueras under BSL-licens (Business Source License).
BSL-licensen föreslogs av MySQL:s medgrundare som ett alternativ till Open Core-modellen. KÀrnan i BSL Àr att koden för den utökade funktionaliteten initially Àr tillgÀnglig för Àndringar, men under en viss period kan den anvÀndas kostnadsfritt endast under ytterligare villkor, vars kringgÄende krÀver en kommersiell licens. Ytterligare licensvillkor för Dragonfly-projektet föreskriver att koden ska övergÄ till Apache 2.0-licens först den 1 juni 2027. Fram till dess tillÄter licensen anvÀndning av koden endast för att sÀkerstÀlla drift av sina tjÀnster och produkter, men förbjuder anvÀndning för att skapa betalda molntjÀnster som fungerar som ett lager ovanpÄ Dragonfly.
Enligt utvecklarna och demonstrerade tester konkurrerar Dragonfly om titeln som det snabbaste minneslagringssystemet. JÀmfört med Redis har Dragonfly under typiska belastningar uppnÄtt en prestandaökning med 25 gÄnger och en minskning av minnesförbrukningen med tre gÄnger. En server Dragonfly kan hantera miljontals förfrÄgningar per sekund, till exempel i en Amazon EC2 c6gn.16xlarge-miljö nÄddes en prestanda pÄ 3,8 miljoner förfrÄgningar per sekund.

I tester med lagring av 5 GB data krÀvde Dragonfly 30% mindre minne Àn Redis. Under skapandet av snapshots med kommandot "bgsave" ökar minnesanvÀndningen, men under toppar förblir den nÀstan tre gÄnger lÀgre Àn i Redis, och sjÀlva snapshot-skrivningsoperationen utförs betydligt snabbare (i testet skrevs en snapshot i Dragonfly pÄ 30 sekunder, medan Redis tog 42 sekunder).

Hög prestanda uppnÄs genom en flerkÀrnarkitektur utan resursdelning (shared-nothing), vilket innebÀr att varje trÄd kopplas till en separat, avskild behandlare med sin egen del av data, som arbetar utan mutexar och spin-lÄs. För att sÀkerstÀlla atomÀritet vid arbete med flera nycklar anvÀnds lÀtta lÄs VLL. För effektiv lagring av information i minnet tillÀmpas strukturen dashtable, som implementerar en variant av sektionerade hash-tabeller.
Bland funktionerna som finns i den första versionen mÀrks stöd för protokollet RESP2 och 130 Redis-kommandon, vilket ungefÀr motsvarar funktionaliteten i Redis 2.8. Dessutom stödjer Dragonfly alla memcached-kommandon förutom CAS (check-and-set), erbjuder stöd för asynkrona operationer för att skapa snapshots, sÀkerstÀller förutsÀgbart minnesanvÀndning, tillhandahÄller en inbyggd tolk för Lua 5.4 och stöder komplexa datatyper sÄsom hash, mÀngder och listor (ZSET, HSET, LIST, SETS och STRING).
En separat cache-lÀgesfunktion Àr tillgÀnglig dÀr gamla data automatiskt ersÀtts med nya nÀr det finns brist pÄ ledigt minne. Det Àr möjligt att knyta en livslÀngd till data, under vilken data anses aktuella. Lagringsstatus kan ÄterstÀllas till disken i bakgrunden för senare ÄterstÀllning efter omstart. För systemhantering tillhandahÄlls en HTTP-konsol (kopplas till TCP-port 6379) och ett API för att leverera mÀtvÀrden, som Àr kompatibelt med Prometheus. I kommande versioner planeras ytterligare stöd för Redis-kommandon och implementering av lagringsreplikering för att sÀkerstÀlla felresistens och lastbalansering.
KĂ€lla: opennet.ru
