首页 > 解决方案 > 使用 AWS ALB 基于动态 id 将请求路由到特定目标

问题描述

我有多个 Node.js 服务器,它们位于 AWS 的负载均衡器后面。这些服务器是有状态的,并且包含对所有连接的客户端都需要访问的内存数据结构的转换。即,如果用户 1 连接到 Box 1 并进行更新,则用户 2 也需要连接到 Box 1 才能接收这些更新。

我最初尝试使用基于应用程序的粘性,其中用户 1 将发送带有查询参数的请求,customAlbId=1服务器将解析该请求,然后返回Set-Cookie具有相同值的标头,customAlbId=1. 只要用户 1 为该 cookie 发送相同的值,我就能够保持粘性。

当用户 2 得到一个具有完全相同值的 cookie 集时,问题就出现了customAlbId=1,ALB 实际上将它路由到了不同的盒子。因此,基于应用程序的粘性将保持客户端的连接与他们连接的第一个盒子相关,但它不会说“这个 cookie 值存在,并且已经与盒子 1 相关联,将用户 2 路由到框 1"。

有没有办法用 AWS ALB 做到这一点?需要设置为 cookie 值的 id 是动态生成的,因此我无法使用一些高级请求路由规则提前对它们进行硬编码。

标签: amazon-web-servicesamazon-ec2load-balancingaws-elbsticky-session

解决方案


推荐阅读