GH GambleHub

Αρχιτεκτονική εκδηλώσεων

Αρχιτεκτονική εκδηλώσεων (EDA)

1) Τι συμβαίνει και γιατί ο ΕΟΑ

Γεγονός - ένα αμετάβλητο γεγονός που έχει ήδη συμβεί στον τομέα («PlayerVerified», «ChitchCaptured»). Ο ΕΟΑ αναπτύσσει την ολοκλήρωση γύρω από τη δημοσίευση αυτών των γεγονότων και τις αντιδράσεις σε αυτά:
  • αδύναμη συνδεσιμότητα των υπηρεσιών,
  • την ανεξάρτητη κλιμάκωση των καταναλωτών,
  • αναπαραγωγή/αναδιάταξη των προβολών,
  • διαφανής λογιστικός έλεγχος.

Ο ΕΟΑ δεν ακυρώνει τις συγχρονισμένες API - τις συμπληρώνει εισάγοντας διασταυρούμενες εξαρτήσεις στο ασύγχρονο στρώμα.


2) Τύποι γεγονότων

Τομέας: σημαντικά επιχειρηματικά γεγονότα (OrderPlaced, BonusGranted).
Ενσωμάτωση: «στιγμιότυπα «/αλλαγές για εξωτερικά συστήματα (UserUpdated, WalletCountyChanged).
Τεχνικά: κύκλος ζωής και τηλεμετρία (Heartbeat, Pipeland Failed).
Εντολές (όχι γεγονότα, αλλά κοντινά): οδηγίες «do X» (CapturePayment).

Σύσταση: οι εκδηλώσεις πεδίου είναι πρωταρχικής σημασίας. η ολοκλήρωση διαμορφώνεται από προβλέψεις για συγκεκριμένους καταναλωτές.


3) Συμβάσεις και σχήματα γεγονότων

: Avro/Protobuf/JSON Schema + Schema Registry· Στρατηγική συμβατότητας: «BACKWARD» για την εξέλιξη των καταναλωτών, «FULL» για κρίσιμα θέματα.
CloudEvents (id, source, type, time, subject, datacontenttype) - ομοιόμορφες κεφαλίδες.
Απαιτούμενα μεταδεδομένα: 'event _ id' (ULID/UUID), 'συνέβη _ στο', 'παραγωγός', 'schema _ version', 'συσχέτιση _ i /' causation _ i ,' idempotency _ key '.
Έκδοση: μόνο πρόσθετα πεδία, απαγόρευση μετονομασίας/σημασιολογικών διαλειμμάτων. νέοι τύποι - νέα θέματα/τύποι.

Παράδειγμα (Avro, θραύσμα):
json
{
"type":"record","name":"PaymentCaptured","namespace":"events.v1",
"fields":[
{"name":"event_id","type":"string"},
{"name":"occurred_at","type":{"type":"long","logicalType":"timestamp-micros"}},
{"name":"payment_id","type":"string"},
{"name":"amount","type":{"type":"bytes","logicalType":"decimal","precision":18,"scale":2}},
{"name":"currency","type":"string"},
{"name":"player_id","type":"string"}
]
}

4) Παράδοση, παραγγελία και συνέπεια

Τουλάχιστον μία φορά ως προεπιλεγμένη ταυτότητα χειριστή → απαιτείται.
Παραγγελία: εγγυημένη μέσα σε ένα μέρος (Kafka) ή ουρά αναμονής (RabbitMQ), αλλά μπορεί να σπάσει με υποχώρηση. το κλειδί του γεγονότος πρέπει να αντικατοπτρίζει ένα granule του τομέα της τάξης (για παράδειγμα, 'player _ id').
Συνέπεια: για χρήματα/δάνεια - μόνο μέσω περιοδικών/σάγκας/αποζημίωσης· αποφυγή LWW.

