Проверяет понимание stateless-архитектуры и способов выноса состояния из процесса приложения во внешние хранилища.
Stateless-приложение не хранит пользовательское состояние между запросами в собственной памяти. Каждый запрос должен быть самодостаточным: сервер получает все нужные данные из запроса или из внешнего хранилища. Это ключевое условие горизонтального масштабирования, потому что любой инстанс может обработать любой запрос.
// Express + Redis: сессия хранится вне процесса
const session = require('express-session');
const RedisStore = require('connect-redis').default;
const { createClient } = require('redis');
const redisClient = createClient({ url: 'redis://localhost:6379' });
redisClient.connect();
app.use(session({
store: new RedisStore({ client: redisClient }),
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: { httpOnly: true, maxAge: 3600000 }
}));
// Любой инстанс приложения читает сессию из Redis
app.get('/profile', (req, res) => {
if (!req.session.userId) return res.status(401).end();
res.json({ userId: req.session.userId });
});Альтернатива — вообще не хранить сессию на сервере. Клиент получает подписанный токен и присылает его в заголовке Authorization. Сервер проверяет подпись и извлекает данные. Минус — сложнее отзывать токены, поэтому часто добавляют blacklist в Redis.
Итог: в stateless-приложении состояние выносят в Redis, БД, брокеры или на клиент. Это даёт масштабируемость и отказоустойчивость, но требует продуманной стратегии инвалидации и безопасности.