반응형
9. 분산 추적 (Spring Cloud Sleuth) 및 로깅 (Zipkin)
9.1 분산 추적
9.1.1 분산 추적이란?
- 분산 시스템에서 서비스 간의 요청 흐름을 추적하고 모니터링하는 방법
- 각 서비스의 호출 관계와 성능을 시각화하여 문제를 진단하고 해결할 수 있도록 도움
- 주요 개념: 트레이스(Trace), 스팬(Span), 컨텍스트(Context)
- 트레이스(Trace) : 트레이스는 하나의 요청이 시작부터 끝까지 각 서비스를 거치는 전체 흐름
- 스팬(Span) : 스팬은 분산 추적에서 가장 작은 단위로, 특정 서비스 내에서의 개별 작업 또는 요청
- 컨텍스트(Context) : 컨텍스트는 요청이 서비스 간에 전달될 때 함께 전파되어, 각 서비스가 요청의 전체 흐름에 대한 정보를 가질 수 있게 함
9.1.2 왜 분산 추적이 필요한가?
- 마이크로서비스 아키텍처에서는 여러 서비스가 협력하여 하나의 요청을 처리
- 서비스 간의 복잡한 호출 관계로 인해 문제 발생 시 원인을 파악하기 어려울 수 있음
- 분산 추적을 통해 각 서비스의 호출 흐름을 명확히 파악하고, 성능 병목이나 오류를 빠르게 진단
9.2 Micrometer
9.2.1 Micrometer란?
- Spring 기반 애플리케이션에서 메트릭을 수집하고 모니터링하기 위한 라이브러리
- 특징
- 다양한 메트릭 수집: 애플리케이션의 다양한 성능 지표 수집
- 유연한 연동: Prometheus, Grafana 등 다양한 모니터링 툴과 연동
- 추적 기능: 분산 추적을 위한 기능 제공. 서비스 간의 호출 흐름을 추적하여 성능 병목 진단
9.3 Zipkin
9.3.1 Zipkin이란?
- 트레이스 데이터를 수집하고 시각화하는 분산 추적 시스템
- 특징
- 데이터 수집 및 저장: 각 서비스에서 전송된 트레이스와 스팬데이터를 수집하고 저장
- 시각화: 트레이스 데이터를 시각화하여 서비스 간의 호출 관계를 명확히 파악
- 검색 및 필터링: 특정 트레이스나 스팬을 검색하고 필터링하여 문제를 진단
9.4 Zipkin 서버 설정
9.4.1 Zipkin 서버 실행
- Docker로 Zipkin 서버 실행 : docker run -d -p 9411:9411 openzipkin/zipkin
9.4.2 Zipkin 대시보드 사용
- Zipkin 대시보드에 접속하여 트레이스 데이터를 시각화합니다:
- URL: http://localhost:9411
- 트레이스 검색 및 분석
9.5 분산 추적 예제
- 서비스 호출 흐름 추적
- 예제 서비스 간의 호출 흐름을 추적하고, Zipkin 대시보드에서 시각화
- 각 서비스 호출 시 트레이스와 스팬이 생성되고, Zipkin 서버로 전송
- 성능 병목 진단
- Zipkin 대시보드에서 성능 병목이 발생하는 부분을 식별
- 각 스팬의 소요 시간과 호출 관계를 분석하여 성능 문제를 진단하고 해결
10. 이벤트 드리븐 아키텍처와 스트림 처리 (Spring Cloud Stream)
10.1 이벤트 드리븐 아키텍처
10.1.1 이벤트 드리븐 아키텍처란?
- 시스템에서 발생하는 이벤트(상태 변화나 행동)를 기반으로 동작하는 소프트웨어 설계 스타일
- 이벤트는 비동기적으로 처리되며, 서비스 간의 느슨한 결합을 통해 독립적으로 동작할 수 있게 함
- 주요 개념
- 이벤트: 시스템 내에서 발생하는 상태 변화나 행동을 나타내는 메시지
- 이벤트 소스: 이벤트를 생성하여 이벤트 버스에 전달하는 역할
- 이벤트 버스: 이벤트 소스와 이벤트 핸들러 간의 메시지 전달을 중개 (메세지 큐)
- 이벤트 핸들러: 이벤트를 수신하여 처리
10.1.3 이벤트 드리븐 아키텍처의 장점
- 느슨한 결합
- 서비스 간의 강한 종속성 제거. 독립적인 개발과 배포가 가능
- 이벤트 기반 통신 → 서비스 간의 결합도 낮춤
- 확장성
- 수평 확장이 용이 → 대규모 시스템에서 유용
- 이벤트 프로듀서와 컨슈머를 독립적으로 확장 가능
- 비동기 처리
- 이벤트를 비동기적으로 처리하여 시스템의 응답성 향상
- 요청과 응답을 비동기적으로 처리하여 성능 최적화
10.1.4 이벤트 드리븐 아키텍처의 단점
- 복잡성 증가
- 이벤트 기반 통신으로 인해 시스템의 복잡성 증가 가능
- 이벤트 흐름과 상태 관리를 체계적으로 설계 필요
- 장애 전파
- 이벤트 실패 시 다른 서비스로 장애가 전파될 수 있음
- 이벤트 재처리 및 장애 복구 메커니즘 구현 필요
10.1.5 예시: 온라인 쇼핑몰
- 이벤트 소스: 사용자가 온라인 쇼핑몰에서 주문을 함
- 주문 서비스 : '주문 생성' 이벤트 발생시킴
- 이벤트 버스: Kafka나 RabbitMQ와 같은 메시지 브로커가 '주문 생성' 이벤트를 전달
- 이벤트 핸들러: 각 서비스에서 이벤트를 처리함
- 재고 서비스: '주문 생성' 이벤트를 수신하여 재고를 확인, 업데이트
- 배송 서비스: '주문 생성' 이벤트를 수신하여 배송 준비 시작
- 결제 서비스: '주문 생성' 이벤트를 수신하여 결제 처리
10.2 Spring Cloud Stream
- 이벤트 드리븐 마이크로서비스를 구축하기 위한 프레임워크
- Kafka, RabbitMQ 등의 메시지 브로커와 통합하여 이벤트 스트리밍을 처리
- 프로듀서와 컨슈머 간의 통신을 추상화하여 간편하게 이벤트 기반 애플리케이션을 개발
10.2.2 주요 특징
- 바인더 추상화: 메시지 브로커와의 통합을 위한 추상화 레이어를 제공합니다.
- 프로듀서/컨슈머 모델: 이벤트를 생성하고 처리하는 프로듀서/컨슈머 모델 지원
- 유연한 설정: 다양한 설정 옵션으로 쉽게 커스터마이징
반응형
'TIL' 카테고리의 다른 글
[설계 문서] RUSH Logistic - AI 기반 배송 소요시간 예측 물류 시스템 (MSA) (1) | 2024.12.06 |
---|---|
[TIL] MSA - 서킷 브레이커 (Resilience4j) (1) | 2024.11.22 |
[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 |