티스토리 뷰
Netflix Hystrix
Hystrix는 Netflix에서 만든 라이브러리로 마이크로 서비스 아키텍처에서 분산된 서비스 간 통신이 원활하지 않은 경우에 각 서비스가 장애 내성과 지연 내성을 갖게 하도록 도와주는 라이브러리이다.
MSA기반의 프로젝트는 서비스간 요청이 실패하거나 유실되거나 하는 등의 상황을 겪게 되면 심각한 상황이 초래될 수 있다. 예컨대 결제를 했는데 주문이 되어있지 않다던지? 말만 들어도 심각하지 않은가.. 나만 심각한가..
아무튼 이러한 상황은 마이크로 서비스 환경에서 A서비스의 장애 상황으로 시작하여 B, C, D의 다른 서비스들에게도 장애 상황이 전파되는 성질이 있다. 이러한 상황을 수습할 수 있는 기능을 가진 것이 hystrix이다.
정식적인 모든 기능에 대해 차분히 분석하고 싶다면 공식 github의 위키에 가보면 된다.
github.com/Netflix/Hystrix/wiki/Configuration
상세한 java문서는 이 링크로
아무래도 Hystrix는 제공해주는 기능을 얼마큼 알고 사용하느냐에 따라 많은 차이가 있을 것 같아서 되도록이면 공식 문서를 세부적으로 분석해보고 파악해보는 것이 좋을 것 같다.
Hystrix의 공식 문서에 따르면 속성이 있고 속성들은 4가지 수준의 우선순위가 있다고 한다.
1. 전역 기본값 - 나머지 3개 중 아무것도 설정되지 않은 경우 기본으로 적용
2. 동적 전역 기본 속성 - 속성을 사용하여 전역 기본값을 변경
3. 코드의 인스턴스 기본값 - 인스턴스 별 기본값을 정의할 수 있음
HystrixCommandProperties.Setter().withExecutionTimeoutInMilliseconds(int value)
4. 동적 인스턴스 속성 - 위의 세 가지 수준의 기본값을 재정의하는 인스턴스 별 값을 동적으로 설정한 값
hystrix.command. HystrixCommandKey .execution.isolation.thread.timeoutInMilliseconds
아래부터는 위의 속성들에 대해서 상세히 알아보자
Execution properties
HystrixCommand.run()
execution.isolation.strategy
execution시 격리 전략을 나타나는 속성으로 THREAD(별도 스레드 실행, 스레드 풀의 스레드 수에 의해 제한), SEMAPHORE(호출 스레드에서 실행, 세마포어 수에 의해 제한)로 나누어진다.
기본값 및 권장은 THREAD이며 SEMAPHORE을 사용하는 경우는 호출이 너무 많아서 스레드 오버헤드가 너무 높은 경우에만 사용을 해야 한다.
// 인스턴스 기본값 설정법은 아래와 같다.
// 스레드 분리 사용
HystrixCommandProperties.Setter ()
.withExecutionIsolationStrategy (ExecutionIsolationStrategy.THREAD)
// 세마포 분리 사용
HystrixCommandProperties.Setter ()
.withExecutionIsolationStrategy (ExecutionIsolationStrategy.SEMAPHORE)
execution.isolation.thread.timeoutInMilliseconds
호출 이후 밀리 초 단위의 시간 초과를 관찰한다. (기본값은 1000 (1초)), 예를 들면 어떠한 호출을 하고 1초 내에 응답이 없다면 시간 초과 에러가 발생된다는 말인 것 같다.
// 인스턴스 기본값 설정법은 아래와 같다.
HystrixCommandProperties.Setter()
.withExecutionTimeoutInMilliseconds(int value)
execution.timeout.enabled
위에 설정된 시간제한을 초과할 경우에 에러가 발생되는 기능을 사용할 것인지를 나타내며 기본값은 true이다.
// 인스턴스 기본값 설정법은 아래와 같다.
HystrixCommandProperties.Setter()
.withExecutionIsolationThreadInterruptOnTimeout(boolean value)
execution.isolation.thread.interruptOnCancel
취소 발생 시 execution를 중단할지 여부를 나타내며 기본값은 false이다.
// 인스턴스 기본값 설정법은 아래와 같다.
HystrixCommandProperties.Setter()
.withExecutionIsolationThreadInterruptOnCancel(boolean value)
execution.isolation.semaphore.maxConcurrentRequests
이 속성은 제일 처음 소개한 격리 전략이 SEMAPHORE로 설정하여 사용 시 메서드에 허용되는 최대 요청 수를 설정하며, 그 이상 요청 시 요청이 거부되게 되어 된다. (기본값 10)
// 인스턴스 기본값 설정법은 아래와 같다.
HystrixCommandProperties.Setter ()
.withExecutionIsolationSemaphoreMaxConcurrentRequests (int value)
Fallback properties
HystrixCommand.getFallback()
fallback.isolation.semaphore.maxConcurrentRequests
이 속성은 fallback 메서드가 호출 스레드에서 만들 수 있는 최대 요청 수를 설정한다. 최대 동시 제한에 도달하면 후속 요청이 거부되고 fallback을 검색할 수 없으므로 예외가 발생 (기본값 10)
// 인스턴스 기본값 설정법은 아래와 같다.
HystrixCommandProperties.Setter ()
.withFallbackIsolationSemaphoreMaxConcurrentRequests (int value)
fallback.enabled
fallback기능을 활성화할지 하지 않을지에 대한 설정으로 기본값은 true
// 인스턴스 기본값 설정법은 아래와 같다.
HystrixCommandProperties.Setter()
.withFallbackEnabled(boolean value)
Circuit Breaker
HystrixCircuitBreaker
circuitBreaker.enabled
Circuit breaker의 사용 유무를 설정한다. 기본값은 true
// 인스턴스 기본값 설정법은 아래와 같다.
HystrixCommandProperties.Setter()
.withCircuitBreakerEnabled(boolean value)
circuitBreaker.requestVolumeThreshold
Circuit breaker에서 circuit을 오픈할 최소 요청 수를 설정한다. 기본값은 20이며, 예를 들어 10초 내에 20개의 요청이 와야지만 이후 들어오는 요청에 대한 통계를 시작한다. 즉, 10초내에 들어오는 요청이 19개라면 모두 실패하더라도 별도 동작하지 않는다.
// 인스턴스 기본값 설정법은 아래와 같다.
HystrixCommandProperties.Setter ()
.withCircuitBreakerRequestVolumeThreshold (int value)
circuitBreaker.sleepWindowInMilliseconds
만약 10초내에 지정된 개수만큼 요청이 들어와서 circuit이 오픈된 상태라면 어느 순간에는 circuit을 다시 닫아줘야 하는데 얼마의 시간이 지나야 다시 닫을지 말지 판단을 하냐에 대한 시간 설정이다 밀리세컨드 기준 5000(5초)이 기본값이다.
// 인스턴스 기본값 설정법은 아래와 같다.
HystrixCommandProperties.Setter ()
.withCircuitBreakerSleepWindowInMilliseconds (int value)
circuitBreaker.errorThresholdPercentage
이 속성은 위에서 설정된 10초 내 20개라는 조건이 충족되었을 때 10초 내에 들어온 모든 건중 오류 비율이 얼마가 되면 차단을 할지에 대한 퍼센트 설정이다. 기본값은 50 (%)이다.
// 인스턴스 기본값 설정법은 아래와 같다.
HystrixCommandProperties.Setter ()
.withCircuitBreakerErrorThresholdPercentage (int value)
circuitBreaker.forceOpen
이 속성은 강제로 circuit breaker를 실행하여 모든 요청에 대해서 차단이 되도록 설정하는 속성이다 기본값은 false
// 인스턴스 기본값 설정법은 아래와 같다.
HystrixCommandProperties.Setter()
.withCircuitBreakerForceOpen(boolean value)
circuitBreaker.forceClosed
이 속성의 위의 반대이다. 오류가 얼마가 나든 10초 내에 요청이 얼마가 들어오던지 차단을 하지 않도록 할 수 있는 설정으로 기본 설정은 false이다.
// 인스턴스 기본값 설정법은 아래와 같다.
HystrixCommandProperties.Setter()
.withCircuitBreakerForceClosed(boolean value)
Metrics
metrics.rollingStats.timeInMilliseconds
circuitBreaker.requestVolumeThreshold 설정이 20으로 설정되어 10초내에 20개 이상의 요청이 들어오면 서킷이 오픈되고 오픈되고 난 뒤 얼마의 시간 동안 들어오는 요청에 대한 통계를 낼 것인지에 대한 시간을 정의한다. 기본값은 10초이다.
// 인스턴스 기본값 설정법은 아래와 같다.
HystrixCommandProperties.Setter ()
.withMetricsRollingStatisticalWindowInMilliseconds (int value)
......
내용이 너무 많고 작성할 시간이 부족해서
나머지 내용은 이후 시간이 날 때 작성할 테니, 잠시간은 위의 github 위키를 봐주세요.
위의 내용은 공식 사이트에서 옮겨와서 나름 이해하며 한글로 다시 작성하면서, 전체적인 기능을 파악하기 위한 목적으로 작성되고 있으나, 한 번에 다 작성하기에는 양이 왜 이리 많은지, 시간 날 때 틈틈이 작성할 예정이며, 다 작성한 후에는 기본값을 그대로 두지 않고 수정을 하는 것이 좋을 만한 속성들만 별도로 정리해서 올려야 될 것 같습니다. 물론.. 계획
'development' 카테고리의 다른 글
- Total
- Today
- Yesterday
- slueth
- 프레임워크
- zookeeper 클러스터
- ADL-LRS
- 초보
- Python
- 목탄
- Kafka
- 풍경그림
- 신세계 아카데미
- 그림 그리기
- 취미생활
- spring boot
- 트랜잭션 추적
- zookeeper
- MSA
- Eclipse
- axios
- windows환경
- 카프카클러스터
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |