Перейти к основному содержимому
Решение

Удерживайте каждую пользовательскую сессию на нужном backend

9 методов персистентности — от source-IP хэширования до SAM, настраиваемого cookie-движка TR7 с 4 источниками cookie, 4 форматами сессий, 4 флагами безопасности

Корзины покупок, авторизованные дашборды, банковские сессии, RDP-шлюзы — как только пользователь начинает stateful-поток, каждый последующий запрос должен попадать на тот же backend. Source-IP работает, пока пользователи не сидят за NAT. Обычные cookie работают, пока их не отсекают. TR7 ADC поставляется с 9 методами персистентности, чтобы правильный всегда был доступен — выбирается per vService, без компромиссов.

9
Методов персистентности сессий в комплекте
2 × 4 × 4
Источник cookie SAM × формат сессии × комбинации флагов безопасности
per vService
Метод персистентности — меняется вживую без перезапуска

Когда балансировка нагрузки ломает сессии

Round-robin по замыслу отправляет каждый запрос на разный backend. Для stateless-сервисов это идеально. Но как только пользователь входит в систему, наполняет корзину или начинает удалённый рабочий стол, приложение начинает хранить состояние на одном конкретном backend. Если запрос №2 попадёт на другой — пользователь увидит пустую корзину, экран выхода из системы или зависшую RDP-сессию.

Персистентность сессий (или «affinity») решает это, закрепляя пользователя за выбранным backend на время сессии. Загвоздка в том, что нет единственно верного способа привязки. Source-IP работает для пользователей с уникальными IP, но ломается за корпоративным NAT. Cookie работают в браузерах, но не для raw TCP. URL-parameter hash работает для stateless URL, но не для user-scoped потоков. Каждый метод правильный в своём контексте.

Ответ — поставлять все методы и выбирать per vService.

Выберите метод персистентности, per vService

Каждый vService выбирает метод персистентности из выпадающего списка — наряду с алгоритмом балансировки нагрузки. Оба слоя независимы: выберите Fastest+ для выбора backend и TR7 cookie для affinity, или round-robin с source-IP, или любую комбинацию под нагрузку. Выбор метода — горячая замена, без перезапуска.

9 методов в комплекте

Пять самоперсистентных алгоритмов балансировки (source, URI, URL-param, header, RDP-cookie) плюс четыре явных метода персистентности (TR7 cookie, backend cookie, dynamic, SAM). Охватывают все распространённые случаи.

SAM — полный контроль над cookie

Session Affinity Manager позволяет задать источник cookie (генерируется TR7 или backend), формат сессии (UUID, IP-timestamp-random, IP-random, custom) и флаги безопасности (HttpOnly, Secure, SameSite=Strict/Lax) — без изменений в коде backend.

Компонуется с любым алгоритмом ADC

Персистентность работает поверх алгоритма балансировки нагрузки: алгоритм выбирает backend для первого запроса, персистентность закрепляет остальные. Fastest+ для cold-start, sticky cookie для сессии — работает вместе.

Горячая замена (без перезапуска)

Измените метод персистентности на работающем vService — новые сессии немедленно примут новый метод. Существующие закреплённые сессии продолжатся без прерывания до истечения.

9 методов персистентности сессий в комплекте

Выберите метод, подходящий для протокола, популяции клиентов и модели сессий приложения. Все 9 доступны per vService — без кода, без плагина. Девять — это число именованных методов: метод динамического хеша строит ключ из языка выражений, поэтому набор ключей, по которым можно закреплять сессию, девятью не ограничен.

Source-IP

Один и тот же клиентский IP всегда попадает на один и тот же backend. Простой, без кода, работает для любого протокола. Оптимален когда клиентские IP разнообразны — ломается за общим NAT или корпоративными прокси.

URI-length hash

Хэш по длине URL распределяет нагрузку по сложности URL, закрепляя идентичные URL на одном backend. Полезен для сценариев с cache-affinity.

URL-parameter hash

Хэш по конкретному query-параметру (например ?user_id, ?session_token). Маршрутизирует один и тот же user-scoped запрос на один backend без использования cookie.

Header hash

Хэш по пользовательскому HTTP-заголовку. Полезен когда upstream вставляет tenant или correlation ID, или для header-based A/B маршрутизации.

RDP cookie

Считывает RDP session cookie, встроенный в протокольное согласование. Необходим для RDP-шлюзов и ферм удалённых рабочих столов — удерживает пользователей на одном RDP-хосте после переподключения.

