1 minute read

개요

“Connection draining”은 서버 또는 인스턴스가 더 이상 서비스할 수 없게 되었을 때(헬스체크 실패, 등록 취소…) , 해당 서버에 대한 요청을 천천히 줄여가며 연결을 종료하는 메커니즘을 말한다.

로드밸런서의 문제점

“Connection draining”은 주로 로드 밸런서나 서비스 디스커버리 메커니즘과 관련된 네트워크와 웹 서비스에서 사용되는 용어다. 일반적으로, 로드 밸런서는 여러 서버 또는 인스턴스로 들어오는 트래픽을 분산시키는 역할을 한다.

그런데 만약 특정 서버가 장애가 발생하거나 유지보수를 위해 내려가야 할 때, 이 서버에 대한 연결을 즉시 끊는다면 해당 서버로 전송되는 요청은 모두 실패한다. 이에 따라 사용자는 서비스 중단을 경험하게 된다.

로드밸런서 에서 Connection Draining의 역활

Connection draining은 이런 문제를 해결하기 위해 사용한다. 이 기능을 통해 로드 밸런서는 서버를 폐쇄하기 전에 트래픽을 점진적으로 해당 서버에서 다른 서버로 이동시킨다. 이렇게 하면 서비스 중단을 최소화하면서 사용자들에게 끊김 없는 서비스를 제공할 수 있다.

이를 위해 백엔드 서버들에 주기적으로 health checking을 통해 비정상 인스턴스를 걸러내어 draining 시키는 전략을 취한다.

AWS ALB, **Deregistration delay**

Elastic Load Balancing(탄력적 로드 밸런싱)은 등록 취소되는 백엔드 서버에 대한 요청 전송을 중지한다.

기본적으로 Elastic Load Balancing(탄력적 로드 밸런싱)은 등록 취소를 진행하기전에 300초(수정가능) 동안 대기하므로 대상에 대해 이미 진행된 요청이 완료될때까지 시간을 벌수 있다.

등록 취소 대상에 이미 진행된 요청이 없고 새로운 연결이 없는 경우 Elastic Load Balancing(탄력적 로드 밸런싱)은 즉시 등록 취소 프로세스를 완료한다. (상태는 draining으로 표시된다)

등록 취소 지연이 경과하기 전에 등록 취소 대상이 연결을 종료하면 클라이언트는 500단계 오류 응답을 수신한다.

Leave a comment