Utgivelse av rqlite 7.0, en distribuert, feiltolerant DBMS basert på SQLite

Utgivelsen av den distribuerte DBMS rqlite 7.0 fant sted, som bruker SQLite som en lagringsmotor og lar deg organisere arbeidet til en klynge fra lagringer synkronisert med hverandre. En av funksjonene til rqlite er enkel installasjon, distribusjon og vedlikehold av en distribuert feiltolerant lagring, noe som ligner på etcd og Consul, men bruker en relasjonsdatamodell i stedet for et nøkkel/verdi-format. Prosjektkoden er skrevet i Go og distribuert under MIT-lisensen.

For å holde alle noder i en synkronisert tilstand, brukes Raft-konsensusalgoritmen. Rqlite bruker det originale SQLite-biblioteket og go-sqlite3-driveren, på toppen av dette kjører et lag som behandler klientforespørsler, utfører replikering til andre noder og overvåker oppnåelsen av konsensus om valget av en ledende node.

Endringer i databasen kan bare gjøres av noden som er valgt som leder, men forbindelser med skriveoperasjoner kan også sendes til andre noder i klyngen, som vil returnere lederens adresse for å gjenta forespørselen (i neste versjon de lover å legge til automatisk videresending av forespørsler til lederen). Hovedvekten er på feiltoleranse, så DBMS skaleres kun med leseoperasjoner, og skriveoperasjoner er flaskehalsen. Det er mulig å kjøre en rqlite-klynge fra en enkelt node, og denne løsningen kan brukes til å gi tilgang til SQLite over HTTP uten å gi feiltoleranse.

SQLite-dataene på hver node er ikke lagret i en fil, men i minnet. På lagnivå med implementering av Raft-protokollen føres en logg over alle SQLite-kommandoer som fører til endringer i databasen. Denne loggen brukes under replikering (replikering på nivået for å reprodusere forespørsler på andre noder), når du starter en ny node, eller for å gjenopprette fra tap av tilkobling. For å redusere størrelsen på loggen brukes automatisk pakking, som starter etter et spesifisert antall endringer og fører til fiksering av et øyeblikksbilde, i forhold til hvilket en ny logg begynner å vedlikeholdes (tilstanden til databasen i minnet er identisk med øyeblikksbildet + den akkumulerte endringsloggen).

Funksjoner av rqlite:

  • Enkelt å distribuere en klynge, uten behov for en separat SQLite-installasjon.
  • Evne til raskt å skaffe replikert SQL-lagring.
  • Klar til bruk i produksjonsprosjekter (produksjonsgrad).
  • Tilstedeværelsen av en HTTP(S) API som lar deg oppdatere data i batch-modus og bestemme den ledende noden til klyngen. Et kommandolinjegrensesnitt og klientbiblioteker for ulike programmeringsspråk er også tilgjengelig.
  • Tilgjengelighet av en tjeneste for å identifisere andre noder, slik at du kan lage klynger dynamisk.
  • Støtte for kryptering av datautveksling mellom noder.
  • Evne til å konfigurere nivået for å sjekke relevansen og konsistensen til data ved lesing.
  • Valgfri mulighet til å koble til noder i skrivebeskyttet modus, som ikke deltar i å bestemme konsensus og brukes til å øke skalerbarheten til klyngen for leseoperasjoner.
  • Støtte for din egen form for transaksjoner basert på å kombinere kommandoer i én forespørsel (transaksjoner basert på BEGIN, COMMIT, ROLLBACK, SAVEPOINT og RELEASE støttes ikke).
  • Støtte for å lage varme sikkerhetskopier.

I den nye utgivelsen:

  • Lagt til støtte for automatisk rqlite clustering ved hjelp av en ny nodedeteksjonstjeneste som kan fungere på grunnlag av Consul og etcd distribuert lagring. Tjenesten lar rqlite-noder automatisk finne hverandre - administratoren trenger bare å starte flere noder på forskjellige servere, spesifisere den vanlige konsul- eller etcd-klyngeadressen (for eksempel "example.com:8500"), og nodene blir automatisk kombinert til en klynge. Den ledende noden oppdaterer med jevne mellomrom informasjon om adressen sin i Consul- eller etcd-lageret, noe som lar deg endre lederen uten å måtte rekonfigurere andre noder, samt legge til nye noder selv etter at du har endret leder. Den eldre Discovery-modustjenesten som kjører på AWS Lambda er avviklet.
  • CLI-grensesnittet gjør det mulig å spesifisere flere verter samtidig - hvis den første noden er utilgjengelig, vil de neste vertene bli kontaktet.
  • Omarbeidet koden for å analysere rqlited kommandolinjeargumenter.
  • Den utdaterte protobuf-pakken er avviklet.
  • BoltDB-lagringen brukt i implementeringen av Raft-protokollen er erstattet av bbolt, en gaffel fra etcd-prosjektet.

Kilde: opennet.ru

Legg til en kommentar