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

Γιατί ο Redis χτυπά το Memcached για προσωρινή αποθήκευση

Memcached ή Redis; Είναι μια ερώτηση που σχεδόν πάντα προκύπτει σε οποιαδήποτε συζήτηση σχετικά με τη συμπίεση περισσότερων επιδόσεων από μια σύγχρονη εφαρμογή ιστού που βασίζεται σε βάση δεδομένων. Όταν η απόδοση πρέπει να βελτιωθεί, η προσωρινή αποθήκευση είναι συχνά το πρώτο βήμα και το Memcached ή το Redis είναι συνήθως τα πρώτα μέρη για να γυρίσετε.

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

Redis εναντίον Memcached για προσωρινή αποθήκευση

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

Τόσο το Memcached όσο και το Redis είναι ώριμα και εξαιρετικά δημοφιλή έργα ανοιχτού κώδικα. Το Memcached αναπτύχθηκε αρχικά από τον Brad Fitzpatrick το 2003 για τον ιστότοπο του LiveJournal. Από τότε, το Memcached ξαναγράφηκε στο C (η αρχική εφαρμογή ήταν στο Perl) και τέθηκε σε δημόσιο τομέα, όπου έχει γίνει ακρογωνιαίος λίθος των σύγχρονων εφαρμογών Web. Η τρέχουσα ανάπτυξη του Memcached εστιάζεται στη σταθερότητα και τις βελτιστοποιήσεις αντί να προσθέτει νέα χαρακτηριστικά.

Το Redis δημιουργήθηκε από τον Salvatore Sanfilippo το 2009 και ο Sanfilippo παραμένει ο κύριος προγραμματιστής του έργου σήμερα. Το Redis περιγράφεται μερικές φορές ως "Memcached on στεροειδή", κάτι που δεν προκαλεί έκπληξη, δεδομένου ότι τμήματα του Redis κατασκευάστηκαν ως απάντηση σε μαθήματα που αντλήθηκαν από τη χρήση του Memcached. Το Redis έχει περισσότερα χαρακτηριστικά από το Memcached και είναι, επομένως, πιο ισχυρό και ευέλικτο.

Χρησιμοποιείται από πολλές εταιρείες και σε αμέτρητα κρίσιμα περιβάλλοντα παραγωγής, τόσο το Memcached όσο και το Redis υποστηρίζονται από βιβλιοθήκες πελατών σε κάθε πιθανή γλώσσα προγραμματισμού και περιλαμβάνεται σε πολλά πακέτα για προγραμματιστές. Στην πραγματικότητα, είναι μια σπάνια στοίβα ιστού που δεν περιλαμβάνει ενσωματωμένη υποστήριξη για Memcached ή Redis.

Γιατί οι Memcached και Redis είναι τόσο δημοφιλείς; Όχι μόνο είναι εξαιρετικά αποτελεσματικοί, αλλά είναι επίσης σχετικά απλοί. Η έναρξη με Memcached ή Redis θεωρείται εύκολη δουλειά για προγραμματιστή. Χρειάζονται μόνο λίγα λεπτά για να ρυθμιστούν και να λειτουργήσουν με μια εφαρμογή. Έτσι, μια μικρή επένδυση χρόνου και προσπάθειας μπορεί να έχει άμεσο, δραματικό αντίκτυπο στην απόδοση - συνήθως από τάξεις μεγέθους. Μια απλή λύση με τεράστιο όφελος. είναι τόσο κοντά στη μαγεία όσο μπορείτε.

Πότε να χρησιμοποιήσετε το Memcached

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

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

