Выбор ответа Middle Кластер, воркеры, масштабирование спрашивают часто обновлено
cluster или worker_threads
Вопрос
Сервер на 8 ядрах, обработчик генерирует превью картинки и на 300 мс грузит CPU. Остальные запросы в это время висят. Что решает именно эту проблему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Вынести генерацию превью в пул workerthreads. Проблема в том, что синхронная CPU-работа блокирует event loop своего процесса.
Варианты ответа
- Вынести генерацию превью в пул
worker_threadsправильный ответ clusterна 8 процессов, по одному на ядро- Увеличить
UV_THREADPOOL_SIZEдо числа ядер - Перейти с Express на Fastify ради скорости
Разбор
Проблема в том, что синхронная CPU-работа блокирует event loop своего процесса. Воркер выполняет её в отдельном потоке, и цикл остаётся свободным.
- cluster даст 8 процессов, но каждый всё равно блокируется на своём превью: при 8 одновременных превью снова всё висит. Он увеличивает пропускную способность, а не убирает блокировку.
- Пул libuv обслуживает встроенные операции (fs, crypto), твой JS-код он не выполняет.
- Фреймворк ускоряет маршрутизацию, но не убирает синхронное вычисление.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Память у воркеров cluster
Следующий вопрос
setInterval-крон при нескольких экземплярах
Термины по теме
Ещё по теме «Кластер, воркеры, масштабирование»
- Консистентное хеширование с виртуальными узлами
- Балансировка least connections
- Плавный взвешенный round-robin как в nginx
- Код-ревью: сервис перед масштабированием в 4 инстанса
- Модуль cluster
- cluster внутри Kubernetes
- Флаг --max-old-space-size
- Как Node.js использует несколько ядер