[스프링] 스프링 Cloud Hystrix의 지연 시간에 따른 재시도

소개

스프링 클라우드 Hystrix는 서비스 간 통신에서 발생할 수 있는 지연 현상을 견딜 수 있도록 하는 데 도움을 줍니다. 이 기술적인 블로그는 스프링 클라우드 Hystrix가 서비스 호출에 대한 지연 시간에 따른 재시도 처리에 어떻게 도움을 주는지에 대해 설명합니다.

Hystrix의 재시도 동작

스프링 클라우드 Hystrix는 요청에 대한 응답이 지연될 때 이를 기본적으로 어떻게 다루는지에 대해 설정할 수 있습니다. 이러한 설정 중 하나는 지연 시간에 따른 재시도입니다.

예를 들어, 만약 서비스 호출이 지연되었을 때, Hystrix는 지정된 시간 후에 다시 요청을 보내어 재시도합니다. 이를 통해 네트워크 지연으로 인한 오류가 감소하게 됩니다.

아래의 예시 코드는 스프링 클라우드 Hystrix를 사용하여 500밀리초의 딜레이 후에 재시도를 하는 방법을 보여줍니다.

@HystrixCommand(fallbackMethod = "fallbackMethod", commandProperties = {
    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000"),
    @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "10"),
    @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "7000"),
    @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "15000"),
    @HystrixProperty(name = "metrics.rollingStats.numBuckets", value = "5"),
    @HystrixProperty(name = "requestCache.enabled", value = "false"),
    @HystrixProperty(name = "corePoolSize", value = "30"),
    @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
    @HystrixProperty(name = "circuitBreaker.forceOpen", value = "false"),
    @HystrixProperty(name = "circuitBreaker.forceClosed", value = "false"),
    @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD"),
    @HystrixProperty(name = "execution.isolation.thread.interruptOnTimeout", value = "true"),
    @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "5000"),
    @HystrixProperty(name = "metrics.rollingStats.numBuckets", value = "10"),
    @HystrixProperty(name = "fallback.enabled", value = "true"),
    @HystrixProperty(name = "execution.timeout.enabled", value = "true"),
    @HystrixProperty(name = "execution.isolation.semaphore.maxConcurrentRequests", value = "10")
})
public Object executeWithHystrix(String param1, String param2) {
    // 예외 처리 및 재시도 로직
}

위의 코드에서 @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000") 는 Hystrix가 서비스 호출을 얼마나 기다렸다가 재시도할 지에 대한 설정입니다.

결론

지연 시간에 따른 재시도는 스프링 클라우드 Hystrix를 사용하여 복구력 있는 마이크로서비스 아키텍처를 만드는 데 필요한 중요한 기능 중 하나입니다. 이를 통해 네트워크 지연 문제와 같은 문제를 견고하게 처리할 수 있게 됩니다.

많은 기업에서 스프링 클라우드 Hystrix를 사용하여 안정적인 분산 시스템을 구축하고 있으며, 이러한 재시도 기능을 효과적으로 활용하여 안정성을 높이고 있습니다.

참고 문헌