Күнүнө миллиондогон транзакцияларды туура эмес-коопсуз иштетүүнү кантип куруу керек
Макаланын толук тексти
1) Транзакциялар үчүн fail-safe деген эмне
Fail-safe - бул кандайдыр бир бузулган жагдай коопсуз токтоп калууга же акча жана маалыматтарды жоготпостон компенсациялануучу абалга алып келгенде. Максаттары:- "Кош дебеттер/кредиттер" = 0.
- Жоголгон транзакциялар/окуялар = 0.
- Жашыруун/жеткирүү боюнча болжолдонгон SLO, так деградация режимдери жана DR.
Негизи - акча инварианттары (бир жердеги баланстын чындыгы), демпотенттүүлүк, окуялардын макулдашылган жеткирилиши.
2) Архитектуралык принциптер (кыска)
1. Single source of truth: балансы жана бухгалтерия - Ledger/Wallet. Айланадагы кызматтар акча эмес, процесстердин абалын кармап турат.
2. Idempotency everywhere: бардык иш "жазуулар" кабыл алуу 'Idempotency-Key'; кайталоо ошол эле натыйжаны берет.
3. Жеткирүү кепилдиги менен окуя: outbox/CDC, кезек, DLQ, дедуп.
4. Сагалар жана компенсациялар эмес, "кол менен оңдоолор".
5. Back-pressure жана артыкчылыктары: системасы жай, бирок кулайт.
6. демейки байкоо: структураланган Логи, Trace, метрика.
7. Көп аймак жана DR: актив-актив/актив-пассив, үзгүлтүксүз машыгуулар.
3) Референс-топология
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/ReconНегизги жерлери: Outbox (атомдук жазуу командасы жана "долбоор" иш-чаралар), Publisher (тегиз-бир жеткирүү), керектөөчүлөр (Emempotents, дедуп-ачкыч менен), DLQ/Replay (контролдонуучу кайталоо).
4) Акча инварианттары жана ырааттуулук
Баланс боюнча чындык - Ledger (ACID, сериялануучу транзакциялар же эсеп боюнча катуу иретке келтирүү).
Акча буйруктары: 'debit', 'credit', 'hold', 'commit', 'rollback' - демпотенттик.
Айкалыштырылган процесстер дастандар сыяктуу курулат:- 'authorize → settle → credit' (депозит/сеттлмент), 'request → submit → settled/failed' (төлөө/чыгаруу), 'refund/void' (компенсация).
- Эч кандай түздөн-түз өзгөрүүлөр балансы Ledger айланып.
5) Жол-жоболоштуруу: ачкыч дизайн
Ачкыч так бизнес ишин аныктоо керек:- `bet_id+amount+currency`, `payment_intent+capture_id`, `payout_id`, `chain_txid`.
- Натыйжаны ачкыч менен сактоо (response cache). Ошол эле ачкыч менен кайталоо → ошол эле body/статус.
- Дал келбестигин контролдоо: башка сумма менен бирдей ачкыч → 'IDEMPOTENCY _ MISMATCH'.
6) Кезектер, тартип жана дедуп
Exactly-once таасирлери транспорт менен жетишилген эмес, ал эми демпотенттик consumers + депо сактоо (TTL менен LRU/Redis/DB).
Ачкыч тартибин сактаңыз (partition key = 'account _ id/round _ id/player _ id').
"Ар түрдүү" ачкычтар үчүн - статусту версиялоо жана коммутаторлор (state machine per entity).
DLQ милдеттүү: N аракеттен кийин - адам окуй турган себеп менен обочолонгон темага.
7) Outbox/CDC: эмне үчүн окуялар "жоголгон жок"
DB кызмат бир бүтүмдүн алкагында, биз жазуу жана бизнес өзгөрүү, жана outbox жазуу.
Өзүнчө publisher outbox окуп жана тастыктоо менен шинага жарыялайт.
Альтернатива - CDC (Change Data Capture) DD деъгээлинде (Debezium/репликация журналы).
Транзакциядан өткөн эч кандай "окуя логдору" жоготуулардын булагы болуп саналат.
8) Back-pressure жана артыкчылыктары
Токен-бакеттер жана кириштеги квоталар (per tenant/brand/region).
Артыкчылыктуу кезектер: акча жолдору промо/телеметриядан жогору.
Ашыкча жүктөөдө: 'no new sessions/requests' режимдери, экинчи баскычты тоңдуруу, ядрону сактоо.
Авто-деградация: арткы милдеттердин жыштыгын кыскартуу, динамикалуу маанилүү воркерлерди кеңейтүү.
9) Көп аймактын туруктуулугу
API жана кезек үчүн актив-актив, жергиликтүү Ledger (же аймак/валюта боюнча шардинг менен глобалдык).
Data residency: акча/PII/журналдар так эрежелери жок кроссовка эмес.
Региондор аралык репликация - асинхрондук, 'region' деп белгиленет.
RPO/RTO: RPO ≤ 5 мүнөт, RTO ≤ 30 мүнөт; дайыма текшерип туруңуз.
10) SLO/SLI жана дашборддор
Көрсөтмөлөр (мисал):- p95 'authorize/debit/credit' <150-300 ms (ички жол).
- p95 end-to-end "команда → шина окуя" <1-2 б.
- Жеткирүү Webhook/тышкы окуялар p99 <5 мин.
- "Жоголгон/кайталанган транзакциялар" = 0 (контракттык текшерүүлөр).
Метриктер: latency p50/p95/p99, error-rate (4xx/5xx/business), consumer/queue lag, retry storms, settle lag, webhook lag, DLQ өлчөмү, жыштык 'IDEMPOTENCY _ MISMATCH'.
11) Байкоо жана аудит
Структураланган JSON логдору 'trace _ id', 'idempotency _ key', бизнес-ID, ката коддору менен.
OpenTelemetry: Tracking HTTP/gRPC/DB/шиналар, уктап сактагыла.
WORM-аудит: өзгөрүлбөс журналдар критикалык өзгөрүүлөр (лимиттер, ачкычтар, config промо/джекпот).
PII/Secrets, аймактык бакет, RBAC/ABAC логторго жетүү.
12) Коопсуздук сыноо
Контракттык тесттер: кайталоо/кайталоо, out-of-order, демпотенттик, дедуп.
Жүктөө: чокулары кароо (x10), кезек туруктуулугу жана DD.
Башаламандык учурларда: Ledger/капчык түшүп, кезек/аймактар, CDC кечигүү, "бороон" retrains.
Game Days: DR жана инциденттердин үзгүлтүксүз машыгуулары, MTTR өлчөө менен.
13) Сактоо жана маалыматтар
ALTP акчага: транзакциялык DD (RPO ≈ 0), катуу индекстер, критикалык жактар   боюнча сериалдаштырылуучу деңгээлдер.
Кэш (Redis) - "чындык" үчүн эмес, тездетүү үчүн гана. TTL + jitter, cache stampede коргоо.
OLAP/DWH - отчеттор/аналитика үчүн. CDC агымдары/шиналар, OLTP боюнча эч кандай жүк.
Маалыматтар схемалары версияланат; downtime жок көчүрүү (expand/contract).
14) Оркестрдин ретрациясы
экспоненциалдуу backoff + Jitler, RPC боюнча мөөнөтү/убакыт.
Ар бир катмарда Idempotent кайталоо (кардар → кызмат → керектөөчү).
Retrais боюнча квоталар, "бороон-чапкындардан" коргонуу (circuit breaker, hedged requests кайда ылайыктуу).
DLQ гана "коопсуз" терезелерге Replay, ылдамдыгын чектөө менен.
15) Транспорт коопсуздугу
mTLS бардык жерде S2S, кыска өмүрлүү токендер (OAuth2 CC), кол тамгалар (HMAC/EdDSA) вебхуктар үчүн.
Vault/HSM сырлары, айлануу, брэнд/аймак ачкычтары.
least privilege саясаты, "төрт көз" кол менен иш.
16) Болжолдуу контракттар (фрагменттер)
Демпотенттик дебеттик команда
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" }
(кайталоо → ошол эле жооп)Outbox окуясы
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) Чек-баракчалар
Платформа/оператор
- Баланс боюнча чындык - бир Ledger; жолдору жок.
- 'Idempotency-Key' менен бардык write-операциялар; жооп ачкыч боюнча сакталат.
- Бардык домендик жазуулар боюнча Outbox/CDC, DLQ жана башкарылуучу replay.
- Артыкчылыктар менен кезек, back-pressure, деградация режимдери.
- Partition-keys бизнес ачкычтары боюнча тандалып алынган; керектөөчүлөр демпотенттик.
- SLO-dashboard, OpenTelemetry, WORM-аудит.
- Үзгүлтүксүз DR/xaoc-машыгуу, келишим/жүктөө тесттер.
- Data residency, шифрлөө, Vault/HSM, ачкычтарды айлантуу.
Провайдерлер/интеграция
- Жөнөтүү 'Trace-Id '/' Idempotency-Key', кайра жеткирүүгө даяр.
- Вебхактар кол коюлуп, дедупликацияланат.
- Схемалардын/контракттардын версиялары сакталат (semver, deprecation).
18) Кызыл желектер (анти-үлгүлөрү)
Баланс Ledger командасы жок Webhook боюнча өзгөрөт.
Демпотенттиктин жоктугу → кош эсептен чыгаруу/кредиттер.
outbox/CDC айланып окуялар жарыялоо.
Back-pressure жок монолит: трафиктин туу чокусу баарын жок кылат.
OLTP жана отчетторду аралаштыруу: BI согуш DD уруп.
Жок DLQ/реплика; каталарды "тынч" жутуу.
Аймактык PII/акча изоляциясы жок; бир нече бренддер үчүн жалпы ачкычтар.
DB баланстарды/статустарды кол менен оңдоо.
19) Жыйынтык
Күнүмдүк миллиондогон транзакцияларды иштетүү - бул инварианттар жана тартип жөнүндө: чындыктын бирдиктүү булагы, демпотенттик командалар, сагалар жана outbox/CDC, кезектеги тартип жана дедуп, байкоо жана башкарылуучу деградациялар. Кирүү мандаттарын, DR практикаларын жана үзгүлтүксүз машыгууларды кошуңуз - жана акча тез жана бир гана жолу жылган системаны алыңыз, окуялар жоголбойт, трафиктин өсүшү жана мүчүлүштүктөр күтүүсүз эмес, башкарылуучу тобокелдиктерге айланат.
