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

Πραγματοποιήθηκε η κυκλοφορία του διανεμημένου DBMS rqlite 7.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) που σας επιτρέπει να ενημερώνετε δεδομένα σε λειτουργία δέσμης και να προσδιορίζετε τον κύριο κόμβο του συμπλέγματος. Παρέχεται επίσης μια διεπαφή γραμμής εντολών και βιβλιοθήκες πελατών για διάφορες γλώσσες προγραμματισμού.
  • Διαθεσιμότητα μιας υπηρεσίας για την αναγνώριση άλλων κόμβων, που σας επιτρέπει να δημιουργείτε συμπλέγματα δυναμικά.
  • Υποστήριξη για κρυπτογράφηση ανταλλαγής δεδομένων μεταξύ κόμβων.
  • Δυνατότητα διαμόρφωσης του επιπέδου ελέγχου της συνάφειας και της συνέπειας των δεδομένων κατά την ανάγνωση.
  • Προαιρετική δυνατότητα σύνδεσης κόμβων σε λειτουργία μόνο για ανάγνωση, οι οποίοι δεν συμμετέχουν στον καθορισμό της συναίνεσης και χρησιμοποιούνται για την αύξηση της επεκτασιμότητας του συμπλέγματος για λειτουργίες ανάγνωσης.
  • Υποστήριξη για τη δική σας μορφή συναλλαγών με βάση το συνδυασμό εντολών σε ένα αίτημα (συναλλαγές που βασίζονται σε BEGIN, COMMIT, ROLLBACK, SAVEPOINT και RELEASE δεν υποστηρίζονται).
  • Υποστήριξη για τη δημιουργία hot backup.

Στη νέα έκδοση:

  • Προστέθηκε υποστήριξη για αυτόματη ομαδοποίηση rqlite χρησιμοποιώντας μια νέα υπηρεσία ανίχνευσης κόμβων που μπορεί να λειτουργήσει με βάση τον κατανεμημένο χώρο αποθήκευσης Consul και etcd. Η υπηρεσία επιτρέπει στους κόμβους rqlite να βρίσκουν αυτόματα ο ένας τον άλλον - ο διαχειριστής χρειάζεται απλώς να εκκινήσει αρκετούς κόμβους σε διαφορετικούς διακομιστές, προσδιορίζοντας την κοινή διεύθυνση συμπλέγματος Consul ή etcd (για παράδειγμα, "example.com:8500") και οι κόμβοι θα είναι αυτόματα συνδυάζονται σε ένα σύμπλεγμα. Ο κύριος κόμβος ενημερώνει περιοδικά τις πληροφορίες σχετικά με τη διεύθυνσή του στο χώρο αποθήκευσης Consul ή etcd, κάτι που σας επιτρέπει να αλλάξετε στη συνέχεια τον αρχηγό χωρίς να χρειάζεται να επαναδιαμορφώσετε άλλους κόμβους, καθώς και να προσθέσετε νέους κόμβους ακόμη και μετά την αλλαγή του αρχηγού. Η παλαιού τύπου υπηρεσία λειτουργίας Discovery που εκτελείται σε AWS Lambda έχει διακοπεί.
  • Η διεπαφή CLI επιτρέπει τον καθορισμό πολλών κεντρικών υπολογιστών ταυτόχρονα - εάν ο πρώτος κόμβος δεν είναι διαθέσιμος, θα γίνει επικοινωνία με τους επόμενους κεντρικούς υπολογιστές.
  • Επεξεργάστηκε ξανά τον κώδικα για την ανάλυση rqlited ορισμών γραμμής εντολών.
  • Το καταργημένο πακέτο protobuf έχει διακοπεί.
  • Ο χώρος αποθήκευσης BoltDB που χρησιμοποιείται στην υλοποίηση του πρωτοκόλλου Raft έχει αντικατασταθεί από το bbolt, ένα πιρούνι από το έργο etcd.

Πηγή: opennet.ru

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