Κυκλοφορία του rqlite 6.0, ενός κατανεμημένου DBMS με ανοχή σφαλμάτων που βασίζεται στο SQLite

Παρουσιάστηκε η κυκλοφορία του κατανεμημένου DBMS rqlite 6.0, το οποίο χρησιμοποιεί το SQLite ως μηχανή αποθήκευσης και σας επιτρέπει να οργανώσετε την εργασία ενός συμπλέγματος από αποθηκευτικούς χώρους συγχρονισμένους μεταξύ τους. Ένα από τα χαρακτηριστικά του rqlite είναι η ευκολία εγκατάστασης, ανάπτυξης και συντήρησης ενός κατανεμημένου αποθηκευτικού χώρου με ανοχή σφαλμάτων, κάπως παρόμοιο με το etcd και το Consul, αλλά χρησιμοποιώντας ένα μοντέλο σχεσιακών δεδομένων αντί για μια μορφή κλειδιού/τιμής. Ο κώδικας του έργου είναι γραμμένος στο Go και διανέμεται με την άδεια MIT.

Για να διατηρηθούν όλοι οι κόμβοι σε συγχρονισμένη κατάσταση, χρησιμοποιείται ο αλγόριθμος συναίνεσης Raft. Το Rqlite χρησιμοποιεί την αρχική βιβλιοθήκη SQLite και το τυπικό πρόγραμμα οδήγησης go-sqlite3, πάνω από το οποίο εκκινείται ένα επίπεδο που επεξεργάζεται αιτήματα πελατών, εκτελεί αναπαραγωγή σε άλλους κόμβους και παρακολουθεί την επίτευξη συναίνεσης για την επιλογή ενός κύριου κόμβου.

Οι αλλαγές στη βάση δεδομένων μπορούν να γίνουν μόνο από τον κόμβο που έχει επιλεγεί ως αρχηγός, αλλά οι συνδέσεις με λειτουργίες εγγραφής μπορούν επίσης να σταλούν σε άλλους κόμβους στο σύμπλεγμα, οι οποίοι θα επιστρέψουν τη διεύθυνση του αρχηγού για να επαναλάβει το αίτημα (στην επόμενη έκδοση υπόσχεση για προσθήκη αυτόματης προώθησης αιτημάτων στον ηγέτη). Η κύρια έμφαση δίνεται στην ανοχή σφαλμάτων, επομένως το DBMS κλιμακώνεται μόνο με λειτουργίες ανάγνωσης και οι λειτουργίες εγγραφής είναι το σημείο συμφόρησης. Είναι δυνατή η εκτέλεση ενός συμπλέγματος rqlite από έναν μόνο κόμβο και αυτή η λύση μπορεί να χρησιμοποιηθεί για την παροχή πρόσβασης στο SQLite μέσω HTTP χωρίς την παροχή ανοχής σφαλμάτων.

Τα δεδομένα SQLite σε κάθε κόμβο δεν αποθηκεύονται σε αρχείο, αλλά στη μνήμη. Σε επίπεδο επιπέδου με την υλοποίηση του πρωτοκόλλου Raft, διατηρείται ένα αρχείο καταγραφής όλων των εντολών SQLite που οδηγούν σε αλλαγές στη βάση δεδομένων. Αυτό το αρχείο καταγραφής χρησιμοποιείται κατά την αναπαραγωγή (αναπαραγωγή σε επίπεδο αναπαραγωγής αιτημάτων σε άλλους κόμβους), την έναρξη ενός νέου κόμβου ή την ανάκτηση από απώλεια συνδεσιμότητας. Για να μειωθεί το μέγεθος του αρχείου καταγραφής, χρησιμοποιείται αυτόματη συσκευασία, η οποία ξεκινά μετά από έναν καθορισμένο αριθμό αλλαγών και οδηγεί σε ένα στιγμιότυπο που στερεώνεται στο δίσκο, σε σχέση με το οποίο αρχίζει να διατηρείται ένα νέο αρχείο καταγραφής (η κατάσταση της βάσης δεδομένων στη μνήμη είναι πανομοιότυπο με το στιγμιότυπο + το συσσωρευμένο αρχείο καταγραφής αλλαγών).

