본문 바로가기
[개발] Infrastructure/Deployment

Hystrix

by Devsong26 2023. 11. 30.

Hystrix는 Netflix에서 개발한 Java 기반 라이브러리로, 분산 시스템에서의 레지리언시(resiliency) 및 장애 내성(fault tolerance)을 제공합니다. 마이크로서비스 아키텍처에서 네트워크 실패, 서비스 지연, 하드웨어 문제 등으로 인한 장애가 발생할 수 있는데, Hystrix는 이러한 문제들에 대응하여 시스템의 안정성과 가용성을 유지하는 데 도움을 줍니다.

 

Hystrix의 주요 기능

  • 서킷 브레이커(Circuit Breaker)
    • 서킷 브레이커 패턴을 구현하여, 연속적인 실패 후 호출을 자동으로 차단하고, 서비스가 복구될 때까지 요청을 중단합니다. 이는 시스템의 과부하를 방지합니다.
  • 폴백 메커니즘(Fallback Mechanism)
    • 외부 시스템이나 서비스 호출이 실패했을 때, 대체 응답 또는 기본값을 제공합니다. 이를 통해 서비스의 연속성을 유지할 수 있습니다.
  • 리소스 격리(Resource Isolation)
    • 스레드 풀 또는 세마포어를 사용하여 각 서비스 호출을 격리함으로써, 하나의 서비스 장애가 전체 시스템에 영향을 미치는 것을 방지합니다.
  • 모니터링 및 메트릭 제공
    • 서비스 호출과 관련된 다양한 메트릭(성공, 실패, 지연 시간 등)을 수집하고 모니터링합니다.

 

 

Hystrix의 작동 원리

  • 커맨드 패턴(Command Pattern)
    • Hystrix 커맨드를 사용하여 외부 서비스 호출을 감싸고, 이를 통해 서비스 호출의 처리 과정을 제어합니다.
  • 실행 및 타임아웃 관리
    • 각 커맨드는 별도의 스레드에서 실행되며, 설정된 타임아웃을 초과할 경우 자동으로 중단됩니다.
  • 서킷 상태
    • 서킷 브레이커는 '닫힘(Closed)', '열림(Open)', '반열림(Half-Open)'의 상태를 가질 수 있으며, 이에 따라 서비스 호출을 허용하거나 차단합니다.

 


사용 예

 

Hystrix를 사용하는 간단한 예는 다음과 같습니다:

public class MyServiceCommand extends HystrixCommand<String> {

    private final String name;

    public MyServiceCommand(String name) {
        super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
        this.name = name;
    }

    @Override
    protected String run() {
        // 외부 서비스 호출 또는 복잡한 로직
        return "Hello " + name;
    }

    @Override
    protected String getFallback() {
        // 폴백 로직
        return "Fallback Hello " + name;
    }
}

 


주의사항

  • Spring Cloud와의 통합
    • Hystrix는 Spring Cloud와 함께 사용될 때 많은 이점을 제공합니다. Spring Cloud에서는 Hystrix Dashboard, Turbine 등과 함께 사용하여 시스템의 상태를 모니터링하고 관리할 수 있습니다.
  • 동향
    • Netflix는 Hystrix 프로젝트의 유지보수를 중단했으며, Resilience4j 같은 다른 대안을 사용할 것을 권장하고 있습니다. 그러나 Hystrix는 여전히 널리 사용되고 있으며, 기존 시스템에서는 여전히 중요한 역할을 합니다.

 

'[개발] Infrastructure > Deployment' 카테고리의 다른 글

Flagger  (0) 2023.12.05
사가 패턴  (0) 2023.11.27
카나리아 배포  (0) 2023.11.17
Docker 블루-그린 배포  (0) 2023.11.17
MSA 통신 패턴 (동기, 비동기)과 Apache Kafka, Zookeeper  (0) 2022.02.27