Web performans optimizasyonu dünyasında hız önemlidir. Kullanıcılar, web sitelerinin göz açıp kapayıncaya kadar yüklenmesini bekler ve arama motorları hızlı yüklenen siteleri önceliklendirir. İşte burada Varnish devreye giriyor — web sitesi hızını ve ölçeklenebilirliğini dramatik bir şekilde artırmak için tasarlanmış güçlü bir HTTP hızlandırıcısı. Ama Varnish tam olarak nedir ve HTTP performansınızı nasıl iyileştirebilir?

Varnish Nedir?

Varnish (aynı zamanda Varnish Cache olarak da bilinir) yüksek performanslı bir web uygulama hızlandırıcısıdır ve genellikle ters proxy önbellek sunucusu olarak adlandırılır. Kullanıcılarınız ile web sunucunuz arasında yer alır, HTTP yanıtlarının (HTML sayfaları, resimler veya betikler gibi) kopyalarını depolar, böylece tekrar eden istekler çok daha hızlı bir şekilde sunulabilir.

Apache veya NGINX gibi geleneksel web sunucularının aksine, Varnish önbelleğe alma ve içeriği hızlı bir şekilde sunmak için özel olarak tasarlanmıştır. Genellikle yüksek trafik alan web siteleri, medya şirketleri ve hızlı içerik teslimi gerektiren e-ticaret platformları tarafından kullanılır.

Varnish Nasıl Çalışır?

Varnish, HTTP yanıtlarını bellekte önbelleğe alarak çalışır. Bir kullanıcı bir sayfa talep ettiğinde:

  1. İlk talep: Varnish isteği arka uç sunucusuna (örneğin, Apache veya NGINX) iletir.

  2. Arka uç yanıtı oluşturur ve Varnish’e gönderir.

  3. Varnish yanıtı bellekte depolar (önbelleğe alır).

  4. Varnish ardından bu yanıtı kullanıcıya sunar.

  5. Sonraki talepler aynı içerik için doğrudan önbellekten sunulur ve arka ucu tamamen atlar.

Bu, sunucu yükünü azaltır ve içerik teslimini önemli ölçüde hızlandırır.

Varnish Kullanmanın Temel Faydaları

  • Geliştirilmiş Yükleme Süreleri: Varnish, önbelleğe alınmış sayfaları milisaniyeler içinde sunar, sayfa yükleme hızını büyük ölçüde artırır.

  • Azaltılmış Arka Uç Yükü: Varnish, önbellekten gelen trafiğin büyük bir kısmını işleyerek, web sunucularınızı daha karmaşık, dinamik talepleri işlemek için serbest bırakır.

  • Yüksek Ölçeklenebilirlik: Varnish, saniyede binlerce isteği işlemek için tasarlanmıştır, bu da onu yüksek trafik alan web siteleri için ideal kılar.

  • Esnek Yapılandırma: Yerleşik Varnish Yapılandırma Dili (VCL) kullanarak, içeriğin nasıl önbelleğe alınacağını, temizleneceğini veya sunulacağını ince ayar yapabilirsiniz.

  • Daha İyi Kullanıcı Deneyimi: Daha hızlı sayfa yüklemeleri, daha mutlu kullanıcılar ve daha düşük hemen çıkma oranları anlamına gelir.

HTTP Performansını İyileştirmek İçin Varnish Nasıl Kullanılır

Varnish ile başlamanın basitleştirilmiş bir yaklaşımı:

1. Varnish’i Kurun

Varnish, çoğu Linux dağıtımında paket yöneticisi aracılığıyla kurulabilir. Örneğin:

sudo apt install varnish # Debian/Ubuntu
sudo yum install varnish # CentOS/RHEL

2. Varnish’i Yapılandırın

Varnish’i arka uç sunucunuza yönlendirmeli ve bir VCL dosyasında önbellek kurallarını tanımlamalısınız. Bu dosya genellikle /etc/varnish/default.vcl konumundadır.

Örnek kod parçası:

backend default {
.host = "127.0.0.1";
.port = "8080";
}

Bu, Varnish’e 8080 portunda çalışan web sunucunuza istekleri iletmesini söyler.

3. Port Yapılandırmasını Güncelleyin

