Julkaistiin Dragonfly 1.0, muistissa oleva tietojen välimuistijärjestelmä

Dragonfly-muistin välimuisti- ja tallennusjärjestelmä on julkaistu, joka käsittelee tietoja avain/arvo-muodossa ja jota voidaan käyttää kevyenä ratkaisuna erittäin kuormitettujen sivustojen työn nopeuttamiseen, hitaiden kyselyjen välimuistiin DBMS:ään ja välitietoihin RAM-muistissa. Dragonfly tukee Memcached- ja Redis-protokollia, joiden avulla voit käyttää olemassa olevia asiakaskirjastoja ja siirtää projekteja Memcachedin ja Redisin avulla Dragonflyyn ilman koodin muokkaamista.

Redikseen verrattuna Dragonfly saavutti 2-kertaisen suorituskyvyn (6 miljoonaa pyyntöä sekunnissa) tyypillisissä työkuormissa Amazon EC16 c25gn.3.8xlarge -ympäristössä. Verrattuna Memcachediin AWS c6gn.16xlarge -ympäristössä, Dragonfly pystyi suorittamaan 4.7 kertaa enemmän kirjoituspyyntöjä sekunnissa (3.8 miljoonaa vs. 806 tuhatta) ja 1.77 kertaa enemmän lukupyyntöjä sekunnissa (3.7 miljoonaa vs. 2.1 miljoonaa).

Julkaistiin Dragonfly 1.0, muistissa oleva tietojen välimuistijärjestelmä

5 Gt:n tiedon tallennustesteissä Dragonfly vaati 30 % vähemmän muistia kuin Redis. Kun luodaan tilannekuvia ”bgsave”-komennolla, muistin kulutus kasvaa, mutta huippuhetkillä se jäi lähes kolme kertaa pienemmäksi kuin Rediksessä, ja itse tilannekuvan tallennustoiminto on paljon nopeampi (testissä tilannekuva Dragonflyssa kirjoitettiin 30. sekunnissa, kun taas Redis - 42 sekunnissa).

Julkaistiin Dragonfly 1.0, muistissa oleva tietojen välimuistijärjestelmä

Korkea suorituskyky saavutetaan monisäikeisen arkkitehtuurin ansiosta ilman resurssien jakamista (shared-nothing), mikä tarkoittaa, että jokaiselle säikeelle on määritetty erillinen prosessori, jolla on oma osa dataa, joka toimii ilman mutexeja ja spin-lukkeja. Kevyitä VLL-lukkoja käytetään useiden avainten kanssa työskentelyn atomiteetin varmistamiseksi. Tietojen tehokkaaseen tallentamiseen muistiin käytetään dashtable-rakennetta, joka toteuttaa eräänlaisen osioidun hash-taulukon.

Joitakin Dragonflyn ominaisuuksia:

  • Välimuistitila, joka korvaa automaattisesti vanhat tiedot uusilla, kun vapaa muisti on lopussa.
  • Tuki dataan sitomiselle koko elinkaaren ajan, jonka aikana dataa pidetään merkityksellisenä.
  • Tuki tallennustilan tyhjentämiselle levylle taustalla myöhempää palautusta varten uudelleenkäynnistyksen jälkeen.
  • Prometheuksen kanssa yhteensopiva HTTP-konsoli (sitoutuu TCP-porttiin 6379) järjestelmän hallintaa varten ja API mittausten palauttamista varten.
  • Tuki 185 Redis-komentolle, mikä vastaa suunnilleen Redis 5 -julkaisun toimintoja.
  • Tukee kaikkia Memcached-komentoja paitsi CAS (check-and-set).
  • Tuki asynkronisille toiminnoille tilannekuvien luomiseen.
  • Ennustettava muistin kulutus.
  • Sisäänrakennettu Lua 5.4 -tulkki.
  • Tukee monimutkaisia ​​tietotyyppejä, kuten tiivisteitä, joukkoja, luetteloita (ZSET, HSET, LIST, SETS ja STRING) ja JSON-tietoja.
  • Tukee tallennusten replikointia vikasietokyvyn ja kuormituksen tasapainottamiseksi.

Dragonfly-koodi on kirjoitettu C/C++-kielellä ja sitä jaetaan BSL-lisenssillä (Business Source License). MySQL:n perustajat ehdottivat BSL-lisenssiä vaihtoehtona Open Core -mallille. BSL:n ydin on, että edistyneiden toimintojen koodi on alun perin muokattavissa, mutta sitä voidaan käyttää jonkin aikaa maksutta vain, jos lisäehdot täyttyvät, joiden kiertäminen edellyttää kaupallisen lisenssin ostamista. Dragonfly-projektin lisälisenssiehdot edellyttävät koodin siirtämistä Apache 2.0 -lisenssiin 15. maaliskuuta 2028. Tähän asti lisenssi sallii koodin käytön vain sen palveluiden ja tuotteiden toiminnan varmistamiseksi, mutta kieltää käytön Dragonflyn lisäosana toimivien maksullisten pilvipalvelujen luomiseen.

Versio Dragonfly 1.0 on huomattava, koska se tukee tietojen replikointia ensisijaiselta palvelimelta toissijaiselle palvelimelle. Dragonfly voidaan kuitenkin konfiguroida käytettäväksi toissijaisena tallennustilana, joka vastaanottaa tietoja ensisijaiselta palvelimelta joko Dragonflyn tai Rediksen perusteella. Replikoinnin hallinnan API on yhteensopiva Rediksen kanssa ja perustuu ROLE- ja REPLICAOF (SLAVEOF) -komentojen käyttöön.

Lähde: opennet.ru

Lisää kommentti