Προγραμματισμός

Redis 6: Μια βάση δεδομένων υψηλής ταχύτητας, cache και μεσίτης μηνυμάτων

Όπως πολλοί, μπορεί να πιστεύετε ότι ο Redis είναι μόνο μια προσωρινή μνήμη. Αυτή η άποψη είναι ξεπερασμένη.

Ουσιαστικά, το Redis είναι ένα κατάστημα αποθήκευσης δεδομένων στη μνήμη NoSQL που μπορεί να παραμείνει στο δίσκο. Μπορεί να λειτουργήσει ως βάση δεδομένων, προσωρινή μνήμη και μεσίτης μηνυμάτων. Το Redis έχει ενσωματωμένη αναπαραγωγή, δέσμες ενεργειών Lua, έξωση LRU, συναλλαγές και διαφορετικά επίπεδα επιμονής στο δίσκο. Παρέχει υψηλή διαθεσιμότητα μέσω του Redis Sentinel και του αυτόματου διαμερίσματος με το Redis Cluster.

Το βασικό μοντέλο δεδομένων Redis είναι κλειδί-τιμή, αλλά υποστηρίζονται πολλά διαφορετικά είδη τιμών: Συμβολοσειρές, λίστες, σύνολα, ταξινομημένα σύνολα, κατακερματισμούς, ροές, HyperLogLogs και Bitmaps. Το Redis υποστηρίζει επίσης γεωχωρικά ευρετήρια με ερωτήματα ακτίνας και ροές.

[Επίσης στο: Πώς το Redis γδαρμένο και φαγούρα - και άλλαξε τις βάσεις δεδομένων για πάντα]

Για το Openis Redis, το Redis Enterprise προσθέτει λειτουργίες για επιπλέον ταχύτητα, αξιοπιστία και ευελιξία, καθώς και μια βάση δεδομένων cloud ως υπηρεσία. Η Redis Enterprise κλιμακώνει γραμμικά σε εκατοντάδες εκατομμύρια λειτουργίες ανά δευτερόλεπτο, έχει ενεργή-ενεργή παγκόσμια διανομή με τοπικό λανθάνοντα χρόνο, προσφέρει στο Redis στο Flash για υποστήριξη μεγάλων συνόλων δεδομένων στο κόστος υποδομής μιας βάσης δεδομένων που βασίζεται σε δίσκο και παρέχει 99,999% χρόνο λειτουργίας με βάση την ενσωματωμένη - ανθεκτικότητα και ανακατεύθυνση μονοψήφιου δευτερολέπτου.

Επιπλέον, η Redis Enterprise επεκτείνει τη βασική λειτουργικότητα Redis για να υποστηρίξει οποιαδήποτε μέθοδο μοντελοποίησης δεδομένων με λειτουργικές μονάδες όπως RediSearch, RedisGraph, RedisJSON, RedisTimeSeries και RedisAI και επιτρέπει την εκτέλεση λειτουργιών μεταξύ και ενότητες και πυρήνα. Όλα αυτά παρέχονται διατηρώντας παράλληλα την καθυστέρηση της βάσης δεδομένων κάτω από ένα χιλιοστό του δευτερολέπτου.

Λειτουργίες Core Redis και περιπτώσεις χρήσης

Τι σημαίνει ότι το Redis μπορεί πλέον να λειτουργεί ως βάση δεδομένων, προσωρινή μνήμη και μεσίτης μηνυμάτων; Και ποιες είναι οι περιπτώσεις χρήσης που υποστηρίζουν αυτοί οι ρόλοι;

