Kutolewa kwa Dragonfly 1.0, mfumo wa kuhifadhi data kwenye kumbukumbu

Mfumo wa kuweka akiba na uhifadhi wa kumbukumbu ya Kereng'ende umetolewa, ambao hubadilisha data katika umbizo la ufunguo/thamani na unaweza kutumika kama suluhisho jepesi la kuharakisha kazi ya tovuti zilizopakiwa sana, kuakibisha maswali ya polepole kwa DBMS na data ya kati katika RAM. Kereng'ende hutumia itifaki za Memcached na Redis, ambazo hukuruhusu kutumia maktaba za wateja zilizopo na kuhamisha miradi kwa kutumia Memcached na Redis hadi Dragonfly bila kurekebisha tena msimbo.

Ikilinganishwa na Redis, Kerengende ilipata ongezeko la mara 2 la utendaji (maombi milioni 6 kwa sekunde) kwa mizigo ya kawaida ya kazi katika mazingira ya Amazon EC16 c25gn.3.8xlarge. Ikilinganishwa na Memcached katika mazingira ya AWS c6gn.16xlarge, Dragonfly aliweza kutekeleza maombi ya kuandika mara 4.7 zaidi kwa sekunde (milioni 3.8 dhidi ya 806 elfu) na mara 1.77 zaidi kusoma maombi kwa sekunde (milioni 3.7 dhidi ya milioni 2.1).

Kutolewa kwa Dragonfly 1.0, mfumo wa kuhifadhi data kwenye kumbukumbu

Katika majaribio ya kuhifadhi GB 5 ya data, Kereng'ende ilihitaji kumbukumbu chini ya 30% kuliko Redis. Wakati wa kuunda snapshots na amri ya "bgsave", utumiaji wa kumbukumbu huongezeka, lakini kwa wakati wa kilele ilibaki karibu mara tatu chini ya Redis, na operesheni ya kurekodi picha yenyewe ni haraka sana (katika jaribio, picha ya Dragonfly iliandikwa mnamo 30. sekunde, wakati Redis - katika sekunde 42).

Kutolewa kwa Dragonfly 1.0, mfumo wa kuhifadhi data kwenye kumbukumbu

Utendaji wa hali ya juu unapatikana kwa shukrani kwa usanifu wa nyuzi nyingi bila kugawana rasilimali (hakuna kitu), ambayo inamaanisha kuwa kila uzi hupewa processor tofauti na sehemu yake ya data, inafanya kazi bila bubu na kufuli za spin. Ili kuhakikisha atomiki wakati wa kufanya kazi na funguo nyingi, kufuli za VLL nyepesi hutumiwa. Ili kuhifadhi habari kwa ufanisi kwenye kumbukumbu, muundo wa dashibodi hutumiwa, ambao hutekelezea aina ya jedwali la hashi iliyogawanywa.

Baadhi ya vipengele vya Dragonfly:

  • Hali ya caching, ambayo inachukua nafasi ya data ya zamani na data mpya baada ya kumbukumbu ya bure imechoka.
  • Usaidizi wa kushurutisha data maishani ambapo data inachukuliwa kuwa muhimu.
  • Usaidizi wa kusafisha hali ya uhifadhi kwenye diski chinichini kwa urejeshaji wa baadaye baada ya kuwasha upya.
  • Uwepo wa dashibodi ya HTTP (inayounganishwa na mlango wa TCP 6379) kwa usimamizi wa mfumo na API ya kurejesha metriki, inayotumika na Prometheus.
  • Msaada kwa amri 185 za Redis, ambayo ni takriban sawa na utendakazi wa toleo la Redis 5.
  • Inaauni amri zote za Memcached isipokuwa CAS (angalia-na-seti).
  • Usaidizi wa shughuli za asynchronous kwa ajili ya kuunda snapshots.
  • Matumizi ya kumbukumbu yanayotabirika.
  • Mkalimani wa Kilua 5.4 aliyejengewa ndani.
  • Hutumia aina changamano za data kama vile heshi, seti, orodha (ZSET, HSET, LIST, SETS na STRING) na data ya JSON.
  • Inasaidia urudufishaji wa uhifadhi kwa uvumilivu wa makosa na kusawazisha mzigo.

Msimbo wa Kereng'ende umeandikwa kwa C/C++ na husambazwa chini ya BSL (Leseni ya Chanzo cha Biashara). Leseni ya BSL ilipendekezwa na waanzilishi-wenza wa MySQL kama njia mbadala ya modeli ya Open Core. Kiini cha BSL ni kwamba kanuni za utendakazi wa hali ya juu zinapatikana kwa marekebisho, lakini kwa muda fulani zinaweza kutumika bila malipo tu ikiwa masharti ya ziada yametimizwa, ambayo yanahitaji ununuzi wa leseni ya kibiashara ili kukwepa. Masharti ya ziada ya leseni ya mradi wa Dragonfly yanahitaji msimbo kuhamishiwa kwa leseni ya Apache 2.0 mnamo Machi 15, 2028. Hadi wakati huu, leseni inaruhusu matumizi ya msimbo ili tu kuhakikisha utendakazi wa huduma na bidhaa zake, lakini inakataza matumizi ya kuunda huduma za wingu zinazolipishwa ambazo hufanya kama nyongeza ya Kereng'ende.

Toleo la Dragonfly 1.0 linajulikana kwa utekelezaji wake wa usaidizi wa urudufishaji wa data kutoka seva ya msingi hadi ya upili. Hata hivyo, Kereng'ende inaweza kusanidiwa kutumika kama hifadhi ya pili inayopokea data kutoka kwa seva ya msingi ama kulingana na Kereng'ende au kulingana na Redis. API ya usimamizi wa urudufishaji inaoana na Redis na inategemea matumizi ya amri za ROLE na REPLICAOF (SLAVEOF).

Chanzo: opennet.ru

Kuongeza maoni