Varnish Subroutin Nedir - 2

Aşağıdaki çizelgede Varnish’in bir HTTP isteğini nasıl karşıladığı gösterilmiştir.

varnish subroutines

vcl_hash

Varnish’in önbelleğe alınmış bir nesneyi diğerinden ayıran alt yordamıdır. Önbelleğe alınan verilere kimlik atar ve kontrol etmek için burda oluşturulan kimlik kullanılır. İstekler, önceki bir alt yordam (yani vcl_recv) bir istek için hash return (hash) döndürdüğünde buraya yönlendirilir. Bu yordam, Varnish’in her nesneye sayısal benzersiz bir tanımlayıcı verdiği yerdir. Yerleşik VCL, nesnenin IP adresini ve URL’sini önbellek karmasına ekleyecektir. Bu bölümde, kullanıcıya özel veriler için tanımlayıcılar da ekleyebilirsiniz (örneğin, çerezler), ancak burda yanlışlıkla kullanıcıya özel verileri paylaşmamanız için dikkatli yapmanız önerilir.
Vcl_hash, bir alt yordam olmayan ancak belirtilen nesnenin önbellekte olup olmadığına bakan lookup değerini döndürerek sonlanır. Bir öğe önbellekte ise, istek vcl_hit ve vcl_deliver’a gidecektir. Öğe önbellekte değilse, önbelleğe eklenir, sonra (önbelleğe alınabileceğini varsayarsak) vcl_miss ve vcl_fetch yordamlarına gider ve önbelleğe eklenir. Vcl_hash arama işlemini tamamladıktan sonra isteği genellikle vcl_hit veya vcl_miss olacak bir sonraki alt rutine geçirir.

vcl_hit

Bu rutine, vcl_hash belirtilen nesneyi önbellekte başarıyla bulduğunda ve çoğu durumda değiştirilmesi gerekmediğinde erişilir. vcl_hit genellikle üç anahtar kelimeden biriyle sonlandırılır: deliver, restart veya synth, ancak aynı zamanda fetch veya pass ile de sonlanabilir.
deliver vcl_deliver yordamına gider ve önbellek nesnesini, yaşam süresi (TTL) ve izin verme süresi (grace time) dolmadığı sürece istemciye gönderir. Nesne eskiyse, nesnenin 0 veya negatif TTL olduğu anlamına gelir, yalnızca grace veya kalan süreyi korur, aynı anda arka planda bir kopyasını yeniden alarak müşteriye teslim eder. Grace time, önbelleğe alınan öğelerin kullanım sürelerinin dolmasından sonra, yeni halini almaya çalıştığında eğer ulaşamaz ise son önbelleği ne kadar süre daha istemciye sunacağını belirtir.
restartdönüş değeri işlemi yeniden başlatır ve en fazla yeniden başlatmaya ulaşıldığında “guru medidation error” döndürür. Sürekli döngüden kaçınmak için ayarlanır.
synth dönüş değeri istemciye uygun durum kodunu ve sonlandırma nedenini döndürerek isteği durdurur.
fetch dönüş değeri, arka planda istenen nesnenin yeni bir kopyasını alacak ve pass moduna geçecek ve vcl_pass‘a geçecektir.

vcl_miss

vcl_hit‘e benzer şekilde, vcl_miss genellikle değiştirilmek zorunda değildir. Bu alt yordam, vcl_hash önbellekte istenen nesneyi bulamadığında çağrılır ve ardından söz konusu nesneyi arka uç sunucudan alıp almayacağına ya da önbelleğe alınamazsa vcl_pass değerini döndürmeye karar verir. vcl_miss yukarıda açıklandığı gibi fetch, pass, restart veya synth ile sonlandırılır. Nesne henüz önbellekte olmadığından, nesne arka uçtan alınmadan önce teslim edilmeyecektir.

vcl_pass

Bu yordam, bir öğe önbelleğe alınmadığında ve önbelleklenebilir olarak etiketlenmediğinde çağrılır. Bu durumda, istek, vcl_backend_fetch aracılığıyla arka uca iletilecek ve daha sonra istemciye, vcl_deliver aracılığıyla önbelleğe kaydetmeden teslim edilecektir. vcl_hit veya vcl_miss‘te yakalanmayan istekler genellikle bu duruma geçer. vcl_pass, fetch, restart veya synth ile sonlandırılabilir ve genellikle değiştirilmesi gerekmez.

vcl_backend_fetch

İstenen nesneyi arka uçtan almadan önce çağrılır. İsteği, bu bölümde arka uca gitmeden önce değiştirebilir veya isteği vcl_synth‘e gönderen ve istemciye 503 hatası gönderecek olan abandon sona erdirir.

vcl_backend_response

vcl_backend_fetch‘ten sonra, Varnish’in arka uçtan yanıtı başarıyla aldığında gerçekleşir. Bu bölüm, Varnish’te isteklerin önbelleğe alınabilmesi için maximum age: 0” gibi ayarları geçersiz kılmak için başlıkları düzenleyebilirsiniz. Birçok kaynak, içeriği önbelleğe alacak şekilde yapılandırılmadığından çoğu zaman bu bölümde düzenlemeler yapmanız gerekir.
Bu bölüm deliver, abandon veya retry ile sona erebilir. deliver, dönüş değeri yanıtın önbelleğe alınabilir olup olmadığına bakacak önbelleklenebilir ise belirtilen TTL ile bir önbellek nesnesi oluşturacaktır. abandon isteği durduracak ve 503 koduyla vcl_synth’e gönderecek. retry bu noktada vcl_backend_error‘a ileteceği maksimum deneme sayısına ulaşana kadar yeniden deneyecek.

vcl_deliver

İstemciye bir istek teslim edilmeden önce çağrılan son alt yordamdır ve istemciye gönderilmeden önce yanıt başlıklarını değiştirmek için kullanılabilir. Bu rutin, deliver, restart veya synth ile sonlandırılabilir. Burada geçersiz kılmak veya oluşturmak için set kullanılarak değiştirilebilecek değişkenlerin bazıları ve geri almak veya silmek için unset ifadesi, istemci başlıkları için resp.http, durum kodu için resp.status ve önbellek sayısı için obj.hits.