314  /  381

Сессия разделенный режим (hot&cold)

Просмотров: 403
Дата последнего изменения: 27.10.2020
Роберт Басыров
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5
Недоступно в редакциях:
Ограничений нет

Введение

По умолчанию сессия в PHP поддерживает последовательный доступ. Это означает, что параллельные хиты, которые используют сессию, блокируются и выстраиваются в очередь.

Это удобно для разработчиков, но не всегда хорошо для пользователей, так как интерфейс и отклик приложения может быть с задержками. Встаёт задача уменьшить количество блокировок сессий.

Общий принцип

Один из вариантов решения как избежать блокировки - это написать SessionHandlerInterface и не делать там просто блокировку. Но этот вариант не подходит, так как есть большое количество существующих использований в коде Bitrix Framework и партнеров.

Выбран другой путь:

  1. Данные, которые используются на каждом хите выделены в KernelSession-сессию (hot данные). Это данные для аутентификации, авторизации и другие связанные с ядром.
  2. Всё остальное, что хранится в сессии -- это cold-данные.
  3. KernelSession-сессия неблокирующая и работает по принципу "кто последний, тото и тапки".
  4. Всё остальное -- это обычная блокирующая сессия.
  5. Блокирующая сессия стартует только при первом обращении к cold-данным.

Разделение хранения cold&hot

Хранилище для KernelSession-сессии -- это шифрованные cookies.

Хранилище для cold-сессии -- это обычная сессия, принцип работы, как и раньше, поэтому данные могут храниться в Redis, Memcache, БД.

Настройка хранения

Чтобы включить разделенный режим сессии, нужно в bitrix/.settings.php изменить session[mode] на separated. И добавить 'kernel' => 'encrypted_cookies', и 'lifetime' => 14400,.

Примеры можно посмотреть здесь.

1
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии