Ana içeriğe geç

Önbellekleme (Cache)

ipucu

Bu doküman spesifik bir politikanın detaylı kullanımını anlatır. Eğer Apinizer politika yapısını ilk kez kullanıyorsanız veya politikaların genel çalışma prensiplerini öğrenmek istiyorsanız, öncelikle Politika Nedir? sayfasını okumanızı öneririz.

Genel Bakış​

Önbellek politikası, politika zinciri içinde bağımsız önbellek okuma (LOOKUP), yazma (POPULATE) ve silme (INVALIDATE) işlemlerini gerçekleştirir. Bu politika, API Çağrısı politikasının kendi içindeki önbellek mekanizmasından farklı olarak, ne zaman önbelleğe erişileceğini, hangi değerin yazılacağını ve neyin silineceğini politika akışında açıkça kontrol etmenizi sağlar.

Politika; istek (request), yanıt (response) ve hata (error) akışlarının hepsine eklenebilir.

Amacı Nedir?​

  • Sık değişmeyen verileri önbellekte tutarak backend servis yükünü azaltmak.
  • Pahalı hesaplama veya API çağrılarının sonuçlarını saklayarak tekrar yapılmasını önlemek.
  • Politika zinciri içinde değişken değerlerini geçici olarak saklamak.
  • Veri değiştiğinde ilgili önbellek kaydını silerek (INVALIDATE) önbelleği güncel tutmak.

Çalışma Prensibi​

Önbellek Anahtarı​

Üç işlem tipinin hepsi aynı şekilde oluşturulan bir anahtar kullanır:

  • Anahtar Öneki: Anahtarın başına eklenen sabit metin (örn. profile, user-session). Farklı politikaların anahtarlarının çakışmasını önlemek için kullanılır.
  • Anahtar Değişkenleri: Anahtarın parçalarını oluşturan değişken (Variable) listesi. HTTP header, query parametresi, gövde alanı, context değişkeni gibi her türlü değişken kullanılabilir. En fazla 32 değişken eklenebilir.

Anahtar, önek ve değişkenlerin çözümlenmiş değerlerinin sırayla | karakteriyle birleştirilmesiyle oluşur:

<Anahtar Öneki>|<değişken1 değeri>|<değişken2 değeri>|...
uyarı
  • Anahtar Öneki ve Anahtar Değişkenleri'nden en az biri tanımlanmalıdır; ikisi de boşsa politika kaydedilemez.
  • Anahtara proje, ortam veya API Proxy bilgisi otomatik olarak eklenmez. Aynı anahtar farklı API Proxy'ler ve ortamlar arasında paylaşılır. Çakışmayı önlemek için Anahtar Öneki kullanın.
  • Oluşan anahtar 1024 karakteri aşarsa otomatik olarak MD5 özetine dönüştürülür.

Saklama Tipi​

SeçenekAçıklama
Dağıtık (varsayılan)Kayıtlar Apinizer Cache servisinde tutulur ve tüm Gateway pod'ları tarafından paylaşılır.
LokalKayıtlar her Gateway pod'unun kendi belleğinde tutulur; pod'lar arasında paylaşılmaz.

1. LOOKUP (Önbellekten Oku)​

Oluşturulan anahtarla önbellekte kayıt arar ve sonuca göre Hedef Değişken'i günceller. Kaydın bulunamaması bir hata değildir ve akışı durdurmaz. Önbelleğe erişimde hata oluşursa davranış Hata Yönetimi ayarına göre belirlenir.

LOOKUP Sonuç Durumları​

DurumNe zaman oluşurHedef DeğişkenAkış
Bulundu (Hit)Anahtara karşılık bir kayıt varÖnbellekteki değer yazılırDevam eder
Boş Değer BulunduAnahtara karşılık bilinçli olarak saklanmış boş değer var ("Boş Değerleri de Önbelleğe Al" ile yazılmış)Boş değer yazılır — bu da bir bulgudurDevam eder
Bulunamadı (Miss)Anahtara karşılık hiç kayıt yokÖzel değişken: temizlenir (önceki adımlardan kalan değerden arındırılır). Gövde / başlık / parametre: dokunulmaz — miss durumunda mesaj değiştirilmezDevam eder
bilgi

