Projekt Dragonfly opracowuje szybszy zamiennik Redis i Memcached

Dostępna jest pierwsza wersja systemu buforowania w pamięci Dragonfly, zapewniającego obsługę protokołów Memcached i Redis, ale umożliwiającego wykonywanie zapytań ze 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 pracę witryn o dużym obciążeniu, buforujące powolne zapytania do systemu DBMS i dane pośrednie w pamięci RAM. Kod Dragonfly jest napisany w C/C++ i jest rozpowszechniany na licencji BSL (Licencja Business Source).

Licencja BSL została zaproponowana przez współzałożycieli MySQL jako alternatywa dla modelu Open Core. Istotą BSL jest to, że kod o zaawansowanej funkcjonalności jest początkowo dostępny do modyfikacji, jednak przez pewien czas można z niego korzystać bezpłatnie jedynie po spełnieniu dodatkowych warunków, których obejście wymaga zakupu licencji komercyjnej. Dodatkowe warunki licencyjne projektu Dragonfly wymagają przeniesienia kodu na licencję Apache 2.0 dopiero 1 czerwca 2027 roku. Do tego czasu licencja pozwala na wykorzystanie kodu jedynie w celu zapewnienia działania swoich usług i produktów, natomiast zabrania wykorzystywania go do tworzenia płatnych usług chmurowych, które działają jako dodatek do Dragonfly.

Według twórców i zademonstrowanych testów Dragonfly twierdzi, że jest najszybszym systemem przechowywania pamięci. W porównaniu do Redis, Dragonfly osiągnął 25-krotny wzrost wydajności i trzykrotne zmniejszenie zużycia pamięci dla typowych obciążeń. Jeden serwer Dragonfly jest w stanie obsłużyć miliony żądań na sekundę, przykładowo w środowisku Amazon EC2 c6gn.16xlarge udało się osiągnąć wydajność na poziomie 3.8 miliona żądań na sekundę.

Projekt Dragonfly opracowuje szybszy zamiennik Redis i Memcached

W testach przechowywania 5 GB danych Dragonfly wymagał o 30% mniej pamięci niż Redis. Podczas tworzenia migawek za pomocą polecenia „bgsave” zużycie pamięci wzrasta, ale w momentach szczytowych pozostaje prawie trzykrotnie mniejsze niż w Redis, a sama operacja nagrywania migawek jest znacznie szybsza (w teście migawka w Dragonfly została napisana w 30 sekundy, zaś Redis – w 42 sekundy).

Projekt Dragonfly opracowuje szybszy zamiennik Redis i Memcached

Wysoką wydajność osiąga się dzięki wielowątkowej architekturze bez współdzielenia zasobów (shared-nothing), co oznacza, że ​​każdemu wątkowi przypisany jest osobny procesor z własną porcją danych, pracujący bez muteksów i spin locków. Aby zapewnić atomowość podczas pracy z wieloma kluczami, zastosowano lekkie zamki VLL. Aby efektywnie przechowywać informacje w pamięci, używana jest struktura dashtable, która implementuje rodzaj partycjonowanej tablicy mieszającej.

Wśród funkcji dostępnych w pierwszym wydaniu zauważono obsługę protokołu RESP2 i 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 obsługę asynchronicznych operacji tworzenia migawek, zapewnia przewidywalne zużycie pamięci, zapewnia wbudowany interpreter Lua 5.4 i obsługuje złożone typy danych, takie jak skróty, zestawy i listy (ZSET, HSET, LIST, SETS i STRING).

Oddzielnie dostępny jest tryb buforowania, który automatycznie zastępuje stare dane nowymi danymi po wyczerpaniu się wolnej pamięci. Do danych można przypisać okres istnienia, podczas którego dane są uznawane za istotne. Stan pamięci można przenieść na dysk w tle w celu późniejszego odzyskania po ponownym uruchomieniu. Do zarządzania systemem dostępna jest konsola HTTP (połączona z portem TCP 6379) oraz API do zwracania metryk, kompatybilne z Prometheusem. W przyszłych wersjach planujemy rozszerzyć obsługę poleceń Redis i wdrożyć możliwość replikacji pamięci w celu zapewnienia odporności na awarie i równoważenia obciążenia.

Źródło: opennet.ru

Dodaj komentarz