Varsayılan olarak, Varnish 6081 portunda dinler, bu da HTTP trafiği için standart olmayan bir porttur. Üretim ortamları için, Varnish’in 80 portunda dinleyecek şekilde yapılandırılması yaygındır, bu da standart HTTP portudur ve web sunucunuzu (Apache veya Nginx gibi) genellikle 8080 gibi farklı bir port kullanacak şekilde ayarlamanız gerekir. Bu, Varnish’in gelen HTTP isteklerini 80 portunda işlemesine, içeriği önbelleğe almasına ve istekleri 8080 portundaki web sunucusuna iletmesine olanak tanır.

Örnek:

  1. Varnish Dinleme Portunu Değiştirin
    Varnish yapılandırma dosyasını açın, genellikle /etc/varnish/default.vcl konumunda bulunur ve dinleme portunu 80 olarak ayarlayın:

    # /etc/varnish/default.vcl

    # Listen on port 80 (HTTP standard port)
    backend default {
    .host = "127.0.0.1";
    .port = "8080"; # Your web server will listen on port 8080
    }

  2. Web Sunucusunu (Apache/Nginx) 8080 Portunda Yapılandırın
    Eğer Apache kullanıyorsanız, Listen direktifini /etc/apache2/ports.conf içinde değiştirerek 8080 portunda dinlemesini sağlayabilirsiniz:

    Listen 8080

    Eğer Nginx kullanıyorsanız, server bloğunu 8080 portunda dinleyecek şekilde ayarlayın:

    server {
    listen 8080;
    server_name example.com;
    # Other configurations
    }
  3. Varnish ve Web Sunucusunu Yeniden Başlatın
    Bu değişiklikleri yaptıktan sonra, yeni yapılandırmaları uygulamak için Varnish ve web sunucunuzu yeniden başlatın:

    sudo systemctl restart varnish
    sudo systemctl restart apache2 # Or nginx

Artık Varnish, 80 portunda gelen istekleri işleyecek ve bunları 8080 portundaki web sunucunuza iletecektir; burada içerik oluşturulacak ve sunulacaktır.

4. Önbellek Davranışını Özelleştirin

Varnish, içeriğin nasıl önbelleğe alınacağını özelleştirmenize olanak tanır; bu, Varnish Yapılandırma Dili (VCL) kullanılarak yapılır. VCL, belirli içeriklerin önbelleğe alınmasını dışlamak, çerezleri yönetmek ve temizleme kuralları ayarlamak da dahil olmak üzere önbellek davranışı üzerinde ince ayar yapmanıza olanak tanır.

Örnek 1: Önbellekten İçeriği Hariç Tutma

Belirli sayfaları veya kaynakları önbellekten hariç tutmak için VCL dosyanızda koşullar kullanabilirsiniz. Örneğin, dinamik sayfaların veya alışveriş sepetleri ya da kullanıcı profilleri gibi hassas kullanıcı verilerinin önbelleğe alınmasını istemeyebilirsiniz.

sub vcl_recv {
if (req.url ~ "^/cart" || req.url ~ "^/user-profile") {
return (pass); # Skip caching for cart or profile pages
}
}

Bu örnekte:

  • /cart veya /user-profile içeren URL’lere sahip sayfalar önbelleğe alınmayacak ve dinamik olarak oluşturulmak üzere doğrudan arka uç sunucusuna iletilecektir.

Örnek 2: Belirli Çerezlerle İçeriği Önbelleğe Alma

Belirli çerezlere göre içeriği önbelleğe alabilirsiniz; bu, içeriği kişiselleştirmek için yararlıdır. Örneğin, yalnızca belirli bir çerezi olan giriş yapmış kullanıcılar için içeriği önbelleğe almak istiyorsanız, önbellek mantığını şu şekilde değiştirebilirsiniz:

sub vcl_recv {
if (req.http.Cookie ~ "session_id") {
return (hash); # Cache for logged-in users only
}
}

Bu örnek:

  • İsteğin session_id çerezini içerip içermediğini kontrol eder. Eğer varsa, Varnish içeriği giriş yapmış kullanıcılar için önbelleğe alacak ve çerezi olmayanlar için önbelleği yok sayacaktır.

Örnek 3: Temizleme Kuralları Belirleme

