연동 서비스가 정상이 아닐때 이걸 쓰는 서비스는 장애가난 서비스에 요청을 보내지 않고 바로 에러를 응답하는 것이 낫다. 이렇게 하면 을 서비스의 문제가 갑 서비스에 주는 영향(응답 시간 증가, 처리량 감소 등)을 줄일 수 있다.
연동 서비스가 장애 상황일 때는 연동 대신 바로 에러를 응답하고, 정상화가 되었을때 연동을 재개하면 장애가 주는 영향을 최소화 할 수 있다.
Circuit Breaker 가 동작하는 방식이 이와 같다.
서킷 브레이커는 누전 차단기 같이 동작한다. 과전류가 흐르면 차단기가 내려가 전기를 끊는 것 처럼, 서킷 브레이커도 과도한 오류가 발생하면 연동을 중지 시키고 바로 에러를 응답한다. 이렇게 하면 연동 서비스로의 요청 전달을 차단할 수 있다.
서킷 브레이커는 닫힘, 열림, 반 열림의 3가지 상태를 갖는다.
서킷 브레이커는 닫힘 상태로 시작한다. 닫힘 일때는 모든 요청을 연동 서비스로 전달한다. 외부 연동과 오류가 발생하기 시작하면, 지정한 임계치를 초과했는지 확인한다. 실패 건수가 임계치를 초과하면 서킷 브레이커는 열림 상태가 된다. 보통 임계치는 다음 조건 중 하나를 쓴다.
- 예시임
- 시간 기준 오류 발생 비율: 10초 동안 오류 비율이 50% 초과
- 개수 기준 오류 발생 비율: 100개 요청중 오류 비율 50% 초과 열림 상태가 되면 연동 요청 수행안하고, 바로 에러 응답을 한다. 열림 상태는 지정된 시간 동안 유지된다. 이 시간이 지나면 반 열림 상태로 전환된다. 반 열림 상태가 되면 일부 요청에 한해 연동을 시도한다. 일정 개수 또는 일정 시간동안 반 열림 상태 유지하며 이 기간 동안 연동에 성공시 닫힘 상태로 복귀한다. 반대로 계속 실패하면 다시 열림 상태로 전환되 연동을 차단한다.
fail fast 문제 있는 기능 실행 안하고 걍 실패시키는 것. 장애 발생한 지점의 과부하를 막고 불필요한 자원 낭비 줄여 전체 서비스의 안정성 유지하는데도 도움이 된다.