17

我对在 Amazon Web Services 上使用会话粘性感到有点困惑。当我使用 Amazon Elastic Beanstalk 部署我的 java Web 应用程序时,我可以选择启用会话粘性,然后指定一个 cookie 过期时间。

我的应用程序将 cookie 用于会话 (JSESSIONID) 以及其他小事。大多数网站只有在登录后才能访问(我使用 Spring security 来管理它)。该网站将在多达 25 个小型 EC2 实例上运行。

我应该启用会话粘性吗?如果我不启用它,是否意味着我可能会因为负载均衡器将我带到另一台服务器(而不是对我进行身份验证的服务器)而突然注销?如果我启用会话粘性,当验证我的服务器关闭时,我是否会被注销?基本上,为什么以及何时应该使用会话粘性?

非常感谢。

4

2 回答 2

22

如果我不启用它,是否意味着我可能会因为负载均衡器将我带到另一台服务器(而不是对我进行身份验证的服务器)而突然注销?

是的

如果我启用会话粘性,当验证我的服务器关闭时,我是否会被注销?

是的

在将 Elastic Beanstalk 与典型的 Java Web 应用程序一起使用时,我认为您肯定会希望启用会话粘性。否则,来自用户浏览器的每个 HTTP 请求都可能被路由到不同的服务器。

为了解决当他们“卡住”的服务器关闭时用户会话被破坏的问题,您需要查看Tomcat session replication。不幸的是,这不是 Elastic Beanstalk 开箱即用的东西,因此为了设置会话复制,您必须创建一个自定义 Elastic Beanstalk AMI 供您的应用程序使用。此外,您必须使用不依赖多播的 Tomcat 会话复制的实现,因为多播在 AWS 或我知道的任何其他云环境上不可用。不依赖多播的实施示例是使用数据库(例如 Amazon RDS)或 memcached 服务器(例如 Amazon Elastic Cache)使会话在多个 Tomcat 实例之间可用。

另请注意,Elastic Beanstalk UI 仅允许您启用负载均衡器生成的 HTTP cookie。但是,在 Elastic Beanstalk 创建负载均衡器之后,您可以进入 EC2 控制台并修改负载均衡器的设置以将其切换为应用程序生成的 HTTP cookie,然后告诉它使用“JSESSIONID”cookie。

于 2012-05-08T15:56:10.057 回答
1

您还可以使用 DynamoDB 进行 tomcat 会话共享:http ://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/java-dg-tomcat-session-manager.html

于 2014-03-18T09:26:55.330 回答