[Spring][TIL] Spring Cloud Circuit Breaker 패턴

Jimin·2024년 8월 2일
0

SpringBoot 정리

목록 보기
4/6

spring cloud CircuitBreaker는 Resilience4J와 Spring Retry의 구현체를 포함한다.
(자바 서킷 브레이커의 라이브러리가 Reslience4J인 것)

Circuit Breaker 패턴은 특히 MSA 환경의 필수 패턴 중 하나이다.

서킷 브레이커 패턴(Circuit Breaker Pattern)

Circuit Breaker 패턴의 등장

백엔드에서 개발을 할 때 외부 API를 호출해야하는 경우가 있다.(특히 MSA 환경)
문제는 서버들에 장애가 발생했을 때 이다. 호출한 다른 서비스에 장애가 발생한다면, 장애가 전파되어 장애가 발생하지 않은 서비스까지 문제가 발생할 수 있다. 또한 장애가 발생한 서버에 계속해서 요청을 보내는 것 또한 장애 복구를 어렵게 한다.

따라서 장애가 발생한 서비스를 탐지하고 요청을 보내지 않도록 차단해야하는 필요성이 생기게 되었으며 이를 위해 서킷 브레이커 패턴이 생기게 되었다.

Circuit Breaker 패턴이란?

외부 서비스에 의한 문제를 방지하기 위해 등장한 패턴이다.
문제가 발생한 지점을 감지하고 실패하는 요청을 계속하지 않도록 방지한다.
이를 통해 시스템의 장애 확산을 막고, 장애 복구를 도와주며 사용자는 불필요한 대기를 하지 않아도 되게 된다.

Circuit Breaker 동작원리

실제 회로 차단기의 동작원리

일반적으로 회로가 닫혀 있어야 전류가 흐르고, 전구가 과열되어 회로가 열리면 전류가 꺼진다.
해당 원리를 Circuit Breaker에서도 사용한다.

Circuit Breaker의 세가지 상태

ClosedOpenHalf Open
상황모든 것이 정상인 상황외부에 장애가 발생한 상황Open 상태가 되고 일정 시간이 지난 상황
요청Open 상태가 되고 일정시간 지난 상황외부로의 요청을 차단하고 바로 에러를 받음외부로의 요청을 차단하고 바로 에러를 받음
상태 전이외부로의 요청을 차단하고 바로 에러를 받음특정 시간이 지나면 Half Open 상태가 됨일부 허용된 요청들이 성공한 경우 Closed 상태로, 실패인 경우 Open 상태로 변경한다.

외부 장애가 발생했는지에 대한 기준
1. slow call
기준 시간보다 오래 걸린 요청
2. failure call
실패하거나 오류를 응답 받은 요청

Circuit Breaker의 장점 및 필요성

  1. 장애 감지 및 격리
  2. 자동 시스템 복구
  3. 빠른 실패 및 고객 응답
  4. 장애 서비스로의 부하 감소
  5. 장애 대안 커스터마이징

참고

[디자인패턴] 서킷 브레이커 패턴(Circuit Breaker Pattern)의 필요성 및 동작 원리
출처: https://mangkyu.tistory.com/261 [MangKyu's Diary:티스토리]

profile
https://github.com/Dingadung

0개의 댓글