반응형
5. 서킷 브레이커 (Resilience4j)
5.1.1 서킷 브레이커란?
- 서킷 브레이커는 마이크로서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지하는 패턴
- 외부 서비스 호출 실패 시 빠른 실패를 통해 장애를 격리하고, 시스템의 다른 부분에 영향을 주지 않도록 합니다.
- 상태 변화: 클로즈드 -> 오픈 -> 하프-오픈
5.2.2 Resilience4j의 주요 특징
- 서킷 브레이커 상태: 클로즈드, 오픈, 하프-오픈 상태를 통해 호출 실패를 관리
- 클로즈드(Closed):
- 기본 상태로, 모든 요청을 통과
- 호출이 실패하면 실패 카운터가 증가, 실패율이 설정된 임계값(예: 50%)을 초과하면 오픈 상태로 전환
- 예시: 최근 5번의 호출 중 3번이 실패하여 실패율이 60%에 도달하면 오픈 상태로 전환
- 오픈(Open):
- 모든 요청을 즉시 실패로 처리. 바로 에러 응답을 반환
- 일정 대기 시간이 지난 후, 하프-오픈 상태로 전환
- 예시: 서킷 브레이커가 오픈 상태로 전환되고 20초 동안 모든 요청이 차단
- 하프-오픈(Half-Open):
- 오픈 상태에서 대기 시간이 지나면 하프-오픈 상태로 전환
- 하프-오픈 상태에서는 제한된 수의 요청을 허용하여 시스템이 정상 상태로 복구되었는지 확인. 성공하면 서킷 브레이커는 클로즈드 상태로 전환
- 요청이 다시 실패하면 서킷 브레이커는 다시 오픈 상태로 전환
- 예시: 하프-오픈 상태에서 3개의 요청을 허용하고, 모두 성공하면 클로즈드 상태로 전환. 만약 하나라도 실패하면 다시 오픈 상태로 전환
- 클로즈드(Closed):
- Fallback: 호출 실패 시 대체 로직을 제공하여 시스템 안정성 확보
- 모니터링: 서킷 브레이커 상태를 모니터링하고 관리할 수 있는 다양한 도구 제공
5.3 Resilience4j 설정
5.3.1 기본 설정
- resilience4j 의존성은 spring starter(start.spring.io)에서 추가하여 사용하지 않을 것.
→ 그건 추상화된 계층에 대한 의존성임! 구현이 안되어있음 - resilience4j 공식 문서 따라서
”io.github.resilience4j:resilience4j-spring-boot3:2.2.0”
와 aop 의존성을 직접 추가하여 사용 (”boot3” 임을 주의)
→ 이렇게 해야 구현체가 의존성에 추가되어서 우리가 원하는 대로 작동이 됨
5.3.2 Resilience4j 설정 파일
application.yml
파일에서 설정이 중 필요한 것만 그때그때 사용. 공식문서 참고
→ 설정값 다 외울 필요는 없음 기본적으로 default 값으로 반영됨.
5.4 Fallback 메커니즘
5.4.1 Fallback 설정
- Fallback 메서드 : 외부 서비스 호출이 실패했을 때 실행할 대체 로직
@CircuitBreaker(name = "myService", fallbackMethod = "fallbackMethod")
- 어노테이션에 이런식으로 메서드명 지정
5.4.2 Fallback의 장점
- 시스템의 안정성을 높이고, 장애가 발생해도 사용자에게 일정한 응답을 제공
→ 사용자에게 시스템이 안정적이라고 느끼게 할 수 있음. 실제로도 시스템 안정성에 도움이 됨 - 장애가 다른 서비스에 전파되는 것을 방지
→ 에러의 진원지 찾기도 쉬워짐
5.5.1 Resilience4j Dashboard 설정
- Resilience4j Dashboard : 서킷 브레이커의 상태 모니터링
- Prometheus와 Grafana를 사용하여 Resilience4j 서킷 브레이커의 상태를 실시간으로 모니터링
- Prometheus를 통해 수집된 메트릭을 Grafana 대시보드에서 시각화할 수 있습니다.
- 구성
build.gradle
의존성 추가application.yml
파일 설정
http://${hostname}:${port}/actuator/prometheus
에서 서킷브레이커 항목 확인 가능
5.6 Resilience4j와 Spring Cloud 연동
- 다른 Spring Cloud 구성 요소와 쉽게 통합 : Resilience4j는 Spring Cloud Netflix 패키지의 일부로, Eureka와 Ribbon 등 다른 Spring Cloud 구성 요소와 쉽게 통합 가능
- Spring Cloud의 서비스 디스커버리와 로드 밸런싱을 활용하여 더욱 안정적인 마이크로서비스 아키텍처를 구축할 수 있습니다.
반응형
'TIL' 카테고리의 다른 글
[TIL] 분산 추적 (Spring Cloud Sleuth) & 로깅 (Zipkin) & 이벤트 드리븐 아키텍처 및 스트림 처리 (0) | 2024.11.25 |
---|---|
[TIL] 24/11/15 QueryDSL 은 누구냐 (2) | 2024.11.15 |
[TIL] 24/11/12 TS : 에러는 앞뒤상황을 보자 (0) | 2024.11.12 |
[TIL] 24/11/11 포스트맨 귀찮아 통합 테스트 짤래 (0) | 2024.11.11 |