AWS-ECS服务的负载平衡,每个容器具有硬连接限制

时间:2018-09-29 18:58:15

标签: amazon-web-services amazon-elb amazon-ecs

我有一个容器作为服务部署在ECS Fargate上。 该容器应服务于长HTTP Websocket连接并执行实时处理。在不同的用例中,每个连接可能需要几分钟到几个小时。

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

AWS应用程序负载平衡器在此服务的前面。 根据常规自动缩放规则-可以通过监视CPU来缩放容器的数量。 该应用程序负载平衡器针对每个传入请求使用循环路由算法。

我的问题:

每个容器的连接必须具有恒定的HARD限制,如何强制ALB不要将新连接路由到没有可用连接插槽的容器?

容器内的服务本身-能否告知ALB它已关闭以进行新连接?通过特定的HTTP响应?

还有其他好的做法可以处理此要求吗?

1 个答案:

答案 0 :(得分:1)

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

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

  • 自动缩放
  • 生命周期挂钩
  • 清空容器实例。

您的代码将需要检测正在处理的连接数。当数字达到极限10时,从自动缩放组中删除该容器。通过使用生命周期挂钩,可以使容器保持活动状态。一旦您的10个连接达到0,就完成容器的终止。

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

我不知道另一种告诉ALB停止将流量发送到特定容器而不删除它的方法。他们的关键是drainingtermination lifecycle部分,因为您希望容器继续与客户端保持连接。