Τι μπορεί να προκύψει από την αποδυνάμωση του επιπέδου απομόνωσης συναλλαγών στις βάσεις δεδομένων;

Γεια σε όλους. Ο Βλάντισλαβ Ροντίν είναι στη γραμμή. Αυτή τη στιγμή είμαι ο υπεύθυνος μαθήματος για το μάθημα High Load Architect στο OTUS και διδάσκω επίσης μαθήματα αρχιτεκτονικής λογισμικού.

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

Τι μπορεί να προκύψει από την αποδυνάμωση του επιπέδου απομόνωσης συναλλαγών στις βάσεις δεδομένων;

Εισαγωγή

В τελευταία φορά Μιλήσαμε για το γεγονός ότι οι συναλλαγές σε βάσεις δεδομένων εξυπηρετούν την επίλυση δύο προβλημάτων: τη διασφάλιση της ανοχής σφαλμάτων και της πρόσβασης σε δεδομένα σε ένα ανταγωνιστικό περιβάλλον. Για να εκτελεστούν πλήρως αυτές οι εργασίες, μια συναλλαγή πρέπει να έχει ιδιότητες ACID. Σήμερα θα μιλήσουμε λεπτομερώς για την επιστολή Εγώ (απομόνωση) σε αυτή τη συντομογραφία.

Μόνωση

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

Οι πιο γνωστές ανωμαλίες είναι: dirty read (ακατάληπτη ανάγνωση), non-repeatable read (μη επαναλήψιμη ανάγνωση), phantom read (φανταστική ανάγνωση), αλλά στην πραγματικότητα υπάρχουν 5 ακόμη: dirty write (ακατάληπτη εγγραφή), cursor lost update (χαμένη ενημέρωση κέρσορα), read skew (ασύμμετρη ανάγνωση), write skew (ασύμμετρη εγγραφή).

Βρώμικο γράψιμο

Η ουσία της ανωμαλίας είναι ότι οι συναλλαγές μπορούν να αντικαταστήσουν μη δεσμευμένα δεδομένα.

Τι μπορεί να προκύψει από την αποδυνάμωση του επιπέδου απομόνωσης συναλλαγών στις βάσεις δεδομένων;

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

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

Βρώμικη ανάγνωση

Η «dirty read» σημαίνει ανάγνωση μη δεσμευμένων δεδομένων.

Τι μπορεί να προκύψει από την αποδυνάμωση του επιπέδου απομόνωσης συναλλαγών στις βάσεις δεδομένων;

Προβλήματα προκύπτουν όταν πρέπει να ληφθούν ενέργειες ή αποφάσεις με βάση το δείγμα.

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

Χαμένη ενημέρωση

Χαμένη ενημέρωση σημαίνει χαμένες ενημερώσεις και η μετάφραση αντικατοπτρίζει με μεγάλη ακρίβεια την ουσία του προβλήματος:

Τι μπορεί να προκύψει από την αποδυνάμωση του επιπέδου απομόνωσης συναλλαγών στις βάσεις δεδομένων;

Στην πραγματικότητα, το αποτέλεσμα της συναλλαγής T2 ακυρώθηκε. Αυτή η κατάσταση διορθώνεται με ρητά ή έμμεσα κλειδώματα εγγραφής. Δηλαδή, είτε απλώς ενημερώνουμε την εγγραφή και στη συνέχεια συμβαίνει ένα έμμεσο κλείδωμα, είτε εκτελούμε επιλέξτε για ενημέρωση, προκαλώντας κλειδώματα ανάγνωσης και εγγραφής. Λάβετε υπόψη ότι μια τέτοια ενέργεια είναι αρκετά επικίνδυνη: με την «αθώα» μας ανάγνωση, μπλοκάρουμε άλλες αναγνώσεις. Ορισμένες βάσεις προσφέρουν μια ασφαλέστερη επιλογή. επιλογή για κοινή χρήση, το οποίο επιτρέπει την ανάγνωση δεδομένων αλλά όχι την τροποποίηση.

Ο δρομέας έχασε την ενημέρωση

Για πιο ακριβή έλεγχο, οι βάσεις δεδομένων ενδέχεται να προσφέρουν άλλα εργαλεία, όπως έναν κέρσορα. Ένας δρομέας είναι μια δομή που περιέχει ένα σύνολο γραμμών και επιτρέπει την επανάληψη πάνω από αυτές. Δηλώστε το όνομα_δρομέα για την εντολή select_statement. Τα περιεχόμενα του δρομέα περιγράφονται με την επιλογή (select).

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

Μη επαναλήψιμη ανάγνωση

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

