Amazon ECS에 대한 로드 밸런서 Connection Draining 파라미터 최적화 - Amazon Elastic Container Service

Amazon ECS에 대한 로드 밸런서 Connection Draining 파라미터 최적화

최적화를 위해 클라이언트는 컨테이너 서비스에 대한 연결 유지 연결을 유지 관리합니다. 이렇게 하면 해당 클라이언트의 후속 요청에서 기존 연결을 재사용할 수 있습니다. 컨테이너로 향하는 트래픽을 중지하려면 로드 밸런서에 알립니다. 로드 밸런서는 클라이언트가 연결 유지 연결을 종료했는지 주기적으로 확인합니다. 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 서비스는 프로세스를 종료하기 위한 SIGTERM 신호 전송을 기다려야 합니다.

Amazon ECS가 SIGKILL 메시지를 보내기 위해 대기하는 시간은 다음 Amazon ECS 에이전트 옵션으로 결정됩니다.

  • ECS_CONTAINER_STOP_TIMEOUT: 30(기본값)

    컨테이너 에이전트 파라미터에 대한 자세한 내용은 GitHub의 Amazon ECS Container Agent를 참조하세요.

대기 시간을 단축하려면 Amazon ECS 에이전트 파라미터를 다음 값으로 설정합니다.

  • ECS_CONTAINER_STOP_TIMEOUT: 2

    애플리케이션이 1초 넘게 걸리는 경우 값에 2를 곱하고 이 숫자를 값으로 사용합니다.

이 경우 Amazon ECS는 컨테이너가 종료될 때까지 2초 정도 기다린 다음, 애플리케이션이 중지되지 않으면 SIGKILL 메시지를 보냅니다.

또한 SIGTERM 신호를 트랩하고 이에 반응하도록 애플리케이션 코드를 수정할 수 있습니다. 다음은 JavaScript로 작성된 예제입니다.

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

이 코드를 사용하면 HTTP 서버가 새 요청에 대한 수신을 중지하고 전송 중인 요청에 대한 응답을 완료한 다음 해당 이벤트 루프에 수행할 작업이 더 이상 없기 때문에 Node.js 프로세스가 종료됩니다. 이 경우 프로세스가 전송 중인 요청을 완료하는 데 500밀리초 정도밖에 걸리지 않으면 중지 제한 시간을 기다리고 SIGKILL을 받지 않고도 조기에 종료합니다.