最佳化 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 (預設)

    如需容器代理程式參數的詳細資訊,請參閱 上的 Amazon ECS Container Agent GitHub。

若要加快等待期,請將 Amazon ECS代理程式參數設定為下列值:

  • ECS_CONTAINER_STOP_TIMEOUT: 2

    如果您的應用程式花費超過 1 秒,請將值乘以 2,然後使用該數字作為值。

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

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

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

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