Αρχιτεκτονική στη μνήμη για υπηρεσίες web: βασικές αρχές και αρχές τεχνολογίας

Το In-Memory είναι ένα σύνολο εννοιών για την αποθήκευση δεδομένων όταν είναι αποθηκευμένα στη μνήμη RAM της εφαρμογής και ο δίσκος χρησιμοποιείται για δημιουργία αντιγράφων ασφαλείας. Στις κλασικές προσεγγίσεις, τα δεδομένα αποθηκεύονται στο δίσκο και η μνήμη αποθηκεύεται στην κρυφή μνήμη. Για παράδειγμα, μια εφαρμογή Ιστού με backend για την επεξεργασία δεδομένων τα ζητά σε αποθήκευση: τα λαμβάνει, τα μετατρέπει και πολλά δεδομένα μεταφέρονται μέσω του δικτύου. Στο In-Memory, οι υπολογισμοί αποστέλλονται στα δεδομένα - στην αποθήκευση, όπου υποβάλλονται σε επεξεργασία και το δίκτυο φορτώνεται λιγότερο.

Χάρη στην αρχιτεκτονική του, το In-Memory επιταχύνει την πρόσβαση στα δεδομένα πολλές φορές, και μερικές φορές ακόμη και τάξεις μεγέθους, πιο γρήγορα. Για παράδειγμα, οι τραπεζικοί αναλυτές θέλουν να δουν σε μια αναλυτική εφαρμογή μια αναφορά για τα εκδοθέντα δάνεια σε δυναμική με την ημέρα για τον τελευταίο χρόνο. Αυτή η διαδικασία θα διαρκέσει λίγα λεπτά σε ένα κλασικό DBMS, αλλά με το In-Memory θα εμφανιστεί σχεδόν αμέσως. Αυτό συμβαίνει επειδή η προσέγγιση σάς επιτρέπει να αποθηκεύετε στην κρυφή μνήμη πολύ περισσότερες πληροφορίες και αποθηκεύονται στη μνήμη RAM "στο χέρι". Η εφαρμογή δεν χρειάζεται να ζητήσει δεδομένα από τον σκληρό δίσκο, η διαθεσιμότητα των οποίων περιορίζεται από την ταχύτητα του δικτύου και του δίσκου.

Ποιες άλλες δυνατότητες είναι διαθέσιμες με το In-Memory και τι είδους προσέγγιση είναι αυτή; Βλαντιμίρ Πλίγκιν - μηχανικός στο GridGain. Αυτό το υλικό ανασκόπησης θα είναι χρήσιμο σε προγραμματιστές υποστήριξης εφαρμογών ιστού που δεν έχουν εργαστεί με το In-Memory και θέλουν να δοκιμάσουν ή ενδιαφέρονται για τις σύγχρονες τάσεις στην ανάπτυξη λογισμικού και τον σχεδιασμό αρχιτεκτονικής.

Σημείωση. Το άρθρο βασίζεται στη μεταγραφή της αναφοράς του Βλαντιμίρ στο #GetIT Conf. Πριν από την εισαγωγή της αυτοαπομόνωσης, πραγματοποιούσαμε τακτικά συναντήσεις και συνέδρια για προγραμματιστές στη Μόσχα και την Αγία Πετρούπολη: συζητούσαμε τις τάσεις, τα τρέχοντα αναπτυξιακά ζητήματα, τα προβλήματα και τις λύσεις τους. Δεν είναι δυνατό να διοργανώσετε ένα συνέδριο τώρα, αλλά είναι καιρός να μοιραστείτε χρήσιμο υλικό από παλαιότερα.

Ποιος χρησιμοποιεί το In-Memory και πώς

