Nginx로 롤링배포를 하고 나서 성능측정을 했다. 내부 ip로 API 요청을 보낼 때는 응답속도가 느릴지언정 1000TPS도 견디는 강력한 서버였다. 하지만 Nginx로 설정을 한 이후
30%나 되는 Request가 실패하는 현상이 발생했다.
https://api.gamemuncheol.com/open-api/posts/page/new 에 호출시 응답이 느릴지언정 결국 응답이 되기는 하는 서버를 만들어보자!
이를 해소하기 위해서 Nginx 쿡북이라는 책을 사고 한 번 쭉 읽은 후 Nginx가 응답을 버퍼링할 때 데이터의 양이 너무 많기 때문에 그런가..? 하는 생각이 들었다.
그래서 nginx.conf에서 proxy buffer size를 더 늘려주었다.
proxy_buffer_size 16k; # 헤더가 큰 경우 이 값을 늘릴 수 있습니다.
proxy_buffers 8 32k; # 더 많은 버퍼로 조정하여 더 많은 데이터를 메모리에 보관
proxy_busy_buffers_size 64k; # 더 많은 메모리 사용을 허용
proxy_temp_file_write_size 64k; # 임시 파일 쓰기 크기 늘리기
Proxy Send Timeout과 Read Timeout Connect Time Out을 크게 늘린 후 또 한 번 성능 테스트를 진행했다.
proxy_send_timeout 1800s; # 요청을 보내는 타임아웃을 늘림
proxy_read_timeout 1800s; # 응답을 받는 타임아웃을 늘림
proxy_connect_timeout 3600s; # 연결 타임아웃을 늘림
# 실패한 요청 재시도
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_next_upstream_timeout 1800s; # 재시도 허용 시간
proxy_next_upstream_tries 10; # 최대 재시도 횟수
API 성공률이 1000TPS에서 70% -> 95%로 개선되었음을 알 수 있다!