我有一个容器作为服务部署在ECS Fargate上。 该容器应服务于长HTTP Websocket连接并执行实时处理。在不同的用例中,每个连接可能需要几分钟到几个小时。
每个容器最多可以同时提供恒定数量的连接(例如,最多10个连接),以便能够实时处理输入。
AWS应用程序负载平衡器在此服务的前面。 根据常规自动缩放规则-可以通过监视CPU来缩放容器的数量。 该应用程序负载平衡器针对每个传入请求使用循环路由算法。
我的问题:
每个容器的连接必须具有恒定的HARD限制,如何强制ALB不要将新连接路由到没有可用连接插槽的容器?
容器内的服务本身-能否告知ALB它已关闭以进行新连接?通过特定的HTTP响应?
还有其他好的做法可以处理此要求吗?
答案 0 :(得分:1)
您将需要为此编写自己的代码。
一个可能的解决方案是结合:
您的代码将需要检测正在处理的连接数。当数字达到极限10时,从自动缩放组中删除该容器。通过使用生命周期挂钩,可以使容器保持活动状态。一旦您的10个连接达到0,就完成容器的终止。
请注意,这将导致您在清空已达到峰值的容器时启动新容器。
我不知道另一种告诉ALB停止将流量发送到特定容器而不删除它的方法。他们的关键是draining
和termination lifecycle
部分,因为您希望容器继续与客户端保持连接。