Nginx hangi eşzamanlılık ile 3w'a ulaşabilir?

Eser sahibi: NingG1

Nginx, yüksek performansı, kararlılığı, zengin işlevleri, basit yapılandırması ve düşük kaynak tüketimi ile bilinir. Bu makale, Nginx'in neden bu kadar hızlı olduğunu temel prensipten analiz ediyor!

Nginx süreç modeli

Nginx sunucusu, normal çalışma sırasında:

  • çoklu İlerleme: Tek Ana süreç, birden çok İşçi süreci.
  • Ana süreç: Çalışan süreçlerini yönetin. Harici arayüz: harici işlemleri (sinyaller) alma; dahili yönlendirme: farklı harici işlemlere göre, çalışanlar sinyallerle yönetilir; monitör: Çalışan işleminin çalışma durumunu izleyin.Çalışan işlemi anormal bir şekilde sona erdikten sonra, Çalışan sürecini otomatik olarak yeniden başlatacaktır.
  • İşçi süreci: Tüm işçi süreçleri eşittir. Fiili işleme: ağ istekleri İşçi süreci tarafından işlenir. Çalışan işlemlerin sayısı : Nginx.conf içinde yapılandırılır ve genellikle CPU kaynaklarından tam olarak yararlanmak ve aynı zamanda aşırı sayıda işlemden kaçınmak, CPU kaynakları için rekabet eden işlemleri önlemek ve bağlam anahtarlama tüketimini artırmak için çekirdek sayısına ayarlanır.

Düşünme:

  • Talep Nginx'e bağlı mı ve işleme ve iletmeden Ana süreç sorumlu mu?
  • Talebi işlemek için hangi İşçi sürecinin seçileceği nasıl seçilir? Talep işleme sonucu Ana sürecinden geçiyor mu?

HTTP bağlantısı kurulması ve istek işleme HTTP bağlantısı kurma ve istek işleme süreci aşağıdaki gibidir:

  • Nginx başladığında, Ana işlem yapılandırma dosyasını yükler.
  • Ana işlem, dinleme soketini başlatır.
  • Ana süreç, Fork birden fazla İşçi süreci üretir.
  • Çalışan süreci yeni bağlantılar için rekabet eder.Kazanan, üç yönlü bir el sıkışma yoluyla bir Soket bağlantısı kurar ve talebi işleme koyar.

Nginx yüksek performans, yüksek eşzamanlılık Nginx neden yüksek performansa sahip ve yüksek eşzamanlılığı destekleyebilir?

  • Nginx, çok işlemli + eşzamansız engellemesiz modu (IO çoğullama Epoll) benimser.
  • Talebin tam süreci: bir bağlantı kurun talebi okuyun talebi çözümleyin talebi işleyin talebe cevap verin.
  • Tam talep süreci en alt katmana karşılık gelir: Soket olaylarını okuma ve yazma.

Nginx'in olay işleme modeli İstek: Nginx'te HTTP istekleri. Temel HTTP Web Sunucusu çalışma modu:

  • İstek alın: İstek satırını okuyun ve üstbilgiyi satır satır isteyin. Segmentin bir istek gövdesi olduğuna karar verdikten sonra, istek gövdesini okuyun.
  • Talebi işleyin.
  • Dönüş yanıtı: İşleme sonucuna göre, karşılık gelen HTTP isteği (yanıt satırı, yanıt başlığı, yanıt gövdesi) oluşturulur.

Nginx de bu rutindir, genel süreç aynıdır:

Modüler mimari

Nginx modülleri temelde işlevlerine göre aşağıdaki türlere ayrılabilir:

event modülü: İşletim sisteminden bağımsız olay işleme mekanizmaları için bir çerçeve oluşturulur ve belirli olayların işlenmesi sağlanır. Ngx_events_module, ngx_event_core_module ve ngx_epoll_module vb. Dahil

Nginx'in hangi olay işleme modülünü kullanacağı, belirli işletim sistemine ve derleme seçeneklerine bağlıdır.

Faz işleyici: Bu tür bir modüle doğrudan eylemci modülü de denir. İstemci statik sayfa isteklerinin işlenmesinden sorumlu olan ve karşılık gelen disk dosyalarını yanıt içeriğinin çıktısı için hazırlayan ngx_http_static_module modülü gibi, istemci isteklerini işlemek ve yanıtlanacak içeriği oluşturmaktan sorumludur.

çıktı filtresi: Filtre modülü olarak da adlandırılan bu modül, esas olarak çıktı içeriğinin işlenmesinden sorumludur ve çıktıyı değiştirebilir.

