
Kurumsal B2B platformlarında saniyede binlerce eşzamanlı işlem (TPS) gerçekleşirken, veri tabanı gecikmelerini tek haneli milisaniyelerde tutmak mimari bir zorunluluktur. Digital HAT mühendislik ekibi olarak DH Revora ve büyük ölçekli altyapı projelerimizde uyguladığımız .NET 9, EF Core ve PostgreSQL performans optimizasyonu stratejilerini bu makalede paylaşıyoruz.
1. CQRS (Command Query Responsibility Segregation) ile Yük Ayrıştırma
Geleneksel CRUD mimarilerinde aynı veri modeli hem karmaşık raporlama sorguları hem de yüksek hızlı işlem (transaction) yazımları için kullanılır. Bu durum veri tabanında satır kilitlemelerine (row-lock) ve darboğazlara yol açar. MediatR kütüphanesi üzerine inşa ettiğimiz CQRS boru hattı sayesinde:
- Yazma İşlemleri (Commands): Yalnızca gerekli alanları güncelleyen, sıkı validasyonlardan geçen ve atomik Unit of Work desenini çalıştıran optimize işlemlerdir.
- Okuma İşlemleri (Queries): Entity Framework Change Tracker mekanizmasını tamamen devre dışı bırakan
AsNoTracking()ve özel DTO projeksiyonları (Select(x => new Dto(...))) ile bellekte sıfır yük oluşturur.
2. PostgreSQL ve Npgsql Bağlantı Havuzu (Connection Pooling) Optimizasyonu
Yeni bir TCP el sıkışması ve SSL anlaşması her istek için 30-50 milisaniye ek yük getirebilir. .NET 9'un Npgsql 9 sürücüsüyle birleştiğinde sunduğu gelişmiş havuzlama parametreleri bu süreyi 0.5 milisaniyenin altına indirir:
Host=localhost;Port=5432;Database=dh_core;Pooling=true;Minimum Pool Size=20;Maximum Pool Size=120;Connection Idle Lifetime=30;Multiplexing=true;
Özellikle Multiplexing özelliği, birden fazla komutun aynı fiziksel bağlantı üzerinden eşzamanlı olarak kuyruklanıp işlenmesini sağlayarak yüksek trafik anlarında soket tükenmesini (socket exhaustion) önler.
3. İki Kademeli (Hybrid) Önbellekleme Mimarisi
Yalnızca Redis kullanmak her veri erişiminde ağ (network) üzerinden veri çekmeyi gerektirir. Digital HAT altyapısında MemoryCache (L1) + Redis Dağıtık Önbellek (L2) hibrit modeli uygulanır:
- L1 (In-Memory): Mikrosaniyeler mertebesinde erişim sunan, sunucunun yerel RAM'inde tutulan statik parametreler ve yetki listeleri.
- L2 (Redis Cluster): Çoklu sunucu düğümleri arasında senkronize çalışan, otomatik geçersiz kılma (invalidation) mekanizmalı merkezi önbellek.
Mühendislik Çıkarımı
Doğru indeksleme, bileşik indeksler (composite indexes) ve gereksiz Include() çağrılarından kaçınmak, veri tabanı sunucusunun CPU tüketimini %70 azaltarak aynı donanım üzerinde 10 kat daha fazla istemciye hizmet verilmesini mümkün kılar.