GH GambleHub

Waka arhitekturasy

Waka arhitekturasy (EDA)

1) Waka näme we näme üçin EDA

Bu waka eýýäm domende bolup geçen üýtgewsiz hakykat ("PlayerVerified", "PaymentCaptured"). EDA bu faktlary we olara bolan reaksiýalary çap etmegiň töwereginde integrasiýalary gurýar:
  • hyzmatlaryň gowşak baglanyşygy,
  • sarp edijileri özbaşdak ulaltmak,
  • proýeksiýalary gaýtalamak/üýtgedip gurmak,
  • aç-açan audit.

EDA sinhron API-leri ýatyrmaýar - olary tamamlaýar, asinkron gatlagyna kross-hyzmat garaşlylygyny çykarýar.


2) Wakalaryň görnüşleri

Domen: möhüm işewürlik faktlary (OrderPlaced, BonusGranted).
Integrasiýa: daşarky ulgamlar üçin "suratlar "/üýtgeşmeler (UserUpdated, WalletBalanceChanged).
Tehniki: Durmuş sikli we telemetriýa (Heartbeat, PipelineFailed).
Buýruklar (waka däl, ýöne golaýda): "X et" (CapturePayment) görkezmeleri.

Maslahat: domen hadysalary - ilkinji; integrasiýalar anyk sarp edijiler üçin proýeksiýalar arkaly emele gelýär.


3) Wakalaryň şertnamalary we shemalary

Схема: Avro/Protobuf/JSON Schema + Schema Registry; gabat gelmek strategiýasy: "BACKWARD" sarp edijileriň ewolýusiýasy üçin, "FULL" möhüm mowzuklarda.
CloudEvents (id, source, type, time, subject, datacontenttype) - birmeňzeş sözbaşy.
Hökmany meta-maglumatlar: 'event _ id' (ULID/UUID), 'occurred _ at', 'producer', 'schema _ version', 'correlation _ id '/' causation _ id', 'idempotency _ key'.
Wersiýalaşdyrmak: add-only meýdanlary, adyny üýtgetmegi/semantik döwmegi gadagan etmek; Täze görnüşler - täze mowzuklar/görnüşler.

Mysal (Ýewro, bölek):
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) Eltip bermek, tertip we ylalaşyklylyk

At-least-once defolt hökmünde → prosessorlaryň idempotentligi zerurdyr.
Tertip: partiýanyň (Kafka) ýa-da nobatyň (RabbitMQ) içinde kepillendirilýär, ýöne retrada bozulyp bilner; Wakanyň açary düzgüniň domen granulasyny görkezmelidir (mysal üçin 'player _ id').
Ylalaşyk: pul/karzlar üçin - diňe žurnallar/saga/kompensasiýa arkaly; LWW-den gaça duruň.

Okamak modeli: proýeksiýalar we keşler eventual bolup biler - "täzelenýär"... görkeziň we berk ýollar üçin RNOT strategiýalaryny ulanyň.


5) Outbox/Inbox и CDC

Outbox: Hyzmat hakykaty öz DB-sine we bir geleşikdäki outbox tablisasyna ýazýar → worker tekerde çap edýär.
Inbox: Sarp ediji 'event _ id' -ni dadup üçin gaýtadan işlemegiň netijesi bilen saklaýar.
CDC (Change Data Capture): Programmany üýtgetmezden integrasiýalary gurmak üçin DB (binlog/WAL) -den tekere üýtgeşmeler akymy.
Idempotency: 'idempotency _ key '/' event _ id' boýunça gaýtadan işlemek, kesgitlenýänçä daşarky dünýäni üýtgetmäň.


6) CQRS и Event Sourcing

CQRS: write modelini we read-proýeksiýalaryny bölýäris; proýeksiýalar wakalardan gurlupdyr we yza galyp biler.
"Event Sourcing": agregatyň ýagdaýy = onuň wakalarynyň jemlenişi. Plýuslar: doly audit/bellik; minuslar: migrasiýa/shemalar/snapshot çylşyrymlylygy.
Tejribe: ES - hemme ýerde däl, taryh we kompensasiýa möhüm bolan ýerlerde; CQRS - hemişe diýen ýaly EDA-da.


