Що саме являє собою модель веб-сервера перед форком?


94

Я хочу знати, що саме це означає, коли веб-сервер описує себе як веб-сервер перед форком. У мене є кілька прикладів, таких як єдиноріг для рубіну та гарнігор для пітона.

Більш конкретно, це питання:

  • Яку проблему вирішує ця модель?
  • Що відбувається при початковому запуску веб-сервера перед форком?
  • Як він обробляє запит?

Крім того, більш конкретне запитання щодо єдинорога / гарнігора:

Скажімо, у мене є веб-додаток, який я хочу запускати з (g) єдинорогом. Під час ініціалізації веб-додаток виконуватиме деякі дії щодо ініціалізації (наприклад, заповнюватиме додаткові записи в базі даних). Якщо я налаштую (g) unicorn на декількох робітників, чи буде ініціалізація запущена кілька разів?

Відповіді:


102

Попереднє розгалуження в основному означає, що майстер створює розгалуження, які обробляють кожен запит. Вилка - це абсолютно окремий процес * nix.

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

Попереднє розгалуження можна використовувати, якщо у вас є бібліотеки, які НЕ є потокобезпечними. Це також означає, що проблеми в запиті, що спричиняють проблеми, впливатимуть лише на процес, яким вони обробляються, а не на весь сервер.

Ініціалізація, що виконується кілька разів, залежить від того, що ви розгортаєте. Зазвичай, однак, для кожного процесу існували б пули з'єднань та подібні матеріали.

У моделі різьбових потоків майстер також створює потоки з меншою вагою для надсилання запитів. Але якщо потік викликає серйозні проблеми, це може мати наслідки для головного процесу.

За допомогою таких інструментів, як Nginx, Apache 2.4's Event MPM або gevent (які можна використовувати з Gunicorn), це асинхронне значення, що процес може обробляти сотні запитів, не блокуючи їх.


29
У мене був такий самий сумнів щодо значення "префорк". Я гадав, що це означало якесь роздвоєння, природно, але "попередня" частина мене бентежила. Я знайшов тут абревіатури.com/prefork, що частина "pre" насправді означає, що робочі процеси створюються заздалегідь, так що час не витрачається на розгалуження лише тоді, коли потрібен робітник. Мені це дуже зрозуміло :)
El Ninja Trepador

1
//, @ElNinjaTrepador, чому б не додати окрему відповідь? Щонайменше це було для мене набагато зрозумілішим, і це може допомогти іншим більше, якщо цей коментар отримає більш помітне місце.
Натан Басанес

2
Я оновив відповідь, щоб додати трохи більше інформації про pre в for-fork. @ElNinjaTrepador дякую, що вказав на це, я не розумів, що це було недостатньо відомо.
Джо Доерті

1
@NathanBasanese зробить сер;)
El Ninja Trepador

4
@JoeDoherty, можливо, це добре відомо, я просто не був відомий мною до того часу: DI збирався додати ще одну відповідь (згідно з проханням Натана), але оскільки ви додали сказане мною до вашого, це більше не потрібно: )
El Ninja Trepador
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.