Κρύπτη είναι η κλασική λειτουργία του Redis. Ουσιαστικά, ο Redis κάθεται μπροστά από μια βάση δεδομένων που βασίζεται σε δίσκο και αποθηκεύει ερωτήματα και αποτελέσματα. η εφαρμογή ελέγχει πρώτα την προσωρινή μνήμη Redis για αποθηκευμένα αποτελέσματα και υποβάλλει ερωτήματα στη βάση δεδομένων που βασίζεται στο δίσκο για αποτελέσματα που δεν βρίσκονται αυτήν τη στιγμή στην προσωρινή μνήμη. Δεδομένου του ποσοστού απόκρισης δευτερολέπτων του Redis, αυτό είναι συνήθως μια μεγάλη νίκη για την απόδοση της εφαρμογής. Τα χρονόμετρα λήξης και η έξωση LRU (που χρησιμοποιήθηκε πρόσφατα) από την προσωρινή μνήμη Redis βοηθούν στη διατήρηση της προσωρινής μνήμης και στην αποτελεσματική χρήση της μνήμης.

ο κατάστημα συνεδρίας είναι ένα σημαντικό μέρος των σύγχρονων εφαρμογών Ιστού. Είναι ένα βολικό μέρος για να διατηρείτε πληροφορίες σχετικά με τον χρήστη και τις αλληλεπιδράσεις της με την εφαρμογή. Σε μια αρχιτεκτονική αγρόκτημα ιστού, η φιλοξενία του καταστήματος συνεδρίας απευθείας στον διακομιστή ιστού απαιτεί να κάνει ο χρήστης «κολλήσει» στον ίδιο διακομιστή υποστήριξης για μελλοντικά αιτήματα, τα οποία μπορούν να περιορίσουν τον εξισορροπητή φορτίου. Η χρήση μιας βάσης δεδομένων που βασίζεται σε δίσκο για το χώρο αποθήκευσης συνεδρίας καταργεί την ανάγκη σύνδεσης μιας περιόδου σύνδεσης με έναν μόνο διακομιστή ιστού, αλλά εισάγει μια επιπλέον πηγή καθυστέρησης. Η χρήση του Redis (ή οποιασδήποτε άλλης γρήγορης βάσης δεδομένων στη μνήμη) ως χώρο αποθήκευσης συνεδριών οδηγεί συχνά σε αρχιτεκτονική εφαρμογών ιστού χαμηλού λανθάνοντος χρόνου και υψηλής απόδοσης.

Το Redis μπορεί να λειτουργήσει ως μεσίτης μηνυμάτων χρησιμοποιώντας τρεις διαφορετικούς μηχανισμούς και μία από τις σημαντικές περιπτώσεις χρήσης για το Redis ως μεσίτης μηνυμάτων είναι να λειτουργήσει ως κόλλα μεταξύ των μικροϋπηρεσιών. Η Redis διαθέτει έναν μηχανισμό ειδοποιήσεων δημοσίευσης / εγγραφής χαμηλού κόστους που διευκολύνει τα μηνύματα πυρκαγιάς και ξεχάστε, αλλά δεν μπορεί να λειτουργήσει όταν η υπηρεσία προορισμού δεν ακούει. Για μια πιο επίμονη ουρά μηνυμάτων τύπου Kafka, η Redis χρησιμοποιεί ροές, οι οποίες είναι ζεύγη κλειδιού-τιμής που έχουν παραγγελθεί με χρονική σήμανση σε ένα μόνο κλειδί. Το Redis υποστηρίζει επίσης λίστες με διπλά συνδεδεμένα στοιχεία που είναι αποθηκευμένα σε ένα μόνο κλειδί, τα οποία είναι χρήσιμα ως ουρά first-in / first-out (FIFO). Οι μικροσυσκευές μπορούν, και συχνά, να χρησιμοποιούν το Redis ως προσωρινή μνήμη, καθώς και να το χρησιμοποιούν ως μεσίτη μηνυμάτων, αν και η προσωρινή μνήμη πρέπει να εκτελείται σε ξεχωριστή παρουσία του Redis από την ουρά μηνυμάτων.

