GH GambleHub

Sagas και κατανεμημένες συναλλαγές

Ένα έπος είναι μια μακροπρόθεσμη επιχειρηματική συναλλαγή που υποδιαιρείται σε μια σειρά τοπικών σταδίων σε διάφορες υπηρεσίες/αποθετήρια. Κάθε βήμα έχει μια αντισταθμιστική δράση που ανατρέπει το αποτέλεσμα του βήματος σε μερική αποτυχία. Σε αντίθεση με 2PC/3PC, τα σάγκα δεν κρατούν παγκόσμιες κλειδαριές και είναι κατάλληλα για μικροϋπηρεσίες, πολυπεριφέρειες και υψηλά φορτία, όπου η ενδεχόμενη συνέπεια είναι αποδεκτή.


1) Πότε να επιλέξετε sagas (και πότε όχι)

Προσαρμοσμένο:
  • Επιχειρηματικές διαδικασίες μακράς/πολλαπλής φάσης (εντολή πληρωμής αποθεματικό παράδοσης).
  • Διαφορετικοί τομείς και αποθετήρια όπου δεν υπάρχει κοινή συναλλαγή.
  • Χρειάζονται υψηλή διαθεσιμότητα και κλιμάκωση.
Ακατάλληλο:
  • Η ατομικότητα του στερεού οξέος είναι κρίσιμη (για παράδειγμα, η μεταφορά μεγάλων ποσοτήτων εντός του ίδιου μητρώου).
  • Δεν υπάρχει σαφής αντιστάθμιση (δεν μπορείτε να «αποθεματοποιήσετε» ή να ακυρώσετε το αποτέλεσμα).
  • Οι νομικοί/κανονιστικοί περιορισμοί απαιτούν αυστηρή απομόνωση και «άμεση» αμετάβλητη.

2) Μοντέλα Sagas

1. Saga Orchestrator - Ο κεντρικός συντονιστής διαχειρίζεται βήματα και αποζημιώσεις.

Υπέρ: ρητή ροή, έλεγχος σφαλμάτων, απλουστευμένη τηλεμετρία.
Cons: σημείο συγκέντρωσης, κίνδυνος συντονιστή «λίπος».

2. Χορογραφία (Χορογραφία): κανένα κέντρο - τα βήματα ξεκινούν από εκδηλώσεις («η υπηρεσία A έκανε X → υπηρεσία B αντιδρά»).

Πλεονεκτήματα: αδύναμη συνδεσιμότητα, απλή κλιμάκωση.
Κατά: είναι πιο δύσκολο να εντοπιστεί/αποσφαλματωθεί η ροή, ο κίνδυνος «sprawl» των κανόνων.

3. TCC (Δοκιμάστε επιβεβαίωση/ακύρωση) - Κάθε βήμα είναι «Δοκιμάστε», στη συνέχεια επιβεβαιώστε ή ακυρώστε.

Pros: πιο κοντά στο ψευδο-διφασικό πρωτόκολλο, διαχειριζόμενοι πόρους.
κατά: ακριβότερο κατά την υλοποίηση των διεπαφών· Απαιτεί χρονοδιαγράμματα «Δοκιμάστε».


3) Σχεδιασμός γηπέδου και αντιστάθμισης

Αναλλοίωτες: δηλώστε σαφώς τι πρέπει να είναι αληθές «πριν/μετά» το βήμα (για παράδειγμα, «υπόλοιπο ≥ 0»).
Αντιστροφή ≠ αντίστροφη συναλλαγή: πρόκειται για μια λογική ενέργεια που ακυρώνει το επιχειρηματικό αποτέλεσμα (επιστροφή χρημάτων, αποδέσμευση, αποκατάσταση).
Ταυτότητα: τόσο το βήμα όσο και ο αντισταθμιστής πρέπει να επαναλαμβάνονται με ασφάλεια (με «λειτουργία _ id»).
Timeouts: κάθε βήμα έχει προθεσμία· η καθυστέρηση προκαλεί αποζημίωση.
Αποτελέσματα μη επιστροφής: να καταγραφούν χωριστά (κοινοποιήσεις, ηλεκτρονικό ταχυδρομείο) και να καταστεί δυνατή η «βέλτιστη προσπάθεια».


