È stato rilasciato il database distribuito rqlite 7.0, che utilizza SQLite come motore di archiviazione e consente di organizzare un cluster di archivi sincronizzati tra loro. Tra le caratteristiche di rqlite si segnala la semplicità di installazione, distribuzione e manutenzione di uno storage distribuito ad alta disponibilità, simile a etcd e Consul, ma che utilizza un modello relazionale per la gestione dei dati invece del formato chiave/valore. Il codice del progetto è scritto in Go e distribuito con licenza MIT.
Per mantenere tutti i nodi in uno stato sincronizzato, viene utilizzato l'algoritmo di consenso Raft. Rqlite utilizza la libreria originale di SQLite e il driver go-sqlite3, sopra i quali viene eseguita uno strato che gestisce le richieste dei clienti, esegue la replica su altri nodi e monitora il raggiungimento del consenso per la selezione del nodo leader.
Le modifiche al database possono essere apportate solo dal nodo scelto come leader, ma le connessioni per le operazioni di scrittura possono essere indirizzate anche ad altri nodi del cluster, che restituiranno l'indirizzo del leader per ripetere la richiesta (nella prossima versione è previsto l'aggiunta del passaggio automatico delle richieste al leader). L'attenzione principale è sulla disponibilità, quindi il database si scala solo per le operazioni di lettura, mentre le operazioni di scrittura rappresentano un collo di bottiglia. È possibile avviare un cluster rqlite da un singolo nodo e questa soluzione può essere utilizzata per organizzare l'accesso a SQLite tramite HTTP senza fornire disponibilità.
I dati di SQLite su ciascun nodo non vengono memorizzati in un file, ma in memoria. A livello dello strato di implementazione del protocollo Raft viene mantenuto un registro di tutti i comandi SQLite che portano a cambiamenti nel database. Questo registro viene utilizzato durante la replica (replica a livello di riproduzione delle richieste su altri nodi), all'avvio di un nuovo nodo o per il recupero dopo una perdita di connettività. Per ridurre le dimensioni del registro viene applicata una compressione automatica, che si attiva dopo un certo numero di modifiche e porta all'archiviazione di uno snapshot, rispetto al quale inizia a essere tenuto un nuovo registro (lo stato del database in memoria è identico allo snapshot + al registro delle modifiche accumulato).
Caratteristiche di rqlite:
- Semplicità nella distribuzione del cluster, senza la necessità di un'installazione separata di SQLite.
- La possibilità di ottenere rapidamente uno spazio di archiviazione SQL replicato.
- Pronto all'uso in progetti lavorativi (produzione).
- Disponibilità di un'API HTTP(S) che consente di aggiornare i dati in modalità batch e di identificare il nodo leader del cluster. È inoltre fornita un'interfaccia a riga di comando e librerie client per vari linguaggi di programmazione.
- Disponibilità di un servizio per la determinazione 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 verifica della validità e coerenza dei dati durante la lettura.
- Opzionale possibilità di collegare nodi in modalità 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 una forma proprietaria di transazioni basate sulla fusione di comandi in un'unica richiesta (non sono supportate transazioni basate su BEGIN, COMMIT, ROLLBACK, SAVEPOINT e RELEASE).
- Supporto per la creazione di backup a caldo.
Nel nuovo rilascio:
- È stata aggiunta la supporto per il clustering automatico di rqlite utilizzando un nuovo servizio di rilevazione dei nodi, che può operare su archivi distribuiti come Consul ed etcd. Questo servizio consente ai nodi rqlite di localizzarsi automaticamente — l'amministratore deve semplicemente avviare diversi nodi in diverse server, specificando un indirizzo comune per il cluster Consul o etcd (ad esempio, "example.com:8500"), e i nodi saranno automaticamente uniti in un cluster. Il nodo leader aggiorna periodicamente nel repository Consul o etcd le informazioni sul proprio indirizzo, permettendo di cambiare il leader senza dover riconfigurare gli altri nodi, così come di aggiungere nuovi nodi anche dopo la modifica del leader. Il supporto per il vecchio servizio di rilevazione dei nodi (Modalità Discovery), basato su AWS Lambda, è stato interrotto.
- Nell'interfaccia CLI è consentito specificare più host — se il primo nodo risulta non disponibile, verrà effettuato un accesso ai successivi host.
- Codice ristrutturato per l'analisi degli argomenti della riga di comando di rqlited.
- Interrotta l'uso del pacchetto protobuf obsoleto.
- Il database BoltDB utilizzato nell'implementazione del protocollo Raft è stato sostituito con bbolt, un fork del progetto etcd.
Fonte: opennet.ru