Το δεύτερο σενάριο στο οποίο το Memcached έχει ένα πλεονέκτημα έναντι του Redis είναι στην κλιμάκωση. Επειδή το Memcached είναι πολλαπλών νημάτων, μπορείτε εύκολα να κλιμακώσετε δίνοντάς του περισσότερους υπολογιστικούς πόρους, αλλά θα χάσετε μέρος ή όλα τα προσωρινά αποθηκευμένα δεδομένα (ανάλογα με το αν χρησιμοποιείτε συνεπή κατακερματισμό). Το Redis, το οποίο είναι ως επί το πλείστον με ένα νήμα, μπορεί να κλιμακωθεί οριζόντια μέσω ομαδοποίησης χωρίς απώλεια δεδομένων. Η ομαδοποίηση είναι μια αποτελεσματική λύση κλιμάκωσης, αλλά είναι συγκριτικά πιο περίπλοκη η εγκατάσταση και η λειτουργία.

Πότε να χρησιμοποιήσετε το Redis

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

Η υπεροχή του Redis είναι εμφανής σε όλες σχεδόν τις πτυχές της διαχείρισης της προσωρινής μνήμης. Οι κρυφές μνήμες χρησιμοποιούν έναν μηχανισμό που ονομάζεται έξωση δεδομένων για να δημιουργηθεί χώρος για νέα δεδομένα διαγράφοντας παλιά δεδομένα από τη μνήμη. Ο μηχανισμός εξώθησης δεδομένων της Memcached χρησιμοποιεί έναν αλγόριθμο Λιγότερο που Χρησιμοποιήθηκε Πρόσφατα και απομακρύνει αυθαίρετα δεδομένα παρόμοιου μεγέθους με τα νέα δεδομένα.

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

Το Redis σάς προσφέρει πολύ μεγαλύτερη ευελιξία όσον αφορά τα αντικείμενα που μπορείτε να αποθηκεύσετε στην κρυφή μνήμη. Ενώ το Memcached περιορίζει τα ονόματα κλειδιών σε 250 byte και λειτουργεί μόνο με απλές συμβολοσειρές, το Redis επιτρέπει τα ονόματα κλειδιών και τις τιμές να είναι τόσο μεγάλα όσο 512MB το καθένα και είναι δυαδικά ασφαλή. Επιπλέον, η Redis διαθέτει πέντε κύριες δομές δεδομένων για να διαλέξει, ανοίγοντας έναν κόσμο δυνατοτήτων για τον προγραμματιστή εφαρμογών μέσω έξυπνης προσωρινής αποθήκευσης και χειρισμού δεδομένων προσωρινής αποθήκευσης.

Επανάκληση για διατήρηση δεδομένων

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

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

Ένα άλλο σημαντικό πλεονέκτημα του Redis είναι ότι τα δεδομένα που αποθηκεύει δεν είναι αδιαφανή, οπότε ο διακομιστής μπορεί να τα χειριστεί άμεσα. Ένα σημαντικό μερίδιο των εντολών 180-plus που διατίθενται στο Redis αφιερώνεται σε λειτουργίες επεξεργασίας δεδομένων και ενσωματώνει λογική στο ίδιο το χώρο αποθήκευσης δεδομένων μέσω scripting Lua από διακομιστή. Αυτές οι ενσωματωμένες εντολές και σενάρια χρήστη σας δίνουν την ευελιξία να χειρίζεστε εργασίες επεξεργασίας δεδομένων απευθείας στο Redis χωρίς να χρειάζεται να στείλετε δεδομένα μέσω του δικτύου σε άλλο σύστημα για επεξεργασία.

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

Επανάληψη αναπαραγωγής δεδομένων στη μνήμη

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

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

Όταν οι προγραμματιστές συνειδητοποιούν την αποτελεσματικότητα των δυνατοτήτων επιμονής και αναπαραγωγής στη μνήμη του Redis, το χρησιμοποιούν συχνά ως βάση δεδομένων πρώτων αποκριτών, συνήθως για την ανάλυση και την επεξεργασία δεδομένων υψηλής ταχύτητας και την παροχή απαντήσεων στον χρήστη, ενώ διατηρείται μια δευτερεύουσα (συχνά πιο αργή) βάση δεδομένων ιστορικό ιστορικό του τι συνέβη. Όταν χρησιμοποιείται με αυτόν τον τρόπο, το Redis μπορεί επίσης να είναι ιδανικό για περιπτώσεις χρήσης αναλυτικών στοιχείων.

