Hash Director

Belirli bir değere sahip bir SHA256 hash değerini temel alarak arka ucu seçer. Sahip olduğu değer, director nesnesinin backend() yöntemine iletilir.

Genellikle istemcinin IP adresini veya bir oturum çerezini alarak sticky-session'ı kolaylaştırmak için kullanılır. Bu değerlerden herhangi birini elde ederek, Varnish, aynı kullanıcı veya oturum için taleplerin her zaman aynı arka uca ulaştığını garanti eder.

Bu, oturum verilerini yerel olarak depolayan arka uç sunucular için önemlidir. İstek URL’sine göre de karma olabilir. URL istekleri her zaman aynı arka uca gönderilir.

İstemci IP'sine veya istek URL'sine göre hash değeri almak bazen risklidir, aşağıdaki durumlarda olduğu gibi, yükün eşit olarak dağıtılmamasına neden olabilir:

  • İstemci IP adresi, birden fazla kullanıcı tarafından kullanılan bir proxy sunucusunun IP'si olabilir.

  • Bir URL diğerinden çok daha popüler olabilir ve belirli bir arka uçta ağır yük oluşmasına neden olabilir.

sub vcl_init {
  new loadbalancing = directors.hash();
  loadbalancing.add_backend(backend1, 1.0);
  loadbalancing.add_backend(backend2, 1.0);
}

Bu örnek, önerilen değer olan aynı ağırlığa sahip iki arka uç atar. Ağırlıkları değiştirirseniz, bir sunucu diğerinden daha fazla istek alır, ancak aynı kullanıcı, URL veya oturum istekleri sürekli olarak aynı arka uçlara gönderilir. İşte istemcinin IP adresine göre hash yapan bir hash director örneği:

sub vcl_recv {
 set req.backend_hint = loadbalancing.backend(client.ip);
}

IP kullanımı dediğimiz gibi riskli olabilir. Bunun yerine kullanıcı cookie değerine göre işlem yapmak daha sağlıklı olur. Aşağıdaki örnekte PHP uygulamalarda kullanılan cookie değerine göre nasıl yapıldığı gösterilmiştir.

sub vcl_recv {
  set req.backend_hint = loadbalancing.backend(
    regsuball(req.http.Cookie, "^.*;? ?PHPSESSID=([a-zA-Z0-9]+)( ?|;| ;).*$","\1")
  );
}

Last updated