7) Saglar: orkestr we horeografiýa

Orkestr: koordinator buýruklar iberýär we jogap çärelerine garaşýar; çylşyrymly amallar üçin amatly (KYC → Deposit → Bonus).
Horeografiýa: hyzmatlar biri-biriniň wakalaryna reaksiýa bildirýärler; aňsat, ýöne yzarlamak has kyn.
Elmydama öwezini dolmagy we ädimleriň möhletini kesgitläň.


8) Topologiýalaryň dizaýny (Kafka/RabbitMQ)

Kafka

Domen wakasy: 'payments. captured. v1`, `players. verified. v1`.
Partiýa açary: 'player _ id '/' wallet _ id' - tertip möhüm bolan ýerde.
`replication. factor=3`, `min. insync. replicas = 2 ', prodýuser' acks = all '.
Retention: wagt (mysal üçin 7-90 gün) we/ýa-da compaction (açar boýunça iň soňky ýagdaý).
Backoff bilen retry we DLQ üçin topikler.

RabbitMQ

Exchanges: `topic`/`direct`, routing key `payments. captured. v1`.
Giň janköýer üçin - 'topic' + birnäçe nobat; RPC/toparlar üçin - aýratyn nobatlar.
HA üçin Quorum Queues; Retraýlar üçin TTL + dead-letter exchange.


9) Syn etmek we SLO EDA

SLI/SLO:
  • End-to-end latency (occurred_at → işlenildi): p50/p95/p99.
  • Lag/age: sarp edijileriň yza galmagy (Kafka consumer lag, Rabbit backlog age).
  • Throughput neşir/gaýtadan işlemek.
  • DLQ-rate we gaýtalamalaryň paýy.
  • Işewürlik amallarynyň üstünligi (mysal üçin, "goýum 5c ≤ tassyklandy").
Amallar:
  • 'trace _ id '/' correlation _ id' (OTel) arkaly wakalaryň baglanyşygy.
  • Nusgalar (exemplars) metriklerden → trassadan.
  • Burn-rate alertleri bolan "Producer → Broker → Consumer" dashbordlary.

10) Bellik, retenşn we backfill

Proýeksiýalary täzeden gurmak/bökdençlikleri düzetmek üçin gürlemek: täze proýeksiýa/nomespace sürüň, soň okamaga geçiň.
Retenşn: hukuk/iş talaplary (GDPR/PCI); duýgur meýdanlar - şifrläň we/ýa-da belläň.
Backfill: bir gezek ulanylýan mowzuklar/nobatlar, önümi bogup öldürmezlik üçin aç-açan RPS çäkleri.


11) Howpsuzlyk we gabat gelmek

Içerki müşderiler üçin TLS in-transit, mTLS.
Ygtyýarnama: per-topic/per-exchange ACL; namespace/vhost arkaly multitenancy.
PII: wakada meýdanlary azaltmak; envelope meta-maglumatlar aýratyn, zerur bolsa peýdaly ýükleri şifrlemek.
Wakalara girmegiň barlagy, "mümkin bolan" açarlary gadagan etmek.
Retenşn syýasaty we aýyrmak hukugy (GDPR): ýa-da maglumat baglanyşyklaryny ýa-da tombstone-wakalary saklaň we proýeksiýalarda aýyryň.


12) EDA-da synag

Contract tests: sarp edijiler shemalara garaşýandyklaryny tassyklaýarlar (consumer-driven).
Replay-testler: Täze prosessor/shema wersiýasy arkaly taryhy nusganyň geçmegi.
Chaos-ssenariler: brokeriň gijikdirilmegi/ýitmegi, düwünleriň ýykylmagy, sarp edijiniň yza galmagy → SLO çäklerde galýar.
CI-de smoke: wagtlaýyn mowzuklarda gysga ahyrdan soňa.


13) Göçmek "CRUD-integrasiýalary → EDA"

1. Domen faktlaryny kesgitläň.
2. Outbox-y başlangyç hyzmatlara giriziň.
3. Iň az domen wakalaryny çap ediň we 1-2 proýeksiýany birikdiriň.
4. Nokat sinhron integrasiýalaryny abuna ýazgylary bilen çalşyp, kem-kemden öçüriň.
5. Schema registry we laýyklyk syýasatyny giriziň.
6. Wakalary add-only meýdanlar bilen giňeldiň; döwmek - diňe täze görnüşler arkaly.


14) Anti-patternler

Wakalar = "DTO API" (gaty ýagly, içerki modeline bagly) - sarp edijileri bozýar.
Shema Registry we gabat gelmezlik - "gowşak" integrasiýa.
Koddan çap etmek we DB-e ýazmak atomar däl (ýok outbox) - wakalary ýitirýärsiňiz.
"Exactly-once hemme ýerde" - peýdasyz ýokary baha; has gowy at-least-once + idempotentlik.
Bir "ähliumumy" partizasiýa açary → gyzgyn partiýa.
Proýeksiýa göni gürlemek - onlaýn SLO-lary döwýär.


15) Giriş çek-sanawy (0-45 gün)

0-10 gün

Domen wakalaryny we olaryň açarlaryny (sargyt granullary) kesgitlemek.
"Schema Registry" -ni ýerleşdirmek we laýyklyk strategiýasyny tassyklamak.
1-2 hyzmatyna outbox/inbox goşmak; iň az CloudEvents-envelope.

11-25 gün

Retry/DLQ, backoff, prosessorlaryň deňsizligini giriň.
Daşbordlar: lag/age/end-to-end; burn-rate alert.
Wakalaryň resminamalaşdyrylyşy (katalog), owner's we shemalary täzeden gözden geçirmek prosesi.

26-45 gün

Birinji proýeksiýany göçürmek/üýtgedip gurmak; runbook replay we backfill.
Howpsuzlyk syýasaty (TLS, ACL, PII), retenşn, GDPR-amallar.
Broker we sarp edijiler üçin yzygiderli chaos-we game-days.


16) Kämillik ölçegleri

Domen wakalarynyň 100% -i diagrammalar bilen beýan edildi we hasaba alyndy.
Outbox/inbox ähli prodýuserler/konsumerler bilen örtülendir Tier-0/1.
SLO: p95 end-to-end latency we consumer lag maksatlaryň içinde ≥ 99%.
Replay/Backfill aşaklamasyz amala aşyrylyp bilner; barlanan runbook bar.
Wersiýalaşdyrmak: täze meýdanlar - döwülmezden; köne sarp edijiler ýykylmaýarlar.
Howpsuzlyk: TLS + mTLS, ACL per topic, giriş magazinesurnallary, PII/retenşn syýasaty.


17) Kiçi snippetler

Kafka Producer (ygtybarly neşir, pikirler):
properties acks=all enable.idempotence=true max.in.flight.requests.per.connection=1 compression.type=zstd linger.ms=5
Ulanyjy-prosessor (idempotentlik, psevdokod):
python if inbox.contains(event_id): return # дедуп process(event)            # побочные эффекты детерминированы inbox.commit(event_id)        # atomically with side-effect commit_offset()
DLX (ideýa) arkaly RabbitMQ Retry:
  • `queue: tasks` → on nack → DLX `tasks. retry. 1m '(TTL = 60s) → yzyna gaýtarmak' tasks '; ondan soň '5m/15m'.

18) Netijenama

EDA integrasiýany anyk şertnamalar we dolandyrylýan sazlaşyk bilen işewürlik faktlarynyň akymyna öwürýär. Binýady guruň: shemalar + reýestr, outbox/inbox, tertip açarlary, idempotent prosessorlary, SLO we gözegçilik, ygtybarly retenşn we bellik. Şonda wakalar ulalmak, seljermek we täze keşpler üçin - gowşak baglanyşyklar we gijeki göçmeler bolmazdan "hakykat çeşmesi" bolar.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.