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