Kurumsal Seviyede Finansal İşlem Altyapısı(Bu proje Rasyonet bünyesinde staj yaparken geliştirdiğim projenin ilkidir.)
Race Condition Koruması · Composite Index Optimizasyonu · Tam Gözlemlenebilirlik (Full Observability)
Money Transfer Center, para yatırma, çekme ve hesaplar arası transfer işlemlerini yöneten, kurumsal (enterprise) seviyede .NET backend projesidir. Sistem;
- Aynı anda gelen isteklerde paranın asla eksiye düşmemesini garanti eden Concurrency kilitleri,
- Milyonlarca kayıt içinde sorguları milisaniyeler içinde sonuçlandıran B-Tree Composite Indexleri,
- Sistemi gerçek zamanlı izleyen Grafana + Loki + Prometheus + Jaeger gözlemlenebilirlik kulesi
ile donatılmıştır.
Proje, bağımlılıkları sıkı bir şekilde yöneten Clean Architecture prensibine göre tasarlanmıştır. Her katman yalnızca bir iç katmanı tanır ve dışa olan bağımlılık yoktur.
Sistemi aşırı yüklenme ve DDoS saldırılarından koruyan iki katmanlı rate limiting mimarisi:
Akıllı IP Ban Mekanizması: Rate limit'i 10 kez aşan bir IP adresi otomatik olarak 24 saat yasaklanır ve bu olay Critical seviyesinde loglanır.
Dış servis (TCMB Döviz API) çağrılarındaki geçici hataları otomatik olarak iyileştiren üç katmanlı dayanıklılık pipeline'ı:
- Retry: 3 deneme, katlanarak artan süre (2s → 4s → 8s) + Jitter
- Timeout: Tek istek 10 saniyeyi geçerse iptal
- Circuit Breaker: Son 30 saniyede %50 hata oranı → 30 saniye boyunca şalter indirilir
Ban yiyen IP'lerin gelen her isteği doğrudan 403 Forbidden ile reddedilir. İstek uygulama koduna bile ulaşamaz.
Aynı hesaba aynı anda gelen 10 farklı "100 TL çek" isteğinde paranın eksiye düşmesini (Race Condition) engelleyen çift katmanlı kilit mimarisi:
SemaphoreSlim(1,1): AynıAccountIdiçin sadece 1 istek eş zamanlı çalışır, diğerleri kuyrukta bekler.- EF Core
RowVersion(Optimistic Lock): İlk katmanı aşan senaryolarda (çoklu sunucu) veritabanı seviyesindeHTTP 409 Conflictdöndürür.
Sistemin her milisaniyesi 4 farklı araç tarafından izlenmektedir:
Özel Metrikler (AppMetrics.cs):
rate_limit_rejected_total— Rate limit'e takılan toplam istek sayısıip_banned_total— Banlanan IP sayısıoutbox_processed_total— Başarıyla işlenen outbox mesajlarıoutbox_failed_total— Hatalı outbox mesajları
Veritabanı Şeması (SQL Server)
İşlem geçmişi sorgularında (filtreleme + tarihe göre sıralama) pahalı SQL Sort operasyonlarını ortadan kaldırmak için bileşik indexler kullanılmıştır:
IX_Transactions_SenderAccountId_CreatedAt → "Gönderdiğim işlemler" sorgusunu 100x hızlandırır
IX_Transactions_ReceiverAccountId_CreatedAt → "Aldığım işlemler" sorgusunu 100x hızlandırır
Proje hem domain iş kurallarını hem uygulama servislerini hem de altyapıyı doğrulayan kapsamlı bir test suite'ine sahiptir:
Tests/
├── MoneyTransferCenter.UnitTests/
│ ├── Domain/
│ │ ├── AccountTests.cs → Hesap oluşturma, para yatırma/çekme domain kuralları
│ │ └── TransactionTests.cs → Transfer iş kuralları (negatif tutar, öz transfer vb.)
│ └── Application/
│ ├── AccountServiceTests.cs → Hesap servis iş akışları (mock ile)
│ ├── AuthServiceTests.cs → Kimlik doğrulama senaryoları
│ └── TransactionServiceTests.cs → Concurrency ve transfer senaryoları
│
└── MoneyTransferCenter.IntegrationTests/
└── Infrastructure/
└── AccountRepositoryTests.cs → Gerçek veritabanı ile CRUD doğrulaması
Tek ön koşul: Bilgisayarınızda Docker Desktop kurulu ve çalışıyor olmalıdır.
# 1. Projeyi klonlayın git clone <repo-url> # 2. Proje dizinine gidin cd MoneyTransferCenter # 3. Tüm sistemi tek komutla ayağa kaldırın docker compose up -d --build
Sistem başlatıldıktan sonra tüm servisler hazırdır:
Not: Uygulama başlarken
context.Database.Migrate()ile tüm migration'lar otomatik uygulanır. ManuelUpdate-Databasegerekmez.