-
Circuit Breaker (서킷 브레이커)📖 개발 공부 2023. 2. 17. 00:58
기존 MSA 패턴
마이크로서비스 아키텍처 패턴은 시스템을 여러 개의 서비스 컴포넌트로 나눠서 서비스 컴포넌트 간에 호출하는 개념을 가지고 있다.
이 패턴에는 서버가 서로 종속적이라는 한계가 있다.
Server 1이 Server 2를 호출하는 상황에서 이슈가 생겨 Server 2가 응답을 못하거나 응답 속도가 느린 경우, Server 1에서 Server 2를 호출한 스레드는 응답을 받지 못해, 계속 응답을 기다리는 상태로 잡혀있게 된다.
지속해서 호출을 하게 되면 같은 원리로 각 스레드들이 응답을 기다리는 상태로 변화게 되고, 결과적으로는 남은 스레드가 없어서 다른 요청을 처리할 수 없는 상태가 된다.
동작하지 않는 서비스 접속 시 타임아웃될 때까지 차단되어, 의존성이 있는 서비스까지 연쇄적으로 멈출 가능성이 있다.
적어도 가장 중요한 기능에 영향이 가지 않도록 해야 하는데, 그러기 위해서는 장애가 발생한 서비스에 대한 접속 차단이 필요하다.
이러한 한계점을 극복한 것이 Circuit Breaker 패턴이다.
Circuit Breaker 패턴
Circuit Breaker란?
원격 접속의 성공/실패를 카운트하여 에러율(failure rate)이 임계치를 넘어섰을 때 자동적으로 접속을 차단하는 시스템각각의 상태와 이동 조건은 아래와 같다.
- CLOSED
초기 상태, 모든 접속은 평소와 같이 실행된다. - OPEN
에러율이 임계치를 넘어서면 OPEN 상태가 된다. 모든 접속은 차단(fail fast)가 된다. - HALF_OPEN
OPEN 후 일정 시간이 지나면 HALF_OPEN 상태가 된다. 접속을 시도하여 성공하면 CLOSED, 실패하면 OPEN으로 되돌아간다.
Server 2로의 모든 호출은 Circuit Breaker를 통하게 되고, Server 2가 정상적인 상황에서는 모든 트래픽을 문제없이 bypass 한다.
이때 Server 2에 응답이 없다면 Circuit Breaker가 Server 2로의 호출을 강제로 끊고 Server 1에게 에러 메시지를 날린다.
이를 발전시켜 에러 메시지가 아닌, 다른 의미 있는 메시지를 보낼 수 있다(Fallback 메세지)
++ 더 알아볼 것: 서킷 브레이커 타입
728x90반응형'📖 개발 공부' 카테고리의 다른 글
intellij로 디버깅 하기 (0) 2023.06.06 배포 전략 (Rolling Update, Blue/Green, Canary) (0) 2023.04.09 Eventual Consistency (0) 2023.04.01 [Resilience4j] Circuit Breaker Config 정리 (0) 2023.03.19 [Memcached] slab allocator (0) 2023.03.19 - CLOSED