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

Utgivelsen av den distribuerte DBMS rqlite 6.0 presenteres, som bruker SQLite som en lagringsmotor og lar deg organisere arbeidet til en klynge av synkroniserte lagringer. 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 standard go-sqlite3-driveren, på toppen av dette lanseres 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), starte en ny node eller 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 at et øyeblikksbilde blir fikset på disken, i forhold til hvilket en ny logg begynner å bli holdt (databasens tilstand 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 arbeidsprosjekter (Produksjonsgrad).
  • Tilstedeværelsen av en HTTP(S) API som lar deg oppdatere data i batch-modus og bestemme den ledende noden til klyngen. Det gir også et kommandolinjegrensesnitt og muligheten til å bruke ulike klientbiblioteker bygget for SQLite.
  • 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.

Den nye utgivelsen introduserer betydelige arkitektoniske endringer rettet mot å øke klyngens pålitelighet ved å forbedre prosessen med å rute lese- og skriveforespørsler til de riktige klyngenodene. rqlite-noder kan nå multiplekse flere logiske forbindelser seg imellom ved å bruke TCP-forbindelser etablert mellom noder av Raft-protokollen. Hvis en forespørsel krever lederautoritet, men sendes til en sekundær node, kan den sekundære noden bestemme lederens adresse og gi den videre til klienten uten å utføre Raft-konsensusberegninger.

Endringen eliminerte også behovet for en egen metadatasynkroniseringskomponent og eliminerte separat håndtering av flåtetilstand og metadata. Sekundære noder sender nå forespørsler til ledernoden bare når det er nødvendig, når de trenger å finne ut adressen til ledernoden. API-en gir muligheten til å få informasjon om tilstanden til andre noder i klyngen. Kommandoen ".sysdump" er lagt til kommandolinjegrensesnittet.

Kilde: opennet.ru

Legg til en kommentar