首页 > 解决方案 > AWS - ECS 服务的负载平衡,每个容器有硬连接限制

问题描述

我在 ECS Fargate 上部署了一个容器作为服务。容器应提供长 HTTP Websocket 连接并执行实时处理。在不同的用例中,每个连接都可以存在几分钟到几个小时。

每个容器可以同时提供最多恒定数量的连接(例如最多 10 个连接),以便能够实时处理输入。

AWS 应用程序负载均衡器位于此服务的前端。在常规的自动缩放规则中 - 容器数量可以通过监控 CPU 来扩展或缩小。此应用程序负载均衡器对每个传入请求使用循环路由算法。

我的问题 :

要求每个容器的连接数固定不变,如何强制 ALB 不将新连接路由到没有可用连接槽的容器?

容器内的服务本身 - 它可以告诉 ALB 它已为新连接关闭吗?也许是通过特定的 HTTP 响应?

有没有其他好的做法来处理这个要求?

标签: amazon-web-servicesamazon-elbamazon-ecs

解决方案


您需要为此编写自己的代码。

一个可能的解决方案是结合:

  • 自动缩放
  • 生命周期钩子
  • 容器实例耗尽。

您的代码将需要检测它正在处理多少个连接。当数量达到 10 的限制时,将容器从 Auto Scaling 组中删除。通过使用生命周期钩子,您可以使容器保持活动状态。一旦你的 10 个连接达到 0,就完成容器的终止。

请注意,这将导致在您排空已达到峰值的容器时启动一个新容器。

我不知道另一种方法可以告诉 ALB 停止向特定容器发送流量而不删除它。它们的关键是您希望容器继续与客户端建立连接的部分drainingtermination lifecycle


推荐阅读