Μοντέλο ανάγνωσης: Προβολές και κρύπτες μπορεί να είναι τελικά - εμφάνιση «επικαιροποίηση σε εξέλιξη»... και χρήση στρατηγικών RNOT για αυστηρές διαδρομές.


5) Outbox/Inbox и CDC

Outbox: η υπηρεσία γράφει ένα γεγονός στη βάση δεδομένων της και στον πίνακα outbox σε μία συναλλαγή → ο εργαζόμενος δημοσιεύει στο λεωφορείο.
Εισερχόμενα: Εκδήλωση καταστημάτων καταναλωτών _ i with αποτέλεσμα επεξεργασίας για αφαίρεση.
CDC (Change Data Capture): ροή αλλαγών από τη βάση δεδομένων (binlog/WAL) στο λεωφορείο για την κατασκευή ενοτήτων χωρίς αλλαγές εφαρμογής.
Idempotency: επεξεργασία με 'idempotency _ key '/' event _ id', μην αλλάξετε τον έξω κόσμο μέχρι να καθοριστεί.


6) CQRS и Πηγή γεγονότων

CQRS: χωριστό μοντέλο εγγραφής και προβλέψεις ανάγνωσης· οι προβολές είναι κατασκευασμένες από γεγονότα και μπορούν να υστερούν.
Πηγή γεγονότων: συνολική κατάσταση = αύξηση των γεγονότων. Pros: πλήρης έλεγχος/επανάληψη· cons: πολυπλοκότητα των μεταναστεύσεων/συστημάτων/στιγμιότυπα.
Πρακτική: ES - όχι παντού, αλλά όπου η ιστορία και η αποζημίωση είναι σημαντικές· CQRS - σχεδόν πάντα στον ΕΟΑ.


7) Sagas: Ενορχήστρωση και χορογραφία

Ενορχήστρωση: ο συντονιστής αποστέλλει εντολές και περιμένει την αντιμετώπιση συμβάντων· βολικό για πολύπλοκες διαδικασίες (KYC→Deposit→Bonus).
Χορογραφία: οι υπηρεσίες αντιδρούν μεταξύ τους. ευκολότερο αλλά δυσκολότερο να εντοπιστεί.
Καθορίστε πάντα τις αποζημιώσεις και τις προθεσμίες βήματος.


8) Τοπολογικός σχεδιασμός (Kafka/RabbitMQ)

Κάφκα

Θέμα ανά εκδήλωση τομέα: 'πληρωμές. αιχμαλωτίστηκε. v1 ',' players. επαληθευμένο. v1 '.
Πλήκτρο κατάτμησης: 'player _ id '/' wallet _ id' - όπου η σειρά είναι σημαντική.
"επαναπλήρωση. συντελεστής = 3 ',' min. Ιnsync. αντίγραφα = 2 ', παραγωγός' acks = al .
Διατήρηση: ανά ώρα (π.χ. 7- 90 ημέρες) και/ή συμπίεση (τελευταία κατάσταση ανά κλειδί).
Θέματα για επανάληψη και DLQ με backoff.

RabbitMQ

Ανταλλαγές: "θέμα "/" άμεσες", δρομολογούμενες βασικές "πληρωμές. αιχμαλωτίστηκε. v1 '.
Για ένα ευρύ fan-out - 'θέμα' + αρκετές ουρές αναμονής. για RPC/εντολές - χωριστές ουρές αναμονής.
Ουρές απαρτίας για HA· TTL + ανταλλαγή νεκρών γραμμάτων για retrays.


9) Παρατηρησιμότητα και SLO EDA

SLI/SLO:
  • Καθυστέρηση από άκρο σε άκρο (occurred_at → επεξεργασία): p50/p95/p99.
  • Lag/ηλικία: υστέρηση καταναλωτή (Kafka consumer lag, Rabbit backlog age).
  • Εκδόσεις/επεξεργασία διακίνησης.
  • Ρυθμός DLQ και αναλογία επαναλήψεων.
  • Επιτυχία των επιχειρηματικών συναλλαγών (π.χ. «επιβεβαιωμένη κατάθεση ≤ 5γ»).
