Проверяет понимание stateless-архитектуры и её роли в горизонтальном масштабировании и отказоустойчивости систем.
Stateless-приложение — это сервис, который не сохраняет данные о предыдущих взаимодействиях с клиентом в своей памяти или на локальном диске. Каждый входящий запрос рассматривается как независимый и самодостаточный: он содержит токен, идентификатор пользователя или другие данные, необходимые для обработки. Сервер не помнит, что происходило в прошлом запросе.
Когда приложение хранит состояние локально (например, сессию в памяти процесса), возникает проблема привязки клиента к конкретному инстансу. Пользователь должен всегда попадать на тот же сервер, иначе его сессия потеряется. Это называется sticky sessions и сильно усложняет балансировку.
Плохой пример — хранение сессии в памяти процесса:
// Stateful: сессия живёт в памяти конкретного сервера
const sessions = {};
app.post('/login', (req, res) => {
const sid = generateId();
sessions[sid] = { userId: req.body.userId };
res.cookie('sid', sid);
});
app.get('/profile', (req, res) => {
const user = sessions[req.cookies.sid]; // работает только на этом сервере
res.json(user);
});Хороший пример — состояние передаётся в токене или хранится во внешнем хранилище:
// Stateless: вся информация в JWT, сервер ничего не помнит
app.get('/profile', (req, res) => {
const token = req.headers.authorization?.split(' ')[1];
const payload = verifyJwt(token); // проверяем подпись
res.json({ userId: payload.userId });
});Stateless-подход лежит в основе REST API, микросервисов, serverless-функций и контейнеризованных приложений. Если нужно хранить состояние, его выносят во внешние сервисы: Redis для сессий, базу данных для пользовательских данных, S3 для файлов. Само приложение остаётся «тонким» и легко масштабируемым.
Итог: stateless-архитектуру стоит применять везде, где планируется горизонтальное масштабирование, отказоустойчивость и работа в облаке. Состояние выносится во внешние хранилища, а сами инстансы приложения становятся взаимозаменяемыми.