Η βασική αναπαραγωγή επιτρέπει στο Redis να κλιμακώσει χωρίς τη χρήση της τεχνολογίας συμπλέγματος της έκδοσης Redis Enterprise. Η αναπαραγωγή Redis χρησιμοποιεί ένα μοντέλο leader-follower (που ονομάζεται επίσης master-slave), το οποίο είναι από προεπιλογή ασύγχρονο. Οι πελάτες μπορούν να επιβάλλουν τη σύγχρονη αναπαραγωγή χρησιμοποιώντας μια εντολή WAIT, αλλά ακόμη και αυτό δεν καθιστά το Redis συνεπές μεταξύ των αντιγράφων.

Το Redis διαθέτει σενάριο Lua από διακομιστή, επιτρέποντας στους προγραμματιστές να επεκτείνουν τη βάση δεδομένων χωρίς να γράψουν μονάδες C ή κώδικα από τον πελάτη. Οι βασικές συναλλαγές Redis επιτρέπουν στον πελάτη να δηλώσει μια ακολουθία εντολών ως μη διακοπτόμενη μονάδα, χρησιμοποιώντας τις εντολές MULTI και EXEC για τον καθορισμό και την εκτέλεση της ακολουθίας. Αυτό είναι δεν το ίδιο με σχεσιακές συναλλαγές με επαναφορά.

Το Redis έχει διαφορετικά επίπεδα επιμονής στο δίσκο που μπορεί να επιλέξει ο χρήστης. Η επιμονή RDB (αρχείο βάσης δεδομένων Redis) λαμβάνει στιγμιότυπα χρονικής στιγμής της βάσης δεδομένων σε καθορισμένα διαστήματα. Η επιμονή AOF (αρχείο μόνο προσάρτησης) καταγράφει κάθε λειτουργία εγγραφής που λαμβάνει ο διακομιστής. Μπορείτε να χρησιμοποιήσετε την επιμονή RDB και AOF για μέγιστη ασφάλεια δεδομένων.

Το Redis Sentinel, το ίδιο ένα κατανεμημένο σύστημα, παρέχει υψηλή διαθεσιμότητα για το Redis. Κάνει παρακολούθηση των παρουσιών του κύριου και του ρεπλίκα, ειδοποίηση εάν υπάρχει κάτι λάθος και αυτόματη ανακατεύθυνση εάν ο κύριος σταματήσει να λειτουργεί. Χρησιμεύει επίσης ως πάροχος ρυθμίσεων για πελάτες.

Το Redis Cluster παρέχει έναν τρόπο εκτέλεσης μιας εγκατάστασης Redis όπου τα δεδομένα διαχωρίζονται αυτόματα σε πολλούς κόμβους Redis. Το Redis Cluster παρέχει επίσης κάποιο βαθμό διαθεσιμότητας κατά τη διάρκεια των διαμερισμάτων, αν και το σύμπλεγμα θα σταματήσει να λειτουργεί εάν η πλειοψηφία των master δεν είναι διαθέσιμη

Όπως ανέφερα νωρίτερα, το Redis είναι ένα κατάστημα κλειδιών-τιμών που υποστηρίζει συμβολοσειρές, λίστες, σύνολα, ταξινομημένα σύνολα, παύλες, ροές, HyperLogLogs και Bitmaps ως τιμές. Μία από τις απλούστερες και συχνότερες περιπτώσεις χρήσης είναι η χρήση ακέραιων τιμών ως μετρητών. Προς υποστήριξη αυτού, το INCR (increment), το DECR (decrement) και άλλες μεμονωμένες λειτουργίες είναι ατομικά και επομένως ασφαλή σε περιβάλλον πολλαπλών πελατών. Στο Redis, όταν γίνεται χειρισμός των κλειδιών, θα δημιουργηθούν αυτόματα εάν δεν υπάρχουν ήδη.

> SET συνδέσεις 10

Εντάξει

> Συνδέσεις INCR

(ακέραιος) 11

