GH GambleHub

Αρχιτεκτονική μικροϋπηρεσίας

1) Γιατί μικροϋπηρεσίες στο iGaming

Ταχύτητα αλλαγής: ανεξάρτητες κυκλοφορίες ομαδικών χαρακτηριστικών (πληρωμές, περιεχόμενο, κίνδυνος, τουρνουά).
Αξιοπιστία: η αποτυχία μιας υπηρεσίας δεν μειώνει το σύνολο του προϊόντος (όρια αστοχίας).
Κλίμακα: οριζόντια κλίμακα «θερμών» τομέων (πορτοφόλι, λόμπι, ρεύματα).
Συμμόρφωση: διαχωρισμός των δεδομένων ανά περιφέρεια/δικαιοδοσία.

Όταν δεν αξίζει τον κόπο: μια μικρή ομάδα/όγκο, καμία πρακτική DevOps, αδύναμη αυτοματοποίηση των δοκιμών - τότε μια αρθρωτή μονόλιθος είναι καλύτερη.

2) Τομείς, σύνορα και ομάδες (DDD + ομαδικές τοπολογίες)

Περιγράμματα τομέα: λογαριασμός/προφίλ, CCM/συμμόρφωση, πληρωμές/πορτοφόλι, περιεχόμενο/συγκέντρωση παιχνιδιών, μπόνους/αποστολές, τουρνουά, μάρκετινγκ/CRM, υποβολή εκθέσεων/BI.
Οριοθετημένο πλαίσιο = μοντέλο δεδομένων και σύμβαση γλώσσας.
Αλλαγή ροών ↔ εντολών: μία εντολή = ένας βρόχος + οι SLO της.
BFF (Backend for Frontend): ξεχωριστές προσόψεις για το Web/Mobile/Partner, ώστε να μην συλλέγεται «ενορχήστρωση» στον πελάτη.

3) Επικοινωνίες: συγχρονισμένες έναντι ασύγχρονες

Συγχρονισμένη (REST/gRPC): όταν απαιτείται άμεση απόκριση (έλεγχος ορίων καταθέσεων).
Asynchron (Kafka/NATS/SQS): εκδηλώσεις και διαδικασίες υποβάθρου (cashback accrual, mailings, rating updates).

Κανόνες:
  • Κρίσιμη διαδρομή = ελάχιστος λυκίσκος δικτύου.
  • Διατομεακή ολοκλήρωση - μέσω γεγονότων και συμβατικών API.
  • Μη δημιουργείτε «αλυσίδες 5 + σύγχρονων κλήσεων» σε απευθείας σύνδεση → χρήση EDA/sagas.

4) Συμβάσεις και εκδόσεις

Σύμβαση Ένα: OpenAPI/AsyncAPI + Schema Registry (Avro/JSON Schema).
Συμβατότητα SemVer +: Η προσθήκη πεδίων δεν σπάει τους πελάτες.
Συμβάσεις με γνώμονα τους καταναλωτές (CDC): αυτόματοι έλεγχοι σε CI (έναντι οπισθοδρόμησης).
Πολιτική απόρριψης: παράθυρο υποστήριξης (12-18 μήνες), τηλεμετρία για παλαιότερες εκδόσεις.

5) Γεγονότα, έπος και συνέπεια

Outbox/Transaction Log Tailing: ατομική εγγραφή «data + event».

Μοτίβα Saga:
  • Ενορχήστρωση (κεντρικός συντονιστής) για πληρωμές/εκροές.
  • Χορογραφία (αντίδραση σε εκδηλώσεις) για μπόνους/αποστολές.
  • Ταυτότητα: κλειδιά για 'tailId + action + nonce', αποθήκευση μητρώου dedup.
  • Συνέπεια: «εξωτερική» - μέσω γεγονότων. «εσωτερικό» - συναλλαγές εντός της υπηρεσίας.

6) Δεδομένα και αποθήκευση

Η αρχή της «ίδιας αποθήκης»: κάθε υπηρεσία διαθέτει τη δική της βάση δεδομένων (απομόνωση συστημάτων).

Επιλογή αποθήκευσης με πρότυπο πρόσβασης:
  • Οι συναλλαγές/υπόλοιπα είναι σχεσιακές (PostgreSQL) με αυστηρές αναλλοίωτες.
  • Εκδηλώσεις/ημερολόγιο - μόνο παράρτημα (Kafka/Redpanda).
  • Cache/sessions - Redis/KooDB; leaderboards - Redis Sorted Sets.
  • Αναζήτηση - OpenSearch/Elastic.
  • Υλοποιημένες προβλέψεις ανάγνωσης (CQRS) - Γρήγορες λίστες/εκθέσεις.

7) Αξιοπιστία και σταθερότητα

Timeouts/Retry with jitter/Retry-budget only for idempotent operations.
Διακόπτης κυκλώματος/Εξερχόμενη εξώθηση μεταξύ των υπηρεσιών.
Διάφραγμα: χωριστές δεξαμενές για «θορυβώδη» ανάντη.
Οριακές τιμές ανά πελάτη/διαδρομή, αντίθλιψη (503 + Retry-After).
Χειρισμός νεκρών γραμμάτων + δηλητηριωδών μηνυμάτων σε ουρές αναμονής.

