最佳化 Amazon ECS 的負載平衡器連線耗盡參數 - Amazon Elastic Container Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

最佳化 Amazon ECS 的負載平衡器連線耗盡參數

若要允許最佳化,用戶端會維持與容器服務的持續連線。這可讓來自該用戶端的後續請求重複使用現有的連線。當您想要停止容器的流量時,請通知負載平衡器。負載平衡器會定期檢查用戶端是否關閉保持連線。Amazon ECS 代理程式會監控負載平衡器,並等待負載平衡器報告持續作用連線已關閉 (目標處於 UNUSED 狀態)。

負載平衡器將目標移至 UNUSED 狀態的等待時間量是取消註冊延遲。您可以設定下列負載平衡器參數來加速部署。

  • deregistration_delay.timeout_seconds:300 (預設)

當您的服務回應時間低於 1 秒時,請將 參數設定為下列值,讓負載平衡器只等待 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 代理程式參數設定為下列值:

  • ECS_CONTAINER_STOP_TIMEOUT: 2

    如果您的應用程式需要超過 1 秒的時間,請將值乘以 2,並使用該數字做為值。

在此情況下,Amazon ECS 會等待 2 秒讓容器關閉,然後 Amazon ECS 會在應用程式未停止時傳送 SIGKILL 訊息。

您也可以修改應用程式程式碼來捕捉 SIGTERM 訊號並對其做出反應。以下是 JavaScript 中的範例:

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

此程式碼會導致 HTTP 伺服器停止接聽任何新請求、完成回應任何處理中的請求,然後 Node.js 程序會終止,因為事件迴圈沒有任何事要做。有鑑於此,如果程序只需要 500 毫秒就能完成其傳輸中請求,它會提早終止,而無需等待停止逾時並收到 SIGKILL。