Что такое 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 и контекст запроса в логах.