본문 바로가기

cs(with 매일메일)

[251003금] 동기 방식으로 외부 서비스를 호출할 때 외부 서비스 장애가 나면 어떻게 조치할 수 있나요?

외부 서비스 장애로 인해 응답이 오래걸림 > 외부 API응갑으로 대기하는 자원이 많아짐 > 운영 서버 내부에 쌓이면서 성능저하

 

가장 기본적인 해결방법 : 타임아웃 설정!!

> 타임아웃 종류 : 커넥션 타임아웃 / 리드 타임아웃 / HTTP 커넥션 풀 타임아웃

 

커넥션 타임아웃

TCP 3-way handshake를 통해 TCP연결으로 생성된 연결에 소요되는 최대 시간을 의미

 

리드 타임아웃

연결에서 데이터를 주고받을때 소요되는 최대 시간을 의미

 

Rest API의 경우, TCP통신과정에서 각각의 타임아웃이 적용되는 구간은 아래와 같다. 

3-way handshake의 SYN, SYN+ACK, ACK == 커넥션 타임아웃

GET/ 요청, 200OK 응답 등 == 리드 타임아웃

 

 

 

 

추가)

 

?? 벌크헤드 패턴??

Bulkhead(격벽) : 선박의 공간을 여러 구획으로 나누기 위해 사용되는 벽이다. 격벽으로 구획을 나누면, 어느 한 곳에 물이 차더라도 다른 구획은 영향을 전혀 받지 않는다. 

> 벌크헤드 패턴은, 리소스를 격리하여, 일부 컴포넌트에 문제가 발생하더라도, 그것이 시스템 전체로의 장애에 전파되지 않게끔 만들어주는 패턴이다. 

 

즉, 리소스 격리를 통한 장애 격리이다. 

리소스는 쓰레드풀, 커넥션풀등 다양하다. 

 + 리소스풀을 물리적으로 분리하지 않고, 세마포어등 상호배제 매커니즘을 통해 구현 가능하다

 

 

 

??서킷 브레이커??

오류가 지속되는 경우, 일정 시간동안 기능 실행을 차단할 수 있는 기능

빠른 실패를 확인할 수 있기에 외부 서비스 장애에 대한 응답 시간 증가를 예방