2015-09-21 3 views
2

У меня есть веб-приложение Java, которое развертывается на двух виртуальных машинах. и для этих виртуальных машин устанавливается NLB (балансировка сетевой нагрузки). В моем приложении используются сеансы. Я смущен тем, что управление сеансом пользователя выполняется в обеих виртуальных машинах. Для примера. Если я делаю запрос, который переходит на VM1 и создает сеанс пользователя. Теперь второй раз я делаю запрос, и он переходит на VM2 и хочет получить доступ к данным сеанса. Как он найдет сеанс, который был создан в VM1.Как управлять сеансами в распределенном приложении

Пожалуйста, помогите мне устранить эту путаницу.

+2

Наиболее распространенным подходом является «липкие сеансы», где балансировщик нагрузки направляет трафик на сервер, на котором был создан сеанс. если сервер идет вниз, сеанс теряется. EC2 может быть настроен для завершения сеансов перед снятием с эксплуатации машины. Другим решением является кластер сеансов, но это будет особенностью сервера приложений/технологий, на которых вы создаете приложение. Или иметь информацию о сеансе хранения приложений в базе данных. Еще одно решение - сделать ваше приложение без сеанса. – slipperyseal

+0

также, что JB сказал :) – slipperyseal

ответ

8

Есть несколько решений:

  • Настройка балансировки нагрузки, чтобы быть липким: то есть запросы, принадлежащие к одной и той же сессии всегда будет идти к одной и той же VM. Преимущество в том, что это решение прост. Недостатком является то, что если одна виртуальная машина не работает, половина пользователей теряет свою сессию
  • настроить серверы на использование постоянных сеансов. Если сеансы сохраняются в центральной базе данных и загружаются из этой центральной базы данных, то обе виртуальные машины будут видеть одни и те же данные в сеансе. Возможно, вы все же хотите иметь липкие сеансы, чтобы избежать параллельных доступов к одному и тому же сеансу
  • настроить серверы в кластере и распространять/реплицировать сеансы на всех узлах кластера
  • избегать использования сеансов и просто использовать подписанный файл cookie для идентификации пользователей (и, возможно, содержит несколько дополнительных сведений). Локальный веб-маркер JSON может быть хорошим решением. Получите все остальное из базы данных, когда вам это нужно. Это обеспечивает масштабируемость и отказоустойчивость, а IMO часто упрощает работу на сервере, а не делает его более сложным.

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

+1

Расширение до 3-го пункта: В Weblogic, если мы настраиваем серверы в кластере, сеансы автоматически распространяются/реплицируются через узлы? или нам нужно что-то извне настроить? Также вы можете помочь с любым документом/ссылкой на том же? – developer

+0

нужно делать много исследований во всех этих точках. Спасибо @JB Nizet за помощь. – VIVEK

+0

Я не пользовался WebLogic годами, извините. –

Смежные вопросы