Візьмемо прагматичний підхід.
Усі ці межі - це речі, які були жорстко кодовані і розроблені в минулому столітті, коли обладнання було повільним і дорогим. Зараз ми в 2016 році, середній тостер зі стінами-мартами може обробити більше запитів, ніж значення за замовчуванням.
Налаштування за замовчуванням насправді небезпечні. Маючи сотні користувачів на веб-сайті, це нічого вражаючого.
робочий_процес
Пов'язане налаштування, давайте пояснимо це, поки ми розбираємося з цією темою.
nginx як балансир навантаження:
- 1 працівник для балансування навантаження HTTP.
- 1 працівник на ядро для збалансування навантаження HTTPS.
nginx як веб-сервери:
Цей хитрий.
Деякі програми / фреймворки / середнє програмне забезпечення (наприклад, php-fpm) виконуються поза nginx. У такому випадку достатньо 1 працівника nginx, оскільки це, як правило, зовнішня програма, яка робить важку обробку та поїдає ресурси.
Крім того, деякі програми / фреймворки / проміжне програмне забезпечення можуть обробляти лише один запит за один раз, і перевантажувати їх потрібно заново.
Взагалі кажучи, 1 працівник - це завжди безпечна ставка.
В іншому випадку ви можете покласти одного працівника на ядро, якщо знаєте, що робите. Я вважаю, що цей маршрут є оптимізацією і радить належне тестування та тестування.
робочі_з'єднання
Загальна кількість з'єднань становить worker_process * worker_connections
. Половина в режимі балансування навантаження.
Тепер ми доходимо до тостерної частини. Існує багато серйозно занижених системних обмежень:
- ulimits - це 1 ккс максимум відкритих файлів за один процес на Linux (1 к. м., 4 кп. на деяких дистрибутивах)
- обмеження системи приблизно такі ж, як і ulimits.
- За замовчуванням nginx - 512 підключень на одного працівника.
- Можливо, буде більше: SELinux, sysctl, supervisord (кожен дистрибутив + версія дещо відрізняється)
1 к. Підключень
Безпечним замовчуванням є розміщення 1k скрізь.
Це досить високо, щоб було більше, ніж коли-небудь зустрічаються внутрішні та невідомі сайти. Він досить низький, щоб не потрапляти на будь-які інші обмеження системи.
10 к. Підключень
Дуже часто зустрічаються тисячі клієнтів, особливо для публічного веб-сайту. Я перестав рахувати кількість веб-сайтів, які я бачив, знизився через низькі значення за замовчуванням.
Мінімально прийнятний для виробництва - 10 к. Необхідно збільшити обмеження, пов'язані з системою, щоб дозволити це.
Не існує такого поняття, як занадто високий ліміт (ліміт просто не має ефекту, якщо немає користувачів). Однак занадто низький ліміт - це дуже реальна річ, що призводить до відхилених користувачів та мертвого сайту.
Більше 10 к
10k приємно і легко.
Ми можемо встановити довільні обмеження в 1000 кк (зрештою, це лише обмеження), але це не має особливого практичного сенсу, ми ніколи не отримуємо цей трафік і не зможемо взяти його в будь-якому випадку.
Давайте дотримуватись 10k як розумну настройку. Послуги, які будуть (і справді можуть зробити) більше, вимагатимуть спеціальної настройки та бенчмаркінгу.
Спеціальний сценарій: розширене використання
Іноді ми знаємо, що на сервері не так багато ресурсів, і ми очікуємо сплески, про які ми не можемо багато чого зробити. Ми швидше відмовлятимемося від користувачів, ніж намагаємось. У цьому випадку поставте розумний ліміт підключення та налаштуйте приємні повідомлення про помилки та обробку.
Іноді сервери бекенда працюють добре і добре, але лише до деякого навантаження , нічого іншого і все швидко йде на південь. Ми скоріше сповільнимось, ніж збиваються сервери. У цьому випадку налаштуйте чергу з чіткими обмеженнями, нехай nginx буферизує все тепло, поки запити зливаються з обмеженим темпом.