优化 Amazon ECS 的负载均衡器连接耗尽参数 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

优化 Amazon ECS 的负载均衡器连接耗尽参数

为了便于优化,客户端会保持与容器服务的活动连接。这样,来自该客户端的后续请求就可以重复使用现有连接。当您想停止流向容器的流量时,可以通知负载均衡器。负载均衡器会定期检查客户端是否关闭了保持活动连接。Amazon ECS 代理监控负载均衡器,并等待负载均衡器报告保持活动连接已关闭的情况(目标处于 UNUSED 状态)。

负载均衡器等待将目标移至 UNUSED 状态的时间为取消注册延迟。您可以配置以下负载均衡器参数来加快部署速度。

  • deregistration_delay.timeout_seconds:300(默认值)

当您的服务响应时间小于一秒时,请将参数设置为以下值,使负载均衡器在中断客户端和后端服务之间的连接之前只等待 5 秒:

  • deregistration_delay.timeout_seconds:5

注意

当您的服务具有长期请求(例如文件上传缓慢或流式传输连接)时,请勿将该值设置为 5 秒。

SIGTERM 响应能力

Amazon ECS 首先向任务发送 SIGTERM 信号通知应用程序需要完成并关闭。然后,Amazon ECS 会发送一条 SIGKILL 消息。当应用程序忽略 SIGTERM 时,Amazon ECS 服务必须等待发送终止该进程的 SIGKILL 信号。

Amazon ECS 等待发送 SIGKILL 消息的时间由以下 Amazon ECS 代理选项确定:

  • ECS_CONTAINER_STOP_TIMEOUT:30(默认值)

    有关容器代理参数的更多信息,请参阅 GitHub 上的 Amazon ECS 容器代理

要加快等待时间,请将 Amazon ECS 代理参数设置为以下值:

注意

如果您的应用程序花费的时间超过 1 秒,则请将该值乘以 2,然后将该数字用作值。

  • ECS_CONTAINER_STOP_TIMEOUT:2

在本例中,Amazon ECS 会等待 2 秒钟让容器关闭,然后 Amazon ECS 会在应用程序未停止时发送 SIGKILL 消息。

您也可以修改应用程序代码以捕获 SIGTERM 信号,并对其做出反应。以下是 JavaScript 中的示例:

process.on('SIGTERM', function() { server.close(); })

此代码会导致 HTTP 服务器停止侦听任何新请求,完成回答任何正在处理的请求,然后 Node.js 进程终止。这是因为它的事件循环无事可做。鉴于此,如果该进程只需 500 毫秒即可完成其正在处理的请求,则它会提前终止,而不必等待停止超时并收到 SIGKILL。