분산 추적(Sleuth, Zipkin)

 

분산 추적은 마이크로서비스 아키텍처에서 매우 중요한 개념입니다.

마이크로서비스 환경에서는 하나의 사용자 요청이 여러 개의 서비스를 거치며 처리되므로, 요청의 흐름을 추적하고 가시성을 확보하는 것이 어려울 수 있습니다.

분산 추적은 이러한 문제를 해결하기 위한 방법으로, 요청의 전체 경로를 추적하고 각 서비스에서 소요된 시간을 기록하여 성능 병목 지점을 식별하는 데 도움을 줍니다.

Spring Cloud에서는 Spring Cloud Sleuth와 Zipkin을 사용하여 분산 추적을 구현할 수 있습니다.

 

Spring Cloud Sleuth

Spring Cloud Sleuth는 Spring Cloud에서 제공하는 분산 추적 솔루션입니다. Sleuth는 요청의 흐름을 추적하기 위해 다음과 같은 개념을 사용합니다.

  1. Trace ID
  • 하나의 요청을 추적하기 위한 고유한 ID입니다.
  • 요청이 처음 발생한 곳에서 생성되며, 해당 요청이 거치는 모든 서비스에 전파됩니다.
  1. Span ID
  • 요청이 각 서비스 내에서 처리되는 단위입니다.
  • 각 서비스는 자신만의 Span ID를 생성하고, 이를 통해 서비스 내에서 소요된 시간을 측정합니다.
  1. Baggage
  • 요청에 대한 추가 정보를 저장하고 전파하는 데 사용되는 키-값 쌍입니다.

 

Sleuth 구성 예시

1
2
3
4
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
cs

 

Zipkin

Zipkin은 Twitter에서 개발한 오픈소스 분산 추적 시스템입니다. Zipkin은 Sleuth에서 수집한 추적 데이터를 시각화하고 분석할 수 있는 웹 기반 UI를 제공합니다. Zipkin의 주요 구성 요소는 다음과 같습니다.

  1. Collector
  • 마이크로서비스에서 전송한 추적 데이터를 수집하고 저장합니다.
  1. Storage
  • 수집된 추적 데이터를 저장하는 데 사용되는 데이터베이스입니다.
  • Cassandra, ElasticSearch, MySQL 등을 사용할 수 있습니다.
  1. Web UI
  • 수집된 추적 데이터를 시각화하고 분석할 수 있는 웹 인터페이스를 제공합니다.

 

Zipkin 구성 예시

1
2
3
4
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
cs

 

1
2
3
4
5
6
spring:
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      probability: 1.0
cs

 

분산 추적을 통해 마이크로서비스 간의 호출 흐름과 성능 병목 지점을 파악할 수 있으므로, 문제 해결과 성능 최적화에 큰 도움이 됩니다.

하지만 분산 추적을 위해서는 모든 마이크로서비스에 추적 기능을 적용해야 하며, 추적 데이터의 수집 및 저장에 따른 오버헤드를 고려해야 합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다