Εγγραφές σε πολλές περιοχές: πού καταλήγει τελικά η δέσμευση;
Η δρομολόγηση φέρνει ένα αίτημα σε μια περιοχή· μόνο ένα όριο συναλλαγής κάνει τις εγγραφές ατομικές. Ονομάστε την αναλλοίωτη, επιλέξτε τον ιδιοκτήτη και μετά σχεδιάστε την επανάληψη γύρω της.
Δύο διακομιστές εφαρμογής σε δύο περιοχές, ένας πελάτης που γράφει μέσω VPN και ένα ερώτημα που κανείς δεν κατέγραψε: ποιο συστατικό αποφασίζει ότι η εγγραφή συνέβη; Η δρομολόγηση φέρνει το αίτημα σε μια διεργασία. Ένα όριο συναλλαγής αποφασίζει πότε η αλλαγή γίνεται διαρκής και ορατή. Αυτές είναι διαφορετικές εργασίες που εκτελούνται από διαφορετικά συστήματα, και το χάσμα μεταξύ τους είναι εκεί όπου ζουν τα περισσότερα σφάλματα εγγραφής σε πολλές περιοχές.
Ξεκινήστε από τον επιχειρηματικό κανόνα, όχι από τον χάρτη
Ξεκινήστε με μια πρόταση για τον επιχειρηματικό κανόνα και όχι για τη γεωγραφία: ποιες αναγνώσεις και εγγραφές πρέπει να πετύχουν μαζί και ποιες ταυτόχρονες αλλαγές πρέπει να είναι αδύνατες όσο συμβαίνει αυτό. Για μια κράτηση αποθέματος αυτό σημαίνει ότι ο έλεγχος αποθέματος και η κράτηση είτε ισχύουν και τα δύο είτε κανένα, και καμία δεύτερη παραγγελία δεν επιτρέπεται να καταναλώσει την ίδια μονάδα στο μεταξύ.
| Requirement | What satisfies it | What does not |
|---|---|---|
| All-or-nothing application | A transaction inside one owning system | A VPN path between regions |
| No double spend | Isolation strong enough to exclude the conflict | Atomicity alone |
| Survive a region loss | Replication the database itself documents | Two independent databases behind one client |
Ακριβώς αυτή τη μεσαία γραμμή παραλείπουν οι ομάδες. Η ατομικότητα χωρίς επαρκή απομόνωση επιτρέπει σε δύο συναλλαγές να δεσμευτούν σωστά η καθεμία και παρόλα αυτά να παραγάγουν μια κατάσταση που η επιχείρηση θεωρεί αδύνατη, και καμία ποσότητα λογικής επανάληψης δεν το διορθώνει εκ των υστέρων.
Ένα έγκυρο όριο νικά δύο περιφερειακούς διακομιστές
Οι περιφερειακοί διακομιστές εφαρμογής μπορούν να μείνουν εκεί που είναι, αρκεί να υποβάλλουν την πράξη σε μια υπηρεσία που την εκτελεί μέσα σε ένα υποστηριζόμενο όριο συναλλαγής. Το επίπεδο εφαρμογής γίνεται δρομολογητής πρόθεσης· το επίπεδο δεδομένων κατέχει την αλήθεια.
Κρατήστε αυτό το όριο σύντομο και κοντά στα δεδομένα που αγγίζει. Μια συναλλαγή που μένει ανοιχτή όσο ένας άνθρωπος απαντά σε ένα μήνυμα ή όσο μια κλήση διασχίζει δύο περιοχές ξοδεύει τον χρόνο της κρατώντας κλειδώματα και αυξάνοντας την πιθανότητα κάτι άλλο να λήξει πίσω της. Αυτή η αποτυχία μοιάζει με πρόβλημα βάσης δεδομένων και στην πραγματικότητα είναι πρόβλημα σχεδίασης που φόρεσε τέτοιο ρούχο. Η μετακίνηση της απόφασης στο επίπεδο δεδομένων συνήθως την εξαλείφει εντελώς.
BEGIN;
UPDATE inventory SET reserved = reserved + 1
WHERE sku = 'A-100' AND available >= 1;
INSERT INTO reservation (sku, order_id) VALUES ('A-100', 'ord-9f');
COMMIT;
Διαβάστε αυτό το σκίτσο ως όριο, όχι ως σύσταση απόδοσης. Το νόημα είναι ότι ο έλεγχος και η εισαγωγή μοιράζονται μία δέσμευση, οπότε μια ταυτόχρονη παραγγελία είτε βλέπει το απόθεμα καταναλωμένο είτε δεν το βλέπει καθόλου.
Τι δίνει και τι δεν δίνει μια βάση δεδομένων με αντίγραφα
Μια βάση δεδομένων με αντίγραφα μπορεί να παρέχει ευρύτερο όριο όταν το δικό της μοντέλο συναλλαγών το υποστηρίζει. Η Spanner τεκμηριώνει ατομικές συναλλαγές ανάγνωσης και εγγραφής μέσα σε μία βάση δεδομένων σε πίνακες, με καθορισμένη απομόνωση και συμπεριφορά επανάληψης. Αυτή είναι μια εγγύηση που τη διαβάζετε, τη δοκιμάζετε και βασίζεστε σε αυτήν σκόπιμα.
Είναι επίσης μια εγγύηση που προέρχεται από το προϊόν, όχι από τη διαδρομή. Ένα VPN μεταξύ περιοχών αλλάζει το πώς ταξιδεύουν τα πακέτα και το πώς παρουσιάζονται οι αστοχίες. Δεν επεκτείνει ένα όριο συναλλαγής ούτε κατά μία γραμμή, όσο υγιής κι αν φαίνεται η σήραγγα. Η σύγχυση των δύο παράγει αρχιτεκτονικές όπου κάθε συστατικό περνά τον δικό του έλεγχο και τα δεδομένα ακόμη διαφωνούν.
Δύο βάσεις δεδομένων δεν γίνονται ένα σύστημα
Δύο ανεξάρτητα διαχειριζόμενες βάσεις δεδομένων δεν αποκτούν κοινό διαχειριστή συναλλαγών επειδή οι πελάτες μπορούν να φτάσουν και τις δύο. Αν η επιχείρηση χρειάζεται πραγματικά ατομική δέσμευση στο ζεύγος, ο μηχανισμός συντονισμού, οι συμμετέχοντες και η διαδικασία ανάκαμψης πρέπει όλα να επιλεγούν και να πιστοποιηθούν αντί να υποτεθούν.
Σκεφτείτε τη στιγμή που ένας συμμετέχων ή ένας σύνδεσμος εξαφανίζεται αφού έχει προετοιμαστεί η εργασία. Μια υποστηριζόμενη κατανεμημένη δέσμευση μπορεί να αφήσει αβέβαιη κατάσταση που χρειάζεται διαδικασία ανάκαμψης και ανθρώπινη απόφαση, και δεν συνοδεύεται από καμία υπόσχεση ότι κάθε περιοχή παραμένει εγγράψιμη σε κάθε διαχωρισμό.
Αν αντίθετα είναι αποδεκτός ο ασύγχρονος συντονισμός, πείτε το ρητά και γράψτε τις ενδιάμεσες επιχειρηματικές καταστάσεις μαζί με τους κανόνες συμφιλίωσης. Μια αλυσίδα τοπικά δεσμευμένων βημάτων με αντιστάθμιση είναι νόμιμος σχεδιασμός· απλώς δεν είναι μία ατομική συναλλαγή με άλλο όνομα.
Σχεδιάστε την επανάληψη πριν από την πρώτη διακοπή
Ένας πελάτης μπορεί να χάσει την απάντηση αφού δεσμευτεί η πράξη, οπότε ο καλών δεν μπορεί να θεωρήσει το χρονικό όριο αποτυχία. Διατηρήστε μια διαρκή ταυτότητα αιτήματος και χρησιμοποιήστε το αποτέλεσμα της υπηρεσίας ή έναν μηχανισμό ταυτοδυναμίας πριν επαναλάβετε μια αλλαγή, αλλιώς η επανάληψη γίνεται δεύτερη εγγραφή.
Οι αυτόματες επανακλήσεις συναλλαγών μπορούν επίσης να εκτελεστούν περισσότερες από μία φορές μετά από μια ακύρωση που επιτρέπει επανάληψη, γεγονός που τις κάνει κακή κατοικία για μη αναστρέψιμα εξωτερικά αποτελέσματα. Κρατήστε τα έξω από την επανάκληση, εκτός αν η ροή εργασίας ορίζει ρητό ασφαλές πρωτόκολλο γι αυτά. Η ίδια προσοχή ισχύει για οτιδήποτε κοστίζει χρήματα ή στέλνει μήνυμα. Μια διπλή χρέωση είναι πολύ δυσκολότερη συζήτηση από μια διπλή γραμμή αρχείου καταγραφής.
Η αποδοχή πρέπει να αναπαίξει τέσσερα σενάρια: δύο πελάτες που αγωνίζονται για την ίδια γραμμή, μια ακύρωση που η υπηρεσία λέει ότι μπορεί να επαναληφθεί, μια δέσμευση της οποίας η απάντηση δεν φτάνει ποτέ, και η απώλεια μιας περιοχής ή του συνδέσμου μεταξύ τους. Καταγράψτε το δεσμευμένο επιχειρηματικό αποτέλεσμα και τις άλυτες καταστάσεις δίπλα στον σχεδιασμό δρομολόγησης, ώστε κανείς να μη μπερδέψει το δίκτυο με το συστατικό που παρέχει την εγγύηση.