8) Παρατηρησιμότητα

Ίχνος: OpenTelemetry ('trace _ id' μέσω shlyuz→servisy→BD).
Μετρήσεις: RPS, p50/p95/p99, ποσοστό σφάλματος 4xx/5xx, κορεσμός (CPU/mem/σειρά αναμονής), επιχειρηματικές μετρήσεις (TTP, TtW).
Αρχεία καταγραφής: δομημένη μάσκα JSON, PII/PAN/IBAN, συσχέτιση με το «trace _ id».
SLO/καταχωρίσεις: διαδρομή/λειτουργία (για παράδειγμα, "Deposit p95 300 m ", "success 98. 5%`).

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

Μηδενική εμπιστοσύνη: mTLS servis↔servis (SPIFFE/SPIRE), βραχύβια πιστοποιητικά.
AuthN/Z: OAuth2/JWT (aud/scope/exp), διαφοροποίηση χαρακτηριστικών ρόλων.
Μυστικά: KMS/Διαχειριστής Μυστικών/Σφραγισμένα Μυστικά, εναλλαγή κλειδιού.
GDPR/εντοπισμός δεδομένων: περιφερειακές συστάδες, γεωξιφασκία στην πύλη API.
Έλεγχος: αμετάβλητα αρχεία καταγραφής (WORM), ανίχνευση διοικητικών αγωγών.

10) Εγκατάσταση και ελευθερώσεις

: μία υπηρεσία = μία ανάπτυξη· πόροι/όρια, Προϋπολογισμός PodDislicationBudget.
CI/CD: linters, unit/contract/integ tests, security scan, SBOM.
Κυκλοφορίες: καναρίνι/γαλάζιο-πράσινο/σκιώδες, διαμετακόμιση μέσω επέκτασης και σύμβασης.
Αυτόματη κλίμακα: HPA ανά CPU + RPS + p95 + βάθος αναμονής· διαρροή κατά την κατάρρευση.

11) Επιδόσεις και κόστος

Προφίλ: p95/99 «κατά υπηρεσίες και μεθόδους», γραφήματα φλόγας.
Αποθήκευση: read-through/write-through. TTL/αναπηρία ανά εκδήλωση.
Τοποθεσία δεδομένων: Διατήρηση θερμών δεδομένων κοντά στον υπολογισμό.
FinOps: λήψη στόχου 60-70%, «θερμές πισίνες», αυτόματη παύση των ανενεργών εργαζομένων.

12) Πρότυπα τομέα (iGaming)

12. 1 Πληρωμές/Πορτοφόλι

Υπηρεσίες: «πληρωμές-gw» (πρόσοψη), «πορτοφόλι», «προσαρμογές-psp», «έλεγχος-απάτη».
Ρεύμα: 'init → reserve → capture/rollback' (έπος).
: 'ChampionSituated', 'ChampionAuthorized', 'ChackSettled/Failed'.
Idempotency: 'Idempotency-Key', deadup in 'wallet'.

12. 2 CCM/Συμμόρφωση

: «kyc-flow», «doc-storage», «sanctions-check», «pep-screening».
: «KycSubment/Agreement/Recorded», «Risk События Updated».
Έλεγχος και ΠΩΑ: σειρά αναμονής εργασίας, χρονική γραμμή, μεταγενέστερες ενέργειες.

12. 3 Μπόνους/Αποστολές

Υπηρεσίες: «bonus-engine», «bonus πορτοφόλι», «επιλεξιμότητα».
Χορογραφία: «BetPlaced → BonusEngine → BonusGranted → WalletCredited».
Προστασία από την κατάχρηση: ευφυείς επιχορηγήσεις, όρια, προσομοιωτής κανόνων.

12. 4 Τουρνουά/Leaderboards

Υπηρεσίες: 'τουρνουά-svc', 'σκοράροντας', 'leaderboard'.
Αποθήκευση: Redis ZSET + περιοδική «έκπλυση» στο OLAP.
: ' Update', ' Closed', 'RewardEduced'.

13) Παράδειγμα σύμβασης + γεγονότος (Απλοποιημένο)

OpenAPI (θραύσμα) - Πορτοφόλι

yaml paths:
/v1/wallet/{userId}/credit:
post:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreditRequest'
responses:
'202': { description: 'Enqueued' }
components:
schemas:
CreditRequest:
type: object required: [amount, currency, reason, idempotencyKey]
properties:
amount: { type: number }
currency: { type: string, example: UAH }
reason: { type: string, enum: [Deposit, Bonus, Adjustment] }
idempotencyKey: { type: string }

AsyncAPI (θραύσμα) - γεγονός

yaml channels:
wallet. credit. applied:
publish:
message:
name: WalletCreditApplied payload:
type: object required: [userId, amount, currency, sourceEventId]

14) Δοκιμές

Μονάδα/Ακίνητη περιουσία για τους κανόνες τομέα.
CDC (Σύμφωνο/Assertible) - δοκιμές συμβάσεων παρόχου/καταναλωτή.
Ολοκλήρωση με τοπικούς μεσίτες (Testcontainers).

