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

vrt*_*234 7 amazon-web-services amazon-elb

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

这可以通过 Envoy 代理实现,请参阅:https: //www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/load_balancers#ring-hash

我们已经使用了 ELB,因此如果 ELB 可以实现上述目的,那么我们就可以避免在 Envoy 之间引入另一层。

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

Chr*_*ams 3

不幸的是,这不可能在 ALB 中执行。

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

如果没有解决办法,那么您可以查看经典负载均衡器,它支持应用程序设置粘性会话 cookie 名称和值。

从最佳实践来看,理想情况下您的应用程序应该是无状态的,是否可以考虑重新架构您的应用程序而不是尝试解决问题。我的一些建议是:

  • 使用DynamoDB存储任何基于会话的数据,从基于磁盘的会话转移(如果您的应用程序就是这样做的话)。
  • 任何需要保留的基于磁盘的文件都可以在所有主机之间共享,对于基于 Linux 的主机使用EFS ,或者在 Windows 上使用FSX
  • 中/长期持久文件可以迁移到 S3,任何很少更改的资产都可以存储在这里,然后您的应用程序可以使用 S3 而不是磁盘。

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