【问题标题】:How does a session affine loadbalancer of Amazon AWS know that a session cookie is expired?Amazon AWS 的会话亲和负载均衡器如何知道会话 cookie 已过期?
【发布时间】:2013-02-09 17:22:52
【问题描述】:

如果我使用具有应用程序控制会话粘性的 HTTP 负载均衡器(在本例中为 Amazon 的 AWS),负载均衡器显然必须在映射中记住所有会话 cookie 及其目标实例。 因此,此全局映射将/必须保持“会话 cookie 到实例”的关系。

如果网络应用用户决定关闭浏览器,会话超时后会话将在应用服务器上静默终止。

这反过来意味着负载平衡器在其全局映射中仍然具有“会话 cookie 到实例”的关系。由于此映射现在无用并且会话 cookie 没有到期日期,因此它不能但应该被垃圾收集(以释放资源)。

我的问题是:

  1. 负载均衡器一般如何在不耗尽资源的情况下处理这种情况?

  2. 如何在不耗尽资源的情况下特别处理 Amazon AWS 负载均衡器与这种场景?

【问题讨论】:

    标签: java amazon-ec2 session-cookies load-balancing


    【解决方案1】:

    通常,应用程序感知(第 7 层)LB 将维护(大)会话映射。它可能:

    1. 将自己的 cookie 注入到客户端的第一个响应中(以及 客户端将在后续请求中重新发送,因此 LB 可以确定 目标网络服务器)

    2. 重写一个众所周知的会话cookie(例如 JSESSIONID),例如,向其附加信息 标识目标 Web 服务器(LB 会在随后的请求中将其呈现给 Web 服务器之前将其剥离)

    关键是LB不维护会话到目标映射。该信息位于每个客户端的 cookie 中。

    我相信 AWS 会做到 #1(使用名为 AWSELB 的 cookie)。

    【讨论】:

    • LB 还可以做其他事情,例如在传输到客户端的 HTML 页面中重写 URL,如果客户端不支持 cookie,这将很有用。
    • 谢谢。是的,看起来它是#1。 AWS 设置了一个名为 AWSELB 的 cookie。这个 cookie 非常大,显然是 HEX 编码的。我尝试了一个简单的解码,但它没有返回任何有用的信息。我想它也以某种方式被压缩,以保持尺寸尽可能小。
    • 谢谢,我认为这是正确的,但是当我为AWS LB选择“使用应用程序生成的cookie”(例如JSESSIONID)时,AWS LB实际上并没有设置AWSELB cookie。但是 JSESSIONID 是由 LB 设置的,它看起来与 App Server 创建的 cookie 完全相同。因此它不能包含对 LB 有用的实例路由信息,除非 LB 记住这一点。因此,LB 必须将 JSESSIONID 信息与实例信息一起存储在某处/如何能够将具有相同 JSESSIONID 的未来请求路由到正确的后端实例。对吗?
    猜你喜欢
    • 2011-06-20
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 2014-01-24
    • 2021-09-06
    • 2017-04-24
    • 1970-01-01
    • 2015-08-24
    相关资源
    最近更新 更多