> Συνδέσεις INCR

(ακέραιος αριθμός) 12

> Συνδέσεις DEL

(ακέραιος) 1

> Συνδέσεις INCR

(ακέραιος) 1

> Συνδέσεις INCRBY 100

(ακέραιος αριθμός) 101

> Συνδέσεις DECR

(ακέραιος) 100

> Συνδέσεις DECRBY 10

(ακέραιος) 90

Τα άλλα είδη δομών αξίας έχουν επίσης τα δικά τους παραδείγματα στο σεμινάριο Try Redis. Το σεμινάριο ήταν υπό συντήρηση όταν το δοκίμασα ο ίδιος. Περιμένω να διορθωθεί σύντομα, καθώς η Redis Labs έχει εμπλακεί σε μια αρχική προσπάθεια κοινότητας.

Υπάρχει μια σειρά από πρόσθετες μονάδες για το Redis που περιλαμβάνουν (σε φθίνουσα σειρά δημοτικότητας) μια λειτουργική μονάδα νευρωνικού δικτύου, αναζήτηση πλήρους κειμένου, SQL, έναν τύπο δεδομένων JSON και μια βάση δεδομένων γραφήματος. Οι άδειες για τις ενότητες καθορίζονται από τους συγγραφείς. Ορισμένες από τις λειτουργικές μονάδες που λειτουργούν με το Redis είναι κυρίως λειτουργικές μονάδες για το Redis Enterprise.

Βελτιώσεις Redis Enterprise

Χρησιμοποιώντας μια κοινόχρηστη αρχιτεκτονική συμπλέγματος, το Redis Enterprise παρέχει άπειρη γραμμική κλιμάκωση χωρίς να επιβάλλει μη γραμμικά γενικά έξοδα σε μια αρχιτεκτονική κλιμάκωσης. Μπορείτε να αναπτύξετε πολλές παρουσίες Redis σε έναν κόμβο συμπλέγματος, για να επωφεληθείτε πλήρως από την αρχιτεκτονική υπολογιστών πολλαπλών πυρήνων. Η Redis Enterprise επέδειξε κλιμάκωση σε εκατοντάδες εκατομμύρια λειτουργίες ανά δευτερόλεπτο με πέντε εννέα (99,999%) χρόνο λειτουργίας. Η Redis Enterprise κάνει αυτόματη αναδιανομή και επανεξισορρόπηση διατηρώντας παράλληλα χαμηλό λανθάνοντα χρόνο και υψηλή απόδοση για φορτία συναλλαγών.

Το Redis Enterprise προσφέρει ενεργή-ενεργή ανάπτυξη για παγκόσμιες κατανεμημένες βάσεις δεδομένων, επιτρέποντας ταυτόχρονες λειτουργίες ανάγνωσης και εγγραφής στο ίδιο σύνολο δεδομένων σε πολλές γεωγραφικές τοποθεσίες. Για να γίνει πιο αποτελεσματικό, το Redis Enterprise μπορεί να χρησιμοποιήσει αναπαραγόμενους τύπους δεδομένων χωρίς σύγκρουση (CRDTs) για να διατηρήσει τη συνέπεια και τη διαθεσιμότητα των δεδομένων. Το Riak και το Azure Cosmos DB είναι δύο άλλες βάσεις δεδομένων NoSQL που υποστηρίζουν CRDTs.

Ενώ υπάρχει εκτεταμένη ακαδημαϊκή βιβλιογραφία για τα CRDTs, παραδέχομαι ότι δεν καταλαβαίνω πλήρως πώς ή γιατί λειτουργούν. Η σύντομη περίληψη του τι το κάνουν είναι ότι τα CRDT μπορούν να επιλύσουν ασυνέπειες χωρίς παρέμβαση, χρησιμοποιώντας ένα μαθηματικά παραγόμενο σύνολο κανόνων. Τα CRDT είναι πολύτιμα για δεδομένα μεγάλου όγκου που απαιτούν κοινόχρηστη κατάσταση και μπορούν να χρησιμοποιήσουν διακομιστές με γεωγραφική διασπορά για να μειώσουν τον λανθάνοντα χρόνο για τους χρήστες.

