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



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

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

我们已经使用 ELB,所以如果上述情况在 ELB 中是可能的,那么我们可以避免在 envoy 之间引入另一层。

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

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

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

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

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

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

请务必记住,正如我上面所说,您应该尽可能保持应用程序无状态。假设您的 EC2 实例可能会失败,通过为此做好准备,可以更轻松地进行恢复。

最新更新