Örneğin, tüm çıktı html sayfalarına önceden tanımlanmış bir dip çubuğu eklemek veya çıktı görüntüsünün URL'sini değiştirmek gibi görevleri uygulayabilirsiniz.

upstream: Yukarı akış modülü, bir ters proxy işlevini uygular, gerçek isteği arka uç sunucuya iletir, yanıtı arka uç sunucudan okur ve istemciye geri gönderir.

Yukarı akış modülü özel bir işleyicidir, ancak yanıt içeriği gerçekten kendi başına oluşturulmaz, arka uç sunucusundan okunur.

yük dengeleyici: Yük dengeleme modülü, belirli bir algoritma uygular.Birçok arka uç sunucusu arasında, belirli bir istek için yönlendirme sunucusu olarak bir sunucu seçilir.

Yaygın sorunların analizi

Nginx ve Apache

Nginx:

  • IO çoğullama, Epoll (freebsd'de kqueue)
  • yüksek performans
  • Yüksek eşzamanlılık
  • Daha az sistem kaynağı kullanır

Apaçi:

  • Engelleme + çok işlemli / çok iş parçacıklı
  • Daha kararlı, daha az hata
  • Daha fazla modül

Referans makale:

Nginx maksimum bağlantı sayısı

Temel arka plan:

  • Nginx çok süreçli bir modeldir ve İşçi süreci istekleri işlemek için kullanılır.
  • Üst sınır (nofile) ile tek bir işlem için bağlantı sayısı (dosya tanımlayıcısı fd): ulimit -n.
  • Nginx üzerinde tek bir çalışan işlem için maksimum bağlantı sayısını yapılandırın: işçi bağlantılarının üst sınırı sıfırdır.
  • Nginx'teki Çalışan işlemlerinin sayısını yapılandırın: worker_processes.

Bu nedenle, Nginx için maksimum bağlantı sayısı:

  • Nginx için maksimum bağlantı sayısı: çalışan işlem sayısı x tek bir çalışan işlem için maksimum bağlantı sayısı.
  • Yukarıdaki, Nginx genel bir sunucu olarak kullanıldığında maksimum bağlantı sayısıdır.
  • Nginx bir ters proxy sunucusu olarak kullanıldığında, sunulabilecek maksimum bağlantı sayısı: (çalışan işlem sayısı x tek bir çalışan işlem için maksimum bağlantı sayısı) / 2.
  • Nginx ters proxy olduğunda, İstemci ile arka uç Web Sunucusu arasında 2 bağlantı kullanan bağlantı kuracaktır.

Düşünme:

  • Her açık bir Soket bir fd kaplar?
  • Bir işlemin açabileceği fd sayısında neden bir sınır var?

HTTP isteği ve yanıtı

HTTP isteği:

  • İstek satırı: yöntem, uri, http sürümü
  • Başlık isteyin
  • Gövde iste

HTTP yanıtı:

  • Yanıt satırı: http sürümü, durum kodu
  • Yanıt başlığı
  • Yanıt gövdesi

IO modeli

Birden fazla isteği işlerken şunları kullanabilirsiniz: IO çoklama veya engelleme IO + multithreading:

  • IO çoğullama: Bir iş parçacığı, birden çok Soketin durumunu izler ve hangisinin hazır olduğunu okur ve yazar.
  • IO + multithreading'i engelleme: Her istek için yeni bir hizmet dizisi oluşturun.

IO çoğullama ve çok iş parçacıklı okuma için uygulanabilir senaryolar nelerdir?

  • IO çoğullama: Tek bir bağlantı için talep işleme hızında herhangi bir avantaj yoktur.
  • Büyük eşzamanlılık: Çok sayıda eşzamanlı isteği işlemek için yalnızca bir iş parçacığı kullanılır, bu da bağlam değiştirme kaybını azaltır ve eşzamanlılık sorunlarını dikkate almaya gerek yoktur ve nispeten daha fazla istek işlenebilir.
  • Daha az sistem kaynağı tüketin (iş parçacığı planlama ek yükü gerekmez).
  • Uzun bağlantılar için uygundur (çok iş parçacıklı modda uzun bağlantılar kolayca çok fazla iş parçacığına ve sık programlamaya neden olabilir).
  • IO + çoklu iş parçacığını engelleme: basit uygulama, sistem çağrılarına güvenmeye gerek yok.
  • Her iş parçacığı zamana ve yere ihtiyaç duyar.
  • İş parçacığı sayısı arttığında, iş parçacığı programlama ek yükü katlanarak artar.

Select / anket ve epoll arasındaki karşılaştırma aşağıdaki gibidir:

Ayrıntılar için bkz:

https://www.cnblogs.com/wiessharling/p/4106295.html

seçim / anket sistem çağrısı:

// sistem çağrısını seçin int select (int maxfdp, fd_set * readfds, fd_set * writeefds, fd_set * errorfds, struct timeval * timeout); // anket sistemi çağrısı int anket (struct pollfd fds, nfds_t nfds, int zaman aşımı); seçin:

  • Fd_set içinde hazır bir fd olup olmadığını sorgulayın, bir zaman aşımı süresi ayarlayabilir ve fd (Dosya tanımlayıcı) hazır olduğunda veya zaman aşımına uğradığında geri dönebilirsiniz.
  • fd_set bir bit kümesidir, çekirdek derlenirken boyut sabittir, varsayılan boyut 1024'tür.
  • Özellikler: bağlantı sayısı sınırlıdır, fd_set ile temsil edilebilen fd sayısı çok küçüktür; doğrusal tarama: fd'nin hazır olup olmadığını belirlemek için, fd_set'in bir tarafının geçilmesi gerekir; veri kopyası: kullanıcı alanı ve çekirdek alanı, bağlantıya hazır durum bilgilerini kopyalayın.

anket:

  • Bağlantı sınırı çözüldü: Ankette, çok küçük fd sorununu çözmek için seçim içindeki fd_set'i bir anket fd dizisi ile değiştirin.
  • Veri kopyalama: Kullanıcı alanı ve çekirdek alanı, bağlantıya hazır durum bilgilerini kopyalayın.

epoll, olaya dayalı:

  • Olay mekanizması: Doğrusal taramayı önlemek için, her fd için bir dinleyici olayı kaydedin. Fd hazır olarak değiştirildiğinde, hazır listesine fd ekleyin.
  • fd miktarı: Sınırsız (İşletim sistemi düzeyi sınırlaması, tek bir işlemle kaç tane fd açılabileceği).

seç, anket, epoll:

  • G / Ç çoğullama mekanizması.
  • G / Ç çoğullama, birden çok tanımlayıcıyı izlemek için bir mekanizma kullanır.Bir tanımlayıcı hazır olduğunda (genellikle okuma veya yazma), programa karşılık gelen okuma ve yazma işlemlerini gerçekleştirmesi için bildirimde bulunabilir; birden fazla dosyayı izleyebilir Tanımlayıcı.
  • Ancak seçme, sorgulama ve epoll temelde eşzamanlı I / O'dur: kullanıcı işlemi okuma ve yazmadan sorumludur (çekirdek alanından kullanıcı alanına kopyalama), kullanıcı işlemi okuma ve yazma işlemi sırasında engellenir; eşzamansız GÇ, kullanıcı işleminin okuma ve yazmadan sorumlu olmasını gerektirmez Asynchronous IO, çekirdek alanından kullanıcı alanına kopyalamadan sorumlu olacaktır.

Nginx'in eşzamanlı işleme yeteneği Nginx'in eşzamanlı işlem yeteneği ile ilgili olarak: eşzamanlı bağlantıların sayısı, genel optimizasyondan sonra, tepe değeri yaklaşık 1 ~ 3w'de tutulabilir. (Bellek ve CPU çekirdek numaraları farklıdır, daha fazla optimizasyon için yer olacaktır).

Huawei, buna benzeyen "dünyanın en hızlı Wi-Fi 6 + 5G yönlendiricisini" piyasaya sürdü
önceki
Kademeli motorlar yüksek maliyetli servo motorların yerini alabilir mi? neden?
Sonraki
Siemens V90 PTI konum kontrolündeki yaygın sorunların özeti
PLC röle çıkışı ile transistör çıkışı arasındaki prensip ve fark
Siemens S7-1500 ve servo kontrolörün programlama ve konfigürasyonu
İnanılmaz! "Mucize Hastanesi"! Yabancı medya ve yabancı netizenler "China Speed" e övgüde bulundu
"Ben kahraman değilim, ama asla firar etmiyorum!"
"Çin'de şu şeyler" yabancı medyası: Çin neden on günde iki hastane inşa edebiliyor?
İran: Meşru müdafaa biter. Trump: Hepsi iyi
Yeni yılda, Çin'i ziyaret eden ilk yabancı misafir dalgası onlar! Üç "sıradışı"
80'lerin sonrasındaki kendi kendini tayin eden başkanı Gao Guang, bir yıl sonra yalnızlığa son veriyor! İçeri giremedim, duvarın üzerinde durduruldum
ABD-İran çatışması tırmanırken, Trump'ın arka bahçesi alev aldı! Bolton bozmak için burada
En iyi ve güçlü olanı seçin, 70'ler sonrası yeni CPPCC'nin başkanı olarak görev yapacak
Trump, İranlı yıldızı öldürmekten biraz korkuyor! 3 beklenmedik
To Top