Günde milyonlarca işlemin güvenli bir şekilde işlenmesi nasıl oluşturulur
Tam makale
1) Fail-safe işlemler için ne anlama geliyor
Fail-safe, herhangi bir başarısız durumun para ve veri kaybetmeden güvenli bir durdurma veya telafi edilmiş bir duruma yol açmasıdır. Hedefler:- "Double debits/credits" = 0.
- Kayıp İşlemler/Olaylar = 0.
- Gecikme/teslim, net bozunma modları ve DR. tarafından öngörülebilir SLO
Temel - parasal değişmezler (bir yerde gerçek denge), idempotence, kabul edilen olayların teslimi.
2) Mimari ilkeler (kısa)
1. Tek gerçek kaynağı: bilanço ve muhasebe - Ledger/Wallet. Etrafındaki hizmetler, para değil, süreçlerin durumunu tutar.
2. Her yerde idempotency: tüm "yazma" işlemleri "Idempotency-Key" alır; Tekrar aynı sonucu verir.
3. Teslimat garantili etkinlik: giden kutusu/CDC, kuyruklar, DLQ, deadup.
4. Sagalar ve tazminatlar, "manuel düzenlemeler'değil.
5. Geri basınç ve öncelikler: Sistem yavaşlar, ancak çökmez.
6. Varsayılan gözlemlenebilirlik: yapılandırılmış günlükler, izleme, metrikler.
7. Çok bölgeli ve DR: Varlık-varlık/varlık-borç, düzenli egzersiz.
3) Referans topolojisi
Kenar/API GW ──Command API ──App Hizmeti (Sagas)
│           │
│ (Giden Kutusu TX)
RateLimit Giden Kutusu Tablosu ──Publisher ──Kafka/Pulsar ──Consumers
│                      │
WAF └─DLQ/Replay
│
└─Ledger/Wallet (ACID, idempotent debit/credit)
│
   Önemli yerler: Çıkış Kutusu (bir takımın atomik kaydı ve bir etkinliğin "taslağı"), Yayıncı (tam olarak bir teslimat), Tüketiciler (idempotent, bir dedup anahtarı ile), DLQ/Replay (kontrollü tekrarlar).
