【问题标题】:Session stickiness on Amazon Web ServicesAmazon Web Services 上的会话粘性
【发布时间】:2012-05-17 00:08:52
【问题描述】:

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

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

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

非常感谢。

【问题讨论】:

  • AWS 上的节点 js 应用程序中可能存在会话粘性??

标签: amazon-ec2 amazon-web-services amazon-elastic-beanstalk amazon-elb


【解决方案1】:

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

是的

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

是的

在将 Elastic Beanstalk 与典型的 Java Web 应用程序一起使用时,我认为您肯定希望启用会话粘性。否则,来自用户浏览器的每个 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。

【讨论】:

  • 非常感谢您的详尽回复,@mbaird。我已经使用 MySQL DB 在 Tomcat 中配置了会话复制。我遵循了本指南:intelligrape.com/blog/2010/07/21/…。当只有一个 EC2 实例时,它可以正常工作。当有两个(或更多)时,它会在登录时进入重定向循环。它 302 一次又一次地重定向到主页。每次重定向时,服务器都会设置一个具有不同 JSESSIONID 的 cookie。你知道为什么会这样吗?谢谢!
  • 配置 memcached-session-manager 以使用 Amazon ElastiCache 解决了这个问题。谢谢!
【解决方案2】:

【讨论】:

    猜你喜欢
    • 2016-04-16
    • 2012-05-29
    • 1970-01-01
    • 2019-05-25
    • 2016-12-09
    • 1970-01-01
    • 2012-03-28
    • 2018-11-27
    • 2012-05-16
    相关资源
    最近更新 更多