정의
서킷 브레이커(Circuit Breaker)란 원래 일반적으로 어떤 전기적 회로를 과전압 등으로부터 보호하기 위해 사용하는 일종의 장치를 말한다. 아주 단순한 의미에서 보면, 각 가정집에 설치돼있는 누전차단기 또는 퓨즈와 같은 장치를 말한다.
누전 차단기가 없게되면 아파트에 공급되는 전원장치가 차단기 없이 연결되어 있다는 이야기와 같고, 전기적으로 쇼트가 발생하게 되면 하나의 회로를 공유하므로, 여기에 연결된 모든 전기 제품들이 동작하지 않게 된다.
컴퓨터 공학적 의미에서는 외부 서비스의 장애로 인한 연쇄적 장애 전파를 막기 위해 자동으로 외부 서비스와 연결을 차단 및 복구하는 역할을 한다고 한다. 서킷 브레이커는 애플리케이션의 안정성과 장애 저항력을 높인다.
k8s 에서는 istio에 관련 기능이 있다.
왜 사용하는가?
분산 시스템 즉, MSA ( Micro Service Architecture ) 환경에서는 네트워크 일시 단절 또는 트래픽 폭증으로 인한 간헐적 시간 초과 등의 상황이 종종 발생한다고 한다. 이로 인해서 다음과 같은 문제가 야기된다.
- 트래픽 폭증으로 인해서 API 서버 등 외부 서비스의 응답이 느려진다.
- 외부 서비스 응답이 타임아웃 시간을 초과하면 데이터를 받아오기 위해서 외부 서비스를 다시 호출한다.
- 이전에 들어온 트래픽도 미처 처리하지 못한 상황에서 재 호출이 발생하면 외부 서비스에 장애를 발생 시킨다.
- 외부 서비스의 장애로 인해서 데이터를 수신하지 못해 모든 서비스에 장애가 전파된다.
일시적인 경우에는 재시도로 인해서 정상 데이터를 수신할 수 있게 되지만, 장애 상황이라면 지속적으로 재시도 요청을 보내는 것은 무의미하고, 외부 서비스의 장애 복구에 악영향을 끼칠 수 있다는 이야기다.
이런 경우에 외부 서비스에서 데이터를 받아오는 것을 차단하고 미리 준비된 응답을 사용자에게 전달하는 것이 시스템 안정성 및 사용 편의성 측면에서 옳다고 할 수 있다.
서킷 브레이커의 상태
서킷 브레이커는 다음과 같은 상태를 갖는다.
- Closed : 서킷 브레이커는 닫힘 상태일 때 정상적으로 작동한다. 그러나 메서드에 문제가 생겨서 장애가 임계값 한도를 초과하면 회로 차단기가 Open 상태로 변화하게 되며 미리 지정된 응답을 반환한다.
- Open : 서킷 브레이커는 열림 상태일 때 리퀘스트를 받게 되면 실제 작업을 수행하지 않고 오류와 함께 지정된 응답을 반환한다.
- Half-Open : 서킷 브레이커는 메서드를 주기적으로 확인해서 정상이라고 판단되면 Closed 상태로 상태를 전환하고 정상 상태가 아니면 Open 상태를 유지한다. 이 상태에서는 제한된 수의 테스트 요청을 통과하도록 허용하고, 요청이 성공하면 서킷 브레이커가 재설정 되어 Closed 상태로 변환되고 트래픽은 평소와 같이 통과된다. 요청이 실패하면 다른 타임아웃이 발생할 때까지 회로 차단기가 Open 상태로 돌아간다.
요약하자면 Closed 상태는 정상 상태 Open 상태는 비정상 Half-Open 상태는 특정 주기 동안 Open 상태로 유지하다가 서킷이 자체적으로 메서드가 정상적으로 작동하는 지 확인하는 상태.
Half-Open 상태에서 메서드를 몇 번 호출해서 정상 응답이 돌아오면 서킷은 다시 Closed 상태로 전환되어 요청을 처리하고, 몇 번 호출해서 실패가 반환되면 서킷은 Open 상태로 유지된다.
장단점
- 장점 :
- 서킷 브레이커를 사용하게되면 내결함성이 올라가서 장애가 발생하기 전에 예방할 수 있다.
- Micro 시스템에서의 활동들을 내결함성으로 강화할 수 있는 좋은 방법을 제공해준다.
- 단점 :
- 단순히 특정 서비스에 대한 접속을 차단하는 것보다 많은 고려 사항이 필요하기 때문에 다양한 장애 대응책을 세워야하며 이러한 대응책을 테스트하기 어려울 수 있다.
- 서킷을 일회성으로 처리하기가 어렵다. 스위칭을 켜고 끌 수 있는 서비스 메시와 같은 기술이 필요하기 때문에 공수가 들어간다.
내 생각
사실 분산 시스템이 정확히 어떻게 보편적으로 구성 되어 있는지 조차 모르고 있어서 서킷 브레이커를 적절히 활용하는 방법이 무엇인지 모르겠다. 근데 명확하게 장애를 전파하지 않기 위해서 사용하는 패턴임은 알았다.
사실 참조 링크 내에 로직적으로 어떻게 작동하는 지도 나와 있는데 나중에 정리 해보려한다. 혹시 게시글을 보시는 분들은 하위 참조 링크 내에서 로직적으로 어떻게 작동하는 지도 확인 하시면 될 것 같다.
[참조] :
https://www.comworld.co.kr/news/articleView.html?idxno=49318
https://incheol-jung.gitbook.io/docs/study/srping-in-action-5th/chap-15.
https://www.redhat.com/architect/circuit-breaker-architecture-pattern
'CS 지식' 카테고리의 다른 글
robots.txt 파일이란? (1) | 2023.11.08 |
---|---|
Kafka란? (2) | 2023.09.30 |
컴퓨터 구조란? (0) | 2023.08.09 |
비동기와 동기란? (0) | 2023.07.25 |
트레이싱(Tracing)이란? (0) | 2023.07.19 |