본문 바로가기

Design Pattern

Circuit breaker pattern (회로 차단기 패턴)

# Circuit breaker pattern 회로 차단기 패턴에 대해서 알아보자.

1. Circuit breaker pattern 패턴이란?

외부 서비스에 의한 문제를 방지하기 위해 등장한 것이 서킷 브레이커 패턴이다. 서킷 브레이커 패턴은 문제가 발생한 지점을 감지하고 실패하는 요청을 계속하지 않도록 방지한다. 이를 통해 시스템의 장애 확산을 막고, 장애 복구를 수행하며 사용자는 불필요하게 대기하지 않도록 한다. 즉, 서킷 브레이커 패턴은 클라이언트 측면에서 장애를 방지하기 위한 도구로서, 실패할 수 있는 작업을 계속 시도하지 않도록 방지하는 패턴이다.

 

- AWS의 설명은 아래를 참고

https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/circuit-breaker.html

 

Circuit breaker pattern - AWS Prescriptive Guidance

Circuit breaker pattern Intent The circuit breaker pattern can prevent a caller service from retrying a call to another service (callee) when the call has previously caused repeated timeouts or failures. The pattern is also used to detect when the callee s

docs.aws.amazon.com

2. Circuit breaker pattern의 동작 원리

- 잘 정리된 사이트는 아래와 같다.

https://subscription.packtpub.com/book/programming/9781789809770/12/ch12lvl1sec11/understanding-the-circuit-breaker-design-pattern

 

Hands-On Design Patterns with Java

Overview of this book Java design patterns are reusable and proven solutions to software design problems. This book covers over 60 battle-tested design patterns used by developers to create functional, reusable, and flexible software. Hands-On Design Patte

subscription.packtpub.com

- 회로 차단기 원리를 사용하여 구현

일반적으로 회로는 닫혀있어서 전류가 흐르게 된다. 그래서 아래와 같이 전원이 켜진 상태라면 전구에 불이 들어온다.

하지만, 전구에 문제가 생겨서 계속해서 전류가 흐르고 위험한 상황이 발생한다고 볼 때, 전구가 터지거나, 감전등의 사고가 발생할 수 있다.

위 상황이 발생 했을때, 회로 차단기는 자동으로 회로를 열고 차단해 전구에 전류가 흐르지 않도록 조치하여 위험한 상황을 방지한다. 여기서 회로를 연다는 것은 아래의 그림처럼 문제가 생겨 흐름을 차단하는 것이다. 이렇듯 문제 상황을 감지하고, 자동으로 방지해 주는 기능을 수행하는 것이 회로 차단기인데, 서킷 브레이커 패턴은 이러한 회로 차단기로부터 아이디어를 얻어 탄생하였다.

3. 동작 원리

닫힘: 이 상태에서는 서비스에 대한 모든 요청이 통과하도록 허용된다. 고장률이 특정 임계값을 초과하면 회로 차단기가 "개방" 상태로 전환되며, 특정 시간 및 상태까지 모든 요청은 거부된다.
개방: 이 상태에서는 서비스에 대한 모든 요청이 차단되어 추가 오류를 방지하고 서비스를 복구할 시간을 제공한다.
반개방: "개방" 상태(개방 상태의 대기 시간으로 정의)에서 일정 시간이 경과한 후 회로 차단기가 "반개방" 상태로 전환된다. 이 상태에서는 제한된 수의 요청이 통과할 수 있다. 이러한 요청이 성공하면 서비스가 복구되었다고 가정하고 회로 차단기가 다시 "닫힌" 상태로 전환된다. 이러한 요청이 실패하면 회로 차단기는 서비스를 여전히 사용할 수 없다고 가정하고 "열림" 상태로 다시 전환된다.

그렇다면 반개방 HARF_OPEN은 어떤 경우를 말하냐면, 아래의 옵션처럼 wait-duration-in-open-state=10s라고 정의가 되어 있다고 가정하면, 10초 동안은 HARF_OPEN상태 즉 반 개방 상태라는 의미이다.

resilience4j.circuitbreaker.configs.default.wait-duration-in-open-state=10s

 

4. Java로 샘플코드 만들어보기

- 샘플로 구현한 코드는 아래의 구조로 되어 있다.

- 그림과 조건은 추후에 설명 (옵션값을 하나씩 테스트 해봐야 겠다.)

- 코드는 아래의 GitHub에 올라가 있다.

https://github.com/Nanninggu/Circuit-Breaker-Pattern.git

 

GitHub - Nanninggu/Circuit-Breaker-Pattern: 서킷브레이커패턴 패턴 예제 코드

서킷브레이커패턴 패턴 예제 코드. Contribute to Nanninggu/Circuit-Breaker-Pattern development by creating an account on GitHub.

github.com

 

- 끝 -