Липкий и не липкий сессий

Я хочу знать разницу между липкой и нелипкой сессий. Что я понял после прочтения из интернета:

Липки : там будет только один объект сеанса.

не липкая сессия : объект сеанса для каждого серверного узла

2 ответов


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

однако, если ваш сайт обслуживается несколькими веб-серверами который сидит за балансировщиком нагрузки, балансировщик нагрузки решает, на какой фактический (физический) веб-сервер должен идти каждый запрос. Например, если за балансировщиком нагрузки находятся 3 веб-сервера A, B и C, возможно, что www.mywebsite.com/index.jsp подается с сервера A, www.mywebsite.com/login.jsp подается с сервера B и www.mywebsite.com/accoutdetails.php подаются с сервера C.

теперь, если запросы обслуживаются с (физически) 3 разных серверов, каждый сервер создал объект сеанса для вас, и поскольку эти объекты сеанса сидят на трех независимых ящиках, нет прямого способа узнать, что есть в объекте сеанса другого. Для синхронизации между этими сеансами сервера вам может потребоваться записать / прочитать данные сеанса в слой, который является общим для всех-как БД. Теперь запись и чтение данных в / из БД для этого варианта использования может быть не очень хорошей идеей. А вот роль липкая-сессии.

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

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

в качестве примера вы можете прочитать об эластичном балансировщике нагрузки Amazon и липких сеансах здесь: http://aws.typepad.com/aws/2010/04/new-elastic-load-balancing-feature-sticky-sessions.html


Я сделал ответ с более подробной информацией здесь : https://stackoverflow.com/a/11045462/592477

или вы можете прочитать его там ==>

при использовании loadbalancing это означает, что у вас есть несколько экземпляров tomcat, и вам нужно разделить нагрузки.

  • если вы используете репликацию сеанса без липкого сеанса: представьте, что у вас есть только один пользователь, использующий ваше веб-приложение, и у вас есть 3 экземпляры котяра. Этот пользователь отправляет несколько запросов к вашему приложению, затем loadbalancer отправит некоторые из этих запросов первому tomcat экземпляр и отправить некоторые другие из этих запросов на второй пример, а другой к третьему.
  • если вы используете липкий сеанс без репликации: представьте, что у вас есть только один пользователь, использующий ваше веб-приложение, и у вас есть 3 tomcat экземпляры. Этот пользователь отправляет несколько запросов в ваше приложение, затем loadbalancer отправит первый запрос пользователя одному из три экземпляры tomcat и все другие запросы, отправляемые этим пользователь во время сеанса будет отправлен в тот же экземпляр tomcat. Во время этих запросов, если вы выключите или перезапустите этот tomcat экземпляр (используемый экземпляр tomcat) loadbalancer отправляет остальные запросы к другому экземпляру tomcat, который все еще запуск, но поскольку вы не используете репликацию сеанса, экземпляр tomcat, который получает остальные запросы, не имеет копии сеанс пользователя для этого tomcat пользователь начинает сеанс : пользователь теряет свой сеанс и отключается от веб-приложения, хотя веб-приложение все еще работает.
  • если вы используете липкий сеанс с репликацией сеанса: представьте, что у вас есть только один пользователь, использующий ваше веб-приложение, и у вас есть 3 tomcat экземпляры. Этот пользователь отправляет несколько запросов в ваше приложение, затем loadbalancer отправит первый запрос пользователя одному из трех экземпляры tomcat и все другие запросы, отправляемые этот пользователь во время сеанса будет отправлен в тот же экземпляр tomcat. Во время этих запросов, если вы выключите или перезапустите этот tomcat экземпляр (используемый экземпляр tomcat) loadbalancer отправляет остальные запросы к другому экземпляру tomcat, который все еще запуск при использовании репликации сеанса экземпляра tomcat, который получает остальные запросы имеет копию сеанса пользователя, то пользователь продолжает сеанс: пользователь продолжает просматривать веб-страницы приложение без отключения, отключение экземпляре Tomcat не влияет на удобство навигации.