Dostępna jest pierwsza wersja systemu buforowania danych w pamięci RAM Dragonfly, oferująca wsparcie dla protokołów Memcached i Redis, ale umożliwiająca wykonywanie zapytań z znacznie wyższą wydajnością i mniejszym zużyciem pamięci. System manipuluje danymi w formacie klucz/wartość i może być stosowany jako lekkie rozwiązanie przyspieszające działanie wysoko obciążonych stron internetowych, buforując wolne zapytania do DBMS i dane pośrednie w pamięci RAM. Kod Dragonfly został napisany w językach C/C++ i jest dystrybuowany na licencji BSL (Business Source License).
Licencja BSL została zaproponowana przez współzałożycieli MySQL jako alternatywa dla modelu Open Core. Istota BSL polega na tym, że kod rozszerzonej funkcjonalności jest początkowo dostępny do edytowania, ale przez pewien czas może być używany bezpłatnie tylko pod warunkiem spełnienia dodatkowych wymogów, które muszą być obejście przez zakup licencji komercyjnej. Dodatkowe warunki licencyjne projektu Dragonfly przewidują przetłumaczenie kodu na licencję Apache 2.0 dopiero 1 czerwca 2027 roku. Do tego czasu licencja zezwala na użycie kodu wyłącznie do zapewnienia działania własnych usług i produktów, ale zabrania stosowania do tworzenia płatnych usług chmurowych jako rozszerzenie dla Dragonfly.
Jak twierdzą deweloperzy i demonstrowane testy, Dragonfly aspiruje do miana najszybszego systemu przechowywania w pamięci. W porównaniu do Redis w Dragonfly przy typowych obciążeniach udało się osiągnąć 25-krotne zwiększenie wydajności i trzykrotne zmniejszenie zużycia pamięci. Jeden serwer Dragonfly może obsługiwać miliony zapytań na sekundę, na przykład w środowisku Amazon EC2 c6gn.16xlarge udało się osiągnąć wydajność 3,8 mln zapytań na sekundę.

W testach przechowywania 5 GB danych Dragonfly wymagał o 30% mniej pamięci niż Redis. Podczas tworzenia migawki za pomocą polecenia 'bgsave', zużycie pamięci wzrasta, ale w szczytowych momentach pozostaje prawie trzykrotnie niższe niż w Redis, a sama operacja zapisu migawki wykonuje się znacznie szybciej (w teście migawka w Dragonfly została zapisana w 30 sekund, a Redis – w 42 sekundy).

Wysoka wydajność jest osiągana dzięki architekturze wielowątkowej bez podziału zasobów (shared-nothing), co oznacza, że do każdego wątku przypisany jest osobny, izolowany port i jego własna porcja danych, działający bez mutexów i spin-locków. Aby zapewnić atomowość podczas pracy z wieloma kluczami, stosowane są lekkie blokady VLL. Efektywne przechowywanie informacji w pamięci realizowane jest za pomocą struktury dashtable, implementującej rodzaj wydzielonych tabel haszowych.
Z możliwości dostępnych w pierwszej wersji, wyróżnia się wsparcie dla protokołu RESP2 oraz 130 poleceń Redis, co w przybliżeniu odpowiada funkcjonalności wydania Redis 2.8. Ponadto, Dragonfly obsługuje wszystkie polecenia memcached, z wyjątkiem CAS (check-and-set), zapewnia wsparcie dla asynchronicznych operacji tworzenia migawek, gwarantuje przewidywalne zużycie pamięci, oferuje wbudowany interpreter Lua 5.4 oraz obsługuje złożone typy danych, takie jak hasze, zbiory i listy (ZSET, HSET, LIST, SETS i STRING).
Osobno dostępny jest tryb cache'owania, w którym automatycznie zapewnia się usunięcie starych danych na rzecz nowych po wyczerpaniu dostępnej pamięci. Istnieje możliwość przypisania do danych czasu życia, w trakcie którego dane uznawane są za aktualne. Stan magazynu może być zapisywany na dysku w tle do późniejszego przywrócenia po ponownym uruchomieniu. Do zarządzania systemem udostępniana jest konsola HTTP (przydzielona do portu TCP 6379) oraz API do przekazywania metryk, zgodne z Prometheus. W przyszłych wersjach planowane jest rozszerzenie wsparcia dla poleceń Redis oraz implementacja możliwości replikacji magazynu w celu zapewnienia odporności na awarie i równoważenia obciążenia.
Źródło: opennet.ru