4) Συνέπεια και τάξη

Ενδεχόμενη συνέπεια: οι χρήστες μπορούν να δουν χρονικές αποκλίσεις. UX - με «wait «/spinners/status.
Άρθρο 4 παράγραφος 1 σημείο 114) του ΚΚΑ.
Αφαίρεση - Αποθήκευση του ημερολογίου επεξεργασίας (κατάσταση λειτουργίας _ i →) με το TTL.


5) Μεταφορά και αξιοπιστία

Outbox μοτίβο-Γράφει το γεγονός στον τοπικό πίνακα outbox μέσα στην ίδια συναλλαγή, και στη συνέχεια το δημοσιεύει ασύγχρονα στο λεωφορείο.
Inbox/Idempotency store: από την πλευρά του καταναλωτή - ένα αρχείο με μηνύματα που έχουν ήδη υποστεί επεξεργασία.
Ακριβώς μία φορά αποτελεσματικά: «outbox + idempotent καταναλωτής» δίνει μια πρακτική «ακριβώς μία φορά».
DLQ: για «δηλητηριώδη» μηνύματα με πλούσιες μετα-πληροφορίες και ασφαλή redrive.


6) Σφάλμα, επανακαταμέτρηση, εφεδρικές πολιτικές

Επαναλαμβάνουμε μόνο idempotent βήματα? εγγραφή πράξεων - με το 'Idempotency-Key'.
Εκθετική εφεδρεία + νευρικότητα; τον περιορισμό των προσπαθειών και της συνοπτικής προθεσμίας για το έπος.
Με συστηματική υποβάθμιση - Διακόπτης κυκλώματος και χαριτωμένη υποβάθμιση (για παράδειγμα, ακυρώστε το δευτερεύον τμήμα της φαντασίας του έπους).
Επιχειρηματικές συγκρούσεις ('409') - επανάληψη της διαδικασίας μετά τη συμφιλίωση ή αποζημίωση και τερματισμός.


7) Ενορχηστρωτής: Αρμοδιότητες και δομή

Λειτουργίες:
  • Παρακολούθηση της κατάστασης του έπους: «ΕΚΚΡΕΜΕΙ → ΤΡΕΧΕΙ → ΑΠΟΖΗΜΙΩΣΗΣ → ΤΕΛΕΙ/ΑΠΟΤΥΓΧΑΝΕΙ».
  • Βήματα σχεδιασμού, προθεσμίες, χρονοδιαγράμματα, υποχωρήσεις.
  • Δρομολόγηση γεγονότων και εκτόξευση αποζημίωσης.
  • Ταυτότητα των λειτουργιών συντονιστή (αρχείο καταγραφής εντολών).
  • Παρατηρησιμότητα: συσχέτιση 'saga _ id' σε αρχεία καταγραφής/ίχνη/μετρήσεις.
Αποθήκευση:
  • Πίνακες 'saga', 'saga _ step', 'command ,' outbox '.
  • Ευρετήρια στο 'saga _ id', 'business _ key', 'status', 'next _ run _ a .

8) Χορογραφία: κανόνες και προστασία έναντι της χιονόμπαλας

Συμβάσεις εκδηλώσεων: συστήματα και εκδόσεις (Avro/Proto/JSON Schema).
Σαφής σημασιολογία: «γεγονός γεγονός» έναντι «εντολή».
Διακοπή της αλυσίδας: η υπηρεσία, έχοντας εντοπίσει μια αναντιστοιχία, δημοσιεύει ένα «αποτυχημένο »/« αντισταθμιστικό» γεγονός.
Συναγερμοί και προειδοποιήσεις για «ατελείωτους βρόχους».


9) TCC: πρακτικές λεπτομέρειες

