Section 13: 장애 처리와 Microservice 분산 추적 - KwangtaekJung/MSA-SpringCloud-user-service GitHub Wiki

Section 13: 장애 처리와 Microservice 분산 추적

  • CircuitBreaker
  • Resilience4j
  • Distributd Tracing
  • Trace ID and Span ID
  • Zipkin server 활용

Microservice 통신 시 연쇄 오류

  • Order Service가 정상 동작하지 않는 상황에서 User Service에서 Get User하면 500 발생함.
    • `java.net.UnknownHostException: order-service'

CircuitBreaker

  • 장애가 발생하는 서비스에 반복적인 호출이 되지 못하게 차단
  • 특정 서비스가 정상적으로 동작하지 않을 경우 다른 기능으로 대체 수행 -> 장애 회피

Spring Cloud Netflix Hystrix

  • Spring Cloud Netflix Hystrix <= 더 이상 지원하지 않음.
  • 대체제로 Resilience4j를 사용

Microservice 분산 추적

  • Zipkin

    • https://zipkin.io/
    • Twitter에서 사용하는 분산 환경의 Timing 데이터 수집, 추적 시스템 (오픈 소스)
    • Google Drapper에서 발전하였으며, 분산 환경에서의 시스템 병목 현상 파악
    • Collector, Query Service, Database WebUI로 구성
    • Span
      • 하나의 요청에 사용되는 작업의 단위
      • 64 bit unique ID
    • Trace
      • 트리 구조로 이루어진 Span 셋
      • 하나의 요청에 대한 같은 Trace ID 발급
  • Spring Cloud Sleuth

    • 스프링 부트 애플리케이션을 Zipkin과 연동
    • 요청 값에 따른 Trace ID, Span ID 부여
    • Trace와 Span Ids를 로그에 추가 가능
      • servlet fileter
      • rest template
      • scheduled actions
      • message channels
      • feign client
  • Spring Cloud Sleuth + Zipkin

  • Zipkin server 설치

Users Microservice 수정

Zipkin 활용

Zipkin에서의 추적

Orders Microservice 장애 발생