Выбор ответа Middle Кластер, воркеры, масштабирование обновлено
Ускорят ли воркеры запросы к базе
Вопрос
Коллега предлагает выносить каждый SQL-запрос в worker_threads, «чтобы не блокировать event loop». Что ответить?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Не нужно: драйвер асинхронный, воркеры добавят накладные расходы. Запрос к базе это сетевой ввод-вывод: пока база думает, поток свободен.
Варианты ответа
- Хорошая идея: запросы к БД блокируют цикл, пока база отвечает
- Нужно, но через cluster, а не воркеры, так дешевле
- Не нужно: драйвер асинхронный, воркеры добавят накладные расходыправильный ответ
- Нужно только для SELECT, а запросы на запись и так идут асинхронно
Разбор
Запрос к базе это сетевой ввод-вывод: пока база думает, поток свободен. Воркер только добавит копирование данных, отдельный экземпляр V8 и усложнит пул соединений.
- Блокирует цикл синхронная CPU-работа, а не ожидание сети.
- cluster тоже не нужен для этой цели.
- Тип запроса на асинхронность драйвера не влияет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Передача данных в worker_threads
Следующий вопрос
Утечка памяти в проде: план действий
Термины по теме
Ещё по теме «Кластер, воркеры, масштабирование»
- Консистентное хеширование с виртуальными узлами
- Балансировка least connections
- Плавный взвешенный round-robin как в nginx
- Код-ревью: сервис перед масштабированием в 4 инстанса
- Модуль cluster
- cluster внутри Kubernetes
- Память у воркеров cluster
- cluster или worker_threads