Bir web sunucusunda Çok Çekirdekli/Çok Proc yardım performansı olacak mı?

NGINX veya Apache, aşağıdakilerden herhangi birine sahip bir sunucudan yararlanır:

  • Çok çekirdekli veya

  • Birden çok işlemci?

Öyleyse neden?

1

3 cevap

Birkaç CPU/CPU-Cores kullanarak sunucu uygulamalarına paralel olarak birden fazla istemci bağlantısını (ve isteklerini) işleme olanağı verir (daha yüksek performans elde etmek).

Çok çekirdekli işlemciler dünyasında, bu konu kapsamlı bir araştırmaya konu olmuştur.

Paralelizmi ele almak için 3 yol vardır (çok çekirdekli CPU'lar gibi):

  1. birkaç işlemi kullanarak;

  2. tek bir işlemde birkaç iş parçacığı kullanarak;

  3. birkaç işlemde birkaç iş parçacığı kullanarak.

Apache birkaç modeli araştırdı ve Nginx 1 numaralı seçeneği kullanıyor.

Hangi modelin daha iyi performans göstermesi genellikle bir uygulama meselesi olarak kabul edilir (en azından işlemlerin çok hafif olduğu Unix altında) ve böylece ipliklerle rekabet edebilirler.

Şimdi, benim tahminime dön (okuma testlerine dayanarak burada ), doğru (çok parçalı) Apache mimarisinin, çok çekirdekli CPU'larda Nginx'ten daha iyi ölçeklenmesi gerektiğidir.

Paradoksal olarak, Apache'nin Nginx'ten daha hızlı olduğu anlamına gelmez: sadece 1, 2, 3, ... 16 Çekirdek, Apache'nin Nginx'ten daha iyi ölçekleneceği anlamına gelir. WHILE Nginx daha fazla müşteri isteğini işleyebilir:

  • Performansın hızlı olması (tek çekirdekli bir CPU'da saniyede daha fazla istek işlenmesi)

  • Ölçeklenebilirlik, CPU Çekirdeği sayısı arttıkça saniye başına daha fazla istek işleme kabiliyetidir (ideal, doğrusal olarak ölçeklendirilir: CPU Çekirdeklerinin sayısını iki katına çıkardığınızda saniyedeki istekleri iki katına çıkarmaktır).

Ölçeklendirilmeyen sunucunun hızından daha düşük olan sunucu başına düşen istek sayısı sayısı ölçeklendirilemiyorsa, performans olmadan ölçeklendirme anlamsızdır (sunucu gerçekten GERÇEKTEN ölçeklendirilirse MANY Çekirdeklerinin gerçekleştirmesi gereken bir nokta vardır) ölçeklemeyen sunucudan daha iyi).

Ölçeklendirme olmadan gerçekleştirme, bir sunucunun çok çekirdekli CPU'lardan yararlanamamasıdır.

Gelecek, her koşulda (sadece birkaç Çekirdek veya çok sayıda Çekirdek) en iyi performansı sağlamak için her ikisini de doğru yapan sunucu uygulamalarından kesinlikle yapılacaktır.

3
katma

Evet.

Sorunun, birinin mi, diğerinin mi daha iyi olduğunu varsayalım mı?

Bu durumda, oldukça karmaşık bir soru, ancak genellikle birden çok işlemcinin daha iyi performans göstermesini beklerdim.

Here's a good answer describing the architecture of both: nginx : Its Multithreaded but uses multiple processes?

Nginx, her istemci isteği için yeni bir işlem başlatır, bu yüzden çok iş parçacıklı olmamasına rağmen (iyi ... iş parçacığı sorunlarını önler), işletim sistemi her bir işlemi farklı bir işlemci üzerinde planlayarak birden fazla çekirdek/cpu'dan faydalanabilir.

0
katma
Fakat performans neden daha iyi olur? NGINX veya Apache çok iş parçacıklı, vb?
katma yazar nickb, kaynak
Gönderdiğiniz bu bağlantıyı kullanarak, aşağıdaki linkin 5 numaralı satırında NGINX'in tek bir iş parçacığı olduğunu söylüyor. Bu durumda, neden çoklu çekirdek/proc yararı olur? slideshare.net/joshzhu/nginx-internals
katma yazar nickb, kaynak

Çok çekirdekli sistemler çok çekirdekten faydalanacaktır. Apache'nin çok iş parçacıklı olduğunu ve performansının çok çekirdekli olarak arttığını biliyorum. Tipik olarak, yapılacak iş, birbirine bağımlı olması gerekmeyen küçük iş bölümlerine ayrılırsa, performans çok çekirdekli olarak yükselir. Apache, web istekleri sunmak için süreçleri başlatır ve farklı istekler, birden çok çekirdek üzerinde eşzamanlı olarak çalışabilir, böylece performansı artırır. NGINX tek iş parçacıklıysa, çok çekirdekten faydalanmayacaktır.

Çok çekirdekli/çoklu işlemci bu bağlamda aynı şeydir.

0
katma