Δοκιμάστε: αποθεματικό πόρων με TTL.
Επιβεβαίωση: δέσμευση, απελευθέρωση προσωρινών κλειδαριών.
Ακύρωση: εφεδρικό rollback (χωρίς ανεπιθύμητες ενέργειες).
Συλλογή απορριμμάτων: αυτόματη ακύρωση του Try after TTL (idempotent Cancel).
Επιβεβαίωση/Ακύρωση idempotent: η επανάληψη είναι ασφαλής.


10) Παράδειγμα (σύστημα λέξεων) - «Εντολή πληρωμής και παράδοσης»

1. CrealOrder (τοπικό) outbox: 'Designed'.
2. Reserve (TCC), εάν → 'ChampionReserved' succeeds, εάν το 'ChampionSfailed' → αποτύχει.
3. InventoryService: απόθεμα προϊόντων· από → 'InventoryFailed'.
4. Υπηρεσία DefinitionService - Δημιουργία χρονοθυρίδας παράδοσης (ακυρώσιμη).
5. Εάν κάποιο «αποτυχημένο» βήμα ο ενορχηστρωτής αρχίζει τις αντισταθμίσεις με την αντίστροφη σειρά: «Ακύρωση» « Απογραφή» «Ακύρωση».
6. Αν όλα εντάξει → 'ChampionSelf' → 'OrgerReferenced'.


11) Ψευδοκώδικας ενορχηστρωτής

pseudo startSaga(saga_id, order_id):
steps = [ReservePayment, ReserveInventory, BookShipment, ConfirmPayment]
for step in steps:
res = execWithRetry(step, order_id)
if!res.ok:
compensateInReverse(steps_done(order_id))
return FAIL return OK

execWithRetry(step, key):
for attempt in 1..MAX:
try:
return step.run(key)    # идемпотентно catch RetryableError:
sleep(backoff(attempt))
catch NonRetryableError:
return FAIL return FAIL

compensateInReverse(done_steps):
for step in reverse(done_steps):
step.compensate()       # идемпотентно

12) Παρατηρησιμότητα και λειτουργικές SLO

Εντοπισμός: single 'saga _ id', σημειώσεις 'βήμα', 'προσπάθεια', 'απόφαση' (τρέξιμο/αντιστάθμιση/skip).

Μετρήσεις:
  • Επιτυχία/σφάλμα του sagas (%), μέση διάρκεια, p95/p99.
  • Το μερίδιο του αντισταθμισμένου sagas, βασικοί λόγοι αποζημίωσης.
  • Ουρές αναμονής/υστερήσεις outbox, retrays σε σκαλοπάτια.
  • Καταγραφές/έλεγχοι: λύσεις ενορχηστρωτών, αναγνωριστικά πόρων, κλειδιά επιχειρήσεων.

13) Δοκιμές και χάος

Εισάγοντας σφάλματα σε κάθε βήμα: timeouts, '5xx', επιχειρηματικές συγκρούσεις.
Εκτός τάξης συμβάντα, αντίγραφα, σταγόνες.
Μεγάλες ουρές καθυστέρησης → έλεγχος προθεσμιών και αποζημιώσεων.
Σάγκας μάζας → έλεγχος WFQ/DRR και καπάκια σε ουρές αναμονής, απουσία «εμπλοκής κεφαλής γραμμής».
Redrave από DLQ σε βήματα και σε ένα ολόκληρο έπος.


14) Πολυπλοκότητα, περιφέρειες, συμμόρφωση

Ενοικιαστής ετικετών _ id/plan/region 'in events και αποθετήρια saga.
Κατοικία: τα δεδομένα/γεγονότα δεν εγκαταλείπουν την περιοχή. τα διαπεριφερειακά σάγκα σχεδιάζονται ως ομοσπονδίες τοπικών σάγκας + συνάθροισης εκδηλώσεων.
Προτεραιότητα: τα VIP sagas φέρουν μεγαλύτερο βάρος ποσόστωσης. απομόνωση των εργαζομένων ανά ενοικιαστή.


