Nginx Vernik Nginx Django?


13

Django uygulamam var ve önünde bir sunucuda Vernik kurmak istiyorum. Başka bir serverfault iş parçacığında biri Nginx'in Varnish'in önüne koyulmasını önerdi.

Önbellek sunucusunda Nginx'i Varnish'in önüne koymalı mıyım? Öyleyse, uygulama sunucusunda Nginx kullanmalı mıyım?

Yanıtlar:


10

Katlar arasında yük dengelemeli büyük bir sunucu grubu değil, toplam 1-3 ön uç sunucudan bahsediyoruz?

Nginx'i Vanish'in önüne koymak, HTTP sıkıştırmasını anında yapmanızı sağlar. Bu en iyi performans uygulamasıdır, ancak bu durumdan vazgeçilebilir. (Vernikteki içerik genellikle sıkıştırılmadan tutulur, böylece ESI dahil olur ve bu nedenle Vary üstbilgisi / tarayıcı eşleşmesine bağlı olarak aynı nesnenin birden çok önbelleğe alınmış sürümüyle uğraşmanız gerekmez.)

Uygulama sunucusunda nginx ile ilgili olarak - mod_wsgi ile Apache, günümüzde yeni Django kurulumlarını dağıtmanın önerilen ve en yaygın yolu değil midir? Django için Apache / mod_wsgi üzerinde nginx / fastcgi kullanmak için zorlayıcı bir neden farkında değilim; ancak bir Django uzmanından tavsiye almalısınız.

Nginx'in sahip olmadığı çekici yük dengeleme özelliklerine sahip Vernik ile ilgili olarak, ne olduklarını görmüyorum? Vernik rastgele ve yuvarlak-robin dengelemeye sahiptir. nginx'in yuvarlak robin, istemci IP'si ve tutarlı karma özelliği var - Vernik için önemli bir fayda görmüyorum? VCL veya Varnish'in zarif yapılandırma yeniden yüklemesi mi yoksa başka bir şey mi?

Küçük bir 1-3 sunucu kurulumu için sanırım

Vernik -> Apache / mod_wsgi / Django

ya da belki

Kalamar -> Apache / mod_wsgi / Django

ve bant genişliği pahalı olmadığı sürece HTTP sıkıştırmasını basitlik için yok sayın.

Güncelleme:

Graham Dumpleton aşağıda değerli bir yorum yazdı. Çok yaygın bir kurulumdan, örneğin bir VPS'deki bir blogdan veya önbelleğe almadan küçük bir web çiftliğinden bahsediyor:

nginx -> Apache / mod_wsgi / Django

Bu, birkaç nedenden dolayı çok iyi bir çözümdür:

  1. Basit kurulum
  2. Yüksek hız ve minimum ek yüke sahip nginx, statik dosya sunumunu ve tarayıcı bağlantısının kalıcı olmasını sağlar.
  3. Django, Graham Dumpleton'ın Django için önerilen platform olan mükemmel mod_wsgi'de çalışır.

Başlangıçta bundan bahsetmememin sebebi, OP'nin çok yüksek performanslı bir önbellekleme çözümü olan Varnish'e ihtiyaç duymasıydı. Nginx / Apache / mod_wsgi combo, Vernik ile eşleşen bir performans ve esneklik seviyesiyle önbellekleme yapamaz.


2
Birçok insanın çeşitli nedenlerle yaptığı gibi 'nginx -> Apache / mod_wsgi / Django' kullanabilirsiniz.
Graham Dumpleton

4
Nginx'in birçok kişinin fark etmeyeceği bu kullanım durumunda sağladığı diğer şey, nginx'in Apache'yi yavaş istemcilerden ayırmasıdır. Bunun nedeni, belirli bir boyuta kadar olan istek içeriğinin nginx tarafından yayınlanmamasıdır. Bunun yerine, istek üstbilgilerini ve içeriğini arabelleğe alır ve yalnızca hepsine sahip olduğunda proxy isteğini tamponlar. Bu, yalnızca isteği işlemek için gereken tüm bilgiler mevcut olduğunda Apache'ye teslim ettiği anlamına gelir. Böylece Apache / mod_wsgi mümkün olan en kısa sürede meşgul olacak ve süreçler / iş parçacıkları yavaş istemci tarafından bağlanmayacaktır. Apache'nin daha hızlı bitirebilmesi için bir tamponlama işlemi de ters yönde gerçekleşir.
Graham Dumpleton