Μία από τις σημαντικότερες διαφορές μεταξύ της Redis και της Redis Enterprise είναι ότι η Redis Enterprise αποσυνδέει τη διαδρομή δεδομένων από τη διαχείριση συμπλεγμάτων. Αυτό βελτιώνει τη λειτουργία και των δύο στοιχείων. Η διαδρομή δεδομένων βασίζεται σε πολλαπλούς διακομιστές μεσολάβησης μηδενικού λανθάνοντος χρόνου, που βρίσκονται σε κάθε έναν από τους κόμβους συμπλέγματος για να καλύψουν την υποκείμενη πολυπλοκότητα του συστήματος. Ο διαχειριστής συμπλέγματος είναι μια κυβερνητική συνάρτηση που παρέχει δυνατότητες όπως αναδιαμόρφωση, επανεξισορρόπηση, αυτόματη αποτυχία, επίγνωση ραφιών, παροχή βάσεων δεδομένων, διαχείριση πόρων, διαμόρφωση επιμονής δεδομένων και δημιουργία αντιγράφων ασφαλείας και ανάκτηση. Επειδή ο διαχειριστής συμπλέγματος αποσυνδέεται πλήρως από τα στοιχεία της διαδρομής δεδομένων, οι αλλαγές στα στοιχεία του λογισμικού δεν επηρεάζουν τα στοιχεία της διαδρομής δεδομένων.

Το Redis on Flash είναι μια δυνατότητα Redis Enterprise που μπορεί να μειώσει δραστικά το κόστος υλικού για το Redis. Αντί να χρειαστεί να πληρώσετε από τη μύτη για terabyte μνήμης RAM ή να περιορίσετε το μέγεθος των συνόλων δεδομένων Redis, μπορείτε να χρησιμοποιήσετε το Redis στο Flash για να τοποθετήσετε τα συχνά προσπελάσιμα δεδομένα στη μνήμη και τις ψυχρότερες τιμές στο Flash ή τη μόνιμη μνήμη, όπως το Intel Optane DC.

Οι λειτουργικές μονάδες Redis Enterprise περιλαμβάνουν τα RedisGraph, RedisJSON, RedisTimeSeries, RedisBloom, RediSearch και RedisGears. Όλες οι λειτουργικές μονάδες Redis Enterprise λειτουργούν επίσης με Redis ανοιχτού κώδικα.

Τι νέο υπάρχει στο Redis 6;

Το Redis 6 είναι μια μεγάλη έκδοση, τόσο για την έκδοση ανοιχτού κώδικα όσο και για την εμπορική έκδοση του Redis Enterprise. Τα νέα της απόδοσης είναι η χρήση σπειροειδούς I / O, το οποίο δίνει στο Redis 6 μια βελτίωση 2x στην ταχύτητα σε σχέση με το Redis 5 (το οποίο δεν ήταν καθόλου). Αυτό μεταφέρεται στο Redis Enterprise, το οποίο έχει επιπλέον βελτιώσεις ταχύτητας για συστάδες όπως περιγράφεται παραπάνω.

Η προσθήκη λιστών ελέγχου πρόσβασης (ACL) δίνει στο Redis 6 την έννοια των χρηστών και επιτρέπει στους προγραμματιστές να γράφουν πιο ασφαλή κώδικα. Το Redis Enterprise 6 βασίζεται σε ACL για να προσφέρει έλεγχο πρόσβασης βάσει ρόλου (RBAC), το οποίο είναι πιο βολικό για τους προγραμματιστές και τα DBA.

Σημαντικές νέες δυνατότητες στο Redis 6

