Как синхронизировать сеансы с помощью Amazon Web Services (AWS)?

Мы используем Amazon Web Services (AWS), и у нас есть несколько веб-серверов и балансировщик нагрузки. Проблема с веб-серверами заключается в том, что $ _SESSION уникальна для каждого из них. Я сохраняю некоторую информацию о пользователе в $ _SESSION.

Каков правильный способ синхронизации этой информации? Есть ли способ объединить место, где хранятся эти сессии, или использовать MySQL для хранения этих данных (мне не нравится последний вариант)?

Я думаю, что вы ищете «Sticky Sessions». Если я прав по этому поводу, Amazon дает вам два разных варианта.

Балансировщик нагрузки (на основе продолжительности, я рекомендую этот). http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/US_StickySessions.html#US_EnableStickySessionsLBCookies

И приложение на основе липкости сессии http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/US_StickySessions.html#US_EnableStickySessionsAppCookies

Хотя концептуально похож на вариант MySQL, который вы пытаетесь избежать по какой-то причине, довольно привлекательным вариантом для использования в Amazon Web Services (AWS) является недавно внедренная масштабируемая обработка сеансов в PHP с использованием Amazon DynamoDB , в которой рассматривается типичная обработка сеанса в PHP не является масштабируемым , поэтому в любом случае требуется какое-то пользовательское решение:

Сеансы используются для сохранения краткосрочных данных по нескольким HTTP-запросам […]. Собственный обработчик сеанса PHP хранит данные сеанса в локальной файловой системе; однако этот подход становится ненадежным в распределенных веб-приложениях . При последующих запросах пользователь не может быть перенаправлен на тот же сервер, что позволяет эффективно забыть данные. Пользователь будет отключен и запутан.

Чтобы преодолеть эту проблему, разработчики PHP внедрили собственные решения для хранения данных своих пользователей с использованием баз данных, общих файловых систем, серверов Memcache, защищенных от вирусов файлов cookie и других механизмов хранения . […] [акцент мой]

В зависимости от вашего варианта использования вы можете захотеть дать этому потенциально очень быстрому сеансовому хранилищу попробовать.

Чтобы добавить к вышеуказанному ответу, что вы ищете распределенный кеш, такой как DynamoDB, который является платной услугой amazon. Его удивительно быстрый и яркий в использовании, но если вы ищете некоторые другие альтернативы с открытым исходным кодом, вы можете посмотреть следующие варианты чтения / записи памяти.

  1. Memcached – Идеально подходит для высокого соотношения чтения / записи. Легкая и отличная поддержка сообщества разработчиков.
  2. Система кеширования JCS – Java – отличная гибкость и подходит для систем, которые сталкиваются с низким отношением чтения / записи. Также отлично подходит для настройки репликации и в зависимости от уровня липкости, это может неизменно быть таким же быстрым, как простая запись / запись памяти для веб-приложения, поскольку ELB поддерживает некоторый уровень липкости. Поэтому, как только сеанс будет направлен на другой экземпляр, только тогда информация о сеансе будет скопирована. Мы используем это и до сих пор получали хорошие результаты.
  3. EhCache – Установленная структура кэширования, но их распределенное кэширование не является полностью бесплатным. Может быть, избыток, поскольку он обеспечивает полную репликацию, которая может быть не нужна в этом случае.