Belirli önbelleğe alınmış içeriği güncellendikten sonra temizlemek isteyebilirsiniz (örneğin, bir makale güncellendiğinde). Bu, purge komutu kullanılarak yapılabilir.

sub vcl_hit {
if (obj.status == 200 && req.url ~ "/news/") {
# Purge cached news article after it has been updated
return (purge);
}
}

Bu örnek:

  • Bir haber makalesinin önbelleğe alınmış içeriğini güncellendiğinde temizler, böylece kullanıcılar her zaman en son sürümü görür.

5. İzleme ve Optimize Etme

Varnish’in optimal performans gösterdiğinden emin olmak için, performansını düzenli olarak izlemek ve önbellek hit oranlarını analiz etmek önemlidir. Varnish, performans izleme için çeşitli araçlar sunar, bunlar arasında varnishstat, varnishlog ve Varnish Yönetim Konsolu (VAC) bulunmaktadır.

Örnek 1: Metrikler için varnishstat Kullanma

varnishlog, Varnish’in performansını analiz etmek için önbellek hit oranları, bellek kullanımı ve arka uç yanıt süreleri gibi temel metrikler sağlar. Önbellek yapılandırmanızın ne kadar iyi çalıştığını izlemek için bunu kullanabilirsiniz.

varnishstat

Bu komut, size aşağıdaki gibi çeşitli istatistikler gösterecektir:

  • cache_hit: Önbellekten sunulan isteklerin sayısı.

  • cache_miss: Arka uca iletilen isteklerin sayısı.

  • backend_conn: Arka uç sunucusuna yapılan bağlantıların sayısı.

Bu metrikleri, önbellek stratejinizin ne kadar etkili olduğunu değerlendirmek ve performansı artırmak için gerektiğinde ayarlamak için kullanabilirsiniz.

Örnek 2: Detaylı Günlükleme için varnishlog Kullanma

varnishlog, her isteğin Varnish ile etkileşimi hakkında detaylı günlükler sağlar. Bu, sorun gidermek ve belirli isteklerin neden önbellekten sunulduğunu veya arka uca iletildiğini anlamak için yararlıdır.

varnishlog

Bu komut, size aşağıdaki gibi detaylı günlükler verecektir:

  • İsteklerin önbellekten mi yoksa arka uca mı iletildiğini.

  • Belirli kaynaklar için önbellek hitleri veya kaçırmaları.

  • Temizleme olayları ve önbellekle diğer etkileşimler.

Örnek 3: Varnish Yönetim Konsolu (VAC) Kullanma

Varnish Yönetim Konsolu (VAC), Varnish örneğinizi yönetmenize ve izlemenize yardımcı olan web tabanlı bir arayüzdür. VAC, kullanıcı dostu grafik arayüzünde gerçek zamanlı istatistikler, günlük verileri ve önbellek bilgileri sağlar.

  • VAC’ye http://your_server_ip:6082 adresine giderek erişebilirsiniz (VAC için varsayılan port).

  • VAC’yi, önbellek performansını izlemek, VCL kodunuzu optimize etmek ve gördüğünüz metriklere dayanarak önbellek stratejinizi ince ayar yapmak için kullanın.

Varnish için Kullanım Senaryoları

  • Medya web siteleri: Resimler veya haber makaleleri gibi statik varlıkları yüksek hızda sunma.

  • E-ticaret platformları: Ürün listeleme veya kategori sayfalarını hızlandırma.

  • Haber ve yayıncılık: Acil haber olayları sırasında trafik dalgalanmalarını yönetme.

  • API hızlandırma: Arka uç yükünü azaltmak için okuma yoğun API uç noktalarını önbelleğe alma.

Sonuç

Varnish, yüksek performans ve ölçeklenebilirlik talep eden herhangi bir web altyapısı için güçlü bir çözümdür. Tekrar eden HTTP isteklerini arka uçtan yükten kurtararak ve önbelleğe alınmış içeriği yıldırım hızında sunarak, Varnish sayfa hızını artırmaya, sunucu yükünü azaltmaya ve kullanıcı deneyimini geliştirmeye yardımcı olur.

Web siteniz önemli bir trafik miktarını işliyorsa veya sadece daha iyi performans ve güvenilirlik hedefliyorsanız, Varnish’i yığınınıza entegre etmek stratejik bir adım olacaktır.