일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- JPA
- Stack
- SpringBoot
- 백준
- K8s
- spring
- 스프링
- Java
- Kotlin
- 스트림
- thread
- gradle
- list
- 이스티오
- redis
- IntellJ
- 자바
- Stream
- 토비의 스프링 정리
- Real MySQL
- mysql
- 보조스트림
- 자바 ORM 표준 JPA 프로그래밍
- MSA
- 쿠버네티스
- 토비의 스프링
- jvm
- OS
- GC
- Collection
- Today
- Total
인생을 코딩하다.
[MSA] 장애 및 실패 처리를 위한 서킷 브레이커 패턴 및 모니터링과 추적 패턴 본문
안녕하세요. 이전 글은 "MSA의 BFF 패턴, 외부 구성 저장소 패턴, 인증 인가 패턴이란?"라는 주제로 글을 작성하였었는데요, 이번에는 "장애 및 실패 처리를 위한 서킷 브레이커 패턴 및 모니터링과 추적 패턴"라는 주제로 글을 작성해 보았습니다.
장애 및 실패 처리를 위한 서킷 브레이커 패턴
여러 서비스로 구성된 시스템에서는 한 서비스에 장애가 발생했을 때 다른 서비스가 영향을 받을 수 있습니다. 이때 장애가 발생한 서비스를 격리해서 유연하게 처리할 수 있는 방법이 필요한데 이를 위한 한 가지 방법이 서킷브레이커 패턴입니다.
시스템 과부하나 특정 서비스에 문제가 생겼을 때 자연스럽게 다른 정상적인 서비스로 요청 흐름이 변경되게 해야합니다. 그러자면 서비스 상태를 항상 실시간으로 관리해서 시각화하고 모니터링할 수 있어야 하고, 특정 서비스에서 장애가 감지되면 장애기 다른 서비스로 전이되지 않게 하는 방법이 필요합니다. 이를 전기회로 차단기와 비슷하다고 해서 서킷브레이커 패턴이라고 합니다.
위의 그림을 간단히 설명하면 A라는 서비스가 B라는 서비스를 호출해서 자신의 서비스를 제공하는데 B 서비스에서 장애가 발생하면 이러한 동기 요청의 성격상 A는 계속 기다리게 됩니다. 이 경우 A라는 서비스까지도 장애가 발생한 것처럼 사용자가 느끼게 될 것 입니다.
서킷 브레이커 패턴은 이 같은 경우에 B 서비스 호출에 대한 연속 실패 횟수가 임곗값을 초과하면 회로 차단기가 작동해서 이후에 서비스를 호출하려는 모든 시도를 즉시 실패하게 만들게 됩니다.
그리고 폴백(fallback)메서드를 지정해 두면 장애가 발생했을 때 풀백 메서드가 자연스럽게 처리를 진행하게 됩니다. 그럼 사용자는 특정 서비스에 장애가 발생했는지 눈치채지 못하고 시간이 흘러 장애가 복구됬을 때 다시 호출을 정상화하면 됩니다.
모니터링과 추적 패턴
그럼 마이크로서비스의 장애는 어떻게 감지할 수 있을까요? 서킷 브레이커 패턴을 가능하게 하려면 각 마이크로서비스의 장애를 실시간으로 감지해야 하고, 서비스 간의 호출이 어떤지 알아야합니다. 즉, 모니터링하고 추천하는 패턴이 필요합니다. 스프링 클라우드에서는 히스트릭스라는 라이브러리를 제공하고, 히스트릭스 라이브러리가 배포된 서비스를 모니터링할 수 있는 히스트릭스 대시보드를 제공함으로써 아래 그림과 같이 마이크로서비스의 요청을 실시간으로 모니터링할 수 있습니다.
다음 글은 MSA의 중앙화된 로그 집계 패턴에 관해 글을 작성해보도록 하겠습니다.
'Spring' 카테고리의 다른 글
[SMTP, SPRING, EC2] SMTP 메일 인증 시, 로컬에서는 잘 작동하는데 EC2에서는 왜 FAIL이 발생할까? (0) | 2022.05.01 |
---|---|
[MSA] 분산 트랜잭션(Two-phase commit (2pc))과 사가 패턴(Saga Pattern) (0) | 2021.11.01 |
[MSA] MSA의 BFF 패턴, 외부 구성 저장소 패턴, 인증 인가 패턴이란? (0) | 2021.10.29 |
[MSA] Spring cloud 적용에 사용되는 컴포넌트 중 하나인 Eureka (0) | 2021.10.28 |
opaque token을 사용하여 JWT 자체 만료시간 강제 무효화 하기 (0) | 2021.10.26 |