Χαρακτηριστικά του rqlite:

  • Εύκολη ανάπτυξη ενός συμπλέγματος, χωρίς την ανάγκη ξεχωριστής εγκατάστασης SQLite.
  • Δυνατότητα γρήγορης απόκτησης αναπαραγόμενης αποθήκευσης SQL.
  • Έτοιμο για χρήση σε έργα εργασίας (παραγωγής-βαθμού).
  • Η παρουσία ενός API HTTP(S) που σας επιτρέπει να ενημερώνετε δεδομένα σε λειτουργία δέσμης και να προσδιορίζετε τον κύριο κόμβο του συμπλέγματος. Παρέχει επίσης μια διεπαφή γραμμής εντολών και τη δυνατότητα χρήσης διαφόρων βιβλιοθηκών πελατών που έχουν δημιουργηθεί για το SQLite.
  • Διαθεσιμότητα μιας υπηρεσίας για την αναγνώριση άλλων κόμβων, που σας επιτρέπει να δημιουργείτε συμπλέγματα δυναμικά.
  • Υποστήριξη για κρυπτογράφηση ανταλλαγής δεδομένων μεταξύ κόμβων.
  • Δυνατότητα διαμόρφωσης του επιπέδου ελέγχου της συνάφειας και της συνέπειας των δεδομένων κατά την ανάγνωση.
  • Προαιρετική δυνατότητα σύνδεσης κόμβων σε λειτουργία μόνο για ανάγνωση, οι οποίοι δεν συμμετέχουν στον καθορισμό της συναίνεσης και χρησιμοποιούνται για την αύξηση της επεκτασιμότητας του συμπλέγματος για λειτουργίες ανάγνωσης.
  • Υποστήριξη για τη δική σας μορφή συναλλαγών με βάση το συνδυασμό εντολών σε ένα αίτημα (συναλλαγές που βασίζονται σε BEGIN, COMMIT, ROLLBACK, SAVEPOINT και RELEASE δεν υποστηρίζονται).
  • Υποστήριξη για τη δημιουργία hot backup.

Η νέα έκδοση εισάγει σημαντικές αρχιτεκτονικές αλλαγές με στόχο την αύξηση της αξιοπιστίας του συμπλέγματος βελτιώνοντας τη διαδικασία δρομολόγησης αιτημάτων ανάγνωσης και εγγραφής στους σωστούς κόμβους συμπλέγματος. Οι κόμβοι rqlite μπορούν πλέον να πολυπλέκουν πολλαπλές λογικές συνδέσεις μεταξύ τους χρησιμοποιώντας συνδέσεις TCP που δημιουργούνται μεταξύ κόμβων από το πρωτόκολλο Raft. Εάν ένα αίτημα απαιτεί εξουσιοδότηση ηγέτη αλλά αποστέλλεται σε έναν δευτερεύοντα κόμβο, ο δευτερεύων κόμβος μπορεί να καθορίσει τη διεύθυνση του ηγέτη και να τη διαβιβάσει στον πελάτη χωρίς να εκτελέσει συναινετικούς υπολογισμούς Raft.

Η αλλαγή εξάλειψε επίσης την ανάγκη για ένα ξεχωριστό στοιχείο συγχρονισμού μεταδεδομένων και εξάλειψε τον ξεχωριστό χειρισμό της κατάστασης και των μεταδεδομένων Raft. Οι δευτερεύοντες κόμβοι στέλνουν πλέον αιτήματα στον κόμβο οδηγού μόνο όταν είναι απαραίτητο, όταν πρέπει να μάθουν τη διεύθυνση του κόμβου οδηγού. Το API παρέχει τη δυνατότητα λήψης πληροφοριών σχετικά με την κατάσταση άλλων κόμβων στο σύμπλεγμα. Η εντολή ".sysdump" προστέθηκε στη διεπαφή της γραμμής εντολών.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο