【问题标题】:Application ELB - sticky sessions based on consistent hashing应用程序 ELB - 基于一致散列的粘性会话
【发布时间】:2020-05-24 14:46:44
【问题描述】:

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

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

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

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

【问题讨论】:

  • 嗨,用例是什么?
  • @mokugo-devops 添加了用例
  • 嗨,为什么这些必须是特定主机的任何具体原因?另外你怎么区分这个?不同的主机名? :)
  • 应用程序特定原因。我们不需要区分上游主机,您可以选择任何一个,只需在初始关联后将它们固定到客户端即可。
  • @vrtx54234 如果您在不同客户端的会话cookie中发送“某个请求参数的相同值”,那么我认为您可以拥有docs.aws.amazon.com/elasticloadbalancing/latest/classic/…中提到的“会话亲和性”请让我知道你的想法吗?

标签: amazon-web-services amazon-elb


【解决方案1】:

很遗憾,这不可能在 ALB 中执行。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-14
    • 2019-10-13
    • 2016-07-06
    • 2016-04-16
    • 2016-12-07
    • 2016-12-09
    • 2017-06-02
    • 2016-02-24
    相关资源
    最近更新 更多