Miss durumunda özel (custom) Hedef Değişken neden temizlenir? Aynı değişken politika zincirinde daha önce bir değer almış olabilir. Arama sonuçsuz kaldığında değişken temizlenmezse, bu eski değer yanlışlıkla "önbellekten gelen sonuç" gibi algılanabilir. Bu nedenle bulunamama durumunda özel Hedef Değişken her zaman boşaltılır; böylece sonraki politikalar "değişken dolu mu?" kontrolünü güvenle yapar.

Gövde, başlık ve parametre hedefleri neden temizlenmez? Bu hedefler mesajın kendisidir. Miss durumunda temizlenmeleri, istek ya da yanıtı backend'e ulaşmadan bozar (örneğin istek gövdesinin silinmesi, JSON yolunda null değerli yeni bir alan oluşması ya da XML düğümünün boşalması). Bu nedenle miss durumunda bu hedefler olduğu gibi bırakılır; yalnızca kayıt bulunduğunda yazılır.

2. POPULATE (Önbelleğe Yaz)​

Kaynak Değişken'in değerini oluşturulan anahtarla önbelleğe yazar.

  • Kaynak değer boşsa yazma atlanır. Boş Değerleri de Önbelleğe Al seçeneği işaretliyse boş değer de yazılır; bu şekilde saklanan değer sonraki aramalarda Bulundu olarak döner. Böylece sonucu boş olduğu bilinen sorgular için backend'e tekrar gidilmez.
  • TTL: Kaydın önbellekte kalacağı süre (saniye). Yeni politikada 3600 olarak gelir; alan boşaltılırsa 60 saniye kullanılır.
  • Kapasite: Önbellek alanının kapasitesi. Yeni politikada 10000 olarak gelir; alan boşaltılırsa 1000 kullanılır. Tüm Önbellek politikaları aynı ortak önbellek alanını kullanır; Lokal saklamada bu alanın kapasitesi, alanı ilk oluşturan politikanın değeriyle belirlenir.
  • Dinamik TTL: Etkinleştirildiğinde TTL, bir değişkenin değerinden hesaplanır (bkz. Dinamik TTL).

3. INVALIDATE (Önbelleği Geçersiz Kıl)​

Oluşturulan anahtara karşılık gelen kaydı önbellekten siler. Örneğin, bir güncelleme işleminden sonra eski kaydı temizlemek için kullanılır. Bu işlem için anahtar dışında ek bir alan yoktur.

Dinamik TTL​

POPULATE işleminde Dinamik TTL Etkin açıldığında, TTL sabit değer yerine Dinamik TTL Değişkeni'nin değerinden hesaplanır. Değişken değerinin nasıl yorumlanacağı Dinamik TTL Kaynağı ile belirlenir:

Dinamik TTL KaynağıDeğerin anlamı
ISO 8601 DateTimeKaydın geçerliliğinin biteceği zaman, ISO 8601 biçiminde
Custom DateTimeKaydın geçerliliğinin biteceği zaman, Özel Tarih Formatı alanında belirtilen biçimde
Epoch SecondsBitiş zamanı, epoch saniye
Epoch MillisecondsBitiş zamanı, epoch milisaniye
Expires-In SecondsŞu andan itibaren geçerlilik süresi, saniye
Expires-In MillisecondsŞu andan itibaren geçerlilik süresi, milisaniye
TTL StringSayı ve birimden oluşan süre ifadesi: s (saniye), m (dakika), h (saat); birim büyük harfle de yazılabilir. Örn. 300s, 5m, 1h

Ek alanlar:

  • JWT Token mı?: Açıldığında değişken değeri bir JWT olarak çözülür ve TTL bilgisi JWT Claim Adı alanında belirtilen claim'den okunur. Claim adı $. ile başlıyorsa JSONPath olarak işlenir.
  • Offset (saniye): Hesaplanan TTL'den çıkarılan süre. Örneğin 30 girilirse kayıt, hesaplanan süreden 30 saniye önce geçersiz olur.
  • Yedek TTL (saniye): Dinamik TTL çözümlenemezse kullanılacak TTL.

