2024-08-05 MSA (Microservices Architecture) - 11

목표
- Distributed Tracing과 Micrometer에 대해 이해한다.
- Zipkin을 이용하여 실습한다.
Distributed Tracing
- 분산 시스템에서 서비스 간의 요청 흐름을 추적하고 모니터링하는 방법이다.
- 각 서비스들 간의 호출 흐름과 지연 시간을 파악하고 문제가 발생한 서비스를 타게팅할 수 있다.
주요 개념
1. Trace
- 하나의 분산 요청에 대한 전체적인 흐름을 추적하는 단위이다.
- 각 요청이 어떻게 흐르고 있는지를 파악할 수 있게 해준다.
- 여러 개의 span으로 구성된다.
2. Span
- Trace 내의 개별 작업 또는 단위 작업을 나타낸다.
- MSA 환경에서 하나의 요청은 여러 서비스로 나뉘어 처리되며, 각 서비스에서의 처리 과정을 각각 하나의 스팬으로 표현할 수 있다.
3. Context
- Trace와 Span 정보를 담고 있는 상태를 의미한다.
- 해당 상태를 다음 서비스로 전파한다.
Micrometer
- Spring 기반 애플리케이션에서 각 서비스의 metric을 수집하고 시각화한다.
- Distributed Tracing 기능을 통해 서비스 간 호출 흐름을 추적한다.
Zipkin
- Trace 데이터를 수집하고 저장하면서 이를 통해 호출 흐름을 시각화하는 분산 추적 시스템이다.
- 각 서비스가 호출될 때마다 Trace와 Span이 생성되고 Zipkin 서버로 전송된다.
- Zipkin 서버를 실행하기 위해 Docker를 이용해야 한다.
실습
- Windows 환경에서 작업하기 때문에 Docker Desktop 애플리케이션을 실행시킨 후, git bash에서 Docker Hub 계정으로 로그인한다.
- 강의 자료에 나와 있는 커맨드를 실행하여 image를 pull한다.
[그림 1]

[그림 2]

- 브라우저 상에서 'http://localhost:9411/zipkin'에 접속하면 아무 기록이 없는 것을 확인할 수 있다.
[그림 3]

- server, product-service, order-service 순서대로 실행시킨다.
- Postman에서 API가 정상적으로 호출되는지 테스트한다.
[그림 4]

- Zipkin에서 상단의 'RUN QUERY' 버튼을 클릭한다.
[그림 5]

우측의 'SHOW' 버튼을 클릭하여 서비스 지연 시간을 확인할 수 있고 상단의 'Dependencies'에서 'RUN QUERY' 버튼을 클릭하면 호출 관계를 그래프로 확인할 수 있다.