K dispozici je první vydání systému kešování dat v paměti Dragonfly, který podporuje protokoly Memcached a Redis, ale umožňuje provádět dotazy s mnohem vyššími výkonovými parametry a menší spotřebou paměti. Systém manipuluje s daty ve formátu klíč/hodnota a může být použit jako lehké řešení pro zrychlení výkonu vysoce zatížených webů, které kešují pomalé dotazy k databázovým systémům a mezipaměť v operační paměti. Kód Dragonfly je napsán v jazycích C/C++ a je distribuován pod licencí BSL (Business Source License).
Licence BSL byla navržena spoluzakladateli MySQL jako alternativní model k Open Core. Podstatou BSL je, že kód rozšířené funkčnosti je v počáteční fázi dostupný k úpravám, ale po určitou dobu může být zdarma používán pouze za dodržení dalších podmínek, pro jejichž obejití je nutné zakoupit komerční licenci. Další licenční podmínky projektu Dragonfly stanovují převod kódu na licenci Apache 2.0 až k 1. červnu 2027. Do té doby licence povoluje použití kódu pouze k zajištění funkcionality vlastních služeb a produktů, ale zakazuje použití pro vytváření placených cloudových služeb, které by byly nadstavbou nad Dragonfly.
Podle tvrzení vývojářů a předvedených testů si Dragonfly nárokuje titul nejrychlejšího systému pro ukládání v paměti. V porovnání s Redis dokázal Dragonfly při typických typech zátěže dosáhnout 25násobného zvýšení výkonu a trojnásobného snížení spotřeby paměti. server Dragonfly dokáže zpracovávat miliony dotazů za sekundu, například v prostředí Amazon EC2 c6gn.16xlarge se podařilo dosáhnout výkonu 3,8 milionu dotazů za sekundu.

V testech na uchování 5 GB dat si Dragonfly vyžádal o 30 % méně paměti než Redis. Během vytváření snapshots pomocí příkazu „bgsave“ spotřeba paměti vzrůstá, ale v kritických okamžicích zůstává téměř třikrát nižší než u Redis, a samotná operace zapisování snapshotu probíhá výrazně rychleji (v testu byl snapshot v Dragonfly zapsán za 30 sekund, zatímco Redis za 42 sekund).

Vysoký výkon je dosažen díky vícestupňové architektuře bez sdílení zdrojů (shared-nothing), což znamená, že každému vláknu je přiřazen samostatný nezávislý zpracovatel se svou porcí dat, který pracuje bez mutexů a spin-zámků. Pro zajištění atomárnosti při práci s několika klíči se používají lehké zámky VLL. Pro efektivní ukládání informací v paměti se používá struktura dashtable, která implementuje variantu segmentovaných hash tabulek.
Mezi funkcemi dostupnými v prvním vydání je podpora protokolu RESP2 a 130 příkazů Redis, což přibližně odpovídá funkčnosti verze Redis 2.8. Kromě toho Dragonfly podporuje všechny příkazy memcached, kromě CAS (check-and-set), poskytuje podporu pro asynchronní operace pro vytváření snapshotů, zajišťuje předvídatelnou spotřebu paměti, obsahuje vestavěný interpreter Lua 5.4 a podporuje složité datové typy, jako jsou hash, množiny a seznamy (ZSET, HSET, LIST, SETS a STRING).
Samostatně je k dispozici režim cache, který automaticky zajišťuje vyřazení starých dat novými po vyčerpání volné paměti. Je možná vazba na data doby životnosti, během které se data považují za aktuální. Stav úložiště může být na pozadí uložen na disk pro následné obnovení po restartování. Pro řízení systému je k dispozici HTTP konzole (připojuje se k TCP portu 6379) a API pro poskytování metrik, kompatibilní s Prometheus. V následujících verzích se plánuje rozšíření podpory příkazů Redis a implementace replikace úložiště pro zajištění odolnosti proti chybám a vyvažování zatížení.
Zdroj: opennet.ru
