Როგორ ავაშენოთ fail safe მილიონობით გარიგების დამუშავება დღეში
სტატიის სრული ტექსტი
1) რას ნიშნავს fail-safe გარიგებისთვის
Fail-safe არის მაშინ, როდესაც ნებისმიერი უბედური სიტუაცია იწვევს უსაფრთხო გაჩერებას, ან კომპენსირებულ მდგომარეობას ფულისა და მონაცემების დაკარგვის გარეშე. მიზნები:- „ორმაგი დებიუტი/სესხი“ = 0.
- დაკარგული გარიგებები/მოვლენები = 0.
- პროგნოზირებადი SLO ლატენტობის/მიწოდებისთვის, დეგრადაციის აშკარა რეჟიმები და DR.
საფუძველია ფულადი ინვარიანტები (ერთ ადგილზე ბალანსის ჭეშმარიტება), იდემპოტენტობა, შეთანხმებული მიტანა.
2) არქიტექტურული პრინციპები (მოკლედ)
1. Truth Single წყარო: ბალანსი და აღრიცხვა - Ledger/Wallet- ში. გარშემო სერვისები ინარჩუნებენ პროცესების მდგომარეობას და არა ფულს.
2. Idempotence everywhere: ყველა „ჩანაწერის“ ოპერაცია იღებს 'Idempotency-Key'; გამეორება იგივე შედეგს უბრუნებს.
3. ღონისძიების გარანტია მიწოდების გარანტიით: Outbox/CDC, რიგები, DLQ, დედაპლატი.
4. საგები და კომპენსაცია და არა „ხელით კორექტირება“.
5. Back-pressure და პრიორიტეტები: სისტემა შენელდება, მაგრამ არ იშლება.
6. ნაგულისხმევი დაკვირვება: სტრუქტურირებული ლოგოები, ტრეისი, მეტრიკა.
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 (ზუსტად ერთი მიწოდება), Consumers (idempotents, დედაპლატით), DLQ/Replay (კონტროლირებადი გამეორება).
4) ფულადი ინვარიანტები და შესაბამისობა
ბალანსის ჭეშმარიტებაა Ledger (ACID, სერიული გარიგებები ან ზედიზედ მკაცრი გამარტივება).
ფულადი ბრძანებები: 'debit', 'credit', 'hold', 'commit', 'rollback' არის იდემპოტური.
კომბინირებული პროცესები აგებულია საგნების მსგავსად:- 'authorize' - settle/credit '(ანაბარი/ნაკადი),' request 'subtled/failed' (გადახდა/გამომავალი), 'refund/void' (კომპენსაცია).
- Ledger- ის გვერდის ავლით ბალანსის პირდაპირი რედაქტირება არ არის.
5) Idempotence: გასაღებების დიზაინი
კლავიშმა ცალსახად უნდა დაადგინოს ბიზნეს ოპერაცია:- `bet_id+amount+currency`, `payment_intent+capture_id`, `payout_id`, `chain_txid`.
- შეინახეთ შედეგი. იგივე გასაღების გამეორება არის იგივე body/სტატუსი.
- აკონტროლეთ შეუსაბამობა: იგივე გასაღები სხვა თანხით 'IDEMPOTENCY _ MISMATCH'.
6) რიგები, წესრიგი და დედობა
Exactly-once ეფექტები მიიღწევა არა ტრანსპორტით, არამედ idempotent კონსიუმერით + დედაპლატით (LRU/Redis/DB c TTL).
შეინარჩუნეთ შეკვეთა (წვეულება key = 'account _ id/round _ id/player _ id').
„ჰეტეროგენული“ გასაღებებისთვის - სახელმწიფო აპარატის შეცვლა და კონცენტრატორები.
DLQ სავალდებულოა: N მცდელობის შემდეგ - იზოლირებულ თემაში ადამიანის მიერ გამოწვეული მიზეზით.
7) Outbox/CDC: რატომ არ იკარგება მოვლენები
როგორც ერთი გარიგების ნაწილი, ჩვენ ვწერთ როგორც ბიზნეს ცვლილებას, ასევე ჩანაწერებს გარე ბაზარზე.
ცალკე გამომცემელი კითხულობს outbox- ს და აქვეყნებს საბურავს დადასტურებით.
ალტერნატიულია CDC (Change Data Capture) BD დონეზე (Debezium/რეპლიკაციის ლოგო).
გარიგების შემდეგ არ არის „მოვლენების ლოგოები“ ზარალის წყარო.
8) უკან დაბრუნება და პრიორიტეტები
შესასვლელი სატანკო და კვოტები (per tenant/brand/region).
პრიორიტეტული ხაზები: ფულადი გზები უფრო მაღალია, ვიდრე პრომო/ტელემეტრია.
გადატვირთვისას: 'no new sessions/requests' რეჟიმები, მეორადი ფიკების გაყინვა, ბირთვის შენარჩუნება.
ავტო-დეგრადაცია: ფონის დავალებების სიხშირის შემცირება, დინამიურად გააფართოვოს კრიტიკული ვორკერები.
9) მრავალმხრივი სტაბილურობა
აქტივი აქტივი API და რიგებისთვის, ადგილობრივი ლედგერი (ან გლობალური რეგიონში/ვალუტით შარდინგით).
მონაცემთა აღდგენა: ფული/PII/ჟურნალები არ არის კროსვორდები აშკარა წესების გარეშე.
მოვლენების რეპლიკაცია ინტერრეგიონალურად არის ასინქრონული, „რეგიონის“ ნიშნით.
RPO/RTO: კოცნა RPO - 5 წუთი, RTO - 30 წუთი; რეგულარულად შეამოწმეთ.
10) SLO/SLI და დაშბორდები
სახელმძღვანელო (მაგალითი):- p95 'authorize/debit/credit' <150-300 ms (შიდა გზა).
- P95 end-end „გუნდი - მოვლენა საბურავში“ <1-2.
- ვებჰუკების/გარე მოვლენების მიწოდება p99 <5.
- „დაკარგული/დუბლირებული გარიგებები“ = 0 (ხელშეკრულების შემოწმება).
მეტრიკა: latency p50/p95/p99, error-rate (4xx/5xx/ბიზნესი), consumer/queue lag, retry storms, settle lag, webhook lag, DLQ ზომა, სიხშირე 'IDDEMMMPOPOPOPOTENENENENENC ENCENCEN- ის _ MIN- ის _ MIT IIT T T X X AIT E AT T T T T T e MATCH'.
11) დაკვირვება და აუდიტი
სტრუქტურირებული logs JSON 'trace _ id', 'idempotence _ key ", ბიზნეს ID, შეცდომების კოდები.
OpenTelemetry: trasing HTTP/gRPC/DB/საბურავები, Spans Sag.
WORM აუდიტი: კრიტიკული ცვლილებების უცვლელი ჟურნალები (ლიმიტები, გასაღებები, პრომო/ჯეკპოტის კონფისკაცია).
PII/საიდუმლოებების, რეგიონალური ბაქნების, RBAC/ABAC- ის შენიღბვა ლოგებზე წვდომისთვის.
12) საიმედოობის ტესტირება
საკონტრაქტო ტესტები: გამეორება/დუბლიკატები, out-of-order, idempotence, დედაპლატი.
დატვირთვა: მწვერვალების პროფილი (x10), რიგების სტაბილურობა და BD.
ქაოსის შემთხვევები: Ledger/საფულის დაცემა, ხაზები/რეგიონები, CDC შეფერხებები, რეტრის „ქარიშხალი“.
თამაშის დღეები: რეგულარული DR წვრთნები და ინციდენტები, MTTR გაზომვით.
13) შენახვა და მონაცემები
OLTP ფულისთვის: გარიგების BD (RPO-0), მკაცრი ინდექსები, კრიტიკულ ერთეულებში სერიული დონე.
კეში (Redis) - მხოლოდ აჩქარების მიზნით, არა „ჭეშმარიტებისთვის“. TTL + jitter, დაცვა cache stampede.
OLAP/DWH - მოხსენებები/ანალიტიკოსები. ნაკადები CDC/ავტობუსიდან, OLTP- ზე დატვირთვის გარეშე.
მონაცემთა სქემების ვერსია; მიგრაციის გარეშე (ექსპორტი/კონტრაქტი).
14) რეკრეაციული ორკესტრი
ექსპონენტური backoff + gitter, ვადა/დრო RPC- ზე.
თითოეულ ფენაზე იდემპოტენტური გამეორება (კლიენტი - მომსახურება - მომხმარებელი).
ჭიდაობის კვოტები, დაიცავით თავი „ქარიშხლისგან“ (circuit breaker, hedged requests, სადაც მიზანშეწონილია).
Replay DLQ- დან მხოლოდ „უსაფრთხო“ ფანჯარაში, სიჩქარის შეზღუდვით.
15) ტრანსპორტის უსაფრთხოება
MTLS ყველგან S2S, მოკლემეტრაჟიანი ნიშნები (OAuth2 CC), სხეულების ხელმოწერა (HMAC/EdDSA) ვებჰუკებისთვის.
საიდუმლოებები Vault/HSM- ში, როტაცია, გასაღებები per brand/region.
გრძელი პრივილეგიის პოლიტიკოსები, „ოთხი თვალი“ ხელით ოპერაციებზე.
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" }
(განმეორება - იგივე პასუხი)გარე მოვლენა
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) ჩეკის ფურცლები
პლატფორმა/ოპერატორი
- ჭეშმარიტება ბალანსით - ერთი ლედგერი; არ არსებობს შემოვლითი გზა.
- ყველა write ოპერაცია 'Idempotency-Key' - ით; საკვანძო პასუხი ინახება.
- Outbox/CDC ყველა დომენური ჩანაწერისთვის, DLQ და კონტროლირებადი replay.
- ხაზები პრიორიტეტებით, უკუკავშირით, დეგრადაციის რეჟიმებით.
- წვეულებები შეირჩა ბიზნეს კლავიშებით; მომხმარებლები იდემპოტენტურია.
- SLO დაშბორდები, OpenTelemetry, WORM აუდიტი.
- რეგულარული DR/xaoc სავარჯიშოები, კონტრაქტის/დატვირთვის ტესტები.
- მონაცემთა აღდგენა, დაშიფვრა, Vault/HSM, კლავიშების როტაცია.
პროვაიდერები/ინტეგრაცია
- მე გამოგიგზავნით 'Trace-Id '/' Idempotency-Key', მზად ვარ ხელახლა მიწოდებისთვის.
- Webhuki- ს ხელი მოეწერა და დაიდო.
- შეინიშნება სქემების/კონტრაქტების ვერსიები (semver, deprecation).
18) წითელი დროშები (ანტი-ნიმუშები)
ბალანსი იცვლება ვებჰუკის გარეშე Ledger- ში.
იდემპოტენტურობის არარსებობა - ორმაგი ჩამოწერა/სესხი.
მოვლენების გამოქვეყნება outbox/CDC გვერდის ავლით.
მონოლითი უკუკავშირის გარეშე: ყველაფერი ტრეფიკის მწვერვალს ეშვება.
OLTP ნაზავი და მოხსენებები: BI ურტყამს საბრძოლო BD- ს.
DLQ/raple- ის არარსებობა; შეცდომების „ჩუმად“ გადაყლაპვა.
არ არსებობს PII/ფულის რეგიონალური იზოლაცია; ზოგადი გასაღებები რამდენიმე ბრენდისთვის.
ბალანსების/სტატუსის ხელით რედაქტირება BD- ში.
19) შედეგი
დღეში მილიონობით გარიგების დამუშავება არის ინვარიანტებისა და დისციპლინის შესახებ: ჭეშმარიტების ერთი წყარო, იდემპოტენტური ბრძანებები, საგნები და გარე/CDC, რიგებში წესრიგი და დედობა, დაკვირვება და კონტროლირებადი დეგრადაცია. დაამატეთ წვდომის მანდატები, DR პრაქტიკა და რეგულარული სავარჯიშოები - და მიიღეთ სისტემა, სადაც ფული სწრაფად და მხოლოდ ერთხელ მოძრაობს, მოვლენები არ იკარგება, ხოლო ტრაფიკის ზრდა და გაუმართაობა ხდება კონტროლირებადი რისკები და არა სიურპრიზები.
