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%만 수집
비동기 데이터 전송을 사용하여 중단되는 애플리케이션 스레드 최소화
'DevOps BootCamp > CS 면접' 카테고리의 다른 글
애플리케이션 성능 모니터링(APM) (0) | 2023.09.07 |
---|---|
(분산 시스템과 병렬 시스템), 로드밸런서 알고리즘, 람다 부하테스트 (0) | 2023.08.21 |
웹, 서버, 네트워크, 엔터프라이즈 시스템 (0) | 2023.08.14 |
(stateful, stateless), (L3, L4 브릿지), Git flow, OSI 7계층, shell script(경험) (0) | 2023.08.02 |
자주 물어보는 질문 (0) | 2023.07.26 |