TTL şu sırayla belirlenir:

  1. Dinamik TTL başarıyla çözümlenir ve pozitif bir değer verirse bu değer kullanılır.
  2. Dinamik TTL çözümlenir ancak sıfır veya negatif bir değer verirse (örneğin bitiş zamanı geçmişse) kayıt yazılmaz.
  3. Dinamik TTL çözümlenemezse Yedek TTL kullanılır.
  4. Yedek TTL tanımlı değilse TTL alanındaki değer (yeni politikada 3600), o alan boşsa 60 saniye kullanılır.
bilgi

Dinamik TTL etkinken TTL alanı ekranda düzenlenemez.

Hata Yönetimi​

AlanVarsayılanAçıklama
Önbellek Bağlantı Zaman Aşımı (saniye)3Dağıtık önbellek işlemlerinin bağlantı zaman aşımı. Yalnızca Saklama Tipi Dağıtık olduğunda uygulanır.
Önbellek Hatası Durumunda DavranışAkışa Devam EtÖnbellek işlemi sırasında hata oluştuğunda (örneğin önbellek servisine bağlanılamadığında) davranışı belirler. Akışa Devam Et seçilirse akış sürer; Akışı Durdur seçilirse politika hata üretir. INVALIDATE işleminde silme başarısız olursa da bu ayar uygulanır; Lokal saklamada var olmayan bir anahtarı silmek de başarısız sayılır.

Politika Parametrelerini Yapılandırma​

Bu adımda, kullanıcı yeni bir Önbellek politikası oluşturabilir ya da mevcut politika parametrelerini yapılandırarak önbellek işlemlerini tanımlayabilir.

Yeni Önbellek Politikası Oluşturma​

Cache Policy Configuration

Yapılandırma Adımları​

AdımAçıklama / İşlem
Adım 1: Oluşturma Sayfasına GitmeSol menüden Global Politikalar → Önbellek sayfasına gidin ve yeni politika oluşturun. Politika, bir API Proxy'nin akışına doğrudan da eklenebilir.
Adım 2: Genel BilgilerDurum: Aktif/Pasif durumu gösterir.

Ad (Zorunlu): Politikanın adı. Sistem adın kullanılabilir olup olmadığını kontrol eder.

Açıklama: Politikanın amacını açıklayan metin.
Adım 3: Operasyonİşlem tipini seçin (Zorunlu):
- Önbellekten Oku (LOOKUP)
- Önbelleğe Yaz (POPULATE)
- Önbelleği Geçersiz Kıl (INVALIDATE)
Adım 4: Önbellek AnahtarıSaklama Tipi: Lokal veya Dağıtık (varsayılan: Dağıtık).

Anahtar Öneki: Anahtarın başına eklenen sabit metin.

Anahtar Değişkenleri: + butonuyla anahtarı oluşturacak değişkenleri ekleyin.

Anahtar Öneki ve Anahtar Değişkenleri'nden en az biri dolu olmalıdır.
Adım 5a: Okuma (LOOKUP) DetaylarıHedef Değişken (Zorunlu): Önbellekten okunan değerin yazılacağı değişken.
Adım 5b: Yazma (POPULATE) DetaylarıKaynak Değişken (Zorunlu): Önbelleğe yazılacak değerin alınacağı değişken.

Kapasite (adet): 1 – 1.000.000 (varsayılan 10000).

TTL (saniye): 1 – 2.592.000 (varsayılan 3600).

Boş Değerleri de Önbelleğe Al: Kaynak değer boş olsa bile yazılmasını sağlar.

Dinamik TTL Etkin: Açıldığında Dinamik TTL Değişkeni (zorunlu), Dinamik TTL Kaynağı (zorunlu), Özel Tarih Formatı (Custom DateTime seçildiğinde zorunlu), JWT Token mı?, JWT Claim Adı (JWT seçildiğinde zorunlu), Offset (saniye) ve Yedek TTL (saniye) alanları görünür.
Adım 5c: INVALIDATEEk alan yoktur; Adım 4'te tanımlanan anahtara karşılık gelen kayıt silinir.
Adım 6: Hata YönetimiÖnbellek Bağlantı Zaman Aşımı (saniye) (Zorunlu): Varsayılan 3.

