Oyun Kitabı
Ödeme Kurtarma Pipeline ve Runbook (Odeme Kurtarma Pipeline Ve Runbook)
Otomasyon önce: reconciliation worker ve recovery pipeline. Uniqueness duvarları replay'i engellediğinde kanıta dayalı insan runbook'ları devreye girer.
Dağıtık Ödeme Motoru (Distributed Payment Engine)
Bolum 19 / 22
Capture ile complete arasındaki boşluğu kapatan dağıtık ödeme mimarisi serisi.
Önceki bölümde payment id ile korelasyon, step event log ve deferred finalize metriklerinin operasyonu nasıl beslediğini gördük. Bu bölüm, o görünürlüğün üzerine inşa edilen recovery pipeline'ı ele alıyor: bir ödeme takıldığında sistem önce kendi kendine ne yapabilir, ne zaman insan devreye girer?
İyi bir recovery pipeline'ın ilkesi basittir: otomasyon önce. Reconciliation worker, stuck watcher, retry worker — bunlar insan müdahalesi gerektirmeden çoğu sürüklenmeyi temizler. İnsan runbook'ları yalnızca otomasyonun uniqueness duvarlarına veya belirsiz kanıta çarptığı anlarda devreye girer.
Ödeme takıldı
→ otomatik: reconciliation scan
→ otomatik: retry with backoff
→ otomatik: PSP status query
→ insan: uniqueness wall / ambiguous evidence
Kavramlar ilk geçtiği yerde
📦 Recovery Pipeline
Takılan veya tutarsız ödemeleri otomatik olarak teşhis edip düzeltmeye çalışan ardışık işlem hattı.
📦 Uniqueness Wall
Veritabanı benzersizlik kısıtının, güvenli replay veya heal girişimini engellediği durum.
📦 Evidence-Driven Runbook
Her adımın hangi kanıta (step log, PSP sorgusu, audit) dayandığını tanımlayan operasyon kılavuzu.
📦 Manual Review Queue
Otomasyonun çözemediği kayıtların biriktiği, görünür bekleme alanı.
Runbook 'ne yapılır' sorusuna cevap verir; evidence-driven runbook 'hangi kanıt olmadan yapılmaz' sorusuna cevap verir.
Otomasyon önce: recovery pipeline katmanları
Recovery pipeline tek bir worker değil, birbirini tamamlayan katmanlardır. Her katman bir öncekinin çözemediğini ele alır; hiçbiri bir sonrakinin işini yapmaya kalkmamalıdır.
Katman 1: Retry worker
→ transient hataları backoff ile tekrar dener
Katman 2: Stuck watcher
→ lease süresi dolmuş, Processing'de kalan kayıtları sıfırlar
Katman 3: Reconciliation sweeper
→ aged FinalizePending / Expired kayıtları PSP ile karşılaştırır
Katman 4: Manual review queue
→ otomasyonun çözemediği kayıtlar
Katman 1-3 tamamen otomatiktir ve günün büyük bölümünde yeterlidir. Katman 4, pipeline'ın başarısızlığı değil, sınırının görünür olmasıdır.
Uniqueness duvarı: otomasyonun durduğu yer
Bir reconciliation worker PSP'den 'Succeeded' görür ve local kaydı Captured yapmaya çalışır — ama veritabanında aynı idempotency key ile zaten bir Captured satırı vardır. Insert veya update başarısız olur; otomasyon durur.
Reconciliation: payment #5521 → PSP says Captured
→ local UPDATE attempt
→ UNIQUE constraint violation on idempotency_key
→ otomasyon durur
→ manual review queue'ya yaz
Bu bir bug değil, koruma mekanizmasıdır. Uniqueness duvarı, çift finalize'ı engeller — ama aynı zamanda otomasyonun 'sorunu çözdüm' demesini de engeller. İşte tam bu noktada kanıta dayalı runbook devreye girer.
Kanıta dayalı runbook: refleks değil, prosedür
İnsan müdahalesi gerektiğinde runbook şu sırayı izler:
1. Step event log'u oku (payment id ile)
2. PSP status query yap (provider gateway üzerinden)
3. Local kayıtları karşılaştır (payment, order, idempotency)
4. Kanıt tablosunu doldur
5. Karar: heal / refund / no-action
6. Audit kaydı yaz
Runbook'taki her karar noktası bir kanıt gerektirir. 'PSP Captured diyor ama local Expired' → heal adayı. 'PSP Not Found, local Processing' → refund adayı değil, bekle veya escalate. 'İki Captured satırı, farklı idempotency key' → çift charge, refund birini.
Manual review queue: görünür bekleme
Otomasyonun çözemediği kayıtlar sessizce kaybolmamalıdır. Manual review queue, bu kayıtların biriktiği, yaşlandığı ve önceliklendirildiği görünür bir alandır.
| Alan | Amaç |
|---|---|
| paymentId | Korelasyon |
| stuckReason | UniquenessWall / AmbiguousEvidence / PSPUnknown |
| evidenceSummary | Step log + PSP query özeti |
| age | Ne kadar süredir bekliyor |
| priority | Tutar, müşteri şikayeti, SLA |
Queue'daki her kayıt bir runbook adımıyla eşleşmelidir; operatör 'ne yapacağım' sorusunu queue'dan okuyabilmelidir.
Runbook örneği: uniqueness wall sonrası
Durum: reconciliation Captured yazamadı — idempotency_key conflict
Kanıt toplama:
□ Step log: FinalizeAttempted iki kez mi?
□ Mevcut Captured satırı hangi webhook'tan geldi?
□ PSP query: kaç charge var bu correlation id ile?
Karar ağacı:
→ Tek PSP charge, local çift satır → eski satırı audit ile kapat
→ İki PSP charge → birini refund et (runbook: duplicate charge)
→ PSP charge yok → local Captured yanlış → escalate
Sık karıştırılan ayrımlar
❌ Manual review queue = otomasyon başarısız oldu
✓ Manual review queue = otomasyonun sınırı görünür ve güvenli
❌ Runbook = deneyimli mühendisin sezgisi
✓ Runbook = kanıt tabanlı, tekrarlanabilir prosedür
❌ Uniqueness wall kaldırılmalı
✓ Uniqueness wall korunmalı; runbook duvarın ötesini yönetir
Otomasyon vs insan müdahalesi
| Durum | Otomasyon | İnsan runbook |
|---|---|---|
| Transient timeout | Retry worker | Gerekmez |
| Aged FinalizePending | Reconciliation | Gerekmez |
| Idempotency conflict | Durur, queue'ya yazar | Kanıt topla, karar ver |
| Ambiguous PSP response | Durur, queue'ya yazar | Escalate veya bekle |
Recovery pipeline kontrol listesi
- Retry, stuck watcher ve reconciliation katmanları ayrı mı ve sıralı mı çalışıyor?
- Uniqueness constraint ihlali otomatik olarak manual review queue'ya yazılıyor mu?
- Her runbook adımı hangi kanıtı gerektirdiğini açıkça tanımlıyor mu?
- Manual review queue'daki kayıtlar yaş ve öncelik ile sıralanıyor mu?
- İnsan müdahalesi sonrası audit kaydı ve step event log girişi zorunlu mu?
- Otomasyonun çözdüğü oran metrik olarak izleniyor mu (automation_resolution_rate)?
Bu yazıdan aklında ne kalmalı
- Recovery pipeline otomasyon önce prensibiyle katmanlıdır; insan son çaredir.
- Uniqueness duvarı otomasyonu durdurur — bu koruma, bug değildir.
- Runbook kanıta dayalı olmalı; refleks aksiyon tehlikelidir.
- Manual review queue, çözülemeyen kayıtların sessizce kaybolmasını engeller.
İyi bir recovery pipeline, insan müdahalesini sıfıra indirmeye çalışmaz — insan müdahalesini doğru an, doğru kanıt ve doğru prosedürle sınırlar.
Bir sonraki bölümde messaging katmanına iniyoruz: exactly-once bir yalan; effectively-once iş sonucu defense in depth ile nasıl elde edilir?
SSS
Sık sorulan sorular
Recovery Pipeline nedir?
Takılan veya tutarsız ödemeleri otomatik olarak teşhis edip düzeltmeye çalışan ardışık işlem hattı.
Uniqueness Wall nedir?
Veritabanı benzersizlik kısıtının, güvenli replay veya heal girişimini engellediği durum.
"Manual review queue = otomasyon başarısız oldu" doğru mu?
Manual review queue = otomasyonun sınırı görünür ve güvenli
Bu bölüm neyi sabitler?
İyi bir recovery pipeline'ın ilkesi basittir: **otomasyon önce**. Reconciliation worker, stuck watcher, retry worker — bunlar insan müdahalesi gerektirmeden çoğu sürüklenmeyi temizler. İnsan runbook'ları yalnızca otomasyonun uniqueness duvarlarına veya belirsiz kanıta çarptığı anlarda devreye girer. Recovery pipeline otomasyon önce prensibiyle katmanlıdır; insan son çaredir. Önceki bölümde payment id ile korelasyon, step event log ve deferred finalize metriklerinin operasyonu nasıl beslediğini gördük. Bu bölüm, o görünürlüğün üzerine inşa edilen recovery pipeline'ı ele alıyor: bir ödeme takıldığında sistem önce kendi kendine ne yapabilir, ne zaman insan devreye girer?
Ogrenilen Muhendislik Prensipleri
- Recovery pipeline otomasyon önce prensibiyle katmanlı çalışır.
- Uniqueness duvarı koruma mekanizmasıdır; runbook duvarın ötesini yönetir.
- Runbook kanıta dayalı olmalı; refleks aksiyon tehlikelidir.
Okumaya devam et
Okumaya devam et
Seride sonraki yazi
Ödemelerde Effectively-Once İşleme
Exactly-once messaging bir yalandır. Defense in depth ile idempotency, dedup, outbox ve reconciliation birleşince effectively-once iş sonucu nasıl elde…
Seride sonraki yazi
Ödeme Gözlemlenebilirlik ve Korelasyon
Her log, metrik ve trace payment id ile nasıl korele edilir? Adım adım event log ve deferred finalize metrikleri operasyonu nasıl kurtarır?
Ayni seriden
Production Ödeme Motoru Tasarlamak
22 bölümlük serinin sentezi: checkout orchestrator ve provider gateway ile production ödeme motoru için mimari checklist.