Το In-Memory χρησιμοποιείται συχνότερα όπου απαιτείται γρήγορη αλληλεπίδραση με τον χρήστη ή επεξεργασία μεγάλων ποσοτήτων δεδομένων.

  • Τράπεζες χρησιμοποιήστε το In-Memory, για παράδειγμα, για να μειώσετε τις καθυστερήσεις όταν οι πελάτες χρησιμοποιούν εφαρμογές ή για να αναλύσετε τον πελάτη πριν από την έκδοση δανείου.
  • Fintech χρησιμοποιεί το In-Memory για να βελτιώσει την απόδοση των υπηρεσιών και των εφαρμογών για τράπεζες που αναθέτουν σε τρίτους την επεξεργασία και ανάλυση δεδομένων. 
  • Ασφαλιστικές εταιρείες: για τον υπολογισμό των κινδύνων, για παράδειγμα, αναλύοντας δεδομένα πελατών για πολλά χρόνια.
  • Εταιρείες Logistics. Επεξεργάζονται πολλά δεδομένα, για παράδειγμα, για να υπολογίσουν τις βέλτιστες διαδρομές για τη μεταφορά εμπορευμάτων και επιβατών με χιλιάδες παραμέτρους και παρακολουθούν την κατάσταση των αποστολών.
  • Λιανεμποριο. Οι λύσεις In-Memory βοηθούν στην ταχύτερη εξυπηρέτηση των πελατών και στην επεξεργασία μεγάλου όγκου πληροφοριών: αποστολές, τιμολόγια, συναλλαγές, παρουσία χιλιάδων αγαθών σε αποθήκες και προετοιμασία αναλυτικών αναφορών.
  • В IoT Το In-Memory αντικαθιστά τις παραδοσιακές βάσεις δεδομένων.
  • Φαρμακευτικός Οι εταιρείες χρησιμοποιούν το In-Memory, για παράδειγμα, για να ταξινομήσουν συνδυασμούς συνθέσεων φαρμάκων. 

Θα σας πω μερικά παραδείγματα για το πώς οι πελάτες μας χρησιμοποιούν λύσεις In-Memory και πώς μπορείτε να τις εφαρμόσετε μόνοι σας.

Στη μνήμη ως κύρια αποθήκευση

Ένας από τους πελάτες μας είναι μεγάλος προμηθευτής ιατρικού επιστημονικού εξοπλισμού από τις ΗΠΑ. Χρησιμοποιούν μια λύση In-Memory ως κύρια αποθήκευση δεδομένων. Όλα τα δεδομένα αποθηκεύονται στο δίσκο και το υποσύνολο δεδομένων που χρησιμοποιείται ενεργά διατηρείται στη μνήμη RAM. Οι μέθοδοι πρόσβασης αποθήκευσης είναι τυπικές - GDBC (Generic Database Connector) και γλώσσα ερωτημάτων SQL.

Αρχιτεκτονική στη μνήμη για υπηρεσίες web: βασικές αρχές και αρχές τεχνολογίας

Συλλογικά αυτό ονομάζεται βάση δεδομένων στη μνήμη (IMDB) ή αποθήκευση με επίκεντρο τη μνήμη. Αυτή η κατηγορία λύσεων έχει πολλά ονόματα, δεν είναι τα μόνα. 

Χαρακτηριστικά IMDB:

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

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

Τα IMDB υποστηρίζουν εν μέρει το ACID: Atomicity, Consistency και Isolation. Αλλά δεν υποστηρίζουν "αντοχή" - όταν η τροφοδοσία είναι απενεργοποιημένη, όλα τα δεδομένα χάνονται. Για να λύσετε το πρόβλημα, μπορείτε να χρησιμοποιήσετε στιγμιότυπα - ένα "στιγμιότυπο" της βάσης δεδομένων, ανάλογο με ένα αντίγραφο ασφαλείας της βάσης δεδομένων σε έναν σκληρό δίσκο ή να καταγράψετε συναλλαγές (καταγραφή) για να επαναφέρετε δεδομένα μετά από επανεκκίνηση.

Για να δημιουργήσετε εφαρμογές ανεκτικές σε σφάλματα

Ας φανταστούμε την κλασική αρχιτεκτονική μιας διαδικτυακής εφαρμογής με ανοχή σε σφάλματα. Λειτουργεί ως εξής: όλα τα αιτήματα διανέμονται από έναν εξισορροπητή Ιστού μεταξύ των διακομιστών. Αυτό το σύστημα είναι σταθερό επειδή οι διακομιστές αντιγράφουν ο ένας τον άλλον και δημιουργούν αντίγραφα ασφαλείας σε περίπτωση περιστατικών.

Αρχιτεκτονική στη μνήμη για υπηρεσίες web: βασικές αρχές και αρχές τεχνολογίας

Ο εξισορροπητής κατευθύνει όλα τα αιτήματα από μια περίοδο λειτουργίας αυστηρά σε έναν διακομιστή. Αυτός είναι ένας μηχανισμός συνεδρίας stick: κάθε συνεδρία σχετίζεται με έναν διακομιστή όπου αποθηκεύεται και επεξεργάζεται τοπικά. 

Τι συμβαίνει όταν ένας από τους διακομιστές αποτύχει;

Αρχιτεκτονική στη μνήμη για υπηρεσίες web: βασικές αρχές και αρχές τεχνολογίας

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

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