2
@Graham Dumpleton: Sizi burada görmek çok güzel, umarım etrafta kalabilirsiniz. :-). Nginx HTTP çoğullama / akıllı bağlantı kullanımı ile ilgili olarak tamamen katılıyorum.
Jesper M

Her şeyden önce, bu kadar kapsamlı bir yanıt yazmaya zaman ayırdıkları için Jesper ve Graham'a teşekkürler. İki uygulama sunucusunun önüne bir yük dengeleme sunucusu koymayı planlıyorum. Bir sunucu trafiğin çoğunu idare eder, ikincisi çoğunlukla başarısızlık ve beta testi yeni özellikleri için kullanılır.
Enrico

Vernik çekici çünkü bana hangi isteklerin hangi arka uca gönderileceği üzerinde tam kontrol sağlıyor. Vernik ayrıca sağlık arka uç sunucularını kontrol eder, yük devretme kurulumu kolaydır ve yavaş / ölü arka uçları zarif bir şekilde işler (her iki sunucu da ölürse).
Enrico

4

İçeriği proxy yapmak ve önbelleğe almak için nginx'i verniksiz kullanabilirsiniz.


2
vernik, nginx'in kutudan çıkmadığı bazı çekici yük dengeleme özelliklerine sahiptir
Enrico

4
örneğin hangi özellikler?
sessiz

4

Nginx, Varnish ve Apache / mod_wsgi / Django'yu başarıyla kullanıyorum. Aşağıdaki yapılandırma ile başladım:

Nginx -> Apache / mod_wsgi / Django

Apache'de önemli bir yük görmeye başladığımda, Varnish'i ekledim:

Nginx -> Vernik -> Apache / mod_wsgi / Django

Nginx'i bir tür "URL yönlendirici" olarak kullanıyorum. Django yönetici istekleri doğrudan Nginx'ten Apache'ye gönderilir. İstemci istekleri Nginx'ten Varnish'e gönderilir, bu da Apache'den gelen istekleri önbelleğe alır ve uygulama sunucuları yoksa önbellekten "zarif" öğeler sunar.

Nginx sunucum ayrıca belirli statik içeriği doğrudan sunar (örn. Resimler, CSS ve javascript dosyaları).

Genel olarak, performans mükemmeldi. Bahsetmem gereken birkaç uyarıyı fark ettim:

  1. Yoğun bir sitede, Vernik'i yeniden başlatmak yükün uygulama sunucularında yükselmesine neden olabilir, bu nedenle Vernik yeniden başlatmalarını minimumda tutmak en iyisidir. (Verniğin Vgin dosyalarını yeniden okuduğu Nginx / Apache gibi "yeniden yükleme" gibi görünmüyor). Tersine, bir Nginx yapılandırmasının yeniden yüklenmesi çok az etkiye sahiptir. Bu nedenle, URL yeniden yazma ve "yönlendirme" nin çoğunu Nginx'te yapıyorum.
  2. Vernik Nginx ve Apache arasında kolayca bırakılabilir. Uygulama sunucularınızda yüksek yük fark etmeye başlarsanız, varsayılan yapılandırmayla bile vernik eklemek gerçekten fark yaratabilir.
  3. Vernik kullanıyorsanız, kesinlikle önbellek geçersiz kılmayı nasıl ele alacağınızı düşünmeniz gerekir.
  4. Deneyimlerim, Vernik tutamaçlarının başarısız olduğu arka uçları Nginx'ten (daha önce işaret ettiğiniz gibi) biraz daha zarif bir şekilde yaptı.

Başka bir şeyin arkasında hiç vernik görmedim. Vernik genellikle url yönlendiricisini yapan yük dengeleyicisidir. 2 web sunucunuz ve 1 proxy veya 2 proxy ve 1 web sunucunuz var mı? Q
ioanb7

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.