Выбор ответа Middle Кластер, воркеры, масштабирование обновлено

Ускорят ли воркеры запросы к базе

Вопрос

Коллега предлагает выносить каждый SQL-запрос в worker_threads, «чтобы не блокировать event loop». Что ответить?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Не нужно: драйвер асинхронный, воркеры добавят накладные расходы. Запрос к базе это сетевой ввод-вывод: пока база думает, поток свободен.

Варианты ответа

  1. Хорошая идея: запросы к БД блокируют цикл, пока база отвечает
  2. Нужно, но через cluster, а не воркеры, так дешевле
  3. Не нужно: драйвер асинхронный, воркеры добавят накладные расходыправильный ответ
  4. Нужно только для SELECT, а запросы на запись и так идут асинхронно

Разбор

Запрос к базе это сетевой ввод-вывод: пока база думает, поток свободен. Воркер только добавит копирование данных, отдельный экземпляр V8 и усложнит пул соединений.

  • Блокирует цикл синхронная CPU-работа, а не ожидание сети.
  • cluster тоже не нужен для этой цели.
  • Тип запроса на асинхронность драйвера не влияет.

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

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

Термины по теме