Önbellek Hatası Durumunda Davranış: Akışa Devam Et (varsayılan) veya Akışı Durdur.
Adım 7: Koşullar (İsteğe Bağlı)Koşullar sekmesinde, politikanın yalnızca belirli koşullar sağlandığında çalışmasını tanımlayabilirsiniz.
Adım 8: Hata Mesajı Özelleştirme (İsteğe Bağlı)Hata Mesajı Özelleştirme sekmesinde, politika hata ürettiğinde (Akışı Durdur) dönecek mesajı özelleştirebilirsiniz.
Adım 9: KaydetmeGlobal Politikalar sayfasında Kaydet ve Yükle, API Proxy akışı içinden açılan pencerede Kaydet butonuna tıklayın. Ad, işlem tipi, anahtar (önek veya değişken) ve işleme göre Hedef/Kaynak Değişken eksikse buton pasif kalır; Dinamik TTL alanları ve zaman aşımı gibi diğer zorunlu alanlar kaydetme sırasında kontrol edilir ve eksikse kayıt reddedilir.

Politikayı Silme​

Bu politikanın silme adımları ve kullanımdayken uygulanacak işlemler için Politika Yönetimi sayfasındaki Akıştan Politika Kaldırma bölümüne bakabilirsiniz.

Politikayı Dışa/İçe Aktarma​

Bu politikanın dışa aktarma (Export) ve içe aktarma (Import) adımları için Export/Import sayfasına bakabilirsiniz.

Politikayı API'ye Bağlama​

Bu politikanın API'lere nasıl bağlanacağına ilişkin süreç için Politika Yönetimi sayfasındaki Politikayı API'ye Bağlama bölümüne bakabilirsiniz.

Sık Sorulan Sorular (SSS)​

KategoriSoruCevap
GenelÖnbellek politikası ile API Çağrısı politikasının önbelleği arasındaki fark nedir?API Çağrısı politikasının önbelleği, o politikanın yaptığı çağrının yanıtını saklar. Önbellek politikası ise bağımsız LOOKUP / POPULATE / INVALIDATE işlemleriyle hangi değerin ne zaman okunup yazılacağını sizin belirlemenizi sağlar.
GenelAynı API'de birden fazla Önbellek politikası kullanabilir miyim?Evet. Örneğin bir LOOKUP politikası ile değeri okuyup, değer yoksa backend çağrısından sonra bir POPULATE politikası ile yazabilirsiniz. Aynı veriye erişmek için iki politikada da aynı Anahtar Öneki ve Anahtar Değişkenleri kullanılmalıdır.
TeknikUzun anahtarlar nasıl ele alınır?Oluşan anahtar 1024 karakteri aşarsa otomatik olarak MD5 özetine dönüştürülür. Ayrı bir ayar gerekmez.
TeknikDinamik TTL çözümlenemezse ne olur?Yedek TTL, o da yoksa TTL alanındaki değer, o alan boşsa 60 saniye kullanılır. Dinamik TTL sıfır veya negatif çıkarsa (bitiş zamanı geçmişse) kayıt yazılmaz.
KullanımLOOKUP'ta kayıt bulunursa akışa ne olur?Değer Hedef Değişken'e yazılır ve akış normal şekilde devam eder.
KullanımLOOKUP miss olduğunda Hedef Değişken'e ne olur?Özel (custom) Hedef Değişken temizlenir; gövde, başlık veya parametre hedefine dokunulmaz. Akış devam eder; miss bir hata değildir.
KullanımBoş bir değer önbelleğe yazılmışsa LOOKUP nasıl davranır?"Boş Değerleri de Önbelleğe Al" ile saklanmış boş değer, aramada Bulundu kabul edilir ve Hedef Değişken'e boş değer yazılır.
HataÖnbellek erişim hatası olduğunda ne olur?Önbellek Hatası Durumunda Davranış alanına bağlıdır: Akışa Devam Et seçiliyse akış sürer; Akışı Durdur seçiliyse politika hata üretir.
HataÖnbelleğe yazma başarılı ama okuma miss dönüyor. Neden?POPULATE ve LOOKUP politikalarındaki Anahtar Öneki ve Anahtar Değişkenleri'nin aynı olduğunu ve değişkenlerin çalışma anında aynı değerleri ürettiğini kontrol edin. Ayrıca iki politikanın aynı Saklama Tipi'ni kullandığından emin olun.