Varnish Cache Nedir, Ne İşe Yarar?
Varnish, webmasterların yıllardır yolunu gözlediği bir kurtarıcıdır. Özellikle sunucu ve vps sahipleri uzun yıllardır varnish gibi modülün yapılmasının hayali kuruyorlardı. Neden mi?
Web sunucularının her alet, adevat ve makinede olduğu gibi işlem kapasitesi sınırlıdır. Bir yere kadar görevlerini sorunsuz yerine getirirler bir yerden sonra yapmaları gerekenleri ya hiç yapamazlar ya da doğru ve zamanında yapamazlar. Sivil yaşantımızda işimizi görmeyen aleti değiştirme eğilimimiz vardır ve şartlar yerindeyse çoğu zaman işe yarar. Ama iş web ortamına geldiğinde değiştirmek o kadar kolay değildir.
Hem ekonomik hem de teknik nedenlerden dolayı sık sık sunucu değiştiremeyiz. Bunun yerine web sunucularının kapasitelerini arttırmaya çalışırız. Bu kapasite arttırma işinin en popüler olanı da verilerin bir şekilde cache edilmesidir.
Veriyi Cacheleme Ne Demek?
Orijinal verinin belleğe bir kopyasının alınması ve lazım olduğunda üretilmek yerine belleğe alınan bu kopyanın kullanılması olayına cachelemek denir.
Bu şekilde bir web sunucunun işlem yükü çok ama çok azaltılabilir. Ama gelin görün ki bu işi yapacak çok sayıda yazılım olmasına rağmen birçoğu getirdiğinden çok götürmekte ve istenen yararı sağlamamaktadır.
Son bir kaç yıldır varnish adında bir modül iyiden iyiye kendi isminden söz ettirmeye başladı. Bu modül apache, nginx gibi web sunucularının önüne kurularak web sunucularına gelen istekleri analiz ediyor ve belirlediğimiz kurallara göre bu istekleri cacheliyor. Varnish, verileri belirlenen süre kadar bellekte tutuyor ve daha sonrasında gelen isteği belleğinden karşılıyor.
Bu sunucunun sahibine iki önemli şey sağlıyor.
1. Web sunucusu gelen istekleri geçici hafızadaki cachlenmiş verilerden karşılayıp baştan üretilmediği için sunucunun yükü azalıyor.
2. Cacheden gönderilen içerikler baştan üretilmediği için sayfalar çok çabuk açılıyor. Bu da SEO için ölümcül derecede önemli bir etkendir.
Varnishin kurulumu da ayarları da oldukça basittir. Bununla ilgili webte yüzlerce döküman bulabilirsiniz. Varnishin yapısı gereği sunucunuzun ram kapasitesinin yüksek olması önemli. Bunun yanında varnishin temeli statik içerikler üzerinedir. Bundan dolayı session yani cookie kullanan sayfalarda cache olayı yapılmaz. Yine headerında no-cache ve private etiketleri olan sayfaların da cacheleri alınmaz.
Bunlarla ilgili teknik detayları öğrenmeden varnish kurulum işine girmemenizi öneriyorum. Sayfalarınızın yapıları hakkında mutlaka bir ön çalışma yapınız. Zira boşu boşuna birçok işlem yapmak zorunda kalabilirsiniz.
Varnishin işe yarayıp yaramadığını merak edenler yukarıdaki varnish cache istatistiklerine göz atabilirler. Yukarıdaki tablo 445077 isteğin varnishten geçerek web sunucusu tarafından karşılandığını, 81260 isteğinde direk olarak varnish cache tarafından karşılandığını göstermektedir. Yani yaklaşık olarak her 10 isteğin 2’ni varnish tarafından karşılanmış. Toplam isteğin yanında karşılanan isteğin az olması sizi yanıltmasın.Bu örnekte cache işlemi sadece sayfalara yapılmıştır.
Sayfaların içinde resimler ve diğer öğeler direk web sunucusuna gönderilmektedir. Bu örnekte sayfanın kendisi cacheden karşılanmakta, sayfayı oluşturan resim, css vb içerikler sunucu tarafından gönderilmektedir. Bundan dolayı arada bu kadar fark vardır. Sonuç olarak her obje ramde tutulursa bir süre sonra kaynaklarınız yetersiz gelmeye başlayacaktır.
Yaptığım bir teste, toplamda her şeyi içinde 6 GB olan bir web sitesini sayfalarının html kodlarının tamamının 2 GB geçtiğini gördüm. Bir sayfanın html kodlarına baktığınızda 5-45 KB arası olduğun görürsünüz. Ama sayfaların tümünü düşündüğünüzde boyutun çok büyüdüğü görürsünüz.
Örnek olarak şunu verebilirim. Ortalama boyutları 30 KB olan sayfalardan 15000 binin cachelendiğini düşünürseniz bu yaklaşık olarak 500 MB tekabül eder. Eğer sayfa sayınız ve sayfa büyüklükleriniz bu değerleri geçiyorsa sonuç olarak ihtiyaç duyacağınız hafıza miktarı gigabaytları bulacaktır. O yüzden cache konusunda doğru politika izlemek cache yapmak kadar önemlidir.
Sonuç olarak eğer şartlarınız el veriyorsa mutlaka varnishi denemelisiniz…