15) Κατάλογος ελέγχου πριν από την πώληση

  • Κάθε βήμα έχει μια σαφή αντιστάθμιση, και τα δύο είναι idempotent.
  • Επιλεγμένο πρότυπο: ενορχήστρωση/χορογραφία/TSS. περιγράφονται τα όρια ευθύνης.
  • Το Outbox/Inbox υλοποιήθηκε, αφαίρεση από την «λειτουργία _ id».
  • Πολιτικές επαναπροσδιορισμού: εφεδρεία με νευρικότητα, δοκιμαστικά όρια και συνολική προθεσμία ύπνου.
  • Οι συμβάσεις γεγονότων έχουν εκδοθεί, υπάρχει επικύρωση του συστήματος.
  • Το DLQ και το Secure Release είναι ρυθμισμένα.
  • Τηλεμετρία: μετρήσεις, ιχνηλάτηση, συσχέτιση 'saga _ id'.
  • Λειτουργικά βιβλία: χειροκίνητη ακύρωση/επιβεβαίωση δύναμης, ξεκλείδωμα «κρεμασμένων» sagas.
  • Πέρασμα των δοκιμών χάους και φορτίου, καθορισμένος προϋπολογισμός SLO/σφάλματος.

16) Τυπικά σφάλματα

Δεν υπάρχει αντισταθμιστικός παράγοντας ή είναι «ακάθαρτος» (έχει ανεπιθύμητες ενέργειες).
Δεν υπάρχει idempotence/dedup - doubles και swings των κρατών.
«Saga in Saga» χωρίς σαφή όρια - κύκλους και αμοιβαίες κλειδαριές.
Δεν υπάρχουν προθεσμίες → «αιώνια» σάγκα και διαρροές πόρων.
Ο ενορχηστρωτής αποθηκεύει την κατάσταση «στη μνήμη» χωρίς σταθερό κατάστημα.
Η χορογραφία χωρίς κέντρο τηλεμετρίας → «αόρατες» αποτυχίες.
Αδιαφανές UX: Οι χρήστες δεν βλέπουν ενδιάμεσες καταστάσεις.


17) Γρήγορες συνταγές

Κλασικά SaaS: ενορχήστρωση + outbox/inbox, εκθετική backoff, DLQ, saga statuses in UI.
Ισχυρές αναλλοίωτες πηγές: TCC με αποθεματικό TTL και GC Cancel.
Υψηλός όγκος/φορτίο: χορογραφία γεγονότων + αυστηρή ιδεατότητα και βασικές μετρήσεις.
Πολυπεριφέρεια: τοπικό sagas + τελικά συγκεντρωτικά στοιχεία· αποφυγή παγκόσμιων κλειδαριών.


Συμπέρασμα

Το Sagas είναι ένας τρόπος για να επιτευχθεί προβλέψιμη συνέπεια στα κατανεμημένα συστήματα χωρίς παγκόσμιες κλειδαριές. Οι σαφείς αντισταθμιστές, η ταυτότητα, η αξιόπιστη παράδοση (outbox/inbox), η πειθαρχία χρονοδιαγράμματος και επανασυσκευασίας, καθώς και η τηλεμετρία και τα βιβλία παιχνιδιών αποτελούν το κλειδί για να εξασφαλιστεί ότι οι περίπλοκες επιχειρηματικές διαδικασίες παραμένουν σταθερές και ευανάγνωστες με αυξανόμενο φορτίο, αριθμό υπηρεσιών και γεωγραφίες.

Contact

Επικοινωνήστε μαζί μας

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

Έναρξη ολοκλήρωσης

Το Email είναι υποχρεωτικό. Telegram ή WhatsApp — προαιρετικά.

Το όνομά σας προαιρετικό
Email προαιρετικό
Θέμα προαιρετικό
Μήνυμα προαιρετικό
Telegram προαιρετικό
@
Αν εισαγάγετε Telegram — θα απαντήσουμε και εκεί.
WhatsApp προαιρετικό
Μορφή: κωδικός χώρας + αριθμός (π.χ. +30XXXXXXXXX).

Πατώντας «Αποστολή» συμφωνείτε με την επεξεργασία δεδομένων.