AWS - ECS 服务的负载平衡,每个容器都有硬连接限制
AWS - Load balancing for ECS service with hard connections limit per container
我在 ECS Fargate 上部署了一个容器作为服务。
容器应提供长 HTTP Websocket 连接并执行实时处理。在不同的用例中,每个连接可能存在几分钟到几小时不等。
每个容器最多可以同时提供恒定数量的连接(例如最多 10 个连接),以便能够实时处理输入。
AWS Application Load balancer 位于此服务的前端。
根据常规自动缩放规则 - 容器数量可以通过监控 CPU 进行扩展或缩小。
此应用程序负载均衡器正在为每个传入请求使用循环路由算法。
我的问题:
要求对每个容器的连接进行恒定的 HARD 限制,我如何强制 ALB 不将新连接路由到没有可用连接槽的容器?
容器内的服务本身 - 它可以告诉 ALB 它已为新连接关闭吗?可能是通过特定的 HTTP 响应?
是否有任何其他好的做法来处理此要求?
您需要为此编写自己的代码。
一个可能的解决方案是合并:
- 自动缩放
- 生命周期挂钩
- 容器实例耗尽。
您的代码需要检测它正在处理的连接数。当数量达到 10 的限制时,从 Auto Scaling 组中删除容器。通过使用生命周期挂钩,您可以使容器保持活动状态。一旦你的10个连接达到0,完成容器的终止。
请注意,这会导致在排空已达到峰值的容器时启动一个新容器。
我不知道还有什么方法可以告诉 ALB 停止向特定容器发送流量而不删除它。它们的关键是 draining
和 termination lifecycle
部分,因为您希望容器继续与客户端建立连接。
我在 ECS Fargate 上部署了一个容器作为服务。 容器应提供长 HTTP Websocket 连接并执行实时处理。在不同的用例中,每个连接可能存在几分钟到几小时不等。
每个容器最多可以同时提供恒定数量的连接(例如最多 10 个连接),以便能够实时处理输入。
AWS Application Load balancer 位于此服务的前端。 根据常规自动缩放规则 - 容器数量可以通过监控 CPU 进行扩展或缩小。 此应用程序负载均衡器正在为每个传入请求使用循环路由算法。
我的问题:
要求对每个容器的连接进行恒定的 HARD 限制,我如何强制 ALB 不将新连接路由到没有可用连接槽的容器?
容器内的服务本身 - 它可以告诉 ALB 它已为新连接关闭吗?可能是通过特定的 HTTP 响应?
是否有任何其他好的做法来处理此要求?
您需要为此编写自己的代码。
一个可能的解决方案是合并:
- 自动缩放
- 生命周期挂钩
- 容器实例耗尽。
您的代码需要检测它正在处理的连接数。当数量达到 10 的限制时,从 Auto Scaling 组中删除容器。通过使用生命周期挂钩,您可以使容器保持活动状态。一旦你的10个连接达到0,完成容器的终止。
请注意,这会导致在排空已达到峰值的容器时启动一个新容器。
我不知道还有什么方法可以告诉 ALB 停止向特定容器发送流量而不删除它。它们的关键是 draining
和 termination lifecycle
部分,因为您希望容器继续与客户端建立连接。