http 요청에 대한 kubernetes / elb 시간 초과는 무엇입니까?


9

도커 이미지로 패키지 된 HTTPS 요청을 수락하는 Java API가 있고 EC2 위에 k8s 클러스터를 사용하여 배포됩니다. 마스터 EC2 앞에 ELB가 있습니다.

해당 Java API를 사용하기 위해 ELB에 curl POST 요청을 만들 수 있습니다.

때로는 kube 로그를 볼 때 처리가 성공적으로 완료되었지만 내 curl 요청이 응답을 영원히 기다리고 있습니다.

이것은 약 40 분 정도 큰 요청에 대해 발생하며 25 분의 요청은 응답을 얻습니다.

타임 아웃이 어디에 있을까요? 내가보아야 할 특정 구성 매개 변수는 무엇입니까?

클라이언트 (컬)-> ELB-> k8s-> Java API 이미지를 실행하는 포드

ELB와 관련이 있다고 생각하지만 (IdleTimeout을 설정하지 않음) 문서는 기본값이 60 초라고 말하지만 20 분 요청에 대한 응답을 얻을 수는 있지만 "ConnectionSettings": { "IdleTimeout"}


"40 분 정도 더 큰 요청"그게 무슨 뜻입니까?
Arghya Sadhu

즉, 대용량 파일을 업로드하는 경우 api는 ETL 프로세스로 파일을 '가져 오기'까지 40
분이 걸리고

왜 마스터 앞에 LB가 있는지 궁금합니다 (api 서버를 의미합니까?). 어떻게 LB에 도달하면 API에 도달 할 수 있습니까?
수렌

답변:


1

Pampy 가 그의 답변에서 언급 한 것처럼 ELB 시간 초과는 유휴 시간 만 계산합니다. 이 범위는 1 ~ 4000 초이며 기본적으로 60 초로 설정되어 있습니다. CLI 또는 콘솔을 사용하여 시간 초과를 변경할 수 있습니다.

다음은 CLI를 사용하여 5 분으로 변경하는 예입니다.

aws elb modify-load-balancer-attributes --load-balancer-name my-loadbalancer --load-balancer-attributes "{\"ConnectionSettings\":{\"IdleTimeout\":300}}"

출처 : 문서

20-40 분이 걸리는 큰 파일을 업로드 할 때 RabbitM 또는 Kafka와 같은 메시지 브로커를 사용하여 업로드 및 처리를 비동기 적으로 처리하는 방법에 대한 다른 제안을 계속하는 것이 좋습니다.


0

ELB 시간 초과는 "유휴"시간 에만 계산됩니다 . 즉, 업로드가 여전히 실행 중이면 유휴 상태가 아닙니다. 파일이 서버에 도착하면 서버가 응답 할 때까지의 시간을 측정해야합니다.

올바르게 받으면 서버는 요청을 처리하고 나중에 클라이언트에 응답을 반환합니다. 기본 시간 제한이 60 초이면 서버에 업로드 된 파일을 처리하고 응답을 반환하는 데 60 초가 걸립니다.

서버가 25 분 업로드를 처리하는 데 60 초 미만이 필요하지만 40 분 업로드를 처리하는 데 더 많은 시간이 필요합니까?


60 초는 어디에서 오는가? ELB에서 기본 IdleTimeout을 사용하지 않습니다
tooptoop4

ELB의 기본 유휴 시간 초과는 60 초입니다. "사용할 수 없습니다". 1 초에서 60 분 사이로 수정할 수 있지만 ELB에 연결을 종료하지 않도록 지시 할 방법은 없습니다.
Pampy

0

파일을 업로드하고 rabbitMQ와 같은 메시지 브로커에 이벤트를 푸시하지 않는 이유는 무엇입니까? kubernetes Job / CronJob 객체를 비동기 적으로 사용하여 파일에서 ETL을 수행하고 이에 따라 클라이언트에 알립니다.

이렇게하면 수신 요청을 더 이상 차단할 필요가 없습니다. 이벤트가 게시 된 후 업로드 후 요청이 처리되고 있다는 메시지를 클라이언트에게 보냅니다.


나는 여전히 타임 아웃이 어디 있는지 찾고 싶다
tooptoop4

0

HTTP 요청에는 25 분이 걸립니다. 나는 P Ekambaram에 동의합니다.

파일을 업로드하자마자 엔드 포인트를 비동기식으로 만들고 응답하는 것이 더 좋을 것이라고 생각합니다. 동시에 미들웨어 메시징 (RabbitMQ, Kafka 또는 NATS) 또는 Websocket을 사용하면 파일을 가져오고 처리했습니다.


0
 aws elb modify-load-balancer-attributes --load-balancer-name my-loadbalancer --load-balancer-attributes "{\"ConnectionSettings\":{\"IdleTimeout\":300}}"

cLI에서이를 사용하여 시간 초과를 5 분으로 변경하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.