2장. 분산 추적 아키텍처
2.1. 분산 추적 아키텍처
사용자가 애플리케이션에서 작업을 수행할 때마다 응답을 생성하기 위해 참여하도록 다양한 서비스를 필요로 할 수 있는 아키텍처에 의해 요청이 실행됩니다. Red Hat OpenShift distributed tracing을 사용하면 애플리케이션을 구성하는 다양한 마이크로 서비스를 통해 요청 경로를 기록하는 분산 추적을 수행할 수 있습니다.
분산 추적은 분산 트랜잭션에 있는 전체 이벤트 체인을 이해하기 위해 일반적으로 다양한 프로세스 또는 호스트에서 실행되는 다양한 작업 단위에 대한 정보를 결합하는 데 사용되는 기술입니다. 개발자는 분산 추적을 사용하여 대규모 마이크로 서비스 아키텍처에서 호출 흐름을 시각화할 수 있습니다. 직렬화, 병렬 처리 및 대기 시간 소스를 이해하는 데 유용합니다.
Red Hat OpenShift distributed tracing은 마이크로 서비스의 전체 스택에서 개별 요청 실행을 기록하고 이를 추적으로 제공합니다. 추적은 시스템을 통한 데이터/실행 경로입니다. 엔드 투 엔드 추적은 하나 이상의 기간으로 구성됩니다.
기간은 Red Hat OpenShift distributed tracing에서 작업 이름, 작업 시작 시간, 기간, 잠재적으로 태그 및 로그가 있는 논리적 작업 단위를 나타냅니다. 기간은 중첩되어 인과 관계를 모델링하도록 주문될 수 있습니다.
2.1.1. 분산 추적 개요
서비스 소유자로 분산 추적을 사용하여 서비스 아키텍처에 대한 정보를 수집할 수 있습니다. 분산 추적을 사용하여 최신 클라우드 네이티브, 마이크로서비스 기반 애플리케이션의 구성 요소 간 상호 작용을 모니터링, 네트워크 프로파일링 및 문제 해결할 수 있습니다.
분산 추적을 사용하면 다음 기능을 수행할 수 있습니다.
- 분산 트랜잭션 모니터링
- 성능 및 대기 시간 최적화
- 근본 원인 분석 수행
Red Hat OpenShift distributed tracing은 다음 두 가지 주요 구성 요소로 구성됩니다.
- Red Hat OpenShift distributed tracing platform - 이 구성 요소는 오픈 소스 Jaeger 프로젝트를 기반으로 합니다.
- Red Hat OpenShift 분산 추적 데이터 수집 - 이 구성 요소는 오픈 소스 OpenTelemetry 프로젝트를 기반으로 합니다.
이러한 두 구성 요소는 모두 벤더 중립 OpenTracing API 및 계측을 기반으로 합니다.
2.1.2. Red Hat OpenShift distributed tracing 기능
Red Hat OpenShift distributed tracing은 다음 기능을 제공합니다.
- Kiali와의 통합 - 올바르게 구성된 경우 Kiali 콘솔에서 분산 추적 데이터를 볼 수 있습니다.
- 높은 확장성 - 분산 추적 백엔드는 단일 장애 지점이 없고 비즈니스 요구에 따라 확장할 수 있도록 설계되었습니다.
- 분산 컨텍스트 전파 - 서로 다른 구성 요소의 데이터를 함께 연결하여 완전한 엔드 투 엔드 추적을 만들 수 있습니다.
- Zipkin과의 역호환성 - Red Hat OpenShift distributed tracing에는 Zipkin의 드롭인 교체로 사용할 수 있는 API가 있지만 Red Hat은 이 릴리스에서 Zipkin 호환성을 지원하지 않습니다.
2.1.3. Red Hat OpenShift distributed tracing 아키텍처
Red Hat OpenShift distributed tracing은 추적 데이터를 수집, 저장 및 표시하기 위해 함께 작동하는 여러 구성 요소로 구성됩니다.
Red Hat OpenShift distributed tracing platform - 이 구성 요소는 오픈 소스 Jaeger 프로젝트를 기반으로 합니다.
- 클라이언트 (Jaeger 클라이언트, Tracer, Reporter, 조정된 애플리케이션, 클라이언트 라이브러리)- 분산 추적 플랫폼 클라이언트는 OpenTracing API의 언어별 구현입니다. 수동으로 또는 이미 OpenTracing과 통합된 Camel(Fuse), Spring Boot(RHOAR), MicroProfile(RHOAR/T©tail), Wildfly(EAP) 등의 다양한 기존 오픈 소스 프레임워크를 사용하여 분산 추적에 대해 애플리케이션을 조정하는 데 사용할 수 있습니다.
- 에이전트 (Jaeger 에이전트, Server Queue, Processor Workers) - 분산 추적 플랫폼 에이전트는 UDP(User Datagram Protocol)를 통해 전송되는 기간을 수신 대기하는 네트워크 데몬이며 수집기에 배치 및 전송합니다. 에이전트는 조정된 애플리케이션과 동일한 호스트에 배치되어야 합니다. 일반적으로 Kubernetes와 같은 컨테이너 환경에서 사이드카를 보유하여 수행됩니다.
- Jaeger Collector (databindor, Queue, Workers) - Jaeger 수집기는 기간을 수신하여 처리를 위해 내부 대기열에 배치합니다. 이를 통해 Jaeger 수집기는 기간이 스토리지로 이동할 때까지 대기하지 않고 클라이언트/에이전트로 즉시 돌아갈 수 있습니다.
- 스토리지(데이터 저장소) - 수집기에는 영구 스토리지 백엔드가 필요합니다. Red Hat OpenShift 분산 추적 플랫폼에는 범위 스토리지를 위한 플러그형 메커니즘이 있습니다. 이 릴리스에서 지원되는 유일한 스토리지는 Elasticsearch입니다.
- 쿼리(쿼리 서비스) - 쿼리는 스토리지에서 추적을 검색하는 서비스입니다.
- Ingester (Ingester Service) - Red Hat OpenShift distributed tracing은 수집기와 실제 Elasticsearch 백업 스토리지 간의 버퍼로 Apache Kafka를 사용할 수 있습니다. Ingester는 Kafka에서 데이터를 읽고 Elasticsearch 스토리지 백엔드에 쓰는 서비스입니다.
- Jaeger 콘솔 - Red Hat OpenShift 분산 추적 플랫폼 사용자 인터페이스를 통해 분산 추적 데이터를 시각화할 수 있습니다. 검색 페이지에서 추적을 찾고 개별 추적을 구성하는 기간의 세부 사항을 확인할 수 있습니다.
Red Hat OpenShift 분산 추적 데이터 수집 - 이 구성 요소는 오픈 소스 OpenTelemetry 프로젝트를 기반으로 합니다.
- OpenTelemetry Collector - OpenTelemetry 수집기는 원격 분석 데이터를 수신, 처리 및 내보낼 수 있는 공급업체와 무관한 방법입니다. OpenTelemetry 수집기는 하나 이상의 오픈 소스 또는 상용 백엔드와 같은 Jaeger 및 Prometheus와 같은 오픈 소스 관찰 기능 데이터 형식을 지원합니다. 수집기는 기본 위치 계측 라이브러리로 Telemetry 데이터를 내보냅니다.