应用程序 ELB - 基于一致性哈希的粘性会话

Application ELB - sticky sessions based on consistent hashing

我在文档中找不到任何内容,但仍在写信以确保我没有遗漏它。我希望来自不同客户端的对某个请求参数具有相同值的所有连接最终都在同一个上游主机上。使用 ELB 粘性会话,您可以让相同的客户端连接到相同的主机,但不能保证跨不同的客户端。

Envoy 代理可以做到这一点,请参阅:https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/load_balancers#ring-hash

我们已经在使用 ELB,所以如果 ELB 可以实现上述功能,那么我们就可以避免在 envoy 之间引入另一个层。

更新: 用例 - 在多租户云解决方案中,我们希望来自给定客户帐户的所有客户端连接到同一上游主机。

遗憾的是,这无法在 ALB 中执行。

应用程序负载均衡器通过 ELB 粘性会话和基于模式的路由等功能控制主机接收流量的所有逻辑。

如果没有解决方法,那么您可以查看 Classic Loadbalancer,它支持应用程序设置粘性会话 cookie 名称和值。

根据最佳实践,理想情况下您的应用程序应该是无状态的,是否可以考虑重新构建您的应用程序而不是尝试变通。我的一些建议是:

  • 使用 DynamoDB 存储任何基于会话的数据,从基于磁盘的会话移动(如果这是您的应用程序所做的)。
  • 任何需要保留的基于磁盘的文件都可以在 Windows 上使用 EFS for your Linux based hosts, or FSX 在所有主机之间共享。
  • Medium/Long 术语持久文件可以迁移到 S3,任何很少更改的资产都可以存储在这里,然后您的应用程序可以使用 S3 而不是磁盘。

重要的是要记住,正如我上面所说的,您应该尽可能使您的应用程序保持无状态。假设您的 EC2 实例可能会发生故障,为此做好准备将使恢复变得更容易。