Πρακτικές:
  • Συσχέτιση γεγονότων μέσω 'trace _ id '/' relation _ id' (OTEL).
  • Περιπτώσεις ευθυγράμμισης → μετρήσεων.
  • Dashboards «Producer→Broker→Consumer» με προειδοποιήσεις με ρυθμό καύσης.

10) Αναπαραγωγή, διατήρηση και οπισθοπλήρωση

Επανάληψη για την ανακατασκευή προβολών/σφαλμάτων διόρθωσης: μετάβαση σε νέο χώρο προβολής και μετά αλλαγή ανάγνωσης.
Διατήρηση: νομικές/επιχειρηματικές απαιτήσεις (GDPR/PCI)· ευαίσθητα πεδία - κρυπτογράφηση ή/και μαρκινοποίηση.
Backfill: εφάπαξ θέματα/ουρές αναμονής, σαφή όρια RPS για την αποφυγή πνιγμού του prod.


11) Ασφάλεια και συμμόρφωση

TLS in-transit, mTLS για εσωτερικούς πελάτες.
Άδεια: ανά θέμα/ανά ανταλλαγή ACL. multitenancy via namespace/vhost.
PII: ελαχιστοποίηση πεδίων στην εκδήλωση· μεταδεδομένα φακέλου χωριστά, κρυπτογραφημένα, εάν είναι απαραίτητο, ωφέλιμα φορτία.
Πρόσβαση σε λογιστικούς ελέγχους, απαγόρευση «παντοδύναμων» κλειδιών.
Πολιτικές διατήρησης και διαγραφής: είτε αποθηκεύουν αναφορές δεδομένων είτε ταφόπλακες και διαγράφει προβολές.


12) Δοκιμές στον ΕΟΑ

Δοκιμές συμβάσεων: οι καταναλωτές επιβεβαιώνουν τις προσδοκίες τους για συστήματα (με γνώμονα τον καταναλωτή).
Δοκιμές αναπαραγωγής: εκτέλεση ιστορικής δειγματοληψίας μέσω νέας έκδοσης χειριστή/σχήματος.
Σενάρια χάους: καθυστέρηση/απώλεια μεσίτη, πτώση κόμβου, υστέρηση καταναλωτή → SLO παραμένουν εντός.
Καπνός στον ΚΚΠ: ένας σύντομος αγωγός από το τέλος έως το τέλος σε θέματα χρόνου.


13) Μετάβαση των «CRUD integrations → EDA»

1. Προσδιορισμός γεγονότων τομέα.
2. Ενσωματωμένο outbox στις υπηρεσίες πηγής.
3. Δημοσίευση ελάχιστων γεγονότων τομέα και σύνδεση προβολών 1-2.
4. Σταδιακή απενεργοποίηση συγχρονισμένων ολοκληρώσεων σημείων, αντικαθιστώντας τις με συνδρομές.
5. Τύπος μητρώου Schema και πολιτική συμβατότητας.
6. Επέκταση μόνο πρόσθετων γεγονότων με πεδία. διαλείμματα - μόνο μέσω νέων τύπων.


14) Αντι-μοτίβα

Εκδηλώσεις = «DTO API» (πολύ λίπος, εξαρτάται από το εσωτερικό μοντέλο) - διάλειμμα των καταναλωτών.
Έλλειψη μητρώου Schema και συμβατότητας - «εύθραυστες» ενοποιήσεις.
Οι εκδόσεις από τον κώδικα και τη γραφή στη βάση δεδομένων δεν είναι ατομικές (δεν υπάρχουν outbox) - χάνετε γεγονότα.
«Ακριβώς μία φορά παντού» - υψηλή τιμή χωρίς όφελος· καλύτερη τουλάχιστον μία φορά + ιδεατότητα.
Ένα «καθολικό» κλειδί κατάτμησης → μια θερμή κατάτμηση.
Επανάληψη κατ 'ευθείαν στην προβολή της παραγωγής - διαλείμματα σε απευθείας σύνδεση SLOs.


