Günde millionlarça amallary fil-safe gaýtadan işlemegi nädip gurmaly
Makalanyň doly teksti
1) Amallar üçin fil-safe nämäni aňladýar
"Fail-safe" - islendik şowsuz ýagdaý pul we maglumatlary ýitirmezden howpsuz durmaga ýa-da öwezini dolulýan ýagdaýa getirýän ýagdaýdyr. Maksatlar:- "Goşa debetler/karzlar" = 0.
- Ýitirilen amallar/wakalar = 0.
- Gizlinlik/eltip bermek boýunça öňünden aýdylýan SLO, aç-açan zaýalanma usullary we DR.
Esas - pul inwariantlary (deňagramlylygyň hakykaty bir ýerde), deňagramlylyk, wakalaryň ylalaşykly eltilmegi.
2) Binagärlik ýörelgeleri (gysgaça)
1. Ýeke-täk çeşme: balans we buhgalteriýa - Ledger/Wallet. Töweregindäki hyzmatlar pul däl-de, prosesleriň ýagdaýyny saklaýar.
2. Idempotency everywhere: "ýazgylaryň" ähli amallary 'Idempotency-Key' -ni kabul edýär; şol bir netijäni gaýtalaýar.
3. Eltip bermek kepilligi bilen waka: outbox/CDC, nobatlar, DLQ, dedup.
4. Saglar we kompensasiýalar, "el bilen düzedişler" däl.
5. Back-pressure we ileri tutulýan ugurlar: ulgam haýallaýar, ýöne çökmeýär.
6. Syn edilişi: gurluşly loglar, treýsing, metrikler.
7. Köp sebit we DR: aktiw-aktiw/aktiw-passiw, yzygiderli maşklar.
3) Referens-topologiýa
Edge/API GW ──Command API ──App Service (Sagas)
│           │
│         (Outbox TX)
RateLimit     Outbox Table ──Publisher ──Kafka/Pulsar ──Consumers
│                      │
WAF                     └─DLQ/Replay
│
└─Ledger/Wallet (ACID, idempotent debit/credit)
│
└─CDC/Changefeed ──DWH/BI/ReconEsasy ýerler: Outbox (toparyň ýadro ýazgysy we wakanyň "taslamasy"), Publisher (birmeňzeş eltip bermek), Sarp edijiler (duýgur, açar bilen), DLQ/Replay (gözegçilik edilýän gaýtalanmalar).
4) Pul inwariantlary we ylalaşyklylyk
Balans hakykaty - Ledger (ACID, serial amallary ýa-da hasaby berk tertipleşdirmek).
Pul buýruklary: 'debit', 'credit', 'hold', 'commit', 'rollback' - idempotent.
Birleşdirilen prosesler saga ýaly gurulýar:- 'authorize → settle → credit' (depozit/settlment), 'request → submit → settled/failed' (töleg/yzyna almak), 'refund/void' (öwezini dolmak).
- Ledger-den aýlanyp, deňagramlylygyň göni düzedişleri ýok.
5) Idempotentlik: açar dizaýny
Açar iş amalyny birmeňzeş kesgitlemelidir:- `bet_id+amount+currency`, `payment_intent+capture_id`, `payout_id`, `chain_txid`.
- Netijäni açar boýunça sakla (response cache). Şol bir açar → şol bir body/status bilen gaýtalaň.
- Gabat gelmezlige gözegçilik ediň: birmeňzeş açar bilen başga bir mukdar → 'IDEMPOTENCY _ MISMATCH'.
6) Nobatlar, tertip we dedup
"Exactly-once" effektleri ulag bilen däl-de, dempotent konsumerler tarapyndan dup-ammar (LRU/Redis/DB c TTL) arkaly gazanylýar.
Açary saklaň (partition key = 'account _ id/round _ id/player _ id').
"Dürli" açarlar üçin - ýagdaýyň wersionirlenmegi we kommutatorlar (state machine per entity).
DLQ hökmanydyr: N synanyşykdan soň - adam okalýan sebäp bilen izolirlenen mowzuga.
7) Outbox/CDC: näme üçin wakalar "ýitmeýär"
Hyzmatyň DB-sinde bir geleşigiň çäginde, iş üýtgemelerini we outbox-da ýazgyny ýazýarys.
Aýry publisher outbox okaýar we tassyklama bilen tekerde çap edýär.
Alternatiw - CDC (Change Data Capture) DB (Debezium/log replikasiýa) derejesinde.
Geleşikden geçen "wakalaryň ýazgylary" ýitgileriň çeşmesidir.
8) Back-pressure we ileri tutulýan ugurlar
Token-baketler we girelgedäki kwotalar (per tenant/brand/region).
Ileri tutulýan nobatlar: pul ýollary mahabat/telemetriýadan ýokary.
Artykmaç ýüklenende: 'no new sessions/requests' re modes, ikinjisini doňdurmak, ýadrosyny saklamak.
Awto-degradasiýa: fon meseleleriniň ýygylygyny azaltmak, möhüm workerleri dinamiki taýdan giňeltmek.
9) Köp sebitleýin durnuklylyk
API we nobatlar üçin aktiw-aktiw, lokal Ledger (ýa-da sebit/walýuta boýunça sharding bilen global).
Data residency: pul/PII/žurnallar aç-açan düzgünler bolmazdan krosslanmaýar.
Wakalaryň sebitara köpeldilmegi - asinhron, "region" belligi bilen.
RPO/RTO: RPO-ny nyşana alyň ≤ 5 minut, RTO ≤ 30 minut; yzygiderli barlaň.
10) SLO/SLI we daşbordlar
Görkezijiler (mysal):- p95 'authorize/debit/credit' <150-300 ms (içerki ýol).
- p95 end-to-end "buýruk → tekerdäki waka" <1-2 s.
- Webhuklary/daşarky wakalary eltip bermek p99 <5 minut.
- "Ýitirilen/köpeldilen amallar" = 0 (şertnama barlaglary).
Metrikler: latency p50/p95/p99, error-rate (4xx/5xx/business), consumer/queue lag, retry storms, settle lag, webhook lag, DLQ ululygy, ýygylygy 'IDEMPOTENCY _ MISMATCH'.
11) Gözegçilik we audit
JSON-yň gurluş ýazgylary 'trace _ id', 'idempotency _ key', biznes-ID, ýalňyşlyk kodlary bilen.
OpenTelemetry: treýsing HTTP/gRPC/DB/tekerler, saga.
WORM-audit: möhüm üýtgeşmeleriň üýtgemeýän magazinesurnallary (çäklendirmeler, açarlar, mahabat/jekpot konfigleri).
PII/syrlary gizlemek, sebitleýin baketler, RBAC/ABAC.
12) Ygtybarlylygy barlamak
Şertnama synaglary: gaýtalanma/dublikatlar, out-of-order, idempotentlik, dedup.
Ýüklemek: iň ýokary profil (x10), nobatlaryň durnuklylygy we DB.
Bulam-bujarlyk: Ledger/gapjygyň ýykylmagy, nobatlaryň/sebitleriň ýykylmagy, CDC gijikdirilmegi, retraýlaryň "tupany".
Game Days: MTTR ölçegi bilen yzygiderli DR we hadysalar maşklary.
13) Ammar we maglumatlar
ALTP pul bilen: geleşik DB (RPO ≈ 0), berk indeksler, kritiki häsiýetler boýunça seriýalaşdyrylýan derejeler.
Kesh (Redis) - diňe tizlenmek üçin, "hakykat" üçin däl. TTL + jitter, cache stampede garşy gorag.
OLAP/DWH - hasabatlar/analitikler üçin. CDC/şina akymlary, ALTP ýüklenmän.
Maglumatlaryň shemalary wersiýalanýar; downteimsiz göçmek (expand/contract).
14) Retraýlary orkestrlemek
Eksponensial backoff + jitter, RPC-de möhleti/wagty.
Her gatlakda idempotent gaýtalamak (müşderi → hyzmat → sarp ediji).
Retrada kwotalar, "tupanlardan" goramak (circuit breaker, hedged requests nirede ýerlikli).
DLQ-den diňe tizlik çäkli "howpsuz" penjirelere göçürmek.
15) Ulag howpsuzlygy
mTLS hemme ýerde S2S, gysga ömürli tokenler (OAuth2 CC), webhuklar üçin jisimleriň gollary (HMAC/EdDSA).
Vault/HSM-de syrlar, aýlaw, açarlar per brand/region.
Syýasatçylar least privilege, el bilen işlemek üçin "dört göz".
16) Takmynan şertnamalar (bölekler)
Idempotent debet buýrugy
POST /v1/wallet/debit
Headers: X-Idempotency-Key: debit_pi_001, X-Trace-Id: tr_a1b2
{
"account_id":"acc_42",  "amount":{"minor_units":5000,"currency":"EUR"},  "reason":"payout",  "reference_id":"po_001"
}
→ 200 { "status":"committed", "entry_id":"e_77" }
(gaýtalamak → şol jogap)Outbox wakasy
json
{
"event_id":"uuid",  "event_type":"wallet. debit. committed",  "occurred_at":"2025-10-23T16:21:05Z",  "account_id":"acc_42",  "amount_minor":5000,  "currency":"EUR",  "reference_id":"po_001",  "idempotency_key":"debit_pi_001",  "schema_version":"1. 3. 0"
}17) Çek-listler
Platforma/operator
- Deňagramlylyk hakykaty - bir Ledger; aýlanyp geçmek üçin ýol ýok.
- 'Idempotency-Key' bilen ähli write-amallar; Jogap açar boýunça saklanýar.
- Ähli domen ýazgylary, DLQ we dolandyrylýan replay üçin Outbox/CDC.
- ileri tutulýan ugurlar, back-pressure, zaýalanma reimesimleri.
- Partition-keys iş açarlary boýunça saýlandy; sarp edijiler idempotentdirler.
- SLO-daşbordlar, OpenTelemetry, WORM-audit.
- Yzygiderli DR/xaoc-maşklar, şertnama/ýük synaglary.
- Data residency, şifrlemek, Vault/HSM, açar aýlanmagy.
Üpjün edijiler/integrasiýa
- Iberýärin 'Trace-Id '/' Idempotency-Key', gaýtadan eltmäge taýýar.
- Webhuklar gol çekilip, duplizirlenilýär.
- Shemalaryň/şertnamalaryň wersiýalary berjaý edilýär (semver, deprecation).
18) Gyzyl baýdaklar (anti-patternler)
Balans Ledger-de buýruksyz webhook boýunça üýtgeýär.
Idempotentligiň ýoklugy → goşa hasapdan çykarmak/karzlar.
Outbox/CDC-den aýlanyp, wakalary çap etmek.
Back-pressure-siz monolit: traffigiň iň ýokary derejesi hemme zady peseldýär.
OLTP we hasabatlary garyşdyrmak: BI söweş BD urýar.
DLQ/repleýiň ýoklugy; ýalňyşlyklary "ýuwaş" ýuwutmak.
Sebitleýin izolýasiýa PII/pul ýok; birnäçe markanyň umumy açarlary.
DB-daky balanslary/statuslary el bilen düzetmek.
19) Jemleýji
"Fail-safe" günde millionlarça amallary gaýtadan işlemek inwariantlar we düzgün-nyzam barada: hakykatyň ýeke-täk çeşmesi, idempotent buýruklary, saglar we outbox/CDC, nobatlardaky tertip we dedup, gözegçilik we dolandyrylýan pese gaçmalar. Giriş mandatlaryny, DR-praktikalary we yzygiderli maşklary goşuň - we puluň çalt we diňe bir gezek hereket edýän ulgamyny alyň, wakalar ýitmeýär, traffigiň ösüşi we şowsuzlyklar garaşylmadyk zatlara däl-de, töwekgelçiliklere öwrülýär.