Επανάληψη για την ανάλυση δεδομένων

Τρία σενάρια ανάλυσης έρχονται αμέσως στο μυαλό. Στο πρώτο σενάριο, όταν χρησιμοποιείτε κάτι όπως το Apache Spark για την επαναληπτική επεξεργασία μεγάλων συνόλων δεδομένων, μπορείτε να χρησιμοποιήσετε το Redis ως επίπεδο εξυπηρέτησης για δεδομένα που είχαν προηγουμένως υπολογιστεί από το Spark. Στο δεύτερο σενάριο, η χρήση του Redis ως κοινόχρηστου κατανεμημένου χώρου αποθήκευσης δεδομένων στη μνήμη μπορεί να επιταχύνει τις ταχύτητες επεξεργασίας Spark κατά 45 έως 100. Τέλος, ένα πολύ κοινό σενάριο είναι αυτό στο οποίο οι αναφορές και τα αναλυτικά στοιχεία πρέπει να προσαρμόζονται από ο χρήστης, αλλά η ανάκτηση δεδομένων από εγγενείς αποθήκες δεδομένων παρτίδας (όπως Hadoop ή RDBMS) διαρκεί πολύ. Σε αυτήν την περίπτωση, ένα κατάστημα αποθήκευσης δεδομένων στη μνήμη όπως το Redis είναι ο μόνος πρακτικός τρόπος για να λάβετε χρόνους τηλεειδοποίησης και απόκρισης δευτερολέπτων.

Όταν χρησιμοποιείτε εξαιρετικά μεγάλα λειτουργικά σύνολα δεδομένων ή φόρτους εργασίας αναλυτικών στοιχείων, η εκτέλεση όλων στη μνήμη ενδέχεται να μην είναι αποδοτική. Για να επιτύχει απόδοση δευτερολέπτου με χαμηλότερο κόστος, η Redis Labs δημιούργησε μια έκδοση του Redis που λειτουργεί με συνδυασμό RAM και φλας, με την επιλογή ρύθμισης των αναλογιών RAM προς φλας. Ενώ αυτό ανοίγει αρκετούς νέους δρόμους για την επιτάχυνση της επεξεργασίας φόρτου εργασίας, δίνει επίσης στους προγραμματιστές τη δυνατότητα να εκτελέσουν απλώς το "cache on flash".

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

---

Η Itamar Haber (@itamarhaber) είναι επικεφαλής συνήγορος προγραμματιστών στο Redis Labs, η οποία προσφέρει το Memcached και το Redis ως πλήρως διαχειριζόμενες υπηρεσίες cloud για προγραμματιστές. Η ποικίλη εμπειρία του περιλαμβάνει την ανάπτυξη προϊόντων λογισμικού και ρόλους διαχείρισης και ηγεσίας στα Xeround, Etagon, Amicada και MNS Ltd. Ο Itamar κατέχει Master of Business Administration από το κοινό πρόγραμμα Kellogg-Recanati από τα Πανεπιστήμια Northwestern και Tel-Aviv, καθώς και Bachelor Επιστήμης στην Επιστήμη των Υπολογιστών.

Το New Tech Forum παρέχει έναν χώρο για να εξερευνήσετε και να συζητήσετε την αναδυόμενη τεχνολογία σε πρωτοφανές βάθος και εύρος. Η επιλογή είναι υποκειμενική, με βάση την επιλογή των τεχνολογιών που πιστεύουμε ότι είναι σημαντικές και έχουν μεγάλο ενδιαφέρον για τους αναγνώστες. δεν αποδέχεται ασφάλεια μάρκετινγκ για δημοσίευση και διατηρεί το δικαίωμα να επεξεργαστεί όλο το περιεχόμενο. Στείλτε όλες τις ερωτήσεις στο [email protected]