Redis 6.0 ανοιχτού κώδικα

  • Λίστες ελέγχου πρόσβασης (ACL)
  • Βελτιωμένες εξώσεις
  • Κλωστή I / O
  • Πρωτόκολλο RESP3

Redis Enterprise 6.0

  • Έλεγχος πρόσβασης βάσει ρόλου (RBAC)
  • Επέκταση ενεργού-ενεργού
  • HyperLogLog
  • Ροές

Το Redis Enterprise 6.0 προσθέτει υποστήριξη για τον τύπο δεδομένων ροών σε ενεργές ενεργές βάσεις δεδομένων. Αυτό επιτρέπει τόσο υψηλή διαθεσιμότητα όσο και χαμηλό λανθάνοντα χρόνο ενώ ταυτόχρονα διαβάζετε και γράφετε από και προς μια ροή σε πραγματικό χρόνο σε πολλά κέντρα δεδομένων σε πολλές γεωγραφικές τοποθεσίες.

Το RedisGears είναι ένα δυναμικό πλαίσιο που επιτρέπει στους προγραμματιστές να γράφουν και να εκτελούν συναρτήσεις που εφαρμόζουν ροές δεδομένων στο Redis. Επιτρέπει στους χρήστες να γράφουν σενάρια Python για να εκτελούνται μέσα στο Redis και επιτρέπει μια σειρά περιπτώσεων χρήσης, όπως εγγραφή πίσω (το Redis λειτουργεί ως front-end σε μια βάση δεδομένων με δίσκο), επεξεργασία δεδομένων σε πραγματικό χρόνο, ροή και επεξεργασία συμβάντων, λειτουργίες που διασταυρώνουν τις δομές και τα μοντέλα δεδομένων και τις συναλλαγές που βασίζονται σε AI

Το RedisAI είναι ένας κινητήρας μοντέλου που λειτουργεί μέσα στο Redis. Μπορεί να κάνει συμπεράσματα με τα μοντέλα PyTorch, TensorFlow και ONNX. Το RedisAI μπορεί να εκτελεστεί σε CPU και GPU και επιτρέπει περιπτώσεις χρήσης όπως ανίχνευση απάτης, ανίχνευση ανωμαλιών και εξατομίκευση.

Εγκατάσταση του Redis

Μπορείτε να εγκαταστήσετε το Redis κατεβάζοντας και μεταγλώττοντας ένα tarball προέλευσης ή τραβώντας μια εικόνα Docker από το Docker Hub. Το Redis μπορεί να μεταγλωττιστεί και να χρησιμοποιηθεί σε Linux, MacOS, OpenBSD, NetBSD και FreeBSD. Το αποθετήριο πηγαίου κώδικα βρίσκεται στο GitHub. Στα Windows, μπορείτε να εκτελέσετε το Redis είτε σε κοντέινερ Docker είτε στο υποσύστημα Windows για Linux (WSL), το οποίο απαιτεί Windows 10.

Μπορείτε να εγκαταστήσετε το Redis Enterprise σε Linux ή σε κοντέινερ Docker. Οι λήψεις Linux διατίθενται με τη μορφή δυαδικών πακέτων (DEB ή RPM ανάλογα με τη γεύση του Linux) και scripts shell shell για εγκατάσταση συμπλέγματος. Τα σενάρια ελέγχουν για τους απαιτούμενους τέσσερις πυρήνες και 15 GB μνήμης RAM για εγκατάσταση.

Redis Enterprise Cloud

Ο πιο γρήγορος τρόπος για να εγκαταστήσετε το Redis Enterprise δεν είναι να το εγκαταστήσετε καθόλου, αλλά να το εκτελέσετε στο Redis Enterprise Cloud. Όταν το δοκίμασα ο ίδιος για λόγους ελέγχου, αρχικά έλαβα μια παρουσία Redis 5. Έπρεπε να ζητήσω αναβάθμιση σε Redis 6.