amazon-web-services - AWS - ECS 服务的负载平衡,每个容器有硬连接限制
问题描述
我在 ECS Fargate 上部署了一个容器作为服务。容器应提供长 HTTP Websocket 连接并执行实时处理。在不同的用例中,每个连接都可以存在几分钟到几个小时。
每个容器可以同时提供最多恒定数量的连接(例如最多 10 个连接),以便能够实时处理输入。
AWS 应用程序负载均衡器位于此服务的前端。在常规的自动缩放规则中 - 容器数量可以通过监控 CPU 来扩展或缩小。此应用程序负载均衡器对每个传入请求使用循环路由算法。
我的问题 :
要求每个容器的连接数固定不变,如何强制 ALB 不将新连接路由到没有可用连接槽的容器?
容器内的服务本身 - 它可以告诉 ALB 它已为新连接关闭吗?也许是通过特定的 HTTP 响应?
有没有其他好的做法来处理这个要求?
解决方案
您需要为此编写自己的代码。
一个可能的解决方案是结合:
- 自动缩放
- 生命周期钩子
- 容器实例耗尽。
您的代码将需要检测它正在处理多少个连接。当数量达到 10 的限制时,将容器从 Auto Scaling 组中删除。通过使用生命周期钩子,您可以使容器保持活动状态。一旦你的 10 个连接达到 0,就完成容器的终止。
请注意,这将导致在您排空已达到峰值的容器时启动一个新容器。
我不知道另一种方法可以告诉 ALB 停止向特定容器发送流量而不删除它。它们的关键是您希望容器继续与客户端建立连接的部分draining
。termination lifecycle
推荐阅读
- jolt - 颠簸转换以匹配多个键值
- reactjs - 用反应钩子构建的振荡器不会停止
- react-native - Apollo GraphQL 客户端不适用于 react native 的发布版本
- python - Python requests-html session GET 正确用法
- api - Flutter http [GET][200] 为空以获取确切的 API
- mysql - 如何在表达式中多次使用 COUNT() 实现 OVER?
- python - 如何在for循环中将一列数字转换为列表
- java - 使用 maven 构建项目时在中心找不到工件
- ffmpeg - 在 FFmpeg 中使用 mpdecimate 去除视频中的滞后峰值
- ios - 导航标题视图中的 UICollectionView 对选择没有响应