카테고리 없음

🔍 Hystrix란?

idea9329 2025. 3. 17. 15:10
반응형

 

Hystrix Netflix에서 개발한 서킷 브레이커(Circuit Breaker) 라이브러리로, 분산 시스템에서 장애를 방지하고 서비스 안정성을 높이는 역할을 합니다.

현재 Spring Cloud Netflix 프로젝트에서 지원 종료되었지만, Resilience4j가 대체 라이브러리로 많이 사용됩니다.


📌 Hystrix의 주요 기능

1️⃣ 서킷 브레이커 (Circuit Breaker)

  • 장애 발생 시 자동으로 서비스 차단 및 복구
  • 장애 전파를 막아 시스템 전체 다운을 방지
    2️⃣ 시간 초과 (Timeout) 설정
  • 응답이 느린 서비스의 호출을 차단하여 시스템 보호
    3️⃣ 페일백 (Fallback) 기능
  • 서비스 장애 발생 시 대체 응답을 반환하여 사용자 경험 보호
    4️⃣ 격리 (Isolation) 지원
  • 스레드 풀 또는 신뢰 가능한 리소스 관리로 장애 영향을 최소화
    5️⃣ 모니터링 & 대시보드 제공
  • Hystrix Dashboard를 통해 실시간 장애 감지

📌 Hystrix 서킷 브레이커 동작 원리

🚀 서킷 브레이커의 3가지 상태

상태설명

Closed (닫힘) 정상 상태, 모든 요청 허용
Open (열림) 일정 비율 이상 실패 시 요청 차단
Half-Open (반열림) 일정 시간 후 일부 요청을 허용하여 서비스 복구 테스트

💡 Open 상태가 되면 일정 시간 동안 요청이 차단되며, Half-Open에서 요청이 성공하면 Closed로 복구


📌 Hystrix 적용 예제

1️⃣ 기본 서킷 브레이커 설정

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.stereotype.Service;

@Service
public class MyService {
    
    @HystrixCommand(fallbackMethod = "fallbackMethod")
    public String riskyOperation() {
        if (Math.random() > 0.5) {
            throw new RuntimeException("서비스 장애 발생!");
        }
        return "정상 응답";
    }

    public String fallbackMethod() {
        return "대체 응답 (Fallback)";
    }
}

 장애 발생 시 "대체 응답 (Fallback)"을 반환하여 시스템 안정성 확보


2️⃣ 서킷 브레이커 & 타임아웃 설정

@HystrixCommand(
    fallbackMethod = "fallbackMethod",
    commandProperties = {
        @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000")
    }
)
public String slowService() {
    try {
        Thread.sleep(3000); // 3초 대기
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
    return "응답 지연 완료";
}

public String fallbackMethod() {
    return "Timeout 발생 - 대체 응답 반환";
}

 응답 시간이 2초를 초과하면 Fallback 메서드 실행


3️⃣ Hystrix 대시보드 모니터링

Hystrix Dashboard를 사용하면 서킷 브레이커 상태 및 요청 트래픽을 실시간으로 확인할 수 있습니다.
 설정 방법

@EnableHystrixDashboard
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

 대시보드 접속 URL
http://localhost:8080/hystrix


📌 Hystrix 사용 사례

1️⃣ 마이크로서비스 아키텍처(MSA)에서 장애 방어
2️⃣ API Gateway에서 서브서비스 장애 방지
3️⃣ 데이터베이스 및 캐시 서버 장애 대비
4️⃣ 타사 API 연동 시 응답 지연 방어


📌 Hystrix vs Resilience4j

Netflix는 Hystrix 지원을 종료하고, 현재는 Resilience4j가 대체 라이브러리로 많이 사용됩니다.

비교 항목HystrixResilience4j

개발사 Netflix Resilience4j 오픈소스
지원 상태 지원 종료 (Deprecated) 최신 유지보수 중
구현 방식 스레드 풀 기반 반응형 스트림 (Reactor) 지원
서킷 브레이커 O O
타임아웃 & 리트라이 O O
Fallback 지원 O O
Spring Boot 지원 Spring Cloud Netflix Spring Cloud Resilience4j

🚀 현재는 Resilience4j를 Hystrix의 대체 기술로 사용하는 것이 추천됨!


📌 결론

 Hystrix는 MSA에서 장애를 방어하는 서킷 브레이커 라이브러리
 응답 지연, 장애 감지, Fallback 처리, 모니터링 기능 제공
 Netflix에서 지원이 종료되어 현재는 Resilience4j가 대체 기술로 사용됨

📌 MSA 환경에서 서킷 브레이커가 필요하다면, Hystrix 대신 Resilience4j를 고려하는 것이 좋습니다! 🚀

반응형