Multi-Provider OrchestrationPayment Heavy ArchitectureFraud Detection
Case Study: Kurumsal Payment Gateway
Kapsam: Backend + Altyapı
Kurumsal Ödeme Gateway Orchestration Sistemi
Stripe, Iyzico ve Adyen'i tek akıllı routing katmanı altında birleştiren; provider
başarısızlıklarında otomatik failover, gerçek zamanlı fraud kararı ve idempotency garantisi sunan
payment altyapısı.
Büyük bir e-ticaret holding, Avrupa ve Türkiye pazarlarında farklı ödeme sağlayıcılarıyla çalışmak
zorundaydı. Tek provider kullanıldığında %100 kesinti riski, çoklu provider yönetiminde ise operasyonel
karmaşa ve duplicate charge sorunu yaşanıyordu. Tüm sağlayıcıları soyutlayan, fail-safe tasarlanmış bir
orchestration katmanı inşa ettik.
2) İş Hedefleri ve Başarı Kriterleri
Hedefler
Provider kesintilerinde sıfır kullanıcı etkisi
Tüm provider webhook'larını tek standart interface ile yönetmek
Fraud riskini gerçek zamanlı tespit ve bloke etmek
İşlem maliyetini akıllı routing ile optimize etmek
Başarı Kriterleri
Provider failure'da otomatik failover, kullanıcı fark etmez
Aynı ödeme isteği birden fazla kez gelse çift ücretlendirme sıfır
Ödeme İsteğiProvider ScoringCircuit Breaker KontrolÜlke / Para Birimi FiltreProvider SeçimiCharge
Her provider sağlık skoru, başarı oranı, son 5 dakikalık hata sayısı ve işlem maliyetine
göre dinamik olarak sıralanır. Provider yanıt vermezse bir sonrakine geçilir — kullanıcı sadece hafif
bir gecikme fark eder, işlem tamamlanır.
Circuit Breaker Mantığı
5 dakikada 3+ hata → provider devre dışı
30 saniye sonra yarı-açık state: tek deneme
Başarılı → kapalı state, tamamen aktif
Redis'te durum tutulur, tüm instance'lar senkron
Maliyet Optimizasyonu
Her işlem için provider komisyon hesabı runtime'da
Düşük riskli işlemler → en ucuz sağlayıcı
Yüksek değerli → güvenilirlik öncelikli sıralama
%22 toplam işlem maliyeti düşüşü
5) Webhook Güvenliği
Her provider farklı imzalama yöntemi kullanır. Adapter pattern ile hepsi normalize edildi; güvenlik
katmanı tüm provider'larda aynı:
Redis tamamen erişilemez olduğunda sistem hiçbir kritik
fonksiyonu durdurmuyor. Her katman kendi fallback'ini biliyor.
Distributed Lock fallback: Redis SET NX başarısız →
PostgreSQL SELECT FOR UPDATE SKIP LOCKED ile advisory lock. Performans düşer,
doğruluk korunur.
Idempotency fallback: Redis miss → DB idempotency_keys
tablosu, UNIQUE(key) constraint. İki eşzamanlı istek gelirse biri
UniqueConstraintError alır, retry sonucu döner.
Fraud velocity degrade: Redis ZADD erişilemez → mevcut oturumda fraud
check bypass değil, DB'den son 1 saatin kart transaction sayısı sorgulanır (daha yavaş, aynı
karar).
Circuit breaker state: Redis hash erişilemez → her pod kendi in-memory
durumunu tutar. Cluster genelinde senkron bozulur ama lokal circuit breaker korunur. Recover
olunca Redis otomatik heartbeat ile yeniden senkronize edilir.
Rate limit soft-disable: Redis down → rate limiting geçici olarak devre
dışı, log'a WARN: rate_limit_degraded yazılır, PagerDuty P3 alert tetiklenir.
Kötüye kullanım riski kabul edilir, servis kesilmez.
BullMQ persistent mode: Redis cluster down → BullMQ, DB-backed fallback
queue'a geçer. Dunning ve webhook işlemleri gecikmeli ama kayıpsız tamamlanır.
16) Payment Heavy Production Proof
Bu sistem production'da çalıştırılmış, aşağıdaki maddeler
gözlemlenmiş veya test edilmiş davranışlardır.
Idempotency Yaklaşımı
Her işlem isteği X-Idempotency-Key headerı zorunlu kılar
Redis SET NX EX 86400 ile ilk yazma atomik
İlk yazma başarılı → işlem ve sonuç birlikte cache'e alınır
Sonraki aynı key → provider'a hiç gidilmez, cache sonucu döner
Redis down → PostgreSQL unique constraint fallback, race condition yok
Duplicate Webhook Handling
Her webhook event ID normalize edilip Redis'e yazılır
Bu projeye ait kaynak kodlar, müşteri ile imzalanan gizlilik
sözleşmesi (NDA) kapsamında paylaşılamamaktadır. Teknik yapı, mimari kararlar ve
implementasyon detayları hakkında sorularınızı doğrudan iletebilirsiniz; müsait olanı kapsamında
yanıtlayırız.