반응형
갑자기 서버가 10분 정도의 주기로 계속 재생성되는 현상이 있었다. 오토 스케일링이나 상태 확인(Health Check) 설정이 잘못된건지 살펴보며 1주일만에 겨우 원인을 밝혀냈다.
원인
구글 클라우드 부하 분산(로드 밸런서)는 안정성을 위해서 한 개가 아니라 여러개가 여러 가용성 존에서 동시에 들어간다. 그런데 이번에 구글이 무슨 업데이트를 한 건지 이 서버들이 엄청나게 늘어났다. 기존에 초당 4번 정도만 확인하던 상태 확인 요청이 수십개로 늘어나니까 부하를 견디지 못한 것이다.
당시 마인리스트는 상태 확인을 전용 엔드포인트(예를 들어 /_health 같은 페이지)가 아닌 메인 페이지에 했었다. 문제는 당시 마인리스트의 메인 페이지는 캐싱조차 제대로 설정되지 않은 상태였다. 대량으로 늘어나는 상태 확인용 요청들을 버티지 못한 것이다.
해결책
상태 확인 경로를 자원을 많이 필요로 하지 않는 페이지로 설정하거나, 상태 확인용 엔드포인트를 만들어서 해결할 수 있다. 혹은 페이지 성능을 개선해서 문제가 없도록 최적화를 해도 된다.
반응형