HTTP cache teoride kolaydır: Cache-Control, ETag ve süre değerleri doğruysa istemci veya ara katman aynı cevabı tekrar kullanır. Production ortamında ise uygulamalar çoğu zaman bu başlıkları eksik, yanlış veya aşırı korumacı gönderir. Sonuç olarak cache'lenebilecek içerikler kurum servisine tekrar tekrar gider.
Statik içeriklerde bile küçük URL farkları cache verimini düşürür. Aynı ürün görseli veya katalog sayfası, takip parametreleri yüzünden farklı nesne gibi davranabilir. Host, query string, istemci header'ı veya yanlış Cache-Control başlığı cache hit oranını gereksiz yere azaltır.
Dinamik içerikte problem daha büyüktür. Aynı path mobil ve masaüstü için farklı cevap döndürebilir; ülkeye göre fiyat değişebilir; tenant'a göre aynı endpoint farklı veri üretebilir. Cache key bu bağlamı taşımazsa yanlış içerik dönebilir. Çok fazla header cache key'e eklenirse bu kez cache neredeyse hiç çalışmaz.
Harici cache veya CDN çözümleri internet edge trafiğinde faydalıdır; fakat kurum içi, on-prem, private API ve sovereign cloud trafiğinde her zaman uygun değildir. ADC seviyesinde cache yapmak ise çoğu zaman konfigürasyon dosyası, özel kural dili veya ayrı ürün bilgisi gerektirir.
TR7 Yanıt Önbellekleme, cache profilini, koşullu cache kurallarını, dinamik cache key'lerini ve standart override seçeneklerini tek vService yönetim modeli altında sunar.
TR7, cache davranışını profil, koşul, dinamik anahtar ve kontrollü override katmanlarıyla yönetir.
Cache profili; ad, boyut, süre, ETag ve debug başlığı gibi ayarları tek yerde toplar. Aynı profil birden fazla vService üzerinde kullanılabilir. Her servis kendi cache sınırlarıyla yönetilir.
Her cache kuralı FX koşul motoruyla path, method, header, cookie veya diğer değişkenlere bağlanabilir. Böylece aynı kurum servisinde public katalog cache'lenirken kullanıcı sepeti dışarıda bırakılır. Cache kararı kod değişmeden ADC katmanında verilir.
Cache anahtarına ülke, cihaz tipi, tenant ID, kullanıcı segmenti veya özel header gibi değişkenler eklenebilir. Aynı URL farklı bağlama göre ayrı cache slot'larına ayrılır. Bu, cache hızını korurken içerik güvenliğini güçlendirir.
Host, query string, request header ve response header kontrolleri gerektiğinde bilinçli şekilde yok sayılabilir. Bu sayede yanlış yapılandırılmış kurum servisleri veya takip parametreleri cache hit oranını düşürmez. Operatör hangi standardı ne zaman aşacağını açıkça belirler.
Yanıt Önbellekleme, cache profilinden dinamik anahtara kadar tüm davranışı vService seviyesinde yapılandırılabilir hale getirir.
Her cache profili ad, maksimum boyut ve timeout bilgisiyle tanımlanır. Boyut sınırı servis başına cache kullanımını kontrol altında tutar. Timeout saniye, dakika veya saat seviyesinde ayarlanabilir. Aynı profil farklı vService'lere uygulanarak operasyon tekrarı azaltılır.
TR7, cache davranışını debug etmek için yanıt başlığı ekleyebilir. Geliştirici veya operatör tarayıcı Network ekranından yanıtın cache'den mi kurum servisinden mi geldiğini görebilir. Ek log aracı gerektirmeden hızlı doğrulama yapılır. Bu, devreye alma ve tuning sürecini hızlandırır.
Cache profili içinde birden fazla kural tanımlanabilir. Her kural path, method, header, cookie veya FX koşullarıyla tetiklenir. `/assets/*` uzun süre cache'lenirken `/api/cart` cache dışı bırakılabilir. Aynı vService içinde farklı cache davranışları tek panelden yönetilir.
Kural bazında ETag etkinleştirilebilir. İstemci aynı nesneyi tekrar istediğinde, içerik değişmediyse tam gövde yerine doğrulama yanıtı alabilir. Bu bant genişliği tüketimini azaltır. Özellikle statik asset ve nadir değişen API yanıtlarında etkilidir.
Dinamik önbellekleme açıkken cache anahtarına özel değişkenler eklenebilir. Ülke, cihaz tipi, tenant ID, A/B test grubu veya JWT içinden çıkarılan değer cache key parçası olabilir. Aynı URL farklı bağlamlarda güvenli şekilde ayrışır. Bu, modern API ve SaaS senaryolarında cache'i kullanılabilir hale getirir.
Aynı kurum servisi birden fazla domain altında aynı içeriği sunuyorsa Host bilgisini cache key'den çıkarmak mümkündür. Böylece `a.example` ve `b.example` gibi domainler aynı nesneyi paylaşabilir. Cache duplikasyonu azalır. Bu seçenek yalnızca içerik gerçekten ortaksa kullanılmalıdır.
`utm_source`, kampanya kodları veya analitik parametreleri aynı içeriği farklı URL gibi gösterebilir. Query ignore açıkken bu parametreler cache key'e dahil edilmez. Böylece aynı sayfanın takip parametreli versiyonları kurum servisine tekrar tekrar gitmez. Public içeriklerde hit oranı belirgin artar.
Bazı istemciler veya botlar her isteğe cache'i devre dışı bırakmaya çalışan header'lar ekleyebilir. Request check ignore ile bu davranış bilinçli şekilde yok sayılabilir. Statik içerik ve public API yanıtlarında kurum servisi gereksiz yükten korunur. Güvenlik hassas endpoint'lerde bu ayar dikkatle kullanılmalıdır.
Kurum servisi yanlışlıkla `no-store` veya aşırı korumacı cache başlıkları gönderebilir. Response check ignore ile operatör bu başlıkları bilinçli şekilde aşabilir. Böylece uygulama kodu değişmeden cache faydası alınır. Bu seçenek yalnızca deterministik ve güvenli yanıtlar için kullanılmalıdır.
Standart HTTP cache davranışı çoğunlukla GET ve HEAD yanıtlarına odaklanır. TR7, operatör isterse POST gibi methodların yanıtlarını da cache davranışına dahil edebilir. Bu özellikle GraphQL sorgu isteklerinin POST üzerinden geldiği yapılarda değerlidir. Cache key'e body hash veya ilgili FX değişkenleri eklenerek güvenli ayrım sağlanabilir.
Cache çalışma zamanı belleğinde tutulur. Konfigürasyon değişiklikleri soft-reload modeliyle uygulanır; runtime invalidation endpoint iddiası yoktur. Cache profilini veya kuralını değiştirmek ilgili cache davranışını yeniler. Cihaz yeniden başladığında cache tekrar dolmaya başlar.
Cache boyutu dolduğunda en az kullanılan veya eskimiş nesneler çıkarılır. Operatör her nesneyi manuel yönetmek zorunda kalmaz. Boyut sınırı, bir vService'in cache kullanımının diğer servisleri etkilemesini engeller. Büyük asset katalogları için profil boyutu ayrıca artırılabilir.
Yanıt Önbellekleme; cache süresi, nesne boyutu, key tasarımı, invalidation modeli ve güvenlik sınırlarıyla birlikte planlanmalıdır.
Cache profili için maksimum boyut MB seviyesinde tanımlanır; profil başına en fazla 2048 MB desteklenir. Büyük asset katalogları için daha geniş profil kullanılabilir. Küçük API yanıtları için daha düşük limit yeterlidir.
Çok kısa timeout cache thrash'e neden olur ve cache faydasını azaltır. TR7 cache süresini 10 saniyenin altında tutmayarak gereksiz dol-boş davranışını sınırlar. Süre endpoint karakterine göre ayarlanmalıdır.
Cache key yanlış tasarlanırsa kullanıcıya veya tenant'a özel içerik başka bağlamda dönebilir. Tenant, ülke, cihaz tipi veya kullanıcı segmenti gibi ayrıştırıcılar gerekiyorsa dinamik cache key içine alınmalıdır. Hassas endpoint'ler varsayılan olarak cache dışı bırakılmalıdır.
Cache bellek tabanlıdır; cihaz veya servis yeniden başladığında cache boş başlar. Bu davranış persistent disk cache karmaşıklığını ortadan kaldırır. İlk trafik dalgasında cache yeniden ısınır.
Runtime invalidation endpoint'i iddia edilmez. Cache davranışı profil veya kural düzenleme ve soft-reload akışıyla yönetilir. Tek endpoint'in davranışını değiştirmek için ilgili cache kuralı güncellenir.
Cache profili, timeout, ignore seçenekleri ve dinamik key değişiklikleri audit log'a alınmalıdır. Kim hangi endpoint için cache davranışını değiştirdi görülebilir. Bu özellikle uyumluluk ve olay analizi için önemlidir.
Ürün sayfaları ve katalog API'leri belirli süre cache'e alınır. Ülke bilgisi cache key'e eklenerek fiyat veya stok farkı olan pazarlarda doğru içerik döner.
Haber, duyuru veya public içerik endpoint'leri birkaç dakika cache'lenebilir. Query ignore ile takip parametreleri cache hit oranını düşürmez.
Tenant ID veya özel header cache key'e eklenir. Aynı path farklı tenant'larda güvenli şekilde ayrı cache slot'larına gider.
GraphQL sorguları POST ile gelse bile deterministik sorgular cache'e alınabilir. Body hash veya ilgili FX değişkenleri cache key'e eklenerek yanlış yanıt riski azaltılır.
CSS, JS, görsel ve font dosyaları uzun timeout ile cache'lenir. ETag açıkken istemciler değişmeyen içerik için tam gövde indirmez.
User-Agent ailesi veya cihaz sınıfı cache key'e eklenir. Aynı URL mobil ve masaüstü için farklı cache slot'larında tutulur.
Cache profili, koşullu kural, dinamik key ve RFC-uyumlu override seçenekleriyle yanıt önbellekleme. Kendi servislerinizle canlı bir kurulumda gezdirelim.