Чи буде виконуватися підтримка Multi-Core/Multi-Proc на веб-сервері?

Чи використовує NGINX або Apache сервер, який має:

  • багатоядерні чи

  • Кілька процесорів?

Якщо так, то чому?

1

3 Відповіді

Використання декількох процесорів/CPU-Cores дає серверним додаткам можливість паралельно обробляти кілька клієнтських з'єднань (і запитів) (досягнення більшої продуктивності).

У світі багатоядерних процесорів це питання було предметом широких досліджень.

Існує 3 способи вирішення паралелізму (наприклад, багатоядерні процесори):

  1. використовуючи кілька процесів;

  2. використовуючи кілька потоків в одному процесі;

  3. використовуючи декілька потоків у декількох процесах.

Apache дослідив кілька моделей, і Nginx використовує варіант №1.

Яка модель краще працює, як правило, розглядається як питання впровадження (принаймні під Unix, де процеси дуже легкі, щоб вони могли конкурувати з потоками).

Тепер, повернувшись до питання, мій припущення (на основі тестів для читання опубліковано тут ) буде те, що належна (багатопотокова) архітектура Apache повинна бути кращою, ніж Nginx на багатоядерних процесорах.

Парадоксальним чином це не означає, що Apache працює швидше, ніж Nginx: це просто означає, що на 1, 2, 3, ... 16 ядер, Apache буде набагато краще, ніж Nginx. WHILE Nginx буде обробляти більше клієнтських запитів:

  • Продуктивність повинна бути швидкою (обробка більше запитів у секунду на одноядерному процесорі)

  • Масштабованість - це можливість обробляти більше запитів за секунду, коли кількість процесорних ядер зростає (ідеал для лінійного масштабування: подвоєння запитів за секунду при подвоєнні кількості процесорних ядер).

Масштабування без продуктивності безглуздо, якщо кількість запитів у секунді на сервері, що має масштаб, не поступається швидкості сервера, який не має масштабу (зауважте, що, якщо сервер дійсно добре масштабується, існує така точка, в якій MANY CIRDS повинні зробити його продуктивним краще, ніж сервер, який не має масштабу).

Виконання без масштабування робить сервер нездатним скористатися перевагами багатоядерних процесорів.

Майбутнє, безумовно, буде зроблено з серверних додатків, котрі обидва правильно, щоб забезпечити найкращу продуктивність за всіх умов (всього декілька ядер або багато-багато ядер).

3
додано

Так.

Я припускаю, що ваше запитання полягає в тому, чи краще один або інший?

У такому випадку це досить складне питання, але, як правило, я очікую, що кілька процесорів будуть працювати краще.

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

Nginx запускає нові процеси для кожного запиту клієнта, так що, хоча це не багатопотокове (добре ... уникає проблем із потоками), операційна система може скористатися перевагами декількох ядер/процесорів шляхом планування кожного процесу на іншому процесорі.

0
додано
Але чому продуктивність буде кращою? Чи є багатопотокові NGINX або Apache та інші?
додано Автор nickb, джерело
Використовуючи це посилання, яке ви надіслали, на слайді № 5 посилання нижче вказується, що NGINX є однопоточною. У такому випадку, чому б мати багатомовний/proc вигоди? slideshare.net/joshzhu/nginx-internals
додано Автор nickb, джерело

Тільки багатопотокові системи будуть мати користь від багатоядерних процесорів. Я знаю, що Apache багатопоточний, і його продуктивність зростає з багатоядерними. Як правило, продуктивність зростає з багатоядерними, якщо робота повинна бути поділена на невеликі шматки роботи, які не повинні залежати один від одного. Apache запускає процеси, щоб обслуговувати веб-запити, а різні запити можуть працювати одночасно на декількох ядрах, тим самим підвищуючи продуктивність. Якщо NGINX є однопоточеним, то він не буде використовувати багатоядерний процесор.

Багатоядерні/багатопроцесорні є однаковими в цьому контексті.

0
додано