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를 고려하는 것이 좋습니다! 🚀