3

我们的 ALB 在多个目标群体中注册。每个目标群体都是一个单独的 Web 应用程序,服务于同一域下网站的不同部分。

这是AWS 文档中关于粘性会话 cookie 编码实践的片段

当负载均衡器第一次收到来自客户端的请求时,它会将请求路由到目标,生成一个名为 AWSALB 的 cookie,该 cookie 对有关所选目标的信息进行编码,加密 cookie,并将 cookie 包含在对客户端的响应中。

这是我们面临的问题的摘要

  • 当客户端发出并行请求时,会话粘性将不起作用,因为没有任何请求具有 AWSALB cookie。

  • 当客户端发出单个阻塞请求,然后发出多个并行请求时,粘性仅适用于为初始阻塞请求提供服务的目标组。如果其余并行请求是针对其他目标组的,则此处没有粘性,因为他们的目标组信息尚未编码在 AWSALB cookie 中。

这里的一个解决方案是向不同的 url 发出一系列顺序请求,以打击不同的目标群体,以便我们与每个目标群体建立粘性。但是,这是不切实际的,因为发出顺序阻塞请求会减慢客户端的速度。

我想知道是否有办法告诉 ALB 在单个请求中对所有目标组的会话粘性信息进行编码?在这种情况下,为所有目标组建立粘性,以便后续请求在各个目标组之间具有粘性。

4

1 回答 1

0

尝试为应用程序的不同部分使用子域。假设每个目标组都有自己的子域,但所有子域实际上都指向同一个负载均衡器。所有子域实际上都可以是您的真实域的 CNAME,但对于负载均衡器来说是不同的,cookie 将为该域设置并独立使用。

就像是

  • api1.yourdomain.com -> api.yourdomain.com 的 CNAME -> ALB -> 目标组 1 -> 为 api1.yourdomain.com 设置的目标组 1 的 cookie
  • api2.yourdomain.com -> api.yourdomain.com 的 CNAME -> ALB -> 目标组 2 -> 为 api2.yourdomain.com 设置的目标组 2 的 cookie 等。

无论如何,我不会过多依赖此 cookie 和会话粘性,因为它并不总是可靠的,并且您应该始终假设 ALB 平衡流量的方式没有太多控制,即使这是一个不错的方法为了促进服务器以某种方式有状态并确保流畅的用户体验,最好将精力放在实现完全无状态的应用程序上,使其完全不用担心会话粘性

于 2020-05-25T10:01:09.177 回答