Що встановити: Apache Worker або Prefork? Які (недо) переваги кожного?


55

Виходячи з описів як Prefork, так і Worker MPM, схоже, тип префорка дещо застарів, але я не можу знайти правильне порівняння двох типів.

Що я хотів би знати:

  • Які відмінності між двома версіями?
  • Які (()) переваги кожного типу серверів?
  • Чи є основні вказівки, який тип вибрати, виходячи з умов?
  • Чи є якісь великі відмінності між ними?

Відповіді:


40

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


3
Я рекомендував би MPM для працівника, якщо ви не працюєте з PHP. Worker - рекомендований MPM від apache, і забезпечує кращі показники та нижчі витрати. Тільки те, що розробник PHP ніколи не чув про безпеку потоку, що вам потрібно використовувати префорк.
Девід Пашлі

16
PHP дуже довго захищений від потоку. Вони лише пропонують використовувати попередні форкери, оскільки вони не можуть контролювати, що роблять інші бібліотеки. Перестаньте звинувачувати PHP в інших діях розробників.
Алістер Бульман

3
PHP може бути безпечним для потоків (хоча я сумніваюся в цьому), але всі бібліотеки, на які він посилається, точно не є. Тут ми запускаємо кілька досить великих PHP-програм і кожні пару місяців ми намагаємося перейти від префорка до робочого, але ми отримуємо пошкоджені дані відразу.
Олександр Іванишевич

5
Принаймні зміна функції ENV не буде безпечною для потоків, setlocal php.net/manual/en/function.setlocale.php є загальним прикладом цього.
радіус

4
Одне зауваження: Ці проблеми не застосовуються, якщо PHP додається, наприклад, php-fpmчерез FastCGI. Тоді MPM-робочий просто чудовий - тоді fpm буде запускати кожен PHP-запит у власному процесі, тоді як Apache може працювати з потоком. Проблема безпеки PHP-Thread лише запобігає використанню mod_php, яке запускає PHP всередині Apache.
mschuett

13

Класичне рішення для запуску небезпечних розширень при обслуговуванні великої кількості (> 100) одночасних з'єднань - це запуск PHP на fastCGI (mod_fcgid, власний модуль apache) та проксі-динамічні запити до цього з екземпляра apache, який запускає Worker MPM.

Це дозволить вам масштабувати від кількох сотень до> 1000 одночасних з'єднань зі скромним обсягом пам'яті (4 ~ 8 Гб), коли обслуговується суміш статичного та динамічного вмісту.

Звичайно, ви також повинні вивчити рішення кешування переднього типу як частину вашого загального розгортання (запам'ятована, лакована).

Крім того, оновіть до apache 2.4 та його вбудованого MPM події , який обробляє сумісність значно вдосконаленим способом (потоки вимикаються при з'єднанні, не чекаючи, що їх буде запитано.)


Ви можете розширити коментар про подію mpm? Як він складається в порівнянні з mpm-працівником?
Сірекс

У той час як MPM-робочий вже працював на потоці, а отже, набагато швидше запускається і легше запускається, MPM події більше не опитує сокет - він отримує сповіщення про активність; отже, "подія".
адаптор

тож краще працювати на сайтах з високим трафіком (13 к / с)?
Sirex

6

Минуло 3 роки з моменту опублікування запитання, але я б рекомендував вам піти з MPM-працівником замість попередньої вилки, навіть якщо використовуєте PHP, щоб отримати кращі показники.

Що стосується відмінностей, pre-fork не є потоковим, отже, сервер розщеплює процес для кожного запиту клієнта (він попередньо розщеплює в очікуванні нових запитів, щоб розгортання не потрапляло в час відповіді). Оскільки запити є серверними в окремому процесі, це, як правило, набагато більше оподатковує вашу пам'ять та процесор. Робітник приносить багатопотоковість, яка легша і краще використовує пам'ять.


2

Це щось дуже особливе до того, що ви обслуговуєте. Якщо ви робите багато маленьких статичних з'єднань, нитки будуть легшими та швидшими. Якщо у вас є лише кілька великих додатків, які постійно створюються, префорк може мати перевагу завдяки зрілості та стабільності. Чому б просто не встановити те, що вам потрібно, протестувати, замінити модуль MPM, спробувати його ще раз, побачити, який з них вам підходить краще?


Ви не можете довільно "поміняти" MPM в апач 2.2; він встановлюється під час компіляції.
адаптор

Можна з підхожим або RPM. У Debian є кілька різних пакетів Apache 2, залежно від того, який стиль ви надаєте перевагу.
Брендан Берд

1

що залежить від типу та типу трафіку, який ви матимете. А також спочатку потрібно зрозуміти головну різницю між префорком та робітником. Сподіваємось, наведена нижче стаття допоможе вам розібратися! http://slashroot.in/how-is-nginx-different-from-apache


2
Ми вважаємо за краще відповіді мати вміст, а не посилання на зміст. Якщо ви можете надати короткий опис того, що знаходиться у цілі посилання, це найкраща практика. Відбувається зв’язок гниття.
sysadmin1138

1
Питання стосувалося Apache (nginx - це не apache) та відносних достоїнств префорка чи ниток (nginx не використовує жодного)
symcbean
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.