Der distribuerede database-system rqlite 7.0 er blevet udgivet. Det bruger SQLite som lagermotor og muliggør oprettelse af et kluster af synkroniserede lagre. Rqlite er kendetegnet ved sin nemme installation, opsætning og vedligeholdelse af et distribueret fejltolerant lager, der ligner etcd og Consul, men bruger en relationel datamodel i stedet for et nøgle/værdi-format. Koden til projektet er skrevet i Go og distribueres under MIT-licensen.
For at holde alle noder i synkroniseret tilstand anvendes Raft konsensusalgoritmen. Rqlite bruger den originale SQLite-bibliotek og go-sqlite3-driver, ovenpå hvilke en lagringskomponent kører, som behandler klientanmodninger, udfører replikation til andre noder og overvåger nåelsen af konsensus med hensyn til valg af leder-node.
Ændringer i databasen kan kun foretages af den node, der er valgt som leder, men forbindelser med skriveoperationer kan rettes mod andre noder i klustret, som returnerer adressen på lederen for at gentage anmodningen (i næste version lover de at tilføje automatisk dirigering til lederen). Hovedfokus er på fejltolerance, hvorfor databasesystemet kun skalerer på læseoperationer, mens skriveoperationer er flaskehalsen. Det er muligt at starte et rqlite-kluster fra en enkelt node, hvilket kan bruges til at få adgang til SQLite over HTTP uden at sikre fejltolerance.
SQLite-data på hver node gemmes ikke i en fil, men i hukommelsen. På niveauet for Raft-protokolimplementationen føres der en log over alle SQLite-kommandoer, der fører til ændringer i databasen. Denne log bruges ved replikation (replikation på niveauet for at reproducere anmodninger på andre noder), når der startes en ny node, eller til at genoprette forbindelsen efter tab af forbindelse. For at reducere størrelsen på loggen anvendes der automatisk komprimering, som aktiveres efter et bestemt antal ændringer og fører til opbevaring af et snapshot, i forhold til hvilken en ny log begyndes (tilstanden af databasen i hukommelsen er identisk med snapshot + den opsamlede ændringslog).
Egenskaber ved rqlite:
- Nem opsætning af kluster uden behov for separat installation af SQLite.
- Mulighed for hurtigt at få et replikeret SQL-lager.
- Klar til brug i produktionsprojekter (production-grade).
- Tilgængeligheden af et HTTP(S) API, der muliggør opdatering af data i batch og angivelse af den førende node i klyngen. Der tilbydes også et kommandolinjegrænseflade og klientbiblioteker til forskellige programmeringssprog.
- Tilstedeværelsen af en service til at identificere andre noder, hvilket muliggør dynamisk oprettelse af klynger.
- Understøttelse af kryptering af dataudveksling mellem noder.
- Mulighed for at konfigurere niveauet for validering af aktualitet og konsistens af data ved læsning.
- Valgfri mulighed for at tilslutte noder i skrivebeskyttet mode, der ikke deltager i konsensusbestemmelse og bruges til at øge klyngens skalerbarhed for læseoperationer.
- Understøttelse af en brugerdefineret transaktionsform baseret på samling af kommandoer i én forespørgsel (transaktioner baseret på BEGIN, COMMIT, ROLLBACK, SAVEPOINT og RELEASE understøttes ikke).
- Understøttelse af oprettelse af varme sikkerhedskopier.
I den nye version:
- Understøttelse af automatisk klyngedannelse i rqlite er tilføjet ved brug af den nye nodeopdagelsesservice, som kan fungere på basis af distribuerede lagre som Consul og etcd. Tjenesten gør det muligt for rqlite-noder at finde hinanden automatisk — administratoren skal blot starte flere noder på forskellige servere, angive en fælles adresse til klyngen Consul eller etcd (for eksempel «example.com:8500»), og noderne vil automatisk blive samlet i en klynge. Den førende node opdaterer jævnligt sin adresse i lageret Consul eller etcd, hvilket muliggør ændring af lederen uden behov for at omkonfigurere de andre noder, samt tilføje nye noder, selv efter ændringen af lederen. Understøttelse af den gamle nodeopdagelsestjeneste (Discovery mode), der fungerer på basis af AWS Lambda, er blevet ophævet.
- I CLI-grænsefladen tillades angivelse af flere værter — hvis den første node viser sig at være utilgængelig, vil der blive taget forbindelse til de følgende værter.
- Koden til parsing af kommandolinjeargumenter i rqlited er blevet omarbejdet.
- Brugen af den forældede protobuf-pakke er ophørt.
- Lageret BoltDB, der anvendes i implementeringen af Raft-protokollen, er blevet erstattet med bbolt, en fork af etcd-projektet.
Kilde: opennet.ru
