728x90
https://www.amitph.com/spring-webflux-retry/
다 좋은데 서킷브래이커는 어떻게 적용하는걸까? 만약 retry 만 지원한다면..타겟 서버가 아예 다운된 상태라도 모든 요청이 재시도 처리될텐데.. 음...
그런데 서킷브래이커를 무조건 적용해야 할까?
푸시 발송을 예로 들어 생각해보자. 통신을 하는 api 에 장애가 발생했다. 계속 콜을 하며 장애가 빨리 풀리기를 기다려야 할까. 아니면 10분정도 아예 요청을 보내지 말아야 할까?
전자의 경우 모든 요청에 대해 지정된 횟수만큼 재시도를 하기 때문에 어차피 푸시 발송은 안되는데 서버가 바쁘게 움직일 것이다. 그 대신 타겟 api의 장애가 풀리는 즉시 푸시 재개가 가능하다.
후자의 경우 지정된 시간 동안 푸시 서버는 타겟 api를 콜하지 않기 때문에 타겟 api 의 장애가 그 전에 풀리더라도 푸시 발송을 하지 못하는 단점이 있다.
이런 상황에서는 전자의 방식을 적용하는게 나아보인다.
사실 서킷브래이커는 장애의 전파를 막는 것이 목적이기 때문에 서킷브래이커를 적용한 서비스는 서킷브래이커가 열리는 시간을 장애로 대응하기 보다 다른 서비스를 제공한다는 느낌으로 접근해야 한다. 그런데 푸시 발송 같은 것은 발송/미발송 두가지 선택지만 있고 발송 대신 차선책으로 서비스할 뭔가가 없다.
728x90