2장. 분산 추적 아키텍처

2.1. 분산 추적 아키텍처

사용자가 애플리케이션에서 작업을 수행할 때마다 응답을 생성하기 위해 참여하도록 다양한 서비스를 필요로 할 수 있는 아키텍처에 의해 요청이 실행됩니다. Red Hat OpenShift distributed tracing 플랫폼을 사용하면 애플리케이션을 구성하는 다양한 마이크로 서비스를 통해 요청 경로를 기록하는 분산 추적을 수행할 수 있습니다.

분산 추적은 분산 트랜잭션에 있는 전체 이벤트 체인을 이해하기 위해 일반적으로 다양한 프로세스 또는 호스트에서 실행되는 다양한 작업 단위에 대한 정보를 결합하는 데 사용되는 기술입니다. 개발자는 분산 추적을 사용하여 대규모 마이크로 서비스 아키텍처에서 호출 흐름을 시각화할 수 있습니다. 직렬화, 병렬 처리 및 대기 시간 소스를 이해하는 데 유용합니다.

Red Hat OpenShift distributed tracing 플랫폼은 마이크로 서비스의 전체 스택에서 개별 요청 실행을 기록하고 이를 추적으로 제공합니다. 추적은 시스템을 통한 데이터/실행 경로입니다. 엔드 투 엔드 추적은 하나 이상의 기간으로 구성됩니다.

기간은 작업 이름, 작업 시작 시간, 기간 및 잠재적으로 태그 및 로그가 있는 Red Hat OpenShift distributed tracing 플랫폼의 논리적 작업 단위를 나타냅니다. 기간은 중첩되어 인과 관계를 모델링하도록 주문될 수 있습니다.

2.1.1. 분산 추적 개요

서비스 소유자로 분산 추적을 사용하여 서비스 아키텍처에 대한 정보를 수집할 수 있습니다. Red Hat OpenShift 분산 추적 플랫폼을 사용하여 최신 클라우드 네이티브, 마이크로서비스 기반 애플리케이션의 구성 요소 간의 상호 작용을 모니터링, 네트워크 프로파일링 및 문제 해결에 사용할 수 있습니다.

분산 추적 플랫폼을 사용하면 다음 기능을 수행할 수 있습니다.

  • 분산 트랜잭션 모니터링
  • 성능 및 대기 시간 최적화
  • 근본 원인 분석 수행

분산 추적 플랫폼은 다음 세 가지 구성 요소로 구성됩니다.

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 프로젝트를 기반으로 합니다.

    • 클라이언트 (Jaeger 클라이언트, Tracer, Reporter, 조정된 애플리케이션, 클라이언트 라이브러리)- 분산 추적 플랫폼(Jaeger) 클라이언트는 OpenTracing API의 언어별 구현입니다. 수동으로 또는 이미 OpenTracing과 통합된 Camel(Fuse), Spring Boot(RHOAR), MicroProfile(RHOAR/T©tail), Wildfly(EAP) 등의 다양한 기존 오픈 소스 프레임워크를 사용하여 분산 추적에 대해 애플리케이션을 조정하는 데 사용할 수 있습니다.
    • 에이전트 (Jaeger agent, Server Queue, Processor Workers) - 분산 추적 플랫폼(Jaeger) 에이전트는 UDP(User Datagram Protocol)를 통해 전송되는 기간을 수신 대기하는 네트워크 데몬입니다. 에이전트는 조정된 애플리케이션과 동일한 호스트에 배치되어야 합니다. 일반적으로 Kubernetes와 같은 컨테이너 환경에서 사이드카를 보유하여 수행됩니다.
    • Jaeger Collector (databindor, Queue, Workers) - Jaeger 수집기는 기간을 수신하여 처리를 위해 내부 대기열에 배치합니다. 이를 통해 Jaeger 수집기는 기간이 스토리지로 이동할 때까지 대기하지 않고 클라이언트/에이전트로 즉시 돌아갈 수 있습니다.
    • 스토리지(데이터 저장소) - 수집기에는 영구 스토리지 백엔드가 필요합니다. Red Hat OpenShift distributed tracing platform(Jaeger)에는 스토리지 범위를 위한 플러그형 메커니즘이 있습니다. 이 릴리스에서 지원되는 유일한 스토리지는 Elasticsearch입니다.
    • 쿼리(쿼리 서비스) - 쿼리는 스토리지에서 추적을 검색하는 서비스입니다.
    • Ingester (Ingester Service) - Red Hat OpenShift distributed tracing 플랫폼은 수집기와 실제 Elasticsearch 백업 스토리지 간의 버퍼로 Apache Kafka를 사용할 수 있습니다. Ingester는 Kafka에서 데이터를 읽고 Elasticsearch 스토리지 백엔드에 쓰는 서비스입니다.
    • Jaeger 콘솔 - Red Hat OpenShift distributed tracing Platform (Jaeger) 사용자 인터페이스를 사용하면 분산 추적 데이터를 시각화할 수 있습니다. 검색 페이지에서 추적을 찾고 개별 추적을 구성하는 기간의 세부 사항을 확인할 수 있습니다.
  • Red Hat OpenShift distributed tracing platform(Tempo) - 이 구성 요소는 오픈 소스 Grafana Tempo 프로젝트를 기반으로 합니다.

    • 게이트웨이는 인증, 권한 부여 및 요청을 배포 또는 쿼리 프런트 엔드 서비스로 처리합니다. Gateway - The Gateway handles authentication, authorization, and forwarding requests to the Cryostat or Query front-end service.
    • 배포자 - 배포자는 Jaeger, OpenTelemetry 및 Zipkin을 비롯한 여러 형식으로 기간을 허용합니다. 이 경로는 traceID 를 해시하고 분산 일관된 해시 링을 사용하여 Ingesters로 구성됩니다.
    • Ingester - Ingester는 추적을 블록으로 배치하고, bloom 필터와 인덱스를 생성한 다음 모두 백엔드로 플러시합니다.
    • 쿼리 프런트 엔드 - 쿼리 프런트 엔드는 들어오는 쿼리에 대한 검색 공간을 분할합니다.Query Frontend is responsible for sharding the search space for an incoming query. 그런 다음 검색 쿼리가 Queriers로 전송됩니다. 쿼리 프런트 엔드 배포는 Tempo 쿼리 사이드카를 통해 Jaeger UI를 노출합니다.
    • Querier - Querier는 Ingesters 또는 백엔드 스토리지에서 요청된 추적 ID를 찾을 책임이 있습니다. 매개변수에 따라 Ingesters를 쿼리하고 백엔드에서 오브젝트 스토리지의 검색 블록으로 Ingesters를 가져올 수 있습니다.
    • Cryo stator - 백엔드 스토리지로 또는 백엔드 스토리지에서 차단하여 총 블록 수를 줄입니다.
  • Red Hat OpenShift 분산 추적 데이터 수집 - 이 구성 요소는 오픈 소스 OpenTelemetry 프로젝트를 기반으로 합니다.

    • OpenTelemetry Collector - OpenTelemetry 수집기는 원격 분석 데이터를 수신, 처리 및 내보낼 수 있는 공급업체와 무관한 방법입니다. OpenTelemetry 수집기는 하나 이상의 오픈 소스 또는 상용 백엔드와 같은 Jaeger 및 Prometheus와 같은 오픈 소스 관찰 기능 데이터 형식을 지원합니다. 수집기는 기본 위치 계측 라이브러리로 Telemetry 데이터를 내보냅니다.