Был ли опыт оптимизации производительности систем или баз данных
Что проверяют
Умеете ли вы искать узкое место измерением, а не догадкой, и понимаете ли, где тормозит именно Node.js. Следом почти всегда спрашивают: как вы измеряли до и после, и что сделали бы, если бы кэш не помог.
Как отвечать
Нужна одна своя история с цифрами, выстроенная по порядку: симптом, метрика, диагностика, изменение, результат. Назовите, какую метрику двигали (p95 времени ответа, RPS, нагрузка на CPU базы) и каким был исходный уровень.
Инструменты, которые стоит назвать по делу:
- профилирование процесса:
node --cpu-prof,--inspectс Chrome DevTools, flame graph; для задержек цикла событийperf_hooks.monitorEventLoopDelay(); - база:
EXPLAIN ANALYZEиpg_stat_statementsв PostgreSQL,explain("executionStats")в MongoDB, лог медленных запросов; - трассировка: OpenTelemetry или APM, чтобы увидеть, сколько времени запрос провёл в коде, а сколько в базе;
- нагрузка: autocannon или k6, чтобы сравнить до и после в одинаковых условиях.
Типичные находки в Node-сервисе: синхронный код в обработчике (JSON.parse огромного тела, fs.readFileSync, тяжёлая регулярка), N+1 запросов через ORM вроде Prisma или TypeORM, последовательные await там, где запросы независимы, маленький пул соединений (у pg.Pool по умолчанию 10) или, наоборот, Promise.all на тысячу элементов без ограничения параллелизма. CPU-задачи уносят в worker_threads.
Если такого опыта в продакшене не было, скажите прямо и расскажите про учебный или свой проект: нагрузили autocannon, нашли медленный запрос, добавили индекс, показали разницу. Честный маленький пример сильнее выдуманных «ускорили на 60%».
Где спотыкаются
Начинают с «поставил Redis». Кэш без замеров прячет проблему и приносит новую: инвалидацию и устаревшие данные.
Называют круглый процент без базы и метода: не ясно, среднее это или p95 и на какой нагрузке. Следующий вопрос обычно вскрывает, что замера не было.
Считают, что async делает CPU-тяжёлый код неблокирующим. Цикл событий один, и синхронная работа внутри async-функции всё равно останавливает все остальные запросы.