태그 보관물: gunicorn

gunicorn

Nginx가없는 ELB 뒤의 Gunicorn에 대한 Keepalive 설정 유휴 시간 초과는

우리의 응용 프로그램의 REST API는 (Gunicorn에 의해 제공됩니다 하지 전형적인 자동 스케일링 / 부하 분산 설치를 AWS EC2 인스턴스에서 실행 Nginx에 뒤에). 로드 밸런서의 유휴 시간 초과는 60 초이고 Gunicorn의 연결 유지 시간 초과는 2 초입니다. 504 Gateway Timeout이 구성에서 산발적 인 반응 이 나타났습니다 . Amazon docs 에 따르면 서버의 연결 유지 시간 제한이로드 밸런서의 유휴 시간 제한 설정보다 낮기 때문일 수 있습니다.

원인 2 : 등록 된 인스턴스가 Elastic Load Balancing에 대한 연결을 종료합니다.

해결 방법 2 : EC2 인스턴스에서 연결 유지 설정을 활성화하고 연결 유지 제한 시간을로드 밸런서의 유휴 시간 제한 설정 이상으로 설정하십시오.

Nginx의 경우 기본값 keepalive_timeout은 75 초이며 ELB 기본 설정과 잘 작동합니다. 그러나 Gunicorn 문서keepalive 는 1-5 초 범위의 설정을 권장합니다 .

Gunicorn의 keepalive를 75 초로 늘리는 것이 합리적입니까, 아니면 리버스 프록시를 사용하지 않더라도 5 초 미만으로 유지해야 할 이유가 있습니까?



답변

ELB는 연결을 재사용하기 때문에 ELB 권장 사항에 따라 keepalive 타이머를 늘릴 것입니다. 시간 초과가 만료 될 때까지 대기하고 다른 요청이 ELB에 도착하면 이미 열려있는 연결 중 하나를 사용하여 사용자에게 보냅니다.

504 Gateway Timeout 이 조건에 대한 이상한 오류이지만 연결 재사용이 백엔드의 조기 종료와 일치 할 때 ELB가 반환하는 것으로 보입니다.

브라우저가 백엔드와 직접 통신하는 경우 5 초 권장 사항이 의미가 있지만 HTTP 모드에서 실행할 때 자체가 올바른 리버스 프록시 인 ELB의 경우에는 그렇지 않습니다.


답변