Lansarea rqlite 6.0, un SGBD distribuit, tolerant la erori, bazat pe SQLite

Este prezentată lansarea DBMS distribuită rqlite 6.0, care utilizează SQLite ca motor de stocare și vă permite să organizați munca unui cluster de stocări sincronizate. Una dintre caracteristicile rqlite este ușurința instalării, implementării și întreținerii unui stocare distribuit tolerant la erori, oarecum similar cu etcd și Consul, dar folosind un model de date relaționale în locul unui format cheie/valoare. Codul proiectului este scris în Go și distribuit sub licența MIT.

Pentru a menține toate nodurile într-o stare sincronizată, se folosește algoritmul de consens Raft. Rqlite folosește biblioteca originală SQLite și driverul standard go-sqlite3, deasupra căruia este lansat un strat care procesează cererile clienților, realizează replicarea către alte noduri și monitorizează obținerea consensului privind alegerea unui nod lider.

Modificările în baza de date pot fi făcute doar de către nodul care este selectat ca lider, dar conexiunile cu operații de scriere pot fi trimise și către alte noduri din cluster, care vor returna adresa liderului pentru a repeta cererea (în versiunea următoare se vor face promisiunea de a adăuga redirecționarea automată a cererilor către lider). Accentul principal este pe toleranța la erori, astfel încât SGBD-ul se scalează doar cu operațiuni de citire, iar operațiunile de scriere sunt blocajul. Este posibil să rulați un cluster rqlite dintr-un singur nod și această soluție poate fi utilizată pentru a oferi acces la SQLite prin HTTP fără a oferi toleranță la erori.

Datele SQLite de pe fiecare nod nu sunt stocate într-un fișier, ci în memorie. La nivel de strat cu implementarea protocolului Raft, se păstrează un jurnal al tuturor comenzilor SQLite care duc la modificări în baza de date. Acest jurnal este utilizat în timpul replicării (replicarea la nivelul reproducerii cererilor pe alte noduri), pornirea unui nou nod sau recuperarea după o pierdere a conectivității. Pentru a reduce dimensiunea jurnalului se folosește ambalarea automată, care începe după un anumit număr de modificări și duce la fixarea unui instantaneu pe disc, în raport cu care începe să fie păstrat un nou jurnal (starea bazei de date în memorie este identic cu instantaneul + jurnalul de modificări acumulat).

Caracteristicile rqlite:

  • Ușor de implementat un cluster, fără a fi nevoie de o instalare separată SQLite.
  • Abilitatea de a obține rapid stocare SQL replicată.
  • Gata de utilizare în proiecte de lucru (grad de producție).
  • Prezența unui API HTTP(S) care vă permite să actualizați datele în modul lot și să determinați nodul principal al clusterului. De asemenea, oferă o interfață de linie de comandă și abilitatea de a utiliza diverse biblioteci client construite pentru SQLite.
  • Disponibilitatea unui serviciu pentru identificarea altor noduri, permițându-vă să creați clustere în mod dinamic.
  • Suport pentru criptarea schimbului de date între noduri.
  • Abilitatea de a configura nivelul de verificare a relevanței și coerenței datelor la citire.
  • Abilitatea opțională de a conecta noduri în modul doar citire, care nu participă la determinarea consensului și sunt utilizate pentru a crește scalabilitatea clusterului pentru operațiunile de citire.
  • Suport pentru propria formă de tranzacții bazată pe combinarea comenzilor într-o singură cerere (tranzacțiile bazate pe BEGIN, COMMIT, ROLLBACK, SAVEPOINT și RELEASE nu sunt acceptate).
  • Suport pentru crearea de copii de rezervă la cald.

Noua versiune introduce modificări arhitecturale semnificative care vizează creșterea fiabilității clusterului prin îmbunătățirea procesului de direcționare a cererilor de citire și scriere către nodurile corecte ale clusterului. Nodurile rqlite pot acum multiplexa mai multe conexiuni logice între ele folosind conexiuni TCP stabilite între noduri prin protocolul Raft. Dacă o solicitare necesită autoritate lider, dar este trimisă la un nod secundar, nodul secundar poate determina adresa liderului și o poate transmite clientului fără a efectua calcule de consens Raft.

Schimbarea a eliminat, de asemenea, necesitatea unei componente separate de sincronizare a metadatelor și a eliminat gestionarea separată a stării Raft și a metadatelor. Nodurile secundare trimit acum cereri către nodul lider numai atunci când este necesar, când trebuie să afle adresa nodului lider. API-ul oferă capacitatea de a obține informații despre starea altor noduri din cluster. Comanda „.sysdump” a fost adăugată la interfața liniei de comandă.

Sursa: opennet.ru

Adauga un comentariu