API Gateway 전환 중 스케일아웃 502 약 800건
70% 전환 단계에서 파드가 늘 때마다 난 502 약 800건을 '새 파드가 준비를 마치기 전에 요청을 받는 준비 시점 문제'로 정의하고, 파드가 Ready가 되는 시점을 약 15초에서 약 35초로 늦춰 100% 구간 약 1,600만 요청을 서버 오류 1건으로 마쳤습니다.
자세히
- 증상
- 트래픽을 API Gateway로 10→30→70→100% 네 단계로 옮기던 중 70% 단계에서, 파드가 늘어날 때마다 502(게이트웨이가 뒤쪽 서버에서 정상 응답을 받지 못했다는 오류)가 났고 모두 약 800건이었습니다.
- 문제 정의
- 502가 파드가 늘어날 때마다 났다는 점에서, 문제를 새 파드가 요청을 받을 준비를 마치기 전에 트래픽이 들어오는 준비 시점 문제로 좁혔습니다.
- 접근
- 전환 비율을 10→30→70→100%로 나눠 올렸고, 70% 단계에서 502가 나오자 앱·nginx 준비 확인과 메모리 설정을 고친 뒤 100%로 넘어갔습니다.
- 원인
- 기존 설정에서는 앱 준비 확인이 15초 시점에 통과해 파드가 약 15초 만에 Ready(요청을 받을 수 있다고 표시되는 상태)가 됐지만, 그때 앱은 아직 요청을 처리할 준비를 마치지 못했고 nginx에는 준비 확인이 아예 없었습니다.
- 해결
- 앱의 준비 확인(readiness probe, 요청을 받을 준비가 됐는지 확인하는 검사)을 15초에서 30초로 늦추고, nginx 준비 확인을 35초로 새로 두고, 메모리를 2.0GiB에서 3.6GiB로 맞췄습니다.
- 검증
- 파드가 Ready가 되는 시점은 약 15초에서 약 35초로 늦춰졌고, 그 뒤 공개 API 23개(라우트 규칙 26개)를 7일 만에 100% 전환한 구간의 약 1,600만 요청 중 서버 오류는 1건이었습니다.
- 재발 방지
- 이제 파드는 앱과 nginx가 모두 준비 확인을 통과한 뒤에만 트래픽을 받습니다.
- 문서화
- Kubernetes 설정 변경은 ADR(설계 결정 기록)로 남겨 합의를 거친 뒤 반영했습니다.