Error - 장시간 요청 Cloudfront timeout

topics 400-인프라 & 아키텍처 402 클라우드 403 시스템 설계
types 에러해결 최적화
contexts 프로젝트
tags

현 서비스 상황

nginx-1757772245845.png 서비스 구조가 이렇게 되어있다.

발생한 문제

  • client : pending으로 요청이 가다가 504 에러

  • server > nginx : 499에러

  • 499 에러는 client가 요청을 닫앗다 즉 취소했다는 에러코드입니다

  • 504 에러는 gateway timeout에러를 의미합니다

해결

사용중인 client와 spring에서의 timeout시간을 최대로 늘려놓았음에도 불구하고 같은 에러가 중복되었다.

따라서 중간에 프록시되는 cloudfront를 의심하게 되었다.
cloudfront공식 문서에서 cloudfront에 504문제가 나타는 경우를 2가지로 정의했다.

  • 오리진이 CloudFront에 HTTP 504 상태 코드를 반환했습니다.
  • 요청이 만료되기 전에 오리진이 응답하지 않았습니다.

우리는 이 2번째인 요청이 만료되기 전 origin이 응답하지 않는 문제가 발생햇던것이다.

aws 공식 문서에서 cloudfront의 originReadTimeout이 디폴트로 얼마나 있는지 확인해 볼 수 있엇다

OriginReadTimeout
Specifies how long, in seconds, CloudFront waits for a response from the origin. This is also known as the origin response timeout. The minimum timeout is 1 second, the maximum is 120 seconds, and the default (if you don't specify otherwise) is 30 seconds.

그렇다 디폴트로 30초이고 최대 2분까지 가능하다.

당시 api는 ai모델을 이용하는 요청이였으므로 평균 2.5분이 걸렸다 즉 기존 http를 이용한 api로는 불가능하다고 판단하였다.

따라서 ai서비스 진행상황도 유저가 트래킹할 수 있도록 웹소켓으로 데이터를 받는 것으로 수정하였다.