ĂshtĂ« publikuar sistemi Dragonfly pĂ«r cache dhe ruajtje tĂ« tĂ« dhĂ«nave nĂ« RAM, i cili punon me tĂ« dhĂ«na nĂ« formatin çelĂ«s/vlerĂ« dhe mund tĂ« pĂ«rdoret si njĂ« zgjidhje e lehtĂ« pĂ«r tĂ« pĂ«rshpejtuar faqet me ngarkesĂ« tĂ« lartĂ«, duke ruajtur nĂ« cache kĂ«rkesat e ngadalta ndaj DBMS dhe tĂ« dhĂ«nat e ndĂ«rmjetme nĂ« memorien operative. Dragonfly mbĂ«shtet protokollet Memcached dhe Redis, çka mundĂ«son pĂ«rdorimin e bibliotekave ekzistuese tĂ« klientit dhe migrimin nĂ« Dragonfly tĂ« projekteve qĂ« pĂ«rdorin Memcached dhe Redis pa rishkruar kodin.
Krahasuar me Redis, Dragonfly në llojet tipike të ngarkesës në mjedisin Amazon EC2 c6gn.16xlarge arriti të sigurojë një rritje 25-fish të performancës (3.8 milion kërkesa në sekondë). Krahasuar me Memcached në mjedisin AWS c6gn.16xlarge, Dragonfly arriti të përpunojë 4.7 herë më shumë kërkesa shkrimi në sekondë (3.8 milion kundrejt 806 mijë) dhe 1.77 herë më shumë kërkesa leximi në sekondë (3.7 milion kundrejt 2.1 milion).

Në testet për ruajtjen e 5 GB të dhënash, Dragonfly kërkoi 30% më pak memorie se Redis. Gjatë krijimit të snapshot-eve me komandën «bgsave», konsumi i memories rritet, por në momentet kulmore ai mbeti pothuajse tre herë më i ulët se te Redis, ndërsa vetë operacioni i shkrimit të snapshot-it u krye dukshëm më shpejt (në test, snapshot-i në Dragonfly u shkrua për 30 sekonda, ndërsa Redis për 42 sekonda).

Performanca e lartë arrihet falë arkitekturës shumëfijore pa ndarje burimesh (shared-nothing), që nënkupton se çdo fije lidhet me një handler të veçantë, të izoluar, me pjesën e vet të të dhënave, i cili punon pa mutex dhe spin-lock. Për të garantuar atomizmin gjatë punës me disa çelësa përdoren bllokime të lehta VLL. Për ruajtje efikase të informacionit në memorie përdoret struktura dashtable, e cila zbaton një variant të hash-tables të segmentuara.
Disa nga veçoritë e Dragonfly:
- Modalitet cache, në të cilin zëvendësimi i të dhënave të vjetra me të reja kryhet automatikisht pasi të shterohet memoria e lirë.
- Mbështetje për caktimin e afatit të vlefshmërisë së të dhënave, gjatë të cilit ato konsiderohen aktuale.
- Mbështetje për ruajtjen në sfond të gjendjes së storage në disk për rikuperim të mëvonshëm pas rinisjes.
- Prania e një konsole HTTP (e lidhur me portën TCP 6379) për menaxhimin e sistemit dhe e një API-je për ekspozimin e metrikave, e përputhshme me Prometheus.
- Mbështet 185 komanda të Redis, që afërsisht korrespondojnë me funksionalitetin e versionit Redis 5.
- Mbështet të gjitha komandat e Memcached, përveç CAS (check-and-set).
- Mbështetje për operacione asinkrone për krijimin e snapshot-eve.
- Konsum i parashikueshëm i memories.
- Interpretues i integruar Lua 5.4.
- Mbështetje për lloje komplekse të të dhënave, si hash, sete, lista (ZSET, HSET, LIST, SETS dhe STRING) dhe të dhëna në formatin JSON.
- Mbështetje për replikimin e ruajtjes së të dhënave për të siguruar tolerancë ndaj dështimeve dhe balancim të ngarkesës.
Kodi i Dragonfly Ă«shtĂ« shkruar nĂ« gjuhĂ«t C/C++ dhe shpĂ«rndahet sipas licencĂ«s BSL (Business Source License). Licenca BSL u propozua nga bashkĂ«themeluesit e MySQL si alternativĂ« ndaj modelit Open Core. Thelbi i BSL Ă«shtĂ« se kodi i funksionalitetit tĂ« zgjeruar Ă«shtĂ« fillimisht i disponueshĂ«m pĂ«r modifikim, por pĂ«r njĂ« periudhĂ« tĂ« caktuar mund tĂ« pĂ«rdoret falas vetĂ«m nĂ«se respektohen kushte shtesĂ«; pĂ«r tâi anashkaluar ato kĂ«rkohet blerja e njĂ« licence komerciale. Kushtet shtesĂ« tĂ« licencĂ«s sĂ« projektit Dragonfly parashikojnĂ« kalimin e kodit nĂ« licencĂ«n Apache 2.0 mĂ« 15 mars 2028. Deri atĂ«herĂ«, licenca lejon pĂ«rdorimin e kodit vetĂ«m pĂ«r funksionimin e shĂ«rbimeve dhe produkteve tĂ« veta, por ndalon pĂ«rdorimin e tij pĂ«r krijimin e shĂ«rbimeve cloud me pagesĂ« qĂ« ndĂ«rtohen mbi Dragonfly.
Versioni Dragonfly 1.0 dallohet për zbatimin e mbështetjes së replikimit të të dhënave nga nyja primare serverë te nyja sekondare. Dragonfly mund të konfigurohet gjithashtu si ruajtje sekondare, që merr të dhëna nga serveri primar si në bazë të Dragonfly, ashtu edhe në bazë të Redis. API për menaxhimin e replikimit është i përputhshëm me Redis dhe bazohet në përdorimin e komandave ROLE dhe REPLICAOF (SLAVEOF).
Burimi: opennet.ru
