PassFront
  1. PassFront
  2. База знаний
  3. Производительность и production

Что такое AsyncLocalStorage и когда он нужен?

Производительность и production

AsyncLocalStorage — хранилище, привязанное к цепочке асинхронных вызовов: данные, положенные в начале запроса, доступны в любой функции внутри него, без передачи аргументов.

Зачем

Нужно протащить через весь код requestId, пользователя или транзакцию БД. Передавать их параметром в каждую функцию неудобно, а глобальная переменная смешает данные разных запросов, ведь Node.js обрабатывает их одновременно.

import { AsyncLocalStorage } from 'node:async_hooks';

const als = new AsyncLocalStorage();

app.use((req, res, next) => {
  als.run({ requestId: crypto.randomUUID() }, next);
});

function log(message) {
  const ctx = als.getStore();
  console.log(ctx?.requestId, message);
}

Применение

Сквозное логирование с идентификатором запроса, трассировка, мультитенантность, контекст транзакции.

Ограничения

Небольшая накладная стоимость на каждую асинхронную операцию. Контекст теряется, если код использует нестандартные пулы без поддержки async-контекста.

Коротко для собеседования

AsyncLocalStorage — «локальные переменные потока» для асинхронного кода. Основной сценарий: requestId и контекст запроса в логах.

Другие вопросы раздела