타임아웃
외부 연동에서 가장 중요한 설정 중 하나는 타임아웃이다.
연동 서비스를 호출할 때 타임아웃을 적절히 설정하지 않으면, 연동 서비스에 장애가 발생했을 때 전체 서비스의 품질이 급격히 나빠질 수 있다.
예시 상황
A 서비스는 톰캣을 사용하며, 스레드 풀 크기는 200 = A 서비스는 동시에 200개의 요청을 처리할 수 있다.
A 서비스는 B 서비스를 호출한다.
B 서비스에 성능 문제가 생겨 응답 시간이 60초를 넘기기 시작했다.
A 서비스에 아무 요청이 없는 상태에서, 사용자 100명이 동시에 A 서비스에 요청을 보낸다.
톰캣은 200개의 요청을 처리할 수 있으므로, A 서비스는 100개 요청을 처리하기 시작한다.
해당 요청은 모두 B 서비스를 호출하는데, B 서비스가 응답을 하지 못하고 있다.
A 서비스의 100개 스레드는 응답을 기다리며 모두 대기 상태가 된다.
10초 후, 또 다른 100명이 A 서비스에 요청을 보내고, 총 200개의 요청이 동시에 처리되며 모두 B 서비스의 응답을 기다린다.
10초 후, 새로운 100명이 요청을 보내지만, 기존 200개 스레드는 응답 대기 중이므로 새로 들어온 요청은 처리가 되지 않는다.