DevOps BootCamp/CS 면접

Pinpoint

cloudmaster 2023. 9. 24. 10:11

Data Structure

Pinpoint에서 데이터 구조의 핵심은 Spans, Traces, TraceId로 구성

Span

  • RPC(원격 프로시저 호출) 추적의 기본 단위
  • RPC가 도착할 때 처리된 작업을 나타내며 추적 데이터를 포함
  • 코드 수준 가시성을 보장
    • SpanEvent라는 하위 항목이 존재
  • 각 Span에는 TraceId가 포함

 

Trace

  • 스팬 모음
  • 연관된 RPC(Span)로 구성
  • 동일한 추적의 스팬은 동일한 TransactionId를 공유
  • Trace는 SpanId 및 ParentSpanId를 통해 계층적 트리 구조로 정렬

 

TraceId

  • TransactionId, SpanId 및 ParentSpanId로 구성
  • TransactionId는 메시지 ID를 나타내며 SpanId와 ParentSpanId는 모두 RPC의 상위-하위 관계를 나타냄
  • TransactionId(TxId): 단일 트랜잭션에서 분산 시스템 간에 주고받은 메시지의 ID.
    • 전체 서버 그룹에서 전역적으로 고유
  • SpanId: RPC 메시지 수신 시 처리된 작업의 ID. RPC가 노드에 도착할 때 생성
  • ParentSpanId(pSpanId): RPC를 생성한 상위 범위의 SpanId. 노드가 트랜잭션의 시작점인 경우 상위 범위가 없음. 이러한 경우 -1 값을 사용하여 해당 범위가 트랜잭션의 루트 범위임을 나타냄

TraceId 작동 방식

  • TransactionId(TxId)는 서로 다른 세 개의 RPC가 단일 트랜잭션으로 서로 연관되어 있음을 나타냄
  • RPC 간의 관계를 식별하려면 SpanId 및 ParentSpanId(pSpanId)가 필요
  • SpanId를 HTTP 요청을 처리하는 스레드로 생각할 수 있음. ParentSpanId는 RPC 호출을 수행하는 상위 항목의 SpainId를 나타냄

TransactionId

AgentId, JVM(Java Virtual Machine) 시작 시간 및 SequenceNumber로 구성

  • AgentId: JVM 시작 시 사용자가 생성한 ID. Pinpoint가 설치된 전체 서버 그룹에서 전역적으로 고유해야 함
  • JVM 시작 시간: 0으로 시작하는 고유한 SequenceNumber를 보장하는 데 필요합니다. 이 값은 사용자가 실수로 AgentId를 중복 생성할 경우 ID 충돌을 방지하는 데 사용
  • SequenceNumber: Pinpoint Agent가 발행한 ID로, 0부터 시작하여 순차적으로 증가하는 숫자입니다. 메시지별로 발행

핀포인트 에이전트 성능 최적화

바이너리 형식 사용(Thrift)

가변 길이 인코딩 및 형식을 위해 기록된 데이터 최적화

반복되는 API 정보, SQL 및 문자열을 상수 테이블로 대체

대량 요청에 대한 샘플 처리

  • 요청이 적은 개발 환경에서는 모든 데이터가 수집
  • 요청이 많은 프로덕션 환경에서는 전체 데이터 중 1~5%만 수집

비동기 데이터 전송을 사용하여 중단되는 애플리케이션 스레드 최소화