15) Κατάλογος ελέγχου εφαρμογής (0-45 ημέρες)

0- 10 ηµέρες

Προσδιορίστε τα γεγονότα τομέα και τα κλειδιά τους (κόκκοι τάξης).
Ανάπτυξη μητρώου Schema και έγκριση της στρατηγικής συμβατότητας.
Προσθήκη outbox/inbox σε υπηρεσίες 1-2. ελάχιστο φάκελο CloudEvents.

11- 25 ηµέρες

Εισάγετε retry/DLQ, backoff, idempotency των χειριστών.
Ταμπλό: υστέρηση/ηλικία/τέλος. ειδοποιήσεις για την ταχύτητα καύσης.
Τεκμηρίωση γεγονότων (κατάλογος), ιδιοκτήτες και διαδικασίες ανασκόπησης σχημάτων.

26 - 45 ηµέρες

Αναπαραγωγή/αναδιάταξη της πρώτης προβολής. επανάληψη του βιβλίου runbook και backfill.
Πολιτικές ασφαλείας (TLS, ACL, PII), διαδικασίες διατήρησης, GDPR.
Κανονικό χάος και ημέρες παιχνιδιού για τον μεσίτη και τους καταναλωτές.


16) Μετρήσεις διάρκειας

Το 100% των γεγονότων τομέα περιγράφονται από συστήματα και καταχωρίζονται.
Το outbox/inbox καλύπτει όλους τους Tier-0/1 παραγωγούς/καταναλωτές.
SLO: p95 διατερματική καθυστέρηση και υστέρηση των καταναλωτών εντός των στόχων ≥ 99%.
Το Replay/Backfill είναι εφικτό χωρίς downtime. υπάρχουν επαληθευμένα runbooks και.
Έκδοση: νέα πεδία - χωρίς θραύση. Οι ηλικιωμένοι καταναλωτές δεν πέφτουν.
Ασφάλεια: TLS + mTLS, ACL ανά θέμα, αρχεία καταγραφής πρόσβασης, πολιτική PII/διατήρησης.


17) Mini snippets

Παραγωγός Κάφκα (αξιόπιστη δημοσίευση, ιδέες):
properties acks=all enable.idempotence=true max.in.flight.requests.per.connection=1 compression.type=zstd linger.ms=5
Χειριστής καταναλωτή (ταυτότητα, ψευδοκώδικας):
python if inbox.contains(event_id): return # дедуп process(event)            # побочные эффекты детерминированы inbox.commit(event_id)        # atomically with side-effect commit_offset()
RabbitMQ Retry via DLX (ιδέα):
  • 'queue: καθήκοντα' → σε nack → DLX 'καθήκοντα. ξαναδοκιμάστε. 1m '(TTL = 60s) επιστροφή σε' task ; περαιτέρω '5m/15m'.

18) Συμπέρασμα

Ο ΕΟΑ μετατρέπει την ενσωμάτωση σε ροή επιχειρηματικών γεγονότων με σαφείς συμβάσεις και διαχείριση της συνέπειας. Κατασκευή της βάσης: schemas + registry, outbox/inbox, πλήκτρα παραγγελίας, idempotent handlers, SLO και παρατηρησιμότητα, ασφαλής διατήρηση και αναπαραγωγή. Τότε τα γεγονότα θα γίνουν η «πηγή της αλήθειας» σας για κλιμάκωση, ανάλυση και νέα χαρακτηριστικά - χωρίς εύθραυστες συνδέσεις και νυχτερινές μεταναστεύσεις.

Contact

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

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

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

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

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

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