L4 설정 오류에 따른 브라우저 캐시 성능 저하 사례
'실무로 배우는 시스템 성능 최적화' 책을 읽다가 L4설정 오류에 따른 알아두면 좋을 법한 성능 저하 사례가 있어 포스팅 해보려고 한다. 해당내용은 모두 '실무로 배우는 시스템 성능 최적화' 책 내용에 기반한다.
[ 현상 ]
웹 포털 화면을 사용할 때마다 대부분 정적 콘텐츠를 반복해서 내려받아 응답시간이 오래 걸리는 성능 저하 현상이 발생했다.
[ 접근 방식 ]
피들러로 모니터링한 결과, 동일 정적 콘텐츠를 기존에 내려받았음에도 다시 내려받는 현상이 발생하고 있음을 확인하고 HTTP 응답을 분석한 결과, 동일 정적 콘텐츠의 변경일자가 각기 다른 것을 발견했다. 이것은 한 웹 서버에 요청이 들어간다면 발생할 수 없는 상황이므로 웹 서버 액세스 로그를 통해 한 PC에서 들어오는 HTTP 요청이 여러 웹 서버에 골고루 들어온다는 것을 확인했다. 이에 웹 서버 파일시스템 구성과 L4의 분배 방식을 확인해 원인을 찾았다.
[ 원인 ]
-L4에서 단순 라운드 로빈(Round-robin) 형태로 HTTP 요청을 분배시켜 한 사용자의 요청에 대해 4대의 웹 서버에서 서비스가 이루어짐
-웹 서버의 문서 루트는 NAS 같은 공유 파일시스템이 아닌 로컬 파일시스템 내에 개별적으로 존재하고, 같은 콘텐츠임에도 변경일자가 각 서버마다 달랐다.
-위 두 가지 원인으로 한 브라우저에서 이뤄지는 HTTP 요청이 4대의 서버에 무작위로 분배되고, 각 서버 동일 콘텐츠의 변경일자가 모두 달라서 매번 변경된 콘텐츠로 인식됐다.
-이로 인해 브라우저 캐시가 정상적으로 효과를 발휘하지 못하고 매번 콘텐츠 내용을 내려받음으로써 성능 저하가 발생했다.
[ 조치 ]
L4 분배 방식을 해시(HASH)로 변경해 PC의 IP가 동일하면 동일한 웹 서버로 접속이 이뤄지도록 개선했다(NAS 같은 공유 파일시스템을 사용하면 L4의 분배 방식에 상관없이 브라우저 캐시가 동작하게 할 수도 있다).
[ 결과 ]
브라우저 캐시가 정상적으로 동작해 매번 콘텐츠를 내려받지 않음으로써 화면 응답시간이 개선됐다.