기록창고

circuit이 없을때 과 timeout 이 긴 경우 본문

MSA

circuit이 없을때 과 timeout 이 긴 경우

방금시작한사람 2021. 6. 5. 23:14

회사에서 장애가 낫다 

 

A, B, C, D 서버가 있다고 가정한다

 

C -> B -> A 

D -> B -> A

 

B 서버 입장에서는 꼭 A 의 데이터가 필요하지않는 경우였다. 필요는 하지만, 없어도 사용자에겐 문제가 없는 경우

C, D 는 꼭 B 가 필요하다.

 

위처럼 요청을 보내는데, A 서비스에 장애가 생겼다..!

그래서 A 의 응답이 너무 늦어졋다..

 

C, D 에서 요청을 계속 보내고있는데, B 는 A 의 응답을 기다리고 있어 점점 쓰레드는 부족해져다가 결국 503 이 발생했다.

 

결국 C, D 도 장애로 이어진것

 


 

방지책

 

서킷브레이커를 이용하여, A 서버로 보낸 요청이 응답이 늦어나, 안온경우가 일정시간 누적이 되면

서킷 활성화하여, 모든 요청을 서킷이 응답하게 만들고, B 에서는 그의 응답에 대한 대응을 해놓는다

 

또는

 

타임아웃을 짧게 가져가는 방법이 있다. 위의 방법과 비슷하나, n 초 이상 응답이 없을 시 대응 해놓는다 

 

 

 

위의 경우가 MSA 의 단점(?)은 아니지만, 무서운 경험이였다.

다른 서비스에 보내는 요청이 죽는 경우도 생각하면서 코드를 작성해야겠다...

'MSA' 카테고리의 다른 글

@Transactional  (0) 2021.09.19
DB Connection 이 부족한 경우  (0) 2021.09.12
Comments