Request-Response Model (İstek-Yanıt Modeli)
Request-response modeli, backend sistemlerinde gecikme, hata yönetimi, veri akışı ve kullanıcı deneyiminin en temel izleme birimidir. İyi tasarlanmış bir istek yolu; timeout, retry, idempotency, auth ve observability kararlarını birlikte taşır.
Hızlı Karar
| Durum | Yaklaşım | Dikkat |
|---|---|---|
| Kullanıcı anında cevap bekliyor | Senkron HTTP/gRPC | Timeout ve hızlı hata dönüşü şart |
| İş uzun sürüyor veya tekrar denenebilir | Async queue/event | Idempotency ve durum takibi gerekir |
| Veri başka servise bağlı | Gateway veya service call | Zincir latency'si ve partial failure büyür |
| Okuma sık, veri az değişiyor | Cache | Staleness ve invalidation tanımlanmalı |
Üretim Kontrol Listesi
- Problem: İstek kritik path'te mi, arka planda mı, yoksa kullanıcı beklerken mi çalışıyor?
- Çözüm: Controller, service, repository, dış çağrı ve response mapping sınırları net mi?
- Trade-off: Senkron akış basit debug edilir; asenkron akış daha dayanıklı ama daha zor gözlemlenir.
- Hata durumu: Timeout, retry, duplicate request, partial failure ve validation error davranışı standart olmalı.
- Ölçüm: Request count, p95/p99 latency, error rate, dependency latency ve trace coverage izlenmeli.
- Güvenlik/maliyet: Her istek auth, rate limit ve log maliyeti üretir; hassas veri loglanmamalı.
Spring Boot'ta Request-Response Yaşam Döngüsü
DispatcherServlet
Spring MVC'nin kalbi, gelen HTTP isteklerini ilgili controller'lara yönlendirir.
Handler Mapping
URL kalıplarını (@RequestMapping, @GetMapping) controller metodlarına eşler.
Controller Katmanı
@RestControllerile RESTful uç noktalar@RequestBody/@ResponseBodyile JSON serialization/deserialization
Servis Katmanı
@Serviceannotation ile iş mantığı@Transactionalile transaction yönetimi
Repository Katmanı
- Spring Data JPA ile ORM eşleme
@Repositoryile veri erişim katmanı
Mikroservislerde Servisler Arası İletişim
Senkron İletişim
- OpenFeign client ile service-to-service HTTP çağrıları
- Yük dengeleme için Ribbon/Spring Cloud LoadBalancer
Asenkron İletişim
- Spring Cloud Stream ile mesaj odaklı mimari
- RabbitMQ/Apache Kafka entegrasyonu
Olay Odaklı Mimari
- Domain olayları ile gevşek bağlantı
- Eventual consistency için event sourcing kalıbı
Timeout ve Yeniden Deneme
@Retryableannotation ile otomatik yeniden deneme- Circuit breaker kalıbı ile hata toleransı
Performans Değerlendirmeleri
Bağlantı Havuzu
- HikariCP ile veritabanı bağlantı havuzu
- Apache HttpClient ile HTTP bağlantı havuzu
Önbellekleme
- Spring Cache abstraction (
@Cacheable) ile Redis/Hazelcast entegrasyonu
Asenkron İşleme
@Asyncannotation ile engellenmeyen işlemler- CompletableFuture ile asenkron programlama
API Gateway Kalıbı
Spring Cloud Gateway
- Rota tanımları
- Koşullar
- Filtreler
Hız Sınırlama
- Redis tabanlı hız sınırlama
- Token bucket algoritması
Circuit Breaking
- Resilience4j entegrasyonu
- Fallback mekanizmaları
İstek/Yanıt Dönüşümü
- Header manipülasyonu
- Body dönüşümü
Güvenlik
- JWT doğrulama
- OAuth2 entegrasyonu
- API anahtarı yönetimi
Yük Dengeleme Stratejileri
İstemci Tarafı Yük Dengeleme
- Spring Cloud LoadBalancer
- Ribbon
Sunucu Tarafı Yük Dengeleme
- Nginx
- HAProxy
- AWS ALB
Sağlık Kontrolleri
- Spring Boot Actuator
- Özel sağlık göstergeleri
Servis Keşfi Entegrasyonu
- Eureka
- Consul
- Kubernetes servis keşfi
İstek Yaşam Döngüsü Örneği
Performans Optimizasyonu
İstek Optimizasyonu
- Keep-alive bağlantıları
- HTTP/2 multiplexing
- İstek gruplandırma
- Sıkıştırma (gzip)
Yanıt Optimizasyonu
- Yanıt önbellekleme
- Sayfalama
- Alan filtreleme
- Veri sıkıştırma
Hata Yönetimi
- Circuit breaker kalıbı
- Yeniden deneme mekanizmaları
- Zarif bozulma
- Fallback yanıtları
İzleme ve Gözlemlenebilirlik
İstek İzleme
- Dağıtık izleme
- Korelasyon ID'leri
- İstek zamanlaması
- Hata takibi
Metrik Toplama
- İstek sayısı
- Yanıt süresi
- Hata oranı
- İş hacmi
Günlükleme Stratejisi
- Yapılandırılmış günlükleme
- Günlük toplama
- İstek/yanıt günlükleme
- Güvenlik olayları
