Ответ вслух Senior HTTP, WSGI и ASGI обновлено

Сколько воркеров ставить и почему

Вопрос

Как вы выбираете число воркеров и тип воркеров для Python-сервиса?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Сначала смотрю, на что уходит время запроса. Если это короткая работа с базой и немного CPU, беру sync-воркеры gunicorn, отправная точка 2 CPU + 1, и ограничиваю сверху памятью: каждый воркер это отдельный процесс с копией приложения.

Что должно прозвучать в ответе

  • Характер нагрузки: CPU, ожидание I/O, длительность запросов

  • Sync-воркеры: отправная точка 2*CPU+1, ограничение памятью

  • Потоки (gthread) или async при большом ожидании I/O

  • Нагрузочный тест и метрики: латентность, очередь, CPU, память

  • Таймауты, max_requests против утечек, graceful shutdown

  • Горизонтальное масштабирование инстансами

Что могут спросить следом

  • Что такое max_requests и max_requests_jitter?
  • Чем ограничено число воркеров сверху?

Разбор

Образцовый ответ: «Сначала смотрю, на что уходит время запроса. Если это короткая работа с базой и немного CPU, беру sync-воркеры gunicorn, отправная точка 2 * CPU + 1, и ограничиваю сверху памятью: каждый воркер это отдельный процесс с копией приложения. Если запросы долго ждут внешние сервисы, процессов понадобится слишком много, тогда беру потоки (gthread) или асинхронный стек на uvicorn, где один процесс держит много ожиданий; для uvicorn процессов обычно около числа ядер. Потом подтверждаю выбор нагрузочным тестом: смотрю p95 латентности, загрузку CPU, память, растёт ли очередь соединений. Обязательно ставлю таймауты на воркер и на все внешние вызовы, max_requests с джиттером для защиты от утечек памяти, корректное завершение при деплое. Дальше масштабирую горизонтально: больше подов или инстансов за балансировщиком».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.