Pinpoint 분석 #7
·
개발 메모
5. Collector 전송 로직전체 흐름DefaultBaseTraceFactory.newDefaultTrace(...) -> StorageFactory.createStorage(...) -> BufferedStorage -> DataSender -> SpanGrpcDataSender.send(...) -> MessageConverter -> PSpan or PSpanChunk -> PSpanMessage -> SpanGrpc.sendSpan() -> collector SpanService.sendSpan() -> SimpleHandler5.1 Span sender 바인딩파일:agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/cont..
Pinpoint 분석 #6
·
개발 메모
4. Trace/Span 생성 로직전체 흐름Instrumented method -> Interceptor.before(...) -> TraceContext.currentTraceObject() -> Trace.traceBlockBegin() -> SpanEventRecorder 기록 -> Interceptor.after(...) -> Trace.traceBlockEnd() -> DefaultTrace.storage.store(spanEvent) -> root request 종료 시 Trace.close() -> DefaultTrace.storage.store(span)4.1 Interceptor가 TraceContext를 쓰는 방식파일:agent-module/bootstraps/bootstrap-core..
Pinpoint 분석 #5
·
개발 메모
3. Transformer와 Interceptor전체 흐름ProfilerPlugin.setup(...) -> TransformTemplate.transform(...) -> PluginInstrumentContext.addClassFileTransformer(...) -> ClassFileTransformerLoader -> MatchableClassFileTransformerDelegate -> DefaultPluginContextLoadResult.getClassFileTransformer() -> ClassFileTransformerProvider -> DefaultClassFileTransformerDispatcher -> JVM ClassFileTransformer.transform(...) -..
Pinpoint 분석 #4
·
개발 메모
2. Plugin 로딩 구조전체 흐름ApplicationContextModuleFactory -> ApplicationContextModule -> PluginJarsProvider -> PluginClassLoaderProvider -> PluginContextLoadResult -> DefaultPluginContextLoadResult -> ProfilerPluginLoader.load(pluginClassLoader) -> DefaultProfilerPluginContextLoader.load(...) -> DefaultPluginSetup.setupPlugin(...) -> ProfilerPlugin.setup(...) -> PluginSetupResult이름 때문에 헷갈릴 수 있는데, Plug..
Pinpoint 분석 #3
·
개발 메모
1. Agent 부팅 흐름전체 흐름Target JVM -> PinpointBootStrap.premain(String, Instrumentation) -> PinpointBootStrap.start() -> PinpointStarter.start() -> AgentBootLoader.boot(AgentOption) -> new DefaultAgent(Map) -> DefaultAgent.start() -> DefaultApplicationContext.start()큰 그림으로 보면 bootstraps/bootstrap은 JVM에 가장 먼저 붙는 얇은 부트스트랩 계층이고, 실제 agent runtime은 agent-module/profiler 아래의 DefaultAgent와 DefaultApplicatio..
Pinpoint 분석 #2
·
개발 메모
Pinpoint 3.0.1 Agent -> Collector 연결 및 Trace 수집/저장 분석기준 코드: v3.0.1 태그이 문서는 Pinpoint Java agent가 대상 JVM에 붙어서 bytecode instrumentation으로 trace 정보를 만들고, gRPC로 collector에 연결/전송하며, collector가 받은 데이터를 HBase 계열 저장소와 통계 인덱스에 저장하는 과정을 코드 기준으로 정리한다.전체 흐름 요약1. Agent 부트스트랩과 instrumentation 등록Agent 진입점은 agent-module/bootstraps/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/PinpointBootStrap.java의 p..
Pinpoint 분석 #1
·
개발 메모
Pinpoint Build Onboarding Guide이 문서는 Pinpoint 오픈소스를 처음 다루는 개발자가 "이 프로젝트는 무엇으로 빌드되고, 어떤 식으로 접근해야 하는가"를 빠르게 이해하도록 돕기 위한 가이드다.1. 한눈에 보는 빌드 구조루트 빌드 도구는 Maven Wrapper(./mvnw)다.프로젝트는 pom.xml 기준의 멀티모듈 Maven 레포다.백엔드 모듈은 주로 Java로 빌드된다.웹 프론트엔드는 web-frontend 모듈에서 별도로 빌드되며, Maven 안에서 frontend-maven-plugin으로 Node/Yarn 작업을 실행한다.일부 실행 모듈은 spring-boot-maven-plugin으로 실행 가능한 JAR를 만든다.일부 모듈은 jib-maven-plugin 설정도 포..
[HBase] HBase - HDFS 통신 매커니즘
·
카테고리 없음
**본 글은 제미나이로 작성됨** 1. HBase는 HDFS의 '클라이언트'HBase의 RegionServer는 HDFS 입장에서는 수많은 데이터를 읽고 쓰는 HDFS Client 중 하나이다.통신 방식: HBase는 HDFS의 NameNode와 통신하여 데이터의 위치(메타데이터)를 확인하고, 실제 데이터(Block)를 주고받을 때는 DataNode와 직접 통신.파일 형식: HBase는 데이터를 HFile이라는 특수한 포맷으로 변환하여 HDFS 상의 특정 경로(/hbase/data/...)에 저장.2. 주요 통신 발생 시점HBase가 HDFS와 주요 통신하는 시점은 크게 세 가지① WAL(Write Ahead Log) 기록 (실시간 쓰기)내용: 데이터 유실을 막기 위해 메모리(MemStore)에 적재하기..