woowacourse-teams / 2021-zzimkkong

✅ 공간을 한 눈에, 예약은 한 번에!
https://zzimkkong.com
164 stars 20 forks source link

fix: Connection Prematurely Closed issue 대응 작업 #987

Closed sakjung closed 7 months ago

sakjung commented 7 months ago

구현 기능

현재 작업으로 문제가 해결되지 않을 가능성도 있으므로 배포 후 장기간 (N month) 모니터링 필요


공유하고 싶은 내용

slack 서버의 네트워크 관련 구성, 설정등을 알 수 없음. 따라서, Reactor Netty Docs 의 내용을 토대로 원인을 추정하여 대응한다.

추정 원인

1. idle timeout (the connection is closed when there is no incoming data for a certain period of time)

즉, target server (i.e. Slack) 의 keep-alive timeout config 와 우리의 connection idle timeout config 가 맞지않아 (호환되지 않게끔 설정) 발생하는 케이스. tcpdump 와 로그등을 분석해본 결과, 이 케이스가 가장 유력하다고 보임.

tcpdump 를 보았을 때, 3초간 3번 정도의 TCP keep alive check (probe packet) 통신 후 target server 측에서 보낸 RST 패킷을 통해 커넥션이 premature 하게 끊어짐. 따라서, 우리 측에서는 maxIdelTimeout 설정값을 2초 정도로 잡아서 우리가 먼저 connection 을 알아서 끊도록 함.

2. max keep alive requests (the connection is closed when the requests reach the configured maximum number)

원인이 아니겠지만, docs 를 보다보니 관련 설정도 해주는게 좋을것 같아서 수정함. 트래픽이 많지 않은데 connection pool 을 크게 가져갈 필요가 없는 것 같아서 maxConnections 값 10으로 설정.

Close #985

sakjung commented 7 months ago

상용 배포는 내일 할게요~