Ka ishte rasti i lëshimit të sistemit të caches dhe ruajtjes së të dhënave në memorien e përkohshme Dragonfly, e cila manipulon të dhënat në formatin çelës/vlerë dhe mund të përdoret si një zgjidhje e lehtë për të përshpejtuar funksionimin e faqeve të internetit me ngarkesa të larta, duke cache-ing kërkesat e ngadalta në DBMS dhe të dhënat ndërmjetëse në memorien e përkohshme. Dragonfly mbështet protokollet Memcached dhe Redis, gjë që lejon përdorimin e bibliotekave ekzistuese të klientëve dhe pa ripunim të kodit të shndërrojë projektet që përdorin Memcached dhe Redis në Dragonfly.
Në krahasim me Redis, në Dragonfly gjatë llojeve tipike të ngarkesave në mjedisin Amazon EC2 c6gn.16xlarge arriti të sigurojë një rritje prej 25 herësh në performancë (3.8 milion kërkesa në sekondë). Në krahasim me Memcached në mjedisin AWS c6gn.16xlarge, Dragonfly arriti të ekzekutojë 4.7 herë më shumë kërkesa në sekondë për shkrim (3.8 milion kundrejt 806 mijë) dhe 1.77 herë më shumë kërkesa në sekondë për lexim (3.7 milion kundrejt 2.1 milion).

Në testet e ruajtjes, Dragonfly kërkoi 30% më pak memorie se sa Redis për 5 GB të dhënash. Gjatë krijimit të snapshoteve me komandën "bgsave", konsumi i memories rritet, por në momentet e majave mbetet gati tre herë më i ulët se në Redis, ndërsa operacioni i shkruarjes së snapshotit kryhet ndjeshëm më shpejt (në testin e snapshotit, Dragonfly u shkrua brenda 30 sekondave, ndërsa Redis - brenda 42 sekondave).

Performanca e lartë arrihet falë arkitekturës shumëprocesoresh pa ndarje burimesh (shared-nothing), e cila nënkupton se çdo proces i lidhur ka një përpunues të veçantë me pjesën e tij të të dhënave dhe punon pa mutex dhe bllokime spin. Për të garantuar atomikën gjatë punës me çelësa të shumtë, përdoren bllokime të lehta VLL. Për ruajtjen efikase të informacionit në memorie aplikohet struktura dashtable, e cila realizon një lloj tabelash hash të ndara.
Disa aftësi të Dragonfly:
- Regjimi i caching-ut, në të cilin automatikisht sigurohet zëvendësimi i të dhënave të vjetra me të rejat pas shterimit të memories së lirë.
- Mbështetje për lidhjen me të dhënat e jetës së skadimit, gjatë së cilës të dhënat konsiderohen të vlefshme.
- Mbështetje për rivendosjen e gjendjes së depozitës në disqe në mënyrë në prapavijë për rimarrje pas ri-inicializimit.
- Prania e një konsolë HTTP (e lidhur me portin TCP 6379) për menaxhimin e sistemit dhe API për ofrimin e metrikave, e përshtatshme me Prometheus.
- Mbështetje për 185 komanda Redis, që është afërsisht e barabartë me funksionalitetin e lëshimit të Redis 5.
- Mbështetje për të gjitha komandat e Memcached, përveç CAS (kontrollo-dhe-shtoi).
- Mbështetje për operacione asinkrone për krijimin e snapshot-eve.
- Konsum i parashikueshëm i memories.
- Interpretues i ndërtuar i Lua 5.4.
- Mbështetje për tipe të zakonshme të të dhënave, siç janë hashes, grupe, lista (ZSET, HSET, LIST, SETS dhe STRING) dhe të dhëna në formatin JSON.
- Mbështetje për replikimin e depozitës për të garantuar qëndrueshmërinë dhe balancimin e ngarkesës.
Kodi Dragonfly është shkruar në gjuhët C/C++ dhe shpërndahet nën licencën BSL (Business Source License). Licenca BSL u propozuar nga bashkëthemeluesit e MySQL si një alternativë ndaj modelit Open Core. Qëllimi i BSL është se kodi i funksionalitetit të zgjeruar është fillimisht i disponueshëm për modifikim, por për një periudhë të caktuar përdoret falas vetëm në përputhje me kushte të tjera, për të cilat kërkohet blerja e një licence komerciale. Kushtet e tjera të licencës për projektin Dragonfly parashikojnë kalimin e kodit në licencën Apache 2.0 më 15 mars 2028. Deri në atë kohë, licenca lejon përdorimin e kodit vetëm për të siguruar funksionimin e shërbimeve dhe produkteve tuaja, por ndalon përdorimin për të krijuar shërbime të paguara në re që shërbejnë si shtresë mbi Dragonfly.
Versioni Dragonfly 1.0 veçohet për implementimin e mbështetjes për replikimin e të dhënave nga burimi server në dytësore. Në këtë mënyrë, Dragonfly mund të konfigurohet për t'u përdorur si një ruajtje dytësore që pranon të dhëna nga serveri primar, si në bazë të Dragonfly ashtu edhe në bazë të Redis. API-ja për menaxhimin e replikimit është e përputhshme me Redis dhe bazohet në përdorimin e komandave ROLE dhe REPLICAOF (SLAVEOF).
Burimi: opennet.ru