TR7 cookie

TR7 ADC сам генерирует и управляет affinity cookie — без кода backend. Оператор задаёт имя cookie и таймаут простоя max-idle; ADC читает его при каждом запросе, backend игнорирует. Простейшая персистентность для добавления к legacy-приложению.

Backend cookie

Используйте собственный session cookie приложения для affinity — оператор называет cookie (PHPSESSID, JSESSIONID, app-id, любой кастомный) и TR7 ADC читает существующее значение. Никаких новых cookie не добавляется. Правильный выбор, когда приложение уже отслеживает сессии и вы не хотите добавлять второй cookie.

Dynamic persistence

Таблица персистентности по hash-ключу, хранящаяся в памяти. Каждая запись сопоставляет ключ — любую комбинацию заголовков запроса, cookie, source IP или URL-параметров — с backend. Оператор задаёт размер таблицы (от 10K до 100M записей, дефолт 3M) и время истечения записи. Используйте когда правила персистентности должны быть более гибкими, чем единственный фиксированный cookie или заголовок.

SAM — Session Affinity Manager

Расширенный движок персистентности на основе cookie. Выберите, кто генерирует cookie, формат session-id и флаги безопасности — всё из UI, без изменений backend. Подробности ниже.

SAM — Session Affinity Manager

SAM — наиболее гибкий метод персистентности TR7. Там, где обычный cookie закрепляет сессию, SAM позволяет контролировать каждое свойство этого cookie из выпадающего списка — без изменений backend, без написания кода правил.

01

Два источника cookie

Выберите, кто генерирует affinity cookie: TR7-generated (дефолт — без участия backend) или backend-generated (используйте существующий session cookie приложения). Переключайтесь между ними без прерывания активных сессий.

02

Четыре формата session-ID — включая открытый режим Custom

Опции формата идентификатора сессии: UUID (случайный 128-битный), IP-timestamp-random (отслеживаемый, упорядоченный по времени), IP-random (анонимный в рамках тенанта) или Custom. Режим Custom открывает полную поверхность переменных трафика — комбинируйте любые заголовки запросов, cookie, компоненты URL, информацию TLS-сессии, source IP (raw или маскированный), JWT-claims, query-параметры и даже поля тела запроса с пользовательскими функциями преобразования (маскирование, хэширование, извлечение подстроки, нормализация регистра, конкатенация). Тот же движок переменных и преобразований управляет hash-ключами Dynamic persistence. Реальные комбинации смотрите в spotlight ниже.

03

Четыре комбинации флагов безопасности

Флаги безопасности cookie: HttpOnly (без доступа JavaScript — защита от XSS), Secure (только HTTPS), SameSite=Strict (без межсайтовой отправки — защита от CSRF), SameSite=Lax (совместимый вариант). Комбинируйте по потребности.

04

Настраивается оператором, без кода

Всё вышеперечисленное — это per-vService выпадающий список в панели SAM. Никакого кода пользовательских правил, никакой интеграции backend, никакого отдельного WAAP-правила для обработки cookie. SAM — это конфигурация, а не скрипт.

Гибкость Custom Format и Hash

Выйдите за рамки cookie и IP — комбинируйте любую переменную трафика

SAM Custom Format и hash-ключи Dynamic persistence принимают любую переменную трафика, которую видит TR7 ADC — комбинируйте их, преобразуйте, создавайте именно то правило персистентности, которое нужно вашему приложению

SAM Custom Format — реальные комбинации

TLS session ID + маскированный /24 source IP — удерживайте мобильных пользователей на одном backend через TLS resumption даже при смене IP в рамках подсети оператора (хэндовер вышки)
JWT claim (после декодирования) + tenant header — мультитенантный SaaS, где аутентифицированные пользователи каждого тенанта маршрутизируются на свой выделенный backend-кластер, декодированный из токена
Фрагмент User-Agent + Accept-Language — разделяйте desktop-EN когорты от mobile-RU когорт на разные backend-пулы без изменений приложения
TLS SNI server name + URL path prefix — мультиприложений SNI-хостинг, где SNI определяет приложение, path prefix — экземпляр: один ADC, много тенантов
Geo-IP country + первый URL-сегмент — географическая маршрутизация контента, также структурно осведомлённая о том, какой раздел сайта запрашивается

Dynamic persistence — hash-ключи из нескольких переменных

