프로젝트/Pinpoint, Scouter 구축(APM)

pinpoint - dapper, 분산 추적에 대해

블랑v 2024. 1. 18. 17:59

pinpoint와 dapper

 

Google Dapper는 구글이 개발한 대규모 분산 시스템을 위한 추적 시스템이다.

MSA에서 성능 문제를 진단하고, 시스템 내부에서 발생하는 복잡한 트랜잭션들을 추적하는 데 사용된다.

 

Dapper는 분산 시스템의 성능 분석 및 모니터링을 가능하게 하며, 추적 데이터를 활용해 문제를 해결하는 데 도움을 준다는 점에서, Pinpoint가 이를 모델로 사용한 이유를 조금은 알 것 같았다.

 

Dapper에 대해 : 분산 추적

 

Dapper는 분산 시스템 내의 모든 마이크로서비스 간의 요청과 응답을 추적한다.

각 요청에는 고유한 식별자(Trace ID)가 할당되어, 서비스 간을 이동하면서 해당 요청을 추적할 수 있다.

 

dapper의 추적 과정.

 

HTTP 요청이 존재하는 상황이라고 가정 :  HTTP Header 에 메타 데이터를 추가
HTTP Header : 분산 환경에 대한 기본적인 정보와 각각 요청의 상관관계를 분석할 수 있도록 하는 최소한의 정보를 추가

1. Node 1 에서 요청이 시작한다면? Node 1, 시간, Endpoint 와 같은 데이터를 헤더에 추가하고 Node 2로 전달
2. 이후 Node 2 에서도 Node 2 의 정보를 추가하고 다음 노드로 전달한다.

 

고유 식별자 (Trace ID - Pinpoint에서는 TxId)

각 트랜잭션은 고유한 식별자(Trace ID)를 가진다.

이 식별자는 트랜잭션이 시작될 때 생성되며( 단일 트랜잭션에서 분산 시스템 간에 주고받은 메시지의 ID를 의미한다 ), 트랜잭션이 시스템의 다른 부분을 통과할 때 계속 전달된다.

 

Pinpoint에서는 : TransactionId, SpanId 및 ParentSpanId로 구성된 키 컬렉션을 의미함. 

TransactionId는 메시지 ID를 나타내며 SpanId와 ParentSpanId는 모두 RPC의 상위-하위 관계

 

스팬(Span)

RPC(원격 프로시저 호출) 추적의 기본 단위.

RPC 메시지 수신 시 처리된 작업의 ID로, RPC가 노드에 도착할 때 생성

 

각 서비스 호출을 스팬이라는 단위로 나눈다. (트랜잭션의 각 부분은 '스팬'으로 나타난다)

스팬은 서비스의 특정 작업을 나타내며, 시작 시간, 종료 시간, 메타데이터, 자식 스팬의 식별자 등을 포함한다.

각 스팬은 부모 스팬의 ID를 참조하여 트랜잭션 내에서의 위치를 알 수 있다.

 

ParentSpanId(pSpanId)

RPC를 생성한 상위 범위의 SpanId를 의미한다. 

노드가 트랜잭션의 시작점인 경우 상위 범위가 없으며, 이러한 경우 -1 값을 사용하여 해당 범위가 트랜잭션의 루트 범위임을 나타낸다.

 

컨텍스트 전파

서비스 간의 요청과 응답에는 추적 컨텍스트가 포함되어 있다. 이 컨텍스트는 요청을 따라 다니면서 다음 서비스에 추적 정보를 전달한다.

  • 트랜잭션의 각 단계에서 에이전트는 Trace ID와 현재 스팬의 정보를 추적 컨텍스트에 포함시킨다.
  • 이 컨텍스트는 HTTP 헤더, RPC 호출 등을 통해 다음 서비스나 노드로 전달된다.
  • 이를 통해 후속 요청이나 작업이 동일한 트랜잭션의 일부로 인식된다.

 

 

경량화

Dapper는 성능에 최소한의 영향을 주도록 설계되었다. 매우 적은 양의 데이터만을 수집하고, 비용이 많이 드는 작업은 피한다.

 

데이터 저장 및 분석

 

에이전트는 트랜잭션과 관련된 모든 데이터(시작 시간, 종료 시간, 메소드 호출 등)를 수집하고 중앙 저장소로 전송한다.

이 데이터는 트랜잭션이 시스템을 통과하는 경로를 시각화하고 성능 문제를 분석하는 데 사용된다.

 

중앙 저장소는 에이전트가 설치된 Tomcat과 같은 개별 서버나 애플리케이션과는 다르다.

이는 분산 추적 시스템에서 에이전트들이 수집한 데이터를 저장하는 중앙집중식 데이터베이스 또는 저장소를 의미한다.

 

 

 

ref

 

https://pinpoint-apm.github.io/pinpoint/techdetail.html

 

Technical Details | Leading Open-Source APM

In this article, we describe the Pinpoint’s techniques such as transaction tracing and bytecode instrumentation. And we explain the optimization method applied to Pinpoint Agent, which modifies bytecode and record performance data. Distributed Transactio

pinpoint-apm.github.io

 

https://wonit.tistory.com/623

 

[Distributed Tracing] 마이크로서비스의 분산 추적이란 무엇인가

[Distributed Tracing] 마이크로서비스의 분산 추적이란 무엇인가 본 글은 마이크로서비스의 분산 추적 시리즈로 이론과 실습이 함께 포함된 시리즈입니다. 아래 목차에 표시된 글을 모두 참고하면

wonit.tistory.com

 

 

https://www.elastic.co/kr/blog/distributed-tracing-opentracing-and-elastic-apm

 

분산 추적, OpenTracing 및 Elastic APM

OpenTracing은 분산 추적을 위한 공급업체 중립적인 API를 정의합니다. Elastic APM은 OpenTracing과 호환되며, 계측 도구를 재사용할 수 있는 브리지를 제공합니다....

www.elastic.co