Αυτό το πρόβλημα μπορεί να λυθεί όπως ο άλλος πελάτης μας, ένας μεγάλος πάροχος PASS από τις ΗΠΑ. Χρησιμοποιεί το In-Memory για τη ομαδοποίηση των περιόδων σύνδεσης ιστού. Για να γίνει αυτό, τα αποθηκεύει όχι τοπικά, αλλά κεντρικά - σε ένα σύμπλεγμα In-Memory. Σε αυτήν την περίπτωση, οι συνεδρίες είναι διαθέσιμες πολύ πιο γρήγορα επειδή είναι ήδη στη μνήμη RAM.

Αρχιτεκτονική στη μνήμη για υπηρεσίες web: βασικές αρχές και αρχές τεχνολογίας

Όταν ένας διακομιστής διακόπτεται, ο εξισορροπητής στέλνει αιτήματα από τον διακομιστή που έχει διακοπεί σε άλλους διακομιστές, όπως στην κλασική αρχιτεκτονική. Υπάρχει όμως μια σημαντική διαφορά: Οι περίοδοι λειτουργίας αποθηκεύονται σε ένα σύμπλεγμα στη μνήμη και οι διακομιστές έχουν πρόσβαση στις περιόδους σύνδεσης του διακομιστή που έχει πέσει.

Αυτή η αρχιτεκτονική αυξάνει την ανοχή σφαλμάτων ολόκληρου του συστήματος. Επιπλέον, είναι δυνατό να εγκαταλειφθεί εντελώς ο μηχανισμός συνεδρίας stick.

Υβριδική Αναλυτική Επεξεργασία Συναλλαγών (HTAP)

Συνήθως, τα συστήματα συναλλαγής και ανάλυσης διατηρούνται χωριστά. Όταν χωριστούν, η κύρια βάση υφίσταται φορτίο. Για την αναλυτική επεξεργασία, τα δεδομένα αντιγράφονται σε ένα αντίγραφο, έτσι ώστε η αναλυτική επεξεργασία να μην παρεμβαίνει στις διαδικασίες συναλλαγών. Αλλά η αντιγραφή γίνεται με καθυστέρηση—είναι αδύνατο να αναπαραχθεί χωρίς καθυστέρηση. Εάν το κάνουμε αυτό συγχρονισμένα, θα επιβραδύνει επίσης την κύρια βάση και δεν θα έχουμε κέρδη.

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

Αρχιτεκτονική στη μνήμη για υπηρεσίες web: βασικές αρχές και αρχές τεχνολογίας

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

Ενσωμάτωση λύσεων In-Memory

Ένας (σχετικά) απλός τρόπος - αναπτύξτε τα πάντα από την αρχή. Διατηρούμε δεδομένα στο δίσκο και αποθηκεύουμε ζεστά δεδομένα στη μνήμη. Αυτό βοηθά στην επιβίωση των επανεκκινήσεων ή των διακοπών του διακομιστή.

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

Εάν δεν είναι δυνατό να δημιουργήσετε τα πάντα από την αρχή, είναι δυνατό να ενσωματώσετε το In-Memory σε ένα ήδη υπάρχουσα αρχιτεκτονική. Αλλά δεν είναι όλες οι λύσεις In-Memory κατάλληλες για αυτό. Υπάρχουν τρεις υποχρεωτικές προϋποθέσεις. Η λύση In-Memory πρέπει να υποστηρίζει:

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

Εάν πληρούνται και οι τρεις προϋποθέσεις, τότε η ενσωμάτωση είναι δυνατή. Τοποθετούμε το In-Memory Data Grid μεταξύ της εφαρμογής και της βάσης δεδομένων. Τώρα τα αιτήματα εγγραφής θα εκχωρηθούν στην υποκείμενη βάση δεδομένων και τα αιτήματα ανάγνωσης θα εκχωρηθούν στην υποκείμενη βάση δεδομένων εάν τα δεδομένα δεν βρίσκονται στην κρυφή μνήμη.

Αρχιτεκτονική στη μνήμη για υπηρεσίες web: βασικές αρχές και αρχές τεχνολογίας

Εάν η γρήγορη πρόσβαση στα δεδομένα και η επεξεργασία τους είναι σημαντική για εσάς, για παράδειγμα, για επιχειρηματικές αναλύσεις, μπορείτε να σκεφτείτε να εφαρμόσετε το In-Memory. Και για την υλοποίηση, μπορείτε να χρησιμοποιήσετε και τις δύο μεθόδους κατά το σχεδιασμό μιας νέας αρχιτεκτονικής.

Πηγή: www.habr.com

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