API 관측 가능성 강화 시리즈 (3부): Tracing

March 19, 2024

Technology

소개

분산 추적이란 무엇인가?

오늘날의 마이크로서비스 아키텍처와 분산 시스템 환경에서, 단일 요청은 종종 여러 서비스를 거치며 각 서비스 내부에서 다양한 처리 단계를 포함합니다. 시스템의 효율적이고 안정적인 운영을 보장하기 위해서는 이러한 요청의 전체 경로와 처리 과정을 이해하는 것이 필수적입니다. 이러한 필요성에서 분산 추적 기술이 등장했습니다. 이 기술은 요청이 시작부터 완료까지의 전체 여정을 명확히 이해할 수 있게 해주며, 요청이 거치는 모든 서비스, 각 서비스의 처리 시간, 그리고 발생한 모든 이상 현상을 파악할 수 있습니다.

API에서 추적 활용 과정

먼저, 각 서비스의 진입점에서 추적을 위해 추적 에이전트나 SDK를 배포하여 모든 요청을 캡처하는 것이 중요합니다. 추적 데이터를 통해 각 서비스에서 요청의 처리 시간을 명확히 관찰할 수 있으며, 이를 통해 잠재적인 성능 병목 현상을 식별할 수 있습니다. 분산 추적은 정상적인 요청 처리뿐만 아니라 처리 과정에서 발생하는 예외와 오류도 기록합니다. 분산 추적 데이터를 시각화함으로써, 서로 다른 서비스와 컴포넌트 간의 요청 흐름을 직관적으로 이해할 수 있습니다.

API7 Enterprise의 추적

관측 가능성 강화 - 분산 추적

분산 추적에 대해, API 관측 가능성을 강화하기 위한 몇 가지 방법과 구체적인 예시를 소개합니다:

1. 적절한 분산 추적 도구 및 기술 선택

분산 추적 도구를 선택할 때는 기술 스택, 비즈니스 요구 사항, 모니터링 복잡성을 고려해야 합니다. Zipkin, SkyWalking, 그리고 OpenTelemetry는 각각 고유한 특징을 가진 인기 있는 분산 추적 솔루션입니다.

2. 분산 추적을 API 개발에 통합

Zipkin과 SkyWalking의 경우, 각각의 의존성과 설정을 추가하여 API 개발에 통합할 수 있습니다. 그러나 OpenTelemetry의 경우, API를 사용하여 추적 컨텍스트를 수동으로 생성하고 관리해야 합니다.

3. 분산 추적 시스템 설정 및 최적화

Zipkin, SkyWalking, OpenTelemetry 모두 설정 파일을 통해 사용자 정의가 가능합니다. 샘플링 비율, 백엔드 저장소 설정, 데이터 전송 최적화 등의 매개변수를 설정할 수 있습니다. 또한, 예외 이벤트에 신속히 대응하기 위해 경고 규칙을 정의하는 것이 중요합니다.

4. 데이터 분석 및 시각화

Zipkin, SkyWalking, OpenTelemetry는 분산 추적 데이터와 성능 지표를 표시하는 시각화 인터페이스를 제공합니다. 예를 들어, Zipkin의 UI에서는 특정 추적 데이터를 검색하고 확인하여 서로 다른 서비스 간의 요청 흐름을 이해할 수 있습니다. SkyWalking의 대시보드는 전역적인 성능 개요와 서비스 호출 관계 그래프를 제공합니다. OpenTelemetry 데이터는 Grafana와 같은 다양한 시각화 도구로 가져와 사용자 정의 대시보드와 차트를 생성할 수 있습니다.

5. API7 Enterprise의 분산 추적 플러그인 통합

API7 Enterprise는 Zipkin, OpenTracing, SkyWalking과 같은 여러 추적 플러그인을 지원합니다. 이러한 추적 플러그인은 라우팅 규칙이나 전역 규칙에 바인딩되어야 합니다. 샘플링 비율 요구 사항이 없는 경우, 누락을 방지하기 위해 전역 규칙에 바인딩하는 것이 좋습니다.

API7 Enterprise 관측 가능성 플러그인

실용 사례 분석: 전자상거래 API의 관측 가능성 개선

전자상거래 플랫폼에서 제품을 탐색하고 구매하는 과정에서 여러 API 호출이 발생합니다. 예를 들어, 사용자는 처음에 제품 서비스의 API를 호출하여 제품 목록을 가져온 다음, 특정 제품을 선택하고 주문 서비스의 API를 호출하여 주문을 생성하며, 마지막으로 결제 서비스의 API를 호출하여 결제를 완료합니다.

이 시나리오에서, 주문 서비스의 API가 피크 시간에 지연과 타임아웃을 자주 경험하여 결제 과정에서 눈에 띄는 지연과 실패가 발생하는 것을 확인했습니다. 이 문제를 해결하기 위해, 팀은 분산 추적 기술을 도입하여 성능 병목 현상을 진단하고 시스템을 최적화하기로 결정했습니다.

  1. 분산 추적 도구 선택: 팀은 SkyWalking을 분산 추적 도구로 선택했습니다. 이는 여러 언어를 지원하고 통합이 쉬우며 풍부한 시각화 기능을 제공하기 때문입니다.

  2. SkyWalking 통합: 주문 서비스는 Java로 개발되었으며, 팀은 주문 서비스 코드에 SkyWalking의 Java Agent를 통합했습니다. 이를 통해 주문 서비스의 API가 호출될 때 SkyWalking이 자동으로 추적 데이터를 수집할 수 있습니다.

  3. SkyWalking 설정: 팀은 SkyWalking의 백엔드 저장소를 Elasticsearch로 설정하고, 추적 데이터의 상세 수준과 저장 비용을 균형 있게 조절하기 위해 적절한 샘플링 비율을 설정했습니다.

  4. 추적 데이터 수집 및 분석: 피크 시간 동안, 팀은 SkyWalking의 UI를 통해 주문 서비스 API의 호출 체인과 성능 지표를 관찰했습니다. 그 결과, 주문 생성 과정에서 제품 재고 서비스의 API 호출이 특히 오래 걸리는 것을 발견하여 성능 병목 현상으로 판단했습니다.

  5. 심층 조사: 팀은 제품 재고 서비스 API의 상세 추적 데이터를 추가로 조사했습니다. 여기에는 호출 매개변수, 반환 결과, 예외 정보 등이 포함되었습니다. 특정 제품을 처리할 때 복잡한 데이터베이스 쿼리 작업이 실행되어 처리 시간이 증가하는 것을 발견했습니다.

  6. 최적화 조치: 이 문제를 해결하기 위해, 팀은 두 가지 최적화 조치를 시행했습니다. 첫째, 데이터베이스 쿼리 문을 최적화하여 쿼리 효율성을 개선했습니다. 둘째, 제품 재고 서비스 API에 캐싱을 구현하여 자주 조회되고 변경이 적은 제품에 대해 캐시에서 결과를 직접 가져오도록 하여 불필요한 데이터베이스 쿼리를 방지했습니다.

결론

분산 추적 기술은 마이크로서비스 아키텍처와 분산 시스템에서 중요한 역할을 합니다. 여러 서비스 간의 요청 흐름을 기록하고 시각화함으로써, 성능 병목 현상을 신속히 식별하고 해결할 수 있으며, 시스템의 안정성과 관측 가능성을 향상시킬 수 있습니다. 적절한 분산 추적 도구를 선택하고 API 개발에 통합함으로써, 시스템 운영에 대한 깊은 이해를 얻을 수 있으며, 이를 통해 사용자 경험과 시스템 효율성을 개선할 수 있습니다.

관련 블로그

Tags: