優化 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 容器代理程式 GitHub。

若要加快等待期間,請將 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