Τι μπορεί να προκύψει από την αποδυνάμωση του επιπέδου απομόνωσης συναλλαγών στις βάσεις δεδομένων;

Γιατί αποτελεί αυτό καν πρόβλημα; Φανταστείτε ότι ο στόχος της συναλλαγής T2 στην εικόνα είναι να επιλέξετε όλα τα προϊόντα των οποίων η τιμή είναι μικρότερη από 150 USD. Κάποιος άλλος ενημέρωσε την τιμή σε 200 USD. Έτσι, το εγκατεστημένο φίλτρο δεν λειτούργησε.

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

Φανταστική ανάγνωση

Μια φανταστική ανάγνωση είναι μια ανάγνωση δεδομένων που προστέθηκαν από μια άλλη συναλλαγή.

Τι μπορεί να προκύψει από την αποδυνάμωση του επιπέδου απομόνωσης συναλλαγών στις βάσεις δεδομένων;

Για παράδειγμα, μπορεί κανείς να παρατηρήσει την εσφαλμένη επιλογή του φθηνότερου προϊόντος όταν εμφανίζεται αυτή η ανωμαλία.

Η απαλλαγή από τις φανταστικές μετρήσεις είναι ήδη αρκετά δύσκολη. Το τακτικό μπλοκάρισμα δεν είναι αρκετό, επειδή δεν μπορούμε να μπλοκάρουμε κάτι που δεν υπάρχει ακόμα. Τα συστήματα 2PL χρησιμοποιούν προγνωστικό κλείδωμα, ενώ τα συστήματα MVCC χρησιμοποιούν έναν χρονοπρογραμματιστή συναλλαγών για να ακυρώσουν συναλλαγές που ενδέχεται να έχουν διακοπεί από μια εισαγωγή. Τόσο ο πρώτος όσο και ο δεύτερος μηχανισμός είναι αρκετά βαρύς.

Ανάγνωση ασύμμετρης ανάγνωσης

Η ασύμμετρη ανάγνωση συμβαίνει όταν εργαζόμαστε με πολλούς πίνακες των οποίων το περιεχόμενο πρέπει να αλλάζει με συνέπεια.

Ας υποθέσουμε ότι έχουμε πίνακες που αναπαριστούν αναρτήσεις και τις μετα-πληροφορίες τους:

Τι μπορεί να προκύψει από την αποδυνάμωση του επιπέδου απομόνωσης συναλλαγών στις βάσεις δεδομένων;

Μία συναλλαγή διαβάζει από τους πίνακες, μια άλλη τους τροποποιεί:

Τι μπορεί να προκύψει από την αποδυνάμωση του επιπέδου απομόνωσης συναλλαγών στις βάσεις δεδομένων;

Ως αποτέλεσμα της εκτέλεσης της συναλλαγής T1, ο τίτλος ανάρτησης = Good και το updated_by = T2, κάτι που αποτελεί κάποια ασυμφωνία.

Στην πραγματικότητα, είναι μια μη επαναλήψιμη ανάγνωση, αλλά αποτελείται από διάφορους πίνακες.

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

Γράψτε μια ασύμμετρη γραφή

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

Τι μπορεί να προκύψει από την αποδυνάμωση του επιπέδου απομόνωσης συναλλαγών στις βάσεις δεδομένων;

Τι μπορεί να προκύψει από την αποδυνάμωση του επιπέδου απομόνωσης συναλλαγών στις βάσεις δεδομένων;

Η ανωμαλία σήμαινε ότι κανένας από τους γιατρούς δεν ήταν σε υπηρεσία. Γιατί συνέβη αυτό; Επειδή η συναλλαγή έλεγχε μια συνθήκη που θα μπορούσε να παραβιαστεί από μια άλλη συναλλαγή και λόγω απομόνωσης δεν είδαμε αυτήν την αλλαγή.

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

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

Τι μπορεί να προκύψει από την αποδυνάμωση του επιπέδου απομόνωσης συναλλαγών στις βάσεις δεδομένων;

Τι μπορεί να προκύψει από την αποδυνάμωση του επιπέδου απομόνωσης συναλλαγών στις βάσεις δεδομένων;

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

Ο λόγος για το πρόβλημα είναι ακριβώς ο ίδιος όπως και στην φανταστική ανάγνωση.

Ευρήματα

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

Μάθετε περισσότερα για το μάθημα.

Πηγή: www.habr.com

Αγοράστε αξιόπιστη φιλοξενία για ιστότοπους με προστασία DDoS, διακομιστές VPS VDS 🔥 Αγοράστε αξιόπιστη φιλοξενία ιστοσελίδων με προστασία DDoS, διακομιστές VPS VDS | ProHoster