E2E κρίσιμης ροής (registratsiya→depozit→start igry→vyvod)

Δοκιμές χάους/αποτυχίας: διακοπή λειτουργίας PSP/σταγόνα μεσίτη/απώλεια ζώνης.

15) Μετρήσεις και SLO (ελάχιστο)

Διαθεσιμότητα υπηρεσιών: '≥99. 9% "για πληρωμή/πορτοφόλι.
Καθυστέρηση p95: κρίσιμη διαδρομή API ≤ 300-500 ms.
Σφάλμα: 0. 1–0. 5% ανά τρίμηνο, προειδοποιήσεις καύσης.
Ουρές αναμονής: χρονικά συμβάντα (produce→consume), DLQ ≤ 0. 1%.
Επιχειρήσεις: TTP, TtW, FTD-επιτυχία, KYC-TtV.

16) Κατάλογοι ελέγχου

Σχεδιασμός υπηρεσίας

  • Καθαρό όριο τομέα και ιδιοκτήτης δεδομένων.
  • Συμβάσεις OpenAPI/AsyncAPI + σχήματα στο μητρώο.
  • ορισμός SLO/καταχωρίσεων· μετρήσεις/μονοπάτια/κούτσουρα.
  • Timeout/Retray/Idempotency Policies.
  • Schema μεταναστεύσεις: επέκταση-και-σύμβαση.

Πριν την απελευθέρωση

  • Δοκιμές μονάδας/ΚΕΕΛΠΝΟ/ενσωμάτωσης πράσινες.
  • Canary route and rollback plan.
  • Τα όρια ταχύτητας/οι οδοί βάρους είναι διαμορφωμένες.
  • Τα μυστικά/κλειδιά/πιστοποιητικά σκάβουν.
  • Προετοιμάζονται σημαίες ficha και θύλακες.

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

Δίκτυο ως λεωφορείο δεδομένων: βαθιές συγχρονισμένες αλυσίδες αντί για γεγονότα.
Κοινός «θεός» - DB για όλες τις υπηρεσίες.
Έλλειψη ευελιξίας → διπλές διαγραφές/δεδουλευμένα στοιχεία.
Σκοτεινές εκλύσεις χωρίς τηλεμετρία και θανατηφόρο διακόπτη.
Κρυφή συνεδρία (κολλητότητα παντού αντί για εξωτερική κατάσταση).
Συμβάσεις «σε κωδικό» χωρίς έκδοση και CDC.
Λογική στην πύλη API αντί για υπηρεσίες (πύλη = λεπτή).

18) Μετανάστευση Μονόλιθου (Strangler Fig)

1. Επιλέξτε την πύλη πρόσοψης και το κύριο κύκλωμα (για παράδειγμα, πληρωμές).
2. Αφαίρεση δυαδικής καταγραφής (outbox) από μονόλιθο σε γεγονότα.
3. Σταδιακή μεταφορά των τελικών σημείων σε μια νέα υπηρεσία (δρομολόγηση/βάρος καναρινιού).
4. Συμπίεση του μονόλιθου στον «πυρήνα» και απενεργοποίησή του.

19) Στοίβα και υποδομή (παράδειγμα)

Επικοινωνίες: REST/gRPC, Kafka/NATS. Μητρώο Schema.
Αρχεία: PostgreSQL, Redis, OpenSearch, S3/MinIO; OLAP - ClickHouse/BigQuery.
Εμπορευματοκιβώτια/ενορχήστρωση: Docker, Kubernetes (Ingress/Gateway), Service Mesh (Istio/Linkerd), εάν είναι απαραίτητο.
Πύλη: Απεσταλμένος/Κονγκ/Traefik/NGINX.
CI/CD: GitHub Actions/GitLab CI + ArgoCD/Flux; Σύμφωνο/OWASP/ZAP.
Παρατηρησιμότητα: OpenTelemetry, Prometheus, Tempo/Jaeger, Loki.

20) Τελικό φύλλο εξαπάτησης

Όρια σχεδιασμού ανά τομέα και ευθύνη δεδομένων.
Συγχρονισμός - μόνο όπου χρειάζεται απάντηση τώρα. τα υπόλοιπα είναι γεγονότα.
Συμβάσεις/Συστήματα/ΚΕΕΛΠΝΟ - Ασφάλιση παλινδρόμησης.
Sagas + outbox + idempotency - το θεμέλιο της αξιοπιστίας.
Η παρατηρησιμότητα και η SLO δεν αποτελούν επιλογή, αλλά το «έτοιμο» κριτήριο.
Απελευθερώσεις μέσω καναρινιού/γαλάζιου-πράσινου, μεταναστεύσεις - επέκταση και σύναψη σύμβασης.
Ασφάλεια/συμμόρφωση: mTLS, JWT, KMS, περιφερειακά δεδομένα.
Πρώτα, μια αρθρωτή μονόλιθος, μετά η εξέλιξη - αν η κλίμακα και η ομάδα είναι έτοιμες.

Contact

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

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

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

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

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

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