A avut loc lansarea sistemului de gestionare a bazelor de date distribuite rqlite 7.0, care folosește SQLite ca motor de stocare și permite organizarea unui cluster de stocări sincronizate între ele. Printre caracteristicile rqlite se numără ușurința de instalare, desfășurare și întreținere a unui stocare distribuită redundantă, similară cu etcd și Consul, dar care utilizează un model relațional de gestionare a datelor în locul formatului cheie/valoare. Codul proiectului este scris în limbajul Go și este distribuit sub licența MIT.
Pentru a menține toate nodurile în stare sincronizată, se utilizează algoritmul de atingere a consensului Raft. Rqlite folosește biblioteca originală SQLite și driverul go-sqlite3, pe care se încarcă un strat care procesează cererile clienților, efectuează replicarea pe celelalte noduri și monitorizează atingerea consensului în alegerea nodului lider.
Modificările în baza de date pot fi efectuate doar de nodul ales ca lider, dar conexiunile pentru operațiile de scriere pot fi direcționate și către celelalte noduri ale cluster-ului, care vor returna adresa liderului pentru repetarea cererii (în următoarea versiune se promite adăugarea unei redirecționări automate către lider). Accentul principal se pune pe redundanță, așa că SGBD-ul se extinde doar pe operațiile de citire, iar operațiile de scriere reprezintă un punct sensibil. Este posibil să se lanceze un cluster rqlite dintr-un singur nod, iar această soluție poate fi utilizată pentru a organiza accesul la SQLite prin HTTP fără a oferi redundanță.
Datele SQLite de pe fiecare nod sunt stocate nu în fișiere, ci în memorie. La nivelul stratului cu implementarea protocolului Raft se păstrează un jurnal al tuturor comenzilor SQLite care duc la modificarea bazei de date. Acest jurnal este folosit în timpul replicării (replicarea la nivel de redare a cererilor pe celelalte noduri), la pornirea unui nou nod sau pentru recuperare după pierderea conectivității. Pentru a reduce dimensiunea jurnalului se aplică o compresie automată, care se activează după un anumit număr de modificări și duce la fixarea unei instantanee, în raport cu care începe să se țină un nou jurnal (starea bazei în memorie este identică cu instantaneul + jurnalul de modificări acumulat).
Caracteristici rqlite:
- Ușurința desfășurării cluster-ului, fără necesitatea unei instalări separate a SQLite.
- Posibilitatea de a obține rapid un depozit SQL replicat.
- Pregătit pentru utilizare în proiecte de lucru (de tip production-grade).
- Disponibilitatea unui API HTTP(S) care permite actualizarea datelor în modul batch și determinarea nodului principal al cluster-ului. De asemenea, este oferit un interfață de linie de comandă și biblioteci client pentru diferite limbaje de programare.
- Disponibilitatea unui serviciu pentru identificarea altor noduri, care permite crearea dinamică a cluster-elor.
- Suport pentru criptarea schimbului de date între noduri.
- Posibilitatea de configurare a nivelului de verificare a actualității și coerenței datelor la citire.
- O opțiune opțională de conectare a nodurilor în modul doar pentru citire, care nu participă la determinarea consesului și este utilizată pentru a crește scalabilitatea cluster-ului în operațiunile de citire.
- Suport pentru o formă proprie de tranzacții bazată pe combinarea comenzilor într-o singură solicitare (tranzacțiile bazate pe BEGIN, COMMIT, ROLLBACK, SAVEPOINT și RELEASE nu sunt suportate).
- Suport pentru crearea de backup-uri la cald.
În noua versiune:
- S-a adăugat suport pentru clustering automat rqlite folosind un nou serviciu de identificare a nodurilor, care poate funcționa pe baza stocărilor distribuite Consul și etcd. Serviciul permite nodurilor rqlite să se identifice automat între ele — administratorul trebuie doar să pornească mai multe noduri pe diferite servere, specificând o adresă comună pentru cluster-ul Consul sau etcd (de exemplu, „example.com:8500”), iar nodurile vor fi unite automat într-un cluster. Nodul principal actualizează periodic în stocarea Consul sau etcd informațiile despre adresa sa, ceea ce permite ulterior schimbarea liderului fără a necesita reconfigurarea celorlalte noduri, precum și adăugarea de noi noduri chiar și după schimbarea liderului. Suportul pentru vechiul serviciu de identificare a nodurilor (Discovery mode), bazat pe AWS Lambda, a fost întrerupt.
- În interfața CLI este permisă specificarea mai multor host-uri — dacă primul nod devine inaccesibil, se va apela la următoarele host-uri.
- Codul pentru analiza argumentelor din linia de comandă rqlited a fost revizuit.
- Utilizarea pachetului protobuf învechit a fost oprită.
- Depozitul BoltDB utilizat în implementarea protocolului Raft a fost înlocuit cu bbolt, un fork al proiectului etcd.
Sursa: opennet.ro
