Rilascio di rqlite 7.0, un DBMS distribuito e tollerante ai guasti basato su SQLite

E' avvenuto il rilascio del DBMS distribuito rqlite 7.0, che utilizza SQLite come storage engine e permette di organizzare il lavoro di un cluster a partire da storage sincronizzati tra loro. Una delle caratteristiche di rqlite è la facilità di installazione, distribuzione e manutenzione di uno storage distribuito con tolleranza agli errori, in qualche modo simile a etcd e Consul, ma utilizzando un modello di dati relazionale invece di un formato chiave/valore. Il codice del progetto è scritto in Go e distribuito sotto la licenza MIT.

Per mantenere tutti i nodi in uno stato sincronizzato, viene utilizzato l'algoritmo di consenso Raft. Rqlite utilizza la libreria SQLite originale e il driver go-sqlite3, sopra il quale viene lanciato un livello che elabora le richieste del client, esegue la replica su altri nodi e monitora il raggiungimento del consenso sulla scelta del nodo principale.

Le modifiche al database possono essere effettuate solo dal nodo selezionato come capofila, ma le connessioni con operazioni di scrittura possono essere inviate anche ad altri nodi del cluster, i quali restituiranno l'indirizzo del capofila per ripetere la richiesta (nella versione successiva promessa di aggiungere l'inoltro automatico delle richieste al leader). L'enfasi principale è sulla tolleranza agli errori, quindi il DBMS scala solo con le operazioni di lettura e le operazioni di scrittura rappresentano il collo di bottiglia. È possibile eseguire un cluster rqlite da un singolo nodo e questa soluzione può essere utilizzata per fornire accesso a SQLite su HTTP senza fornire tolleranza agli errori.

I dati SQLite su ciascun nodo non vengono archiviati in un file, ma in memoria. A livello di livello con l'implementazione del protocollo Raft, viene mantenuto un registro di tutti i comandi SQLite che portano a modifiche al database. Questo registro viene utilizzato durante la replica (replica a livello di riproduzione delle richieste su altri nodi), quando si avvia un nuovo nodo o per ripristinare una perdita di connettività. Per ridurre la dimensione del registro, viene utilizzato il confezionamento automatico, che inizia dopo un determinato numero di modifiche e porta alla fissazione di uno snapshot, in relazione al quale inizia a essere mantenuto un nuovo registro (lo stato del database in memoria è identico allo snapshot + il registro delle modifiche accumulato).

Caratteristiche di rqlite:

  • Facile distribuzione di un cluster, senza la necessità di un'installazione SQLite separata.
  • Possibilità di ottenere rapidamente spazio di archiviazione SQL replicato.
  • Pronto per l'uso in progetti di produzione (livello di produzione).
  • La presenza di un'API HTTP(S) che consente di aggiornare i dati in modalità batch e determinare il nodo principale del cluster. Vengono inoltre fornite un'interfaccia a riga di comando e librerie client per vari linguaggi di programmazione.
  • Disponibilità di un servizio per l'identificazione di altri nodi, che consente di creare cluster in modo dinamico.
  • Supporto per la crittografia dello scambio di dati tra i nodi.
  • Possibilità di configurare il livello di controllo della pertinenza e della coerenza dei dati durante la lettura.
  • Possibilità facoltativa di connettere nodi in modalità di sola lettura, che non partecipano alla determinazione del consenso e vengono utilizzati per aumentare la scalabilità del cluster per le operazioni di lettura.
  • Supporto per la tua forma di transazioni basata sulla combinazione di comandi in un'unica richiesta (le transazioni basate su BEGIN, COMMIT, ROLLBACK, SAVEPOINT e RELEASE non sono supportate).
  • Supporto per la creazione di backup a caldo.

Nella nuova versione:

  • Aggiunto il supporto per il clustering automatico di rqlite utilizzando un nuovo servizio di rilevamento dei nodi che può funzionare sulla base dello storage distribuito Consul ed etcd. Il servizio consente ai nodi rqlite di trovarsi automaticamente l'un l'altro: l'amministratore deve solo avviare diversi nodi su server diversi, specificando l'indirizzo comune del cluster Consul o etcd (ad esempio, "example.com:8500"), e i nodi verranno automaticamente riuniti in un cluster. Il nodo principale aggiorna periodicamente le informazioni sul suo indirizzo nella memoria Consul o etcd, che consente di modificare successivamente il leader senza la necessità di riconfigurare altri nodi, nonché di aggiungere nuovi nodi anche dopo aver cambiato il leader. Il servizio legacy della modalità Discovery in esecuzione su AWS Lambda è stato interrotto.
  • L'interfaccia CLI consente di specificare più host contemporaneamente: se il primo nodo non è disponibile, verranno contattati gli host successivi.
  • Il codice per analizzare gli argomenti della riga di comando rqlited è stato rielaborato.
  • Il pacchetto deprecato protobuf è stato interrotto.
  • Lo storage BoltDB utilizzato nell'implementazione del protocollo Raft è stato sostituito da bbolt, un fork del progetto etcd.

Fonte: opennet.ru

Aggiungi un commento