서킷 브레이커 패턴은 다음과 같은 문제점, 솔루션, 해결책의 필요 조건이 있다.
문제점
동기 방식으로 상호 통신하는 마이크로 서비스 시스템 환경은 연쇄 장애가 발생할 여지가 있다. 하나의 마이크로서비스가 응답하지 않으면 이 마이크로서비스의 클라이언트 또한 클라이언트의 요청에 응답하지 않게 된다. 이 문제는 시스템 환경 전체에 재귀적으로 전파돼 중요한 부분까지 중단시킬 수 있다.
해결책
대상 서비스에 문제가 있다는 것을 감지해 새 요청을 보내지 않도록 차단하는 서킷 브레이커를 추가한다.
해결책의 필요조건
해결책의 필요조건은 다음과 같다.
- 서비스에 문제가 감지되면 시간 초과(timeout)를 무시하고 바로 실패하도록 서킷을 연다.
- 반열림 서킷(half-open circuit)이라고도 하는 장애 복구용 브로브(Probe)를 사용한다. 즉 서비스가 정상 동작하는지 확인하고자 주기적으로 요청을 보낸다.
- 프로브가 서비스의 정상 동작을 감지하면 서킷을 닫는다. 이런 기능은 시스템 환경을 탄력적으로 만들어서 자가 치유를 가능하게 하는 매우 중요한 기능이다.
다음 다이어그램은 마이크로서비스 시스템 환경 안의 모든 동기 통신이 서킷 브레이커를 통과하는 시나리오를 보여준다. 서비스의 문제를 감지해서 열려 있는 하나의 서킷브레이커 외에는 모든 서킷 브레이커가 닫혀 있으며, 트래픽을 허용하고 있다.열려 있는 서킷 브레이커는 빠른 실패(fast-fail) 로직을 사용한다. 즉 중단된 서비슬르 호출하거나 타임아웃이 발생하길 기다리지 않고 바로 응답한다. 응답하기 전에 실행되는 대체 로직을 적용하는 경우도 있다.
'MicroService Architecture > Microservice Design Pattern' 카테고리의 다른 글
모니터링 및 경고 중앙화 (0) | 2021.03.06 |
---|---|
제어 루프 (Control loop) (0) | 2021.03.06 |
분산 추적 (0) | 2021.03.06 |
로그 분석 중앙화 (0) | 2021.03.05 |
구성 중앙화 (0) | 2021.03.05 |