Ответ
Stateful (с сохранением состояния) — это архитектурный подход, при котором сервер хранит информацию о состоянии клиента (сессию) между отдельными запросами. Каждый последующий запрос от того же клиента обрабатывается в контексте данных, сохраненных от предыдущих запросов.
Ключевые характеристики:
- Зависимость между запросами: Сервер «помнит» клиента. Обработка текущего запроса зависит от истории взаимодействия.
- Хранение состояния на сервере: Данные сессии (корзина покупок, данные формы, прогресс) хранятся в памяти сервера, в общей памяти (например, Redis) или в базе данных.
- Идентификация клиента: Для связывания запроса с конкретной сессией используется идентификатор (Session ID), который обычно передается через cookie или параметр URL.
Типичный пример в PHP:
// Начало сессии (состояние хранится на сервере, ID — в cookie PHPSESSID)
session_start();
// Инициализация или использование состояния
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = []; // Создаем пустую корзину при первом визите
}
// Добавление товара в корзину (состояние сохраняется между запросами)
$_SESSION['cart'][] = ['product_id' => 123, 'quantity' => 2];
// В другом запросе корзина будет доступна
echo 'Товаров в корзине: ' . count($_SESSION['cart']);
Где используется:
- Аутентификация пользователей (логин/сессия).
- Корзины покупок в интернет-магазинах.
- Многошаговые формы (wizards).
- Приложения в реальном времени с долгоживущими соединениями (WebSocket).
Недостатки:
- Сложность масштабирования: Для горизонтального масштабирования (несколько серверов) требуется общее хранилище сессий (например, Redis), иначе пользователь будет «привязан» к одному серверу (sticky sessions).
- Потребление ресурсов: Сервер должен выделять память/диск для хранения состояния всех активных клиентов.
- Снижение отказоустойчивости: Потеря сервера с состоянием может привести к потере данных сессии.
Stateful противопоставляется Stateless-архитектуре, где сервер не хранит состояние клиента между запросами.