Pragmatik yaklaşımı ele alalım.
Tüm bu sınırlar, donanımın yavaş ve pahalı olduğu geçen yüzyılda kodlanmış ve tasarlanmış şeylerdir. Şimdi 2016’dayız, ortalama bir duvar tost makinesi varsayılan değerlerden daha fazla istek işleyebilir.
Varsayılan ayarlar aslında tehlikelidir. Bir web sitesinde yüzlerce kullanıcıya sahip olmak etkileyici bir şey değildir.
worker_process
İlgili bir ayar, konuyu açıklarken açıklayalım.
Yük dengeleyici olarak nginx:
- HTTP yük dengelemesi için 1 işçi.
- HTTPS yük dengelemesi için çekirdek başına 1 işçi.
web sunucusu olarak nginx:
Bu çok zor.
Bazı uygulamalar / çerçeveler / ara katman yazılımları (örneğin php-fpm) nginx dışında çalıştırılır. Bu durumda, 1 nginx çalışanı yeterlidir, çünkü bu genellikle ağır işlem yapan ve kaynakları yiyen harici bir uygulamadır.
Ayrıca, bazı uygulamalar / çerçeveler / ara katman yazılımı bir kerede yalnızca bir isteği işleyebilir ve aşırı yüklemeyi geri teptirir.
Genel olarak konuşursak, 1 işçi her zaman güvenli bir bahistir.
Aksi takdirde, ne yaptığınızı biliyorsanız, çekirdek başına bir işçi koyabilirsiniz. Bu rotanın bir optimizasyon olduğunu ve uygun kıyaslama ve test önerileri olduğunu düşünüyorum.
worker_connections
Toplam bağlantı miktarı worker_process * worker_connections
. Yük dengeleyici modunda yarı.
Şimdi tost makinesine geliyoruz. Çok ciddi olarak underrated sistem sınırları vardır:
- ulimits, Linux üzerinde işlem başına 1k maksimum açık dosyadır (1k yumuşak, bazı dağıtımlarda 4k zor)
- systemd limitleri ulimits ile aynıdır.
- nginx varsayılanı, çalışan başına 512 bağlantıdır.
- Daha fazlası olabilir: SELinux, sysctl, supervisord (her dağıtım + sürümü biraz farklıdır)
1k worker_connections
Güvenli varsayılan, her yere 1k koymaktır.
Çoğu iç ve bilinmeyen sitenin karşılaşabileceğinden çok daha fazlası olacak kadar yüksek. Başka herhangi bir sistem sınırına ulaşmayacak kadar düşük.
10 bin işçi
Özellikle halka açık bir web sitesi için binlerce müşteriye sahip olmak çok yaygındır. Gördüğüm web sitelerinin sayısının düşük varsayılanlar nedeniyle azaldığını gördüm.
Üretim için kabul edilebilir minimum 10k. İzin vermek için ilgili sistem limitleri arttırılmalıdır.
Çok yüksek bir limit diye bir şey yoktur (kullanıcı yoksa bir limitin etkisi yoktur). Ancak, çok düşük bir limit, reddedilen kullanıcılar ve ölü bir site ile sonuçlanan çok gerçek bir şeydir.
10 bin'den fazla
10k güzel ve kolaydır.
İsteğe bağlı 1000k limitleri belirleyebiliriz (sonuçta bu yalnızca bir sınırdır) ancak bu çok pratik bir anlam ifade etmiyor, bu trafiği asla elde edemeyiz ve yine de üstesinden gelemedik.
Makul bir ayar olarak 10k'ya sadık kalalım. Daha fazlası için hizmet veren (ve gerçekten yapabilen) hizmetler özel ayar ve kıyaslama gerektirecektir.
Özel Senaryo: Gelişmiş Kullanım
Bazen, sunucunun çok fazla kaynağı olmadığını biliyoruz ve çok fazla şey yapamayacağımıza dair çiviler bekliyoruz. Denemek yerine kullanıcıları reddetmeyi tercih ediyoruz. Bu durumda, makul bir bağlantı limiti koyun ve güzel hata mesajlarını ve işlemeyi yapılandırın.
Bazen, arka uç sunucuları iyi ve iyi çalışıyor, ancak yalnızca bir miktar yüke kadar , daha fazlasını ve her şey hızla güneye gidiyor. Sunucuları çökertmek yerine yavaşlamak istiyoruz. Bu durumda, kuyruğu sıkı limitlerle yapılandırın, istekler sınırlandırılmış bir hızda boşaltılırken nginx'in tüm ısıyı tamponlamasını sağlayın.