Нагрузка выросла в 10 раз: что делаешь
Вопрос
Нагрузка на Node-сервис выросла в 10 раз, ответы стали медленными. Как будешь действовать?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Сначала измерить: метрики задержки, event loop lag, CPU, память, узкое место (БД, внешний API, CPU)
Если CPU и блокировки цикла: профилирование (--cpu-prof, clinic), вынос тяжёлого в воркеры
Сделать сервис stateless и масштабировать репликами
База часто узкое место: индексы, пул соединений, реплики на чтение, кеш
Кеш и очереди для тяжёлых и необязательных операций
Нагрузочное тестирование (k6, autocannon) до и после
Что могут спросить следом
- Как измерить задержку event loop?
- Что делать, если упёрлись в лимит соединений к PostgreSQL?
Разбор
Первым делом измеряю, а не добавляю серверы вслепую. Смотрю задержку по маршрутам, задержку event loop через monitorEventLoopDelay, загрузку CPU и памяти, время запросов к базе и внешним сервисам. Нужно понять, где узкое место.
Если процесс упирается в CPU или цикл блокируется, снимаю профиль через --cpu-prof и ищу горячие функции: часто это синхронный JSON на больших объектах или тяжёлые регулярки. Вычисления выношу в воркеры.
Если сервис stateless, добавляю реплики за балансировщиком. Тогда обычно следующим узким местом становится база: проверяю медленные запросы и индексы, ставлю PgBouncer, если не хватает соединений, читаю с реплик, кеширую горячие данные в Redis.
Всё, что не нужно делать в ответе пользователю, например письма и отчёты, увожу в очередь. И проверяю результат нагрузочным тестом через k6 или autocannon, сравнивая с исходными цифрами.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Как Node.js использует несколько ядер
Следующий вопрос
Что мешает горизонтальному масштабированию
Термины по теме
Ещё по теме «Кластер, воркеры, масштабирование»
- Консистентное хеширование с виртуальными узлами
- Балансировка least connections
- Плавный взвешенный round-robin как в nginx
- Код-ревью: сервис перед масштабированием в 4 инстанса
- Модуль cluster
- cluster внутри Kubernetes
- Память у воркеров cluster
- cluster или worker_threads