IP /24 + URL path prefix — географическая cache-affinity, привязанная к структуре URL (CDN-дружественная без CDN)
Значение заголовка + query-параметр в нижнем регистре — регистронезависимая мультирегиональная маршрутизация, где ?user=Alice и ?user=alice попадают на один backend
HTTP-метод + content-type — маршрутизируйте HTTP/2 POST на API-оптимизированные backend и HTTP/1.1 GET на static-asset backend из одного vService
Подстрока cookie + IP класс — частичное сопоставление паттернов legacy cookie, когда приложение использует нестандартные формы cookie
Hash поля тела запроса + auth-заголовок — для SOAP и legacy API, где идентификатор сессии находится в теле, а не в заголовках или cookie

Функции преобразования для любой переменной

Маскирование IP-адреса — маскирование /8, /16, /24 или произвольной длины префикса для маршрутизации на уровне когорт подсети
Извлечение подстроки через regex — извлеките конкретный фрагмент из заголовка, cookie или URL (например, только tenant-id префикс из более длинного JWT)
Нормализация регистра — нижний или верхний регистр перед хэшированием для регистронезависимой маршрутизации через смешанных клиентов
Криптографический hash (MD5, SHA) — создавайте непрозрачные session ID фиксированной длины из чувствительных исходных переменных — базовые данные никогда не покидают платформу
Конкатенация строк с пользовательскими разделителями — комбинируйте любое количество переменных с кастомными разделителями для уникальных составных ключей

Когда персистентность важна больше всего

Корзины и оформление заказов в e-commerce

Пользователи добавляют товары на нескольких загрузках страниц. Backend cookie или TR7 cookie удерживает состояние корзины на одном backend — оформление заказа никогда не видит пустую корзину.

Авторизованные дашборды

Сессии вошедших пользователей, где кэш разрешений живёт на одном backend. SAM с TR7-generated cookie + HttpOnly + Secure работает без изменений кода backend.

RDP-шлюзы и фермы удалённых рабочих столов

RDP-сессии должны переподключаться к одному хосту. RDP cookie персистентность читает native session ID протокола — без дополнительной конфигурации, без инъекции cookie.

Legacy-приложения без управления сессиями

Приложения, которые сами не отслеживают сессии. Source-IP или URL-parameter персистентность закрепляет пользователей без изменений кода legacy-приложения.

Распространённые вопросы

Нужно ли выбирать между алгоритмом балансировки нагрузки и персистентностью?
Нет — оба слоя работают независимо. Алгоритм балансировки нагрузки выбирает backend для первого запроса в сессии; персистентность затем закрепляет все последующие запросы на этом backend до конца сессии. Используйте любой алгоритм (round-robin, Fastest+ и т.д.) с любым методом персистентности.
В чём разница между TR7 cookie и SAM?
TR7 cookie — это простой дефолт: TR7 ADC генерирует непрозрачный affinity cookie, задаёт разумные дефолты и закрепляет сессии. SAM — та же идея, но с контролем оператора над каждым свойством cookie: источником, форматом session-ID, флагами безопасности. Используйте TR7 cookie для стандартного случая; SAM — когда нужен детальный контроль без изменений backend.
Что происходит когда закреплённый backend выходит из строя?
Мониторинг работоспособности TR7 ADC обнаруживает сбой и убирает backend из vService. Существующие сессии, закреплённые за этим backend, перенаправляются на здоровый — пользователь может потребовать повторной аутентификации или обновления корзины, но платформа не поглощает трафик в чёрную дыру.
Можно ли использовать source-IP персистентность за корпоративным NAT?
Source-IP работает, когда клиентские IP разнообразны — у каждого пользователя разный видимый IP. За общим NAT (корпоративный офис, мобильный оператор, CGNAT) все пользователи выглядят с одним IP, и source-IP закрепит их всех на одном backend. Для NAT-интенсивного трафика предпочтительнее cookie-based персистентность (TR7 cookie, SAM или backend cookie) или хэш по per-user заголовку или URL-параметру.
Влияет ли персистентность сессий на WebSocket и HTTP/2 соединения?
Долгоживущие соединения (WebSocket, HTTP/2 потоки) остаются на backend, к которому изначально подключились — они естественно sticky в течение жизни соединения. Персистентность становится актуальной, когда один пользователь открывает новое соединение и должен попасть на тот же backend, что и раньше.

Сопоставьте метод персистентности с вашей нагрузкой

Посмотрите, как 9 методов персистентности охватывают все распространённые случаи — от RDP-шлюзов до legacy-приложений и SAM-управляемых cookie.