Önbellek Bileşeni
Önbellek Bileşeni Kavramı
Yanıt süresini azaltır
Backend yükünü hafifletir
Backend hatalarına karşı koruma
Backend kaynak kullanımını azaltır
Önbellek Bileşeni Türleri
Local Cache
Konfigürasyon Cache
- API Proxy konfigürasyonları
- Policy tanımları
- Routing bilgileri
- Metadata bilgileri
Token Cache
- OAuth2/JWT token'ları
- Token validation sonuçları
- User session bilgileri
Response Cache
- API response'ları
- Cache key bazlı saklama
- TTL (Time To Live) yönetimi
- Local veya distributed olarak yapılandırılabilir
Response cache local olarak yapılandırıldığında Hazelcast kullanılmaz. Distributed olarak yapılandırıldığında Hazelcast kullanılır ve tüm API Gateway instance'ları arasında paylaşılır.
Distributed Cache (Hazelcast)
Distributed cache altyapısı
- Multi-node support
- High availability
- Yönetim ve izleme Apinizer'da yapılabilir
- Gateway pod'larından bağımsız namespace'lerde çalışabilir
Throttling, quota gibi veriler distributed tutulur
- Throttling verileri
- Quota verileri
- Paylaşılan durum bilgileri
- Cross-namespace erişim desteği
Response cache hem local hem distributed olabilir
- Local response cache: Hazelcast kullanılmaz
- Distributed response cache: Hazelcast kullanılır
Otomatik ve event-based invalidation
- Otomatik invalidation
- Event-based invalidation
- Pattern-based invalidation
Hazelcast, Apinizer tarafından yönetilir ve izlenebilir. Distributed cache kullanıldığında, throttling ve quota gibi veriler tüm API Gateway instance'ları arasında paylaşılır.
Namespace Bağımsızlığı:
Cache Server pod'ları artık Gateway pod'larından farklı Kubernetes namespace'lerinde çalışabilir. Gateway pod'ları diğer namespace'lerdeki cache sunucularına Kubernetes service discovery kullanarak erişebilir (örn: http://cache-http-service.apinizer-cache.svc.cluster.local:8090). Bu, daha esnek bir altyapı yönetimi sağlar ve Gateway ve Cache iş yüklerini ayırmanıza olanak tanır. Cache Server yapılandırması için Dağıtık Cache sayfasına bakın.
Önbellek Stratejileri
- Cache'de ara
- Bulunamazsa backend'den al
- Cache'e kaydet
- İstemciye döndür
- Backend'e yaz
- Cache'e yaz
- İstemciye döndür
- Cache'e yaz
- İstemciye döndür
- Asenkron olarak backend'e yaz
Önbellek Yapılandırması
Cache Key Stratejisi
URL path'i cache key olarak kullanılır
Örnek: GET /api/v1/products → Cache Key: /api/v1/products
URL ve query parametreleri cache key'e dahil edilir
Örnek: GET /api/v1/products?category=electronics → Cache Key: /api/v1/products?category=electronics
URL ve belirli header değerleri cache key'e dahil edilir
Cache Key: URL + Header değerleri
Özel cache key oluşturma
Kullanıcı tanımlı cache key stratejileri kullanılabilir.
Cache TTL (Time To Live)
Sabit TTL
- Belirli bir süre için cache'de tutma
- Örnek: 5 dakika, 1 saat
Dinamik TTL
- Response header'larına göre TTL
- Cache-Control header'ı
- Expires header'ı
Conditional TTL
- Koşullu TTL
- Response status code'a göre
- Content type'a göre
Önbellek Invalidation
- Zaman aşımı ile otomatik silme
- Manuel cache temizleme
- API üzerinden invalidation
- Event bazlı invalidation
- Webhook ile invalidation
- Pattern bazlı invalidation
- Wildcard invalidation
Önbellek Kullanım Senaryoları
- İlk istek: Backend'den al, cache'e kaydet
- Sonraki istekler: Cache'den döndür
- TTL sonrası: Cache'i temizle, tekrar backend'den al
- Token doğrulama: Token cache'de var mı kontrol et
- Cache'de varsa: Doğrulama yapmadan döndür
- Cache'de yoksa: Identity Manager'dan doğrula, cache'e kaydet
- API Proxy konfigürasyonu: Management API'den al
- Local cache'e kaydet
- Konfigürasyon değişikliğinde: Cache'i invalidate et
- Throttling ve quota verileri distributed cache'de tutulur
- Tüm API Gateway instance'ları arasında paylaşılır (farklı namespace'lerde olsalar bile)
- Hazelcast üzerinden senkronize edilir
- Gateway pod'ları farklı namespace'lerdeki cache sunucularına Kubernetes service discovery ile erişir
Önbellek Best Practices
- Uygun TTL değerleri seçin
- Çok kısa TTL performansı düşürür
- Çok uzun TTL stale data riski
- Anlamlı cache key'ler
- Collision'ları önleyin
- Pattern-based invalidation
- Cache size limitleri
- Eviction policies
- Memory monitoring
- Cache hatalarında fallback
- Backend'e yönlendirme
- Error logging