자바 주소 가져오기 InetAddress 성능 이슈
개요
- 결제 취소 시 단건/다건 구분 없이 타임아웃 시간인 최대 3초 내 응답이 오던 서비스가 최소 5초 최대 15초 이상 5초 단위의 반복적 응답지연이 발생
- 이슈는 클라이언트
<-> 인증 서버 <-> 결제 서버 중 클라이언트 <-> 인증서버 구간에서만 발생
이슈 파악
- 종단과 종단간 통신 분석 결과
- 서비스 구성 방식 변경
- Sync 방식 사용, 15초 이상 소요되는 통신 건 발생 시 사용자 응답도 동일하게 지연되는 상황 발생
- Sync -> Async 변경
- Async 변경 후에도 최대 응답 시간 자체가 길어지는 경우 응답 지연 발생
원인
- 결제 요청 시 InetAddress의 반복적인 호출
- 클라이언트 요청 진입 시 로깅을 위해 InetAddres를 호출하여 DNS IP 객체 생성
InetAddress의 심각한 성능 이슈
getLocalHost()
- 내부적으로 DNS 서버로부터 가져온 데이터를 5초간만 캐싱
이후 다시 도메인 검색 시 Synchronized 블록을 사용하여 멀티 스레드 환경에서 병목현상이 발생
- 결론적으로 5초간 캐싱을 하기에 5초마다 레이턴시가 튀는 현상이 반복
동기화 블럭 및 반복적인 DNS 서버 요청으로 인해 성능 이슈 발생
해결법