Rqlite 6.0:n julkaisu, hajautettu vikasietoinen SQLiteen perustuva DBMS

Esitetään hajautetun DBMS rqlite 6.0:n julkaisu, joka käyttää SQLitea tallennusmoottorina ja mahdollistaa synkronoitujen tallennusten klusterin työn organisoinnin. Yksi rqliten ominaisuuksista on hajautetun vikasietoisen tallennustilan asennuksen, käyttöönoton ja ylläpidon helppous, joka on hieman samanlainen kuin etcd ja Consul, mutta käyttää relaatiotietomallia avain/arvo-muodon sijaan. Projektikoodi on kirjoitettu Go-kielellä ja jaettu MIT-lisenssillä.

Kaikkien solmujen pitämiseksi synkronoidussa tilassa käytetään Raft-konsensusalgoritmia. Rqlite käyttää alkuperäistä SQLite-kirjastoa ja tavallista go-sqlite3-ajuria, jonka päälle käynnistetään kerros, joka käsittelee asiakaspyyntöjä, suorittaa replikoinnin muihin solmuihin ja valvoo konsensuksen saavuttamista johtavan solmun valinnassa.

Muutoksia tietokantaan voi tehdä vain johtajaksi valittu solmu, mutta kirjoitusoperaatioita sisältäviä yhteyksiä voidaan lähettää myös muille klusterin solmuille, jotka palauttavat johtajan osoitteen toistaakseen pyynnön (seuraavassa versiossa ne lupaus lisätä pyyntöjen automaattinen välitys johtajalle). Pääpaino on vikasietoisuudessa, joten DBMS skaalautuu vain lukuoperaatioilla ja kirjoitustoiminnot ovat pullonkaula. On mahdollista ajaa rqlite-klusteri yhdestä solmusta, ja tällä ratkaisulla voidaan tarjota pääsy SQLiteen HTTP:n kautta ilman vikasietoisuutta.

Kunkin solmun SQLite-tietoja ei tallenneta tiedostoon, vaan muistiin. Raft-protokollan toteutuksen kerrostasolla pidetään lokia kaikista SQLite-komennoista, jotka johtavat tietokannan muutoksiin. Tätä lokia käytetään replikoinnin aikana (replikointi muiden solmujen pyyntöjen toistamisen tasolla), käynnistettäessä uutta solmua tai toipuessaan yhteyden katkeamisesta. Lokin koon pienentämiseksi käytetään automaattista pakkausta, joka käynnistyy tietyn määrän muutosten jälkeen ja johtaa siihen, että levylle korjataan tilannevedos, jonka suhteen aletaan pitää uutta lokia (tietokannan tila muistissa on identtinen tilannevedoksen + kertyneen muutoslokin kanssa).

rqliten ominaisuudet:

  • Helppo ottaa käyttöön klusteri ilman erillistä SQLite-asennusta.
  • Mahdollisuus saada nopeasti replikoitu SQL-tallennustila.
  • Valmis käytettäväksi työprojekteissa (tuotantoluokka).
  • HTTP(S) API:n olemassaolo, jonka avulla voit päivittää tietoja erätilassa ja määrittää klusterin johtavan solmun. Se tarjoaa myös komentoriviliittymän ja mahdollisuuden käyttää erilaisia ​​SQLitea varten rakennettuja asiakaskirjastoja.
  • Palvelun saatavuus muiden solmujen tunnistamiseen, jolloin voit luoda klustereita dynaamisesti.
  • Tuki solmujen välisen tiedonsiirron salaamiseen.
  • Kyky määrittää tietojen relevanssin ja johdonmukaisuuden tarkistamisen taso luettaessa.
  • Valinnainen mahdollisuus yhdistää solmuja vain luku -tilassa, jotka eivät osallistu konsensuksen määrittämiseen ja joita käytetään lisäämään klusterin skaalautuvuutta lukutoimintoja varten.
  • Tuki omalle tapahtumamuodolle, joka perustuu komentojen yhdistämiseen yhteen pyyntöön (ALOITA, COMMIT, ROLLBACK, SAVEPOINT ja RELEASE perustuvia tapahtumia ei tueta).
  • Tuki kuuman varmuuskopion luomiseen.

Uusi julkaisu tuo merkittäviä arkkitehtonisia muutoksia, joiden tavoitteena on lisätä klusterin luotettavuutta parantamalla luku- ja kirjoituspyyntöjen reititysprosessia oikeisiin klusterin solmuihin. rqlite-solmut voivat nyt multipleksoida useita loogisia yhteyksiä keskenään käyttämällä TCP-yhteyksiä, jotka solmujen välille on luotu Raft-protokollalla. Jos pyyntö vaatii johtajan valtuudet, mutta se lähetetään toissijaiselle solmulle, toissijainen solmu voi määrittää johtajan osoitteen ja välittää sen asiakkaalle suorittamatta Raft-konsensuslaskelmia.

Muutos poisti myös erillisen metatietojen synkronointikomponentin tarpeen ja poisti Raft-tilan ja metatietojen erillisen käsittelyn. Toissijaiset solmut lähettävät nyt pyyntöjä johtosolmulle vain tarvittaessa, kun niiden on selvitettävä johtajasolmun osoite. API tarjoaa mahdollisuuden saada tietoa klusterin muiden solmujen tilasta. ".sysdump"-komento on lisätty komentoriviliittymään.

Lähde: opennet.ru

Lisää kommentti