4) Parasal değişmezler ve tutarlılık
Bakiye ile doğru - Defter (ACID, serileştirilebilir işlemler veya hesaba göre sıkı sipariş).
Para komutları: 'debit', 'credit', 'hold', 'commit', 'rollback' idempotent.
Kombine süreçler destanlar gibi inşa edilir:- 'yetkilendirmek, yerleşmek, kredi', 'talep, göndermek, yerleşmiş/başarısız', 'geri ödeme/geçersiz'.
- Ledger'ı atlayarak doğrudan bilanço düzenlemesi yok.
5) Idempotence: anahtar tasarım
Anahtar, ticari işlemi benzersiz bir şekilde tanımlamalıdır:- 'bet _ id + amount + currency', 'payment _ intent + capture _ id', 'payout _ id', 'chain _ txid'.
- Sonucu anahtarla saklayın (yanıt önbelleği). Aynı anahtarla tekrarlayın - aynı vücut/durum.
- Monitör uyumsuzluğu - farklı miktar ile aynı anahtar - 'IDEMPOTENCY _ MISMATCH'.
6) Kuyruklar, sipariş ve deadup
Tam olarak bir kez etkiler taşıma ile değil, idempotent tüketiciler + dedup depolama (LRU/Redis/DB c TTL) ile elde edilir.
Anahtar sırasını koru (bölüm anahtarı = 'account _ id/round _ id/player _ id').
"Heterojen" anahtarlar için - varlık başına durum makinesi.
DLQ zorunludur: N denemesinden sonra - insan tarafından okunabilir bir sebeple izole edilmiş bir konuya.
7) Outbox/CDC: Neden olaylar "kaybolmaz"
Bir işlem çerçevesinde, hizmet veritabanında hem bir iş değişikliği hem de bir çıkış kutusu girişi kaydediyoruz.
Ayrı bir yayıncı giden kutusunu okur ve onay otobüsüne yayınlar.
Alternatif olarak, veritabanı düzeyinde CDC (Veri Yakalama Değişikliği) (Debezium/replication log).
İşlemi geçen hiçbir'olay kaydı "kayıp kaynağı değildir.
8) Geri baskı ve öncelikler
Jeton kovaları ve giriş kotaları (kiracı/marka/bölge başına).
Öncelik kuyrukları: promosyon/telemetri üzerindeki para yolları.
Aşırı yüklendiğinde:'yeni oturum/istek yok 'modları, ikincil özellikleri dondurma, çekirdeği kaydetme.
Otomatik bozunma: arka plan görevlerinin sıklığını azaltın, kritik çalışanları dinamik olarak genişletin.
9) Çok bölgeli sürdürülebilirlik
API ve kuyruklar için varlık, yerel Defter (veya bölge/para birimi sharding ile global).
Veri ikameti: Para/PII/günlükler açık kurallar olmadan geçilmez.
Olay çoğaltması bölgeler arası - asenkron, 'bölge'olarak işaretlenmiştir.
RPO/RTO: 5 dakika ≤ RPO'yu, 30 dakika ≤ RTO'yu hedefleyin; Düzenli olarak kontrol edin.
10) SLO/SLI ve gösterge panoları
Yer İşaretleri (örnek):- P95 'yetkilendirme/borç/kredi' <150-300 ms (dahili yol).
- P95 uçtan uca "bus komanda> sobytiye" <1-2 s.
- Webhook'ların/dış olayların teslim edilmesi p99 <5 dk.
- Kayıp/Çoğaltılmış İşlemler = 0 (sözleşme kontrolleri).
Metrikler: gecikme p50/p95/p99, hata oranı (4xx/5xx/business), tüketici/kuyruk gecikmesi, yeniden fırtınalar, yerleşim gecikmesi, webhook gecikmesi, DLQ boyutu, 'IDEMPOTENCY _ MISMATCH' frekansı.
11) Gözlemlenebilirlik ve denetim
Yapılandırılmış JSON günlükleri ile 'trace _ id', 'idempotency _ key', iş kimliği, hata kodları.
OpenTelemetry: HTTP/gRPC/DB/bus tracing, sagaların yayılımı.
WORM denetimi: değiştirilemeyen kritik değişiklik günlükleri (limitler, anahtarlar, promosyon/jackpot yapılandırmaları).
PII/gizli maskeleme, bölgesel kovalar, günlük erişimi için RBAC/ABAC.
12) Güvenilirlik testi
Sözleşme testleri: tekrarlama/kopyalar, sıra dışı, idempotency, dedup.
Yük: tepe profili (x10), kuyrukların kararlılığı ve DB.
Kaos vakaları: Defter/cüzdan düşüşü, kuyruk/bölgeler dökümü, CDC gecikmeleri, "fırtına" yeniden ödeme
Oyun Günleri: MTTR ölçülen düzenli DR tatbikatları ve olayları.
13) Depolama ve veriler
Para için OLTP: işlemsel veritabanı (RPO≈0), sıkı endeksler, kritik varlıklar için serileştirilebilir seviyeler.
Önbellek (Redis) - sadece hızlanma için, "gerçek" için değil. "TTL + jitter, önbellek izdiham koruması.
OLAP/DWH - raporlar/analizler için. CDC/bus'dan geliyor, OLTP'de yük yok.
Veri şemaları sürümlüdür; Kesinti olmadan geçiş (genişletme/sözleşme).
14) Retraces Orkestrasyonu
Üstel geri dönüş + jitter, RPC'de son tarihler/zaman aşımı.
Her katmanda idempotent tekrarı (istemci - hizmet - tüketici).
Retrai kotaları, "fırtınalara" karşı koruma sağlar (devre kesici, uygun olduğunda hedged istekler).
DLQ'dan yalnızca hız sınırı olan "güvenli" pencerelere tekrar oynatın.
15) Taşımacıların güvenliği
S2S her yerde mTLS, kısa ömürlü belirteçler (OAuth2 CC), web kitapları için vücut imzaları (HMAC/EdDSA).
Vault/HSM'deki sırlar, rotasyon, marka/bölge başına anahtarlar.
Politikacılar en az ayrıcalık, manuel operasyonlarda "dört göz".
16) Örnek sözleşmeler (parçalar)
Idempotent Debit Komutu
POST/v1/cüzdan/debit
Başlıklar: X-Idempotency-Key: debit_pi_001, X-Trace-Id: tr_a1b2
{
"account_id":"acc_42," "miktar ": {"minor _ units ": 5000," para birimi":" EUR"}, "sebep ":" ödeme", "reference_id":"po_001"
}
^ 200 {"status ": "committed", "entry_id":"e_77"}
(tekrar - aynı cevap)Giden kutusundan olay
Json
{
"event_id":"uuid," "event_type":"wallet. Debit. Taahhütlü ","  " "  "," para birimi ":" EUR ","  " ". 3. 0"
}17) Kontrol listeleri
Platform/Operatör
- Dengede doğru - bir Defter; Geçici çözümler yok.
- 'Idempotency-Key'ile tüm yazma işlemleri; Anahtar yanıt depolanır.
- Tüm etki alanı kayıtlarına giden kutu/CDC, DLQ ve yönetilen yeniden oynatma.
- Öncelik kuyrukları, geri basınç, bozulma modları.
- Bölüm anahtarları iş anahtarları tarafından seçilir; Tüketiciler idempotent.
- SLO gösterge panoları, OpenTelemetry, WORM denetimi.
- Düzenli DR/xaoc egzersizleri, sözleşme/yük testleri.
- Veri ikameti, şifreleme, Vault/HSM, anahtar rotasyonu.
Sağlayıcılar/Entegrasyonlar
- Trace-Id/Idempotency-Key gönderiliyor, yeniden dağıtıma hazır.
- Webhook'lar imzalanır ve tekilleştirilir.
- Şemaların/sözleşmelerin versiyonları gözlemlenir (semver, amortisman).
18) Kırmızı bayraklar (anti-desenler)
Bakiye, Ledger'da bir komut olmadan webhook ile değişir.
Idempotency eksikliği - çift yazma/kredi.
Giden kutusu/CDC'yi atlayarak olayları yayınlamak.
Geri basıncı olmayan monolit: yoğun trafik her şeyi aşağı çeker.
OLTP ve raporları karıştırma: BI savaş veritabanını vurur.
DLQ/tekrar oynatma yokluğu; Hataların "sessiz" yutulması.
Bölgesel PII/para izolasyonu yok; Birden fazla marka arasında paylaşılan anahtarlar.
Veritabanındaki bakiyelerin/durumların manuel düzenlemeleri.
19) Alt satır
Günde milyonlarca işlemin güvenli bir şekilde işlenmesi, değişmezlerle ve disiplinle ilgilidir: tek bir doğruluk kaynağı, idempotent komutlar, sagalar ve çıkış kutusu/CDC, kuyruklarda sipariş ve deadup, gözlemlenebilirlik ve yönetilen bozulma. Erişim yetkileri, DR uygulamaları ve düzenli alıştırmalar ekleyin - ve paranın hızlı ve sadece bir kez hareket ettiği, olayların kaybolmadığı ve trafik büyümesi ve aksaklıklarının sürpriz değil yönetilebilir riskler haline geldiği bir sistem edinin.
