Circuit Breaker Pattern

  • 연동 서비스가 정상이 아닐때 이걸 쓰는 서비스는 장애가 발생한 서비스에 요청을 보내지 않고 바로 에러를 응답하는 것이 좋음
  • 이렇게 하면 을 서비스의 문제가 갑 서비스에 주는 영향(응답 시간 증가, 처리량 감소 등)을 줄일 수 있음
  • 연동 서비스가 장애 상황일 때는 연동 대신 바로 에러를 응답
  • 정상화가 되었을때 연동을 재개하면 장애가 주는 영향을 최소화 가능

  • Circuit Breaker 가 동작하는 방식이 이와 같다.
  • 서킷 브레이커는 누전 차단기 같이 동작
  • 과전류가 흐르면 차단기가 내려가 전기를 끊는 것 처럼, 서킷 브레이커도 과도한 오류가 발생하면 연동을 중지 시키고 바로 에러를 응답
  • 이렇게 하면 연동 서비스로의 요청 전달을 차단 가능

  • 서킷 브레이커는 닫힘, 열림, 반 열림의 3가지 상태를 가짐
  • 서킷 브레이커는 닫힘 상태로 시작한다
    • 닫힘 일때는 모든 요청을 연동 서비스로 전달
    • 외부 연동과 오류가 발생하기 시작하면, 지정한 임계치를 초과했는지 확인
    • 실패 건수가 임계치를 초과하면 서킷 브레이커는 열림 상태가 된다
  • 보통 임계치는 다음 조건 중 하나를 쓴다.
  • 예시임
    • 시간 기준 오류 발생 비율: 10초 동안 오류 비율이 50% 초과
    • 개수 기준 오류 발생 비율: 100개 요청중 오류 비율 50% 초과
  • 열림 상태가 되면 연동 요청 수행안하고, 바로 에러 응답을 한다
  • 열림 상태는 지정된 시간 동안 유지된다. 이 시간이 지나면 반 열림 상태로 전환된다
  • 반 열림 상태가 되면 일부 요청에 한해 연동을 시도
  • 일정 개수 또는 일정 시간동안 반 열림 상태 유지하며 이 기간 동안 연동에 성공시 닫힘 상태로 복귀
  • 반대로 계속 실패하면 다시 열림 상태로 전환되 연동을 차단

fail fast! 문제 있는 기능 실행 안하고 걍 실패시키는 것. 장애 발생한 지점의 과부하를 막고 불필요한 자원 낭비 줄여 전체 서비스의 안정성 유지하는데도 도움이 된다.