Circuit Breaker Pattern
Circuit Breaker Pattern
Circuit Breaker Pattern
- MSA의 경우 다른 서비스를 자주 호출하게 됨
- 한 서비스에 장애가 발생하면, 해당 서비스를 호출한 다른 서비스에도 장애가 전파됨
- 장애가 발생한 서버에 요청을 계속 보내는 것은 장애 복구를 힘들게 함
- 서킷 브레이커 패턴은 장애가 발생한 경우 생기는 문제를 방지하기 위한 패턴
- 문제가 발생한 지점을 감지하고 실패하는 요청을 계속하지 않도록 방지
- 문제가 발생하면 회로를 차단하는 회로 차단기의 동작 원리에서 아이디어를 차용해 옴
- 넷플릭스의 Hystrix 혹은 자바의 Resilience4j와 같은 라이브러리를 사용
상태
- 회로 차단기에는 Closed, Open, Half Open 상태가 존재
- Closed
- 정상인 상태
- 외부 서비스에 장애 발생 시 Open 상태가 됨
- Open
- 외부 서비스에 장애가 발생한 상태
- 요청의 시간이 오래 걸리거나, 요청 실패율이 일정 비율 이상인 경우 Open 상태가 됨
- 외부 서비스에 대한 요청을 차단
- 특정 시간이 지나면 Half Open 상태가 됨
- Half Open
- Open 상태가 지나고 일정 시간이 된 상태
- 이 상태에서 요청들이 성공한 경우 closed 상태로, 아닌 경우 open 상태로 변경됨
필요성
- 장애가 발생하면 리소스의 낭비가 생김
- 한 장애로 인해 여러 서비스에 장애가 번지는 경우 리소스 낭비가 엄청남
- 서킷 브레이커 패턴으로 장애가 다른 서비스에 번지지 않도록 격리시킬 수 있음
- 시스템이 자동으로 빠르게 장애를 확인하고, 복구해줌
- 장애 서비스에 여러번 요청을 보내는 경우 장애가 난 서비스의 부하가 커질 수 있음
- 장애 서비스에 요청을 보내지 않아 부하가 훨씬 줄어듦
- 장애에 대한 대안을 설정해서 문제없이 서비스 운용 가능
References
- https://mangkyu.tistory.com/261
- https://hudi.blog/circuit-breaker-pattern/