Spring Cloud Sleuth + Zipkin
MSA 환경에서 주문 서비스, 수량 관리 서비스, 결제 서비스 등... 여러 서비스간의 통신으로 하나의 기능을 제공할 때, 오류가 발생하거나 느려진다면 어느 서비스의 문제인지 빠르게 찾기 위해서 사용한다. -> 트래픽 추적
Sleuth
- 마이크로 서비스간의 트래픽 흐름을 추적할 수있도록 Trace 기록을 로그에 자동으로 삽입하는 기능을 제공한다.
- 프로젝트에 Sleuth를 적용한 후, Logback 및 Slf4j 등을 사용하여 로깅하면 자동으로 로그에 Service 명, Trace ID, 트래픽 고유 ID가 삽입된다.
- 추적을 위한 연관된 ID를 생성한다.
- Spring에서 제공하는 Zipkin Client Library이다.
Zipkin
- Zipkin Client Library + Zipkin Server로 구성되어 있다.
- Zipkin Client Library -> 정보 수집 담당
- Sleuth의 Trace 기록을 송부받아 Zipkin UI를 통해 트래픽의 흐름을 쉽게 파악할 수 있도록 도와준다.
CircuitBreaker
분산 시스템 환경에서 외부 API 통신의 장애 전파를 막기 위해 사용한다. 장애를 탐지하고 성공/실패 여부를 카운트하여 에러율이 임계치를 넘어섰을 때, 자동으로 외부와의 통신을 차단한다.
제공 라이브러리
- Netflix Hystrix -> 개발 중단 + 유지 보수 상태
- Resilience4j -> Java 8 기반, 다른 라이브러리와의 의존성이 없다.
흐름
- 외부 API 요청
- 외부 API와의 통신이 실패하면, CircuitBreaker가 활성화(Open)
- 활성화(Open)와 동시에 외부 API 서버에 요청을 날리지 않고, Fail Fast로 빠른 응답 리턴
- CircuitBreaker가 활성화(Open) 상태이면, 일정 시간 후에 (Half-Open) 상태로 변경
- (Half-Open) 상태에서 다시 외부 API 서비스로 요청하여 장애를 확인하면 활성화(Open) 상태로 변경, 정상 처리 시 비활성화(Closed) 상태로 변경
* CircuitBreaker를 사용함으로써, 장애가 발생한 서버와의 Connection Time, Read Time 등의 시간 낭비를 최소화할 수 있다.
* 쿠버네티스의 Istio를 이용해 인프라 레벨에서 적용이 가능하다.
Prometheus + Grafana
시스템 모니터링 기능을 지원한다.
Prometheus
- 대상 시스템으로부터 각종 모니터링 지표를 수집하여 저장하고 검색할 수 있는 시스템
- 많은 시스템을 모니터링할 수 있는 다양한 플러그인을 가지고 있다.
- Grafana를 통한 시각화를 지원한다.
Grafana
- Prometheus를 비롯한 여러 데이터들을 시각화해주는 모니터링 툴이다.
- Cpu, 메모리, 디스크의 메트릭 지표를 시각화하는데 특화되어 있다.
- 다양한 데이터 베이스와 연동하여 사용할 수 있다.
'정리 > 유용 기능' 카테고리의 다른 글
[소프트웨어 분석] Sonarqube (1) | 2022.11.20 |
---|---|
Multi Module (0) | 2022.11.13 |
Android Studio 없이 Emulator 실행하기 (0) | 2022.10.20 |
[IntelliJ] 클래스 생성 시 자동 주석 설정 (0) | 2022.09.06 |