Nginx'i ters proxy olarak ayarlamak neden iyi bir fikir?


41

Gunicorn'da çalışan ve Nginx'ten ters proxy'ye sahip bir Django sitem var. Nginx sadece gereksiz bir ek yük değil mi? Gunicorn'un üstüne eklemenin yardımı nedir?

Yanıtlar:


52

Yavaş müşteri davranışına ve yapılandırmanızın nasıl işleyeceğine odaklanacağım, ancak bunun tek yararı olduğuna inanmaktan kaçınmayın. Yavaş istemcilere fayda sağlayan aynı yöntem aynı zamanda hızlı istemciler, SSL yönetimi, trafik dalgalanmaları ile uğraşmak ve İnternette HTTP sunmanın diğer yönleri için de faydalara sahiptir.

Gunicorn ön çatal yazılımdır. Uygulama sunucusuna yük dengeleyici veya servisler arasındaki haberleşme gibi düşük gecikmeli haberleşmeler için çatal öncesi sistemler çok başarılı olabilir. Talebi yerine getirmek için bir süreci hızlandırmanın hiçbir maliyeti yoktur ve tek bir işlemi tek bir talebi yerine getirmek için tahsis edebilirsiniz; Bunların ortadan kaldırılması, eşzamanlı bağlantıların sayısıyla başa çıkmak için mevcut işlemlerin sayısını geçinceye kadar daha hızlı, daha verimli bir sisteme yol açabilir.

Sizin durumunuzda, internet üzerinden yüksek gecikme süresi olan müşterilerle uğraşıyorsunuz. Bu yavaş istemciler aynı süreçleri birbirine bağlayabilir. QPS önemli olduğunda, uygulama kodunun isteği en kısa sürede alması, işlemesi ve çözmesi gerekir; böylece başka bir talebe geçebilir. Yavaş istemciler doğrudan sisteminizle iletişim kurduğunda, bu süreci bağlar ve yavaşlatır. Talebin mümkün olan en kısa sürede ele alınması ve elden çıkarılması yerine, bu işlemin yavaş müşteri için de beklemesi gerekiyor. Etkili QPS düşüyor.

Çok az işlemci ve bellek maliyeti ile çok sayıda bağlantıyı yönetmek, Nginx gibi senkronize olmayan sunucuların iyi olduğu şeydir. Yavaş müşterilerden aynı olumsuz şekilde etkilenmezler çünkü çok sayıda müşteriyi aynı anda ele alma konusunda ustalar. Nginx'in durumunda, modern bir donanımda çalışmak bir kerede on binlerce bağlantıyı idare edebiliyor.

Önceden çatallanmış bir sunucunun önündeki Nginx harika bir kombinasyon. Nginx müşterileri ile iletişimi yönetir ve yavaş müşterileri ele alma konusunda herhangi bir ceza almaz. Arka uca istekleri arka ucun bu talepleri yerine getirebildiği kadar hızlı bir şekilde gönderir ve arka ucun sunucu kaynaklarıyla mümkün olduğu kadar verimli olmasını sağlar. Arka uç, sonucu hesaplar hesaplamaz sonuç verir ve Nginx yavaş istemcileri kendi hızlarında beslemeye yanıt veren arabellekleri. Bu arada, arka müşteri yavaş müşteri hala sonuç alıyor olsa bile, başka bir talebi yerine getirmeye devam edebilir.


3
nitpicking: gunicorn önceden haber veren bir olaya dayalı bir sunucudur. Her işlem eşzamansız olarak birkaç bağlantı yapar. Bu, nginx'in bağlantı başına daha düşük bir maliyete sahip olduğu gerçeğini değiştirmez, bu da açıklamanızın geri kalanını geçerli kılar.
Javier

4
Ve bir bonus olarak, Nginx çok etkili bir şekilde "Yavaş HTTP DoS Saldırıları" nı durduruyor. Ekleyeceğim bir nokta, Nginx kullanırken Gunicorn'da yapabileceğiniz herhangi bir IP ile ilgili herhangi bir şeyi karıştırabileceği, örneğin Gunicorn, X-Forwarded-For başlığına bakmayı desteklemediği sürece, ip ile oturum açma, günlüğe kaydetme vb. Gunicorn'a aşina değilim, bu yüzden bunun sizin için ne kadar büyük olacağını söyleyemem.
Niall Donegan

Bilgi Javier için teşekkürler, ben gunicorn ile aşina görünmekten daha fazla değilim.
blueben

Cevabınız bu soru için uygun olmalıdır: stackoverflow.com/q/13182892/719276
arthur.sw

Bunun * _busy_buffer_size seçeneğiyle ilgisi var mı?
CMCDragonkai

2

@blueben haklı. Ters proxy kullanılmadığında neler olabileceğine dair genel ve yaygın bir örnek, arka uç veritabanının proxy olmayan ve trafik sıkışıklığı olan veritabanı bağlantı tutamaçlarını çalıştırabileceğidir. Bunun nedeni, bağlantıların açıklandığı şekilde @blueben gibi serbest bırakılmasından kaynaklanıyor.

Veritabanı işleyicileri tükeniyor görmek için ilk içgüdüsü daha fazla veritabanı bağlantılarını desteklemek olabilir. Ancak, uygulamanın önüne ters bir proxy ekleyerek, hem yüksek yükler için gerekli veritabanı bağlantılarının sayısını önemli ölçüde düşürüp dengede tutarsınız; veritabanı bağlantı seviyesi bir trafik artışı olduğunda neredeyse artmayacaktır.

Nginx ayrıca, uygulama sunucunuzun bir uygulama sunucusu olmaya odaklanmasına izin vererek statik içerik, önbellekleme ve diğer HTTP görevlerinin çeşitliliği konusunda da mükemmeldir.


0

@naill Donegan, yukarıdaki yorumda bundan bahseder, ancak bir cevabı garanti etmek için yeterince önemlidir.

Nginx, gunicorn'un kullanmadığı yavaş loris saldırısını durdurur.

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.