Lëshimi i Dragonfly 1.0, një sistem për ruajtjen e të dhënave në RAM

Është lëshuar sistemi i ruajtjes dhe ruajtjes së memorjes Dragonfly, i cili manipulon të dhënat në formatin kyç/vlerë dhe mund të përdoret si një zgjidhje e lehtë për përshpejtimin e punës së faqeve me ngarkesë të lartë, memorizimin e pyetjeve të ngadalta në DBMS dhe të dhëna të ndërmjetme në RAM. Dragonfly mbështet protokollet Memcached dhe Redis, të cilat ju lejojnë të përdorni bibliotekat ekzistuese të klientëve dhe të transferoni projekte duke përdorur Memcached dhe Redis në Dragonfly pa ripunuar kodin.

Krahasuar me Redis, Dragonfly arriti një rritje 2-fish të performancës (6 milionë kërkesa në sekondë) për ngarkesat tipike të punës në mjedisin Amazon EC16 c25gn.3.8xlarge. Krahasuar me Memcached në mjedisin AWS c6gn.16xlarge, Dragonfly ishte në gjendje të kryente 4.7 herë më shumë kërkesa për shkrim në sekondë (3.8 milionë kundrejt 806 mijë) dhe 1.77 herë më shumë kërkesa për lexim në sekondë (3.7 milionë kundrejt 2.1 milionë).

Lëshimi i Dragonfly 1.0, një sistem për ruajtjen e të dhënave në RAM

Në testet për ruajtjen e të dhënave 5 GB, Dragonfly kërkonte 30% më pak memorie se Redis. Kur krijoni fotografi me komandën "bgsave", konsumi i kujtesës rritet, por në momentet e pikut mbeti pothuajse tre herë më pak se në Redis, dhe vetë operacioni i regjistrimit të fotografive është shumë më i shpejtë (në provë, një fotografi në Dragonfly u shkrua në 30 sekonda, ndërsa Redis - në 42 sekonda).

Lëshimi i Dragonfly 1.0, një sistem për ruajtjen e të dhënave në RAM

Performanca e lartë arrihet falë një arkitekture me shumë fije pa burime të përbashkëta (shared-nothing), që do të thotë se çdo thread i caktohet një procesor i veçantë i veçantë me pjesën e tij të të dhënave, duke punuar pa mutexes dhe spin lock. Për të siguruar atomicitetin kur punoni me çelësa të shumtë, përdoren bravë të lehtë VLL. Për të ruajtur në mënyrë efikase informacionin në memorie, përdoret struktura dashtable, e cila zbaton një lloj tabele hash të ndarë.

Disa veçori të Dragonfly:

  • Modaliteti i memorizimit, i cili zëvendëson automatikisht të dhënat e vjetra me të dhëna të reja pasi memoria e lirë është shteruar.
  • Mbështetje për lidhjen me të dhënat gjatë gjithë jetës gjatë së cilës të dhënat konsiderohen të rëndësishme.
  • Mbështetje për shpëlarjen e gjendjes së ruajtjes në disk në sfond për rikuperim të mëvonshëm pas rinisjes.
  • Prania e një konsole HTTP (lidhet me portin TCP 6379) për menaxhimin e sistemit dhe një API për kthimin e metrikës, në përputhje me Prometheus.
  • Mbështetje për 185 komanda Redis, e cila është afërsisht ekuivalente me funksionalitetin e lëshimit të Redis 5.
  • Mbështet të gjitha komandat Memcached përveç CAS (kontrollo dhe vendos).
  • Mbështetje për operacionet asinkrone për krijimin e fotografive.
  • Konsumi i parashikueshëm i kujtesës.
  • Përkthyesi i integruar Lua 5.4.
  • Mbështet lloje komplekse të të dhënave si hash, grupe, lista (ZSET, HSET, LIST, SETS dhe STRING) dhe të dhëna JSON.
  • Mbështet përsëritjen e ruajtjes për tolerancën e gabimeve dhe balancimin e ngarkesës.

Kodi Dragonfly është shkruar në C/C++ dhe shpërndahet nën BSL (Business Source License). Licenca BSL u propozua nga bashkëthemeluesit e MySQL si një alternativë ndaj modelit Open Core. Thelbi i BSL është se kodi i funksionalitetit të avancuar fillimisht është i disponueshëm për modifikim, por për ca kohë mund të përdoret pa pagesë vetëm nëse plotësohen kushte shtesë, të cilat kërkojnë blerjen e një licence tregtare për t'u anashkaluar. Kushtet shtesë të licencës për projektin Dragonfly kërkojnë që kodi të transferohet në licencën Apache 2.0 më 15 mars 2028. Deri në këtë kohë, licenca lejon përdorimin e kodit vetëm për të siguruar funksionimin e shërbimeve dhe produkteve të saj, por ndalon përdorimin për krijimin e shërbimeve cloud me pagesë që veprojnë si një shtesë për Dragonfly.

Versioni Dragonfly 1.0 është i dukshëm për zbatimin e tij të mbështetjes për riprodhimin e të dhënave nga serveri primar në atë dytësor. Sidoqoftë, Dragonfly mund të konfigurohet për t'u përdorur si një hapësirë ​​ruajtëse dytësore që merr të dhëna nga një server primar ose bazuar në Dragonfly ose bazuar në Redis. API-ja e menaxhimit të replikimit është e pajtueshme me Redis dhe bazohet në përdorimin e komandave ROLE dhe REPLICAOF (SLAVEOF).

Burimi: opennet.ru

Shto një koment