서비스 소비자와 서비스 사이에서 완충 역할을 하는 네가지 클라이언트 회복성 패턴
클라이언트 측 부하분산
- 넷플릭스 유레카 같은 서비스 디스커버리 에이전트를 이용해 서비스의 모든 인스턴스를 검색한 후 해당 서비스 인스턴스의 실제 위치를 캐싱하는것
회로차단기
- 회로차단기는 원격 자원에 대한 모든 호출을 모니터링하고 호출이 필요한 만큼 실패하면 회로 차단기가 활성화되어 빨리 실패하게 만들며 고장난 원격 자원은 더이상 호출되지 않도록 차단한다.
폴백처리
- 실패할때 예외를 발생시키지 않고 서비스 소비자가 대체 코드 경로를 실행해 다른 방법으로 작업을 수행할 수 있다.
벌크헤드
- 각 원격자원에 대한 호출을 자원별 스레드 풀로 분리하므로 특정 원격 자원의 호출이 느려져 전체 애플리케이션이 다운될 수 잇는 위험을 줄일 수 있다.
분리된 스레드 풀과 관련된 히스트릭스 명령
스레드 컨텍스트와 히스트릭스
기본적으로 히스트릭스는 THREAD 격리 전략을 수행한다. 호출을 보호하는데 사용된 모든 히스트릭스 명령은 호출을 시도한 부모 스레드와 컨텍스트를 공유하지 않는 격리된 스레드 풀에서 수행된다. SEMAPHORE 기반 격리 방법을 사용하면 히스트릭스는 새로운 스레드를 시작하지 않고 @HystrixCommand 애너테이션이 보호하는 분산 호출을 관리하며 타임아웃이 발생하면 부모 스레드를 중단시킨다. SEMAPHORE 격리 모델은 경량이며 서비스에서 대용량을 처리하고 비동기 I/O프로그래밍 모델을 적용할 때 사용해야 한다.
Hystrix 모니터링
Hystrix Dashboard
Hystrix를 적용한 어플리케이션은 측정 지표 수집에 사용될 hystrix.stream 종단점을 노출한다.
각 어플리케이션의 API상태 및 Circuit 정보를 Hystrix Dashboard를 통해서 모니터링 할 수 있다
어노테이션 :
@EnableCircuitBreaker : 스프링 클라우드에 이 서비스에서 히스트릭스를 사용할 것이라고 지정한다.
@HystrixCommand : 히스트릭스 회로 차단기가 관리하는 자바 클래스 매서드라고 표시한다. 이 어노테이션을 만나면 메서드를 감싸는 프록시를 동적으로 생성하고 원격 호출을 처리하기 위해 확보한 스레드가 있는 스레드 풀로 해당 메서드에 대한 모든 호출을 관리한다.
@HystrixCommand(fallbackMethod="~") : fallbackMethod 속성으로 히스트릭스에서 호출이 실패할때 불러오는 클래스 함수를 정의한다.
'Programming > MSA' 카테고리의 다른 글
MSA에 대한 기본개념 - 1. Legacy에서 MSA로 진화하는 여정 (0) | 2022.06.08 |
---|---|
(아키텍처) 현대적 어플리케이션 구축을 위한 Outer아키텍처 시 고려할 점 (0) | 2022.03.16 |
[완독정리]스프링 마이크로서비스 코딩 공작소 9. 스프링 클라우드 슬루스와 집킨을 이용한 분산 추적-길벗 (0) | 2021.03.07 |
[완독정리]스프링 마이크로서비스 코딩 공작소 8.메시지와 EDA, 마이크로서비스의 사례-길벗 (0) | 2021.03.06 |
[완독정리]스프링 마이크로서비스 코딩 공작소 7.마이크로서비스의 보안-길벗 (0) | 2021.03.06 |