HTTP 503 및 504 오류
503과 504는 Linkerd 프록시가 워크로드에 너무 많은 요청을 보내다 보니 워크로드가 과부하 상태가 됐을 때 나타나는 오류예요. 이 글에서는 이런 오류가 발생하는 원리와 해결 방법을 설명해요.
본문
프록시 옆의 워크로드가 요청을 보내면, 프록시는 그 요청을 내부 디스패치 큐(dispatch queue)에 추가해요. 순조롭게 진행될 때는 요청이 큐에서 즉시 꺼내져 디스패치돼요. 하지만 큐가 너무 길어지면(일반적으로 호출되는 서비스가 응답을 느리게 할 때만 발생할 수 있어요) 프록시는 load-shedding(부하 버리기) 상태에 들어가서, 새 요청은 즉시 503을 받게 돼요. 큐가 줄어들어야만 프록시가 load-shedding에서 벗어날 수 있어요.
여기에는 Failfast도 영향을 줘요. 프록시가 디스패치 큐에 요청이 있는 동안 서비스를 failfast 상태로 만들면, 큐에 있는 모든 요청은 프록시가 load-shedding에 들어가기 전에 즉시 504를 받아요.
Failfast에서 벗어나려면, 해당 서비스의 엔드포인트 중 일부가 사용 가능해져야 해요.
Load-shedding에서 벗어나려면 디스패치 큐가 비워지기 시작해야 하는데, 이는 서비스가 요청을 처리할 더 많은 용량을 갖거나, 들어오는 요청 비율이 떨어져야 한다는 뜻이에요.