Πυρήνας βασισμένος σε γεγονότα
Τι είναι ο πυρήνας με γνώμονα το συμβάν
Το Event-Driven Core (EDC) είναι η «σπονδυλική στήλη» της αρχιτεκτονικής, στην οποία τα επιχειρηματικά γεγονότα καταγράφονται και διανέμονται ως αμετάβλητα γεγονότα, και το υπόλοιπο της λειτουργικότητας (ανάγνωση, ολοκλήρωση, αναλυτική, κρύπτες, ειδοποιήσεις) είναι χτισμένο πάνω από τη ροή αυτών των γεγονότων. Ο πυρήνας ορίζει τη σύμβαση γεγονότων, τους κανόνες παράδοσης και τις αναλλοίωτες παραγγελίες/ιδιοτροπίες, παρέχοντας αδύναμη συνδεσιμότητα και κλιμακωσιμότητα.
Η βασική ιδέα: πρώτα γράψτε το γεγονός (πυρήνας), και στη συνέχεια, ανεξάρτητα εμπλουτίστε και προβάλετε το στα επιθυμητά μοντέλα. Αυτό μειώνει τη συνδεσιμότητα και αυξάνει την ανθεκτικότητα σε μερικές αστοχίες.
Στόχοι και ιδιότητες EDC
Αλήθεια των γεγονότων: Κάθε γεγονός είναι μια αμετάβλητη καταγραφή του «τι συνέβη».
Αδύναμη συνδεσιμότητα: Οι παραγωγοί δεν γνωρίζουν τους καταναλωτές. επέκταση του συστήματος - με την προσθήκη συνδρομητών.
Οριζόντια ανάπτυξη ανά κόμμα/θέμα, ανεξάρτητοι καταναλωτές.
Παρατηρησιμότητα και λογιστικός έλεγχος: αναγνωριστικά από τέλος σε τέλος, αναπαραγωγιμότητα, κρατήσεις και αναπαραγωγή.
Διαχειριστική εξέλιξη: εκδόσεις σχημάτων, συμβατότητα, υποτίμηση.
Αρχιτεκτονικά στοιχεία
1. Μεσίτης λεωφορείων/εκδηλώσεων: Kafka/NATS/Pulsar/SNS + SQS - κανάλια, μέρη, κρατήσεις.
2. Μητρώο Schema: JSON Schema/Avro/Protobuf για συμβατότητα και εξέλιξη.
3. Περίγραμμα Outbox/CDC: ατομική διόρθωση γεγονότων + δημοσίευση χωρίς «διπλή εγγραφή».
4. Προβολές/αναγνώσεις (CQRS): υλοποιημένες απόψεις για γρήγορες ερωτήσεις.
5. Sagas/ενορχήστρωση: συντονισμός μακροχρόνιων διαδικασιών μέσω εκδηλώσεων/ομάδων.
6. Εμπλουτισμός: μεμονωμένα θέματα ".righted '/' .dreaded 'without που επηρεάζουν την κρίσιμη διαδρομή.
7. Παρατηρησιμότητα: ιχνηλάτηση, καταγραφή, μετρήσεις από γεγονότα και καθυστερήσεις.
Μοντέλο γεγονότος
Τύποι γεγονότων
Εκδηλώσεις τομέα: Επιχειρηματικά γεγονότα ("πληρωμή. εγκεκριμένο «,» kyc. ").
Εκδηλώσεις ενσωμάτωσης: επικεντρώνονται σε εξωτερικά συστήματα (σταθερά, αργά μεταβαλλόμενα).
Αλλαγή δέσμευσης δεδομένων (CDC): τεχνικές αλλαγές στο αρχείο (χρήση για μετανάστευση/ενσωμάτωση).
Έλεγχος/Τηλεμετρία: δράσεις φορέων, ασφάλεια, SLA.
Απαιτούμενα χαρακτηριστικά γνωρίσματα (πυρήνας)
json
{
"event_id": "uuid",
"event_type": "payment. authorized. v1",
"occurred_at": "2025-10-31T11:34:52Z",
"producer": "payments-service",
"subject": { "type": "payment", "id": "pay_123" },
"payload": { "amount": 1000, "currency": "EUR", "method": "card" },
"schema_version": 1,
"trace_id": "abc123",
"partition_key": "pay_123"
}
Συστάσεις: το 'event _ id' είναι παγκοσμίως μοναδικό, το 'spartion _ key' ορίζει τη σειρά για την οντότητα, το 'trace _ id' παρέχει συσχέτιση.
Σημασιολογία και ιδιαιτερότητα παράδοσης
Τουλάχιστον μία φορά (η αθέτηση υποχρέωσης για πολλούς μεσίτες): Οι καταναλωτές πρέπει να είναι ευαίσθητοι.
Το πολύ μία φορά: αποδεκτή μόνο για δευτερογενή τηλεμετρία.
Ακριβώς μία φορά: επιτυγχάνεται στο επίπεδο ροής και αποθήκευσης μέσω συναλλαγών/idempotent πλήκτρα/ποτιστικά δοχεία (πιο ακριβά, χρειάζονται έναν καλό λόγο).
Πρότυπο ευεξίας του καταναλωτή
Dedup table by 'event _ i /' ( , )' with TTL topic reservation.
Upsert αντί να εισάγετε? προβολές έκδοσης κατά 'ακολουθία '/' συνέβη _ a .
Συναλλαγές εντός της συναλλαγής: mark «saw» + αλλαγή κατάστασης.
Διάταξη και κατάτμηση
Εγγυημένη τάξη εντός του διαδίκου.
Επιλέξτε 'κατάτμηση _ κλειδί' έτσι ώστε όλα τα γεγονότα της ίδιας συνολικής οντότητας να εμπίπτουν στην ίδια παρτίδα ('χρήστης _ id', 'πληρωμή _ id').
Αποφύγετε τα «καυτά πλήκτρα»: χασίς με αλάτι/υπο-κλειδιά εάν χρειάζεται να διανείμετε το φορτίο.
Συστήματα και εξέλιξη
Πρώτη προσθήκη: νέα προαιρετικά πεδία, απαγόρευση αλλαγής τύπων/σημασιολογίας χωρίς σημαντική έκδοση.
Συμβατότητα: BACKWARD/FORWARD στο μητρώο σχήματος. Ο ΚΚΠ εμποδίζει ασύμβατες αλλαγές.
Ονομασία: 'domain. δράση. v {major} '(' πληρωμή. έχει εγκριθεί. v1 ').
Μετανάστευση: δημοσίευση ζευγαριών 'v1' και 'v2' παράλληλα, παροχή διπλής γραφής μέσω outbox, γυρίσματα 'v1' μετά τη μετάβαση.
Outbox и CDC
Outbox (συνιστάται για υπηρεσίες συναλλαγών)
1. Σε μια συναλλαγή βάσης δεδομένων: αποθήκευση της εγγραφής τομέα και του γεγονότος στο outbox.
2. Ο βασικός εκδότης διαβάζει το outbox, δημοσιεύει στον μεσίτη, σηματοδοτεί «αποστέλλεται».
3. Εγγυήσεις: καμία «απώλεια» πραγματικότητας στις πτώσεις, καμία αποσυγχρονισμός.
CDC (Καταγραφή μεταβολών δεδομένων)
Κατάλληλο για υφιστάμενα συστήματα/μεταναστεύσεις. πηγή - ημερολόγιο αντιγραφής DB.
Απαιτεί φιλτράρισμα/transcoding σε γεγονότα πεδίου (μην μεταφράζετε ακατέργαστους πίνακες έξω).
CQRS και προβολές
Οι εντολές αλλάζουν κατάσταση (συχνά συγχρονισμένα), τα γεγονότα σχηματίζουν προβολές (ασύγχρονα).
Οι προβολές είναι σχεδιασμένες για ερωτήματα (αναζήτηση, κατάλογοι, εκθέσεις), επικαιροποιημένες από τους συνδρομητές.
Η προσωρινή αποσυγχρονισμός είναι ο κανόνας: εμφάνιση ενός σταθερού UX («τα δεδομένα θα ενημερώνονται σε λίγα δευτερόλεπτα»).
Sagas: Συντονισμός της διαδικασίας
Ενορχήστρωση: Ένας συντονιστής στέλνει εντολές και περιμένει γεγονότα.
Χορογραφία: οι συμμετέχοντες αντιδρούν ο ένας στα γεγονότα του άλλου (απλούστερη, αλλά απαιτεί πειθαρχία στις συμβάσεις).
Κανόνες: σαφείς αποζημιώσεις και χρονοδιαγράμματα, επαναλαμβανόμενα βήματα, ευφυείς χειριστές.
Παρατηρησιμότητα
Trace/Span: Trace 'trace _ id '/' span _ id' μέσω των κεφαλίδων κατά τη δημιουργία γεγονότων.
Μετρήσεις: υστέρηση καταναλωτή, ρυθμός δημοσίευσης/κατανάλωσης, ποσοστό νεκρών γραμμάτων, μερίδιο αφαίρεσης.
DLQ/χώρος στάθμευσης: ανεπιτυχή μηνύματα - σε ξεχωριστό θέμα με επιφυλακή· παρέχουν επανεπεξεργασία.
Ασφάλεια και συμμόρφωση
Ταξινόμηση δεδομένων: ο πυρήνας περιέχει μόνο το απαιτούμενο ελάχιστο των PII/χρηματοοικονομικών δεδομένων (μοντέλο αντίστροφης πυραμίδας), λεπτομέρειες - εμπλουτισμού.
Υπογραφή/χασίς κρίσιμων χαρακτηριστικών, έλεγχος ακεραιότητας.
Κρυπτογράφηση εν πτήσει και σε ηρεμία, δικαιώματα διαχωρισμού ανά θέμα/καταναλωτή (IAM/ACL).
Πολιτικές και δικαιώματα διατήρησης που πρέπει να λησμονούνται: σαφώς καθορισμένα για κάθε θέμα.
Απόδοση και σταθερότητα
Backpressure: οι καταναλωτές έχουν περιορισμένο ανταγωνισμό, ο μεσίτης έχει ποσοστώσεις/όρια.
Καταγραφές ομάδων παρτίδας και συμπίεσης για τη μείωση των γενικών εξόδων.
Retrai με νευρικότητα και DLQ αντί για ατελείωτες προσπάθειες.
Αντίσταση επανισορρόπησης: αποθήκευση αντισταθμίσεων σε διασυνοριακό/εξωτερικό επίπεδο, επιτάχυνση μιας ψυχρής εκκίνησης με στιγμιότυπα.
Τυπικά υποδείγματα γεγονότων
Πυρήνας πληρωμών
"πληρωμή. ξεκίνησε. v1 πληρωμή «→». έχει εγκριθεί. v1 πληρωμή «→». αιχμαλωτίστηκε. v1 πληρωμή «→». διακανονισμός. v1 "
Άρνηση πληρωμής: "πληρωμή. απορρίπτεται. v1 ',' πληρωμή. επιστραφείσα. v1 "
Κατάτμηση: 'payment _ i
SLA: βασική υστέρηση ≤ 2c p95; Η ταυτότητα των καταναλωτών είναι υποχρεωτική.
CCM/επαλήθευση
'kyc. ξεκίνησε. v1 '→' kyc. έγγραφο. παραληφθείσες. v1 '→' kyc. εγκεκριμένο. v1 '/' kyc. απορρίπτεται. v1 "
PII - ελάχιστο· λεπτομέρειες του εγγράφου - in 'kyc. εμπλουτισμένος. v1 'με περιορισμένη πρόσβαση.
Έλεγχος/Ασφάλεια
"audit. έχει καταγραφεί. v1 "με χαρακτηριστικά" ηθοποιός "," υποκείμενο "," δράση "," συνέβη _ στο "," trace _ id ".
Συνεχής διατήρηση/αρχειοθέτηση. Ενισχυμένη ακεραιότητα (WORM)
Αντιπατερίδια
Γεγονός λίπους: υπερφορτωμένα ωφέλιμα φορτία χωρίς λόγο, διαρροή PII.
Κρυμμένο RPC μέσω γεγονότων: αναμονή για σύγχρονες απαντήσεις «εδώ και τώρα».
Ακατέργαστα CDC προς τα έξω: Κλείσιμο συνδεσιμότητας με σχήμα DB.
Καμία ιδιαιτερότητα στους καταναλωτές: τα διπλά οδηγούν σε διπλές παρενέργειες.
Ένα κοινό θέμα «για τα πάντα»: σύγκρουση συμφερόντων, προβληματική τάξη, πολύπλοκη εξέλιξη.
Σταδιακή εφαρμογή EDC
1. Χαρτογράφηση τομέα: Κύρια συγκεντρωτικά μεγέθη και κύκλοι ζωής.
2. Κατάλογος γεγονότων: ονόματα, νοήματα, αναλλοίωτα, απαιτούμενα πεδία.
3. Σχήμα και μητρώο - Επιλέξτε ένα μορφότυπο, ενεργοποιήστε τους κανόνες συμβατότητας.
4. Outbox/CDC: Για κάθε παραγωγό, ορίστε ένα μηχανισμό δημοσίευσης γεγονότων.
5. Κατάτμηση: Επιλέξτε τα κλειδιά και αξιολογήστε τα καυτά κλειδιά/κατανομή.
6. Ιδιαιτερότητα: πρότυπο απεμπλοκής + καταναλωτική συναλλαγή.
7. Προβολές - Ορισμός υλοποιημένων μοντέλων και επικαιροποίηση SLA.
8. Παρατηρησιμότητα: ιχνηλάτηση, υστερήσεις, DLQ, προειδοποιήσεις.
9. Ασφάλεια/PII: διαβάθμιση δεδομένων, κρυπτογράφηση, ACL.
10. Οδηγός εξέλιξης: πολιτική έκδοσης, υποτίμηση, διπλή γραφή για τις μεταναστεύσεις.
Κατάλογος ελέγχου παραγωγής
- Κάθε εκδήλωση έχει 'event _ i ,' trace _ id ',' συνέβη _ at ',' spartion _ key '.
- Συστήματα στο μητρώο, ενεργοποιημένοι έλεγχοι συμβατότητας.
- Η ταυτότητα του καταναλωτή εφαρμόζεται και ελέγχεται.
- DLQ/χώρος στάθμευσης και οι ειδοποιήσεις είναι διαμορφωμένες για τη δημοσίευση/κατανάλωση σφαλμάτων.
- Οι προβολές αναδημιουργούνται από το ημερολόγιο (replay) με αποδεκτό χρόνο.
- Περιορισμένη πρόσβαση σε PII· ελάχιστο ωφέλιμο φορτίο στον πυρήνα.
- Οι SLA με καθυστέρηση/παράδοση μετρώνται και είναι ορατές στα ταμπλό.
- Υπάρχει ένα σχέδιο για εκδόσεις μεταναστευτικών γεγονότων και αποσύνθεση παραθύρων.
ΣΥΧΝΈΣ ΕΡΩΤΉΣΕΙΣ
Πώς είναι το EDC διαφορετικό από το «απλά ένα λεωφορείο»
Ο πυρήνας δεν είναι μόνο ο μεσίτης, αλλά και η σύμβαση γεγονότων, οι κανόνες τάξης/ιδεατότητας, οι διαδικασίες εξέλιξης και η παρατηρησιμότητα.
Μπορούμε να βασιστούμε μόνο στο ΚΕΕΛΠΝΟ
Το CDC είναι κατάλληλο για ενσωμάτωση/μετανάστευση, αλλά τα γεγονότα τομέα εκφράζουν το νόημα σαφέστερα και η εμπειρία της βάσης δεδομένων αλλάζει πιο σταθερά.
Τι γίνεται με τη συνέπεια
Αποδεχόμαστε την ενδεχόμενη συνέπεια και σχεδιάζουμε το UX/διαδικασίες για αυτό (δείκτες επικαιροποίησης, επανακαταμέτρησης, αντιστάθμισης).
Πότε ακριβώς χρειάζεται
Σπάνιες: όταν ο διπλασιασμός είναι αυστηρά απαράδεκτος και αδύνατο να αντισταθμιστεί. Πιο συχνά, τουλάχιστον μία φορά + idempotency είναι αρκετή.
Σύνολο
Ο πυρήνας Event-Driven μετατρέπει τη ροή των επιχειρηματικών γεγονότων σε μια αξιόπιστη βάση για το σύστημα. Οι σαφείς συμβάσεις γεγονότων, η πειθαρχία παράδοσης και η παρατηρησιμότητα αποδίδουν κλιμακότητα, ανθεκτικότητα και ρυθμό εξέλιξης - χωρίς τις εύθραυστες συγχρονισμένες συνδέσεις και την «καταιγίδα» των υπό αλλαγή οπισθοδρομήσεων.