我对亚马逊网络服务上会话粘性的使用感到有些困惑。当我使用Amazon Elastic Beanstalk部署我的Java Web应用程序时,我可以选择启用会话粘性,然后指定cookie过期时间。
我的应用程序使用cookie作为会话(JSESSIONID)以及其他小东西。大多数网站只有在登录后才能访问(我使用Spring安全管理它)。该网站最多可运行25个小型EC2实例。
我应该启用会话粘性吗?如果我不启用它,是否意味着我可以突然登出,因为负载均衡器将我带到另一台服务器(而不是验证我的服务器)?如果我启用会话粘性,当验证我的服务器关闭时,我是否会被注销?基本上,为什么以及何时应该使用会话粘性?
非常感谢。
答案 0 :(得分:22)
如果我没有启用它,是否意味着我可以突然登出,因为负载均衡器将我带到另一台服务器(而不是验证我的服务器)?
是
如果启用会话粘性,当我验证身份的服务器关闭时,是否会退出?
是
将Elastic Beanstalk与典型的Java webapp一起使用时,我认为您肯定希望启用会话粘性。否则,来自用户浏览器的每个HTTP请求都可以路由到不同的服务器。
要解决当用户“被卡住”关闭时用户会话被销毁的问题,您需要查看Tomcat session replication。不幸的是,这不是Elastic Beanstalk开箱即用的,因此为了设置会话复制,您必须为应用程序创建自定义Elastic Beanstalk AMI。此外,您必须使用Tomcat会话复制that does not rely on multicast的实现,因为AWS上没有多播,或者我知道的任何其他云环境。不依赖于多播的实现的示例将是使用数据库(例如Amazon RDS)或memcached服务器(例如Amazon Elastic Cache)来实现跨多个Tomcat实例的会话。
另请注意,Elastic Beanstalk UI仅允许您启用负载均衡器生成的HTTP Cookie。但是,在Elastic Beanstalk创建了负载均衡器之后,您可以进入EC2控制台并修改负载均衡器的设置,将其切换为应用程序生成的HTTP cookie,然后告诉它使用“JSESSIONID”cookie。
答案 1 :(得分:1)
您还可以使用DynamoDB进行tomcat会话共享:http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/java-dg-tomcat-session-manager.html