티스토리 뷰
Neflix Hystrix
마이크로서비스는 작게 분산되어 있어 하나의 서비스의 문제가 연쇄적으로 소비자에게 전파되는것을 막아야한다. 이를 위해 회복성 패턴을 지원하는데, 이를 손쉽게 사용하기 위한 도구로 Netflix 에서 만든 Hystrix 가 있다.
즉, Hystrix는 마이크로 서비스 아키텍처에 회복성 패턴을 지원하는 도구 모음이라고 할 수 있다.
회복성 패턴의 종류
- client-side load balancing
- bulkhead pattern
- circuit breaker pattern
- fallback pattern
Hystrix를 활용한 Circuit breaker & Fallback 구현
전제
- 서비스 디스커버리 ( Eureka )가 구현되어 있다.
- 이 글의 코드를 Base로 작성하였습니다.
세팅
- Spring Web, eureka, openfeign, hystrix 의존성을 추가한다.
- @EnableHystix 어노테이션을 추가한다.
Hystrix Basic
- Feign Client를 프록시 패턴으로 구현한다.
- @HystrixCommand 어노테이션을 통해 해당 메서드로 Hystrix를 통해 관리된 다는 것을 알린다.
- @HystrixCommand( fallbackMethod = "methodName" ) 같은 방식으로 fallback Method를 지정함으로서 Circuit Breaker Pattern에 닫힘 상태과 되고 요청이 실패한 경우 회로 차단기에서 해당 요청을 가로채 fallBack Method를 실행하도록 유도한다.
Hystrix 를 OpenFeign 과 통합해서 사용하기
추가 설정
- YAML(야믈) 파일에 feign 과 Circuit Breaker를 통합 사용할 수 있도록 설정한다.
- Feign Client에 Curcit breaker 가 통합되도록 설정.
- @FeignClient ( ... fallback = SpringBean.class ) 어노테이션을 통해 Feign 을 선언한 인터페이스의 서브 클래스인 스프링 빈을 지정함으로서 fallback 메소드를 사용할 수 있게 함.
정리
- 마이크로서비스는 작게 분산되어 있어 하나의 서비스의 문제가 연쇄적으로 소비자에게 전파되는것에 주의를 기울여야 한다.
- Hystrix 는 마이크로서비스간 통신에서 회로 차단 패턴및 Fallback 패턴을 선언적으로 손쉽게 제공한다.
생각
선언적인 방식으로 마이크로 서비스간의 통신을 통한 상호 협력 애플리케이션을 구현해 나가는 것이 단일 서비스를 운영하는 모놀리틱 아키텍처의 서비스의 구현과 크게 다르지 않다는 점에서 비즈니스 로직에 집중하여 코드를 작성할 수 있다는 점을 체감할 수 있었다.
전체 코드
참조
스프링 마이크로서비스 코딩 공작소 - 교보문고
스프링 부트와 스프링 클라우드를 이용한 마이크로서비스 모범 사례 | 이론은 탄탄하게,실습은 실무에 가깝게! 스프링 부트 + 스프링 클라우드로 시작하자 마이크로서비스는 서비스 개발, 그 이
www.kyobobook.co.kr
Spring Cloud - Circuit Breaker using Hystrix
Spring Cloud - Circuit Breaker using Hystrix Introduction In a distributed environment, services need to communicate with each other. The communication can either happen synchronously or asynchronously. When services communicate synchronously, there can be
www.tutorialspoint.com
'Infrastructure' 카테고리의 다른 글
[OS] 뮤텍스(Mutex) 와 세마포어(Semaphore) (0) | 2022.09.21 |
---|---|
MQ(Message Queue) 란? (0) | 2022.08.22 |
SPOF(Single Point of Failure) (0) | 2022.08.17 |
RPC(Remote Procedure Call)가 뭐에요? (0) | 2022.08.11 |
암호화(Encryption) 와 해싱(Hashing)의 차이 (0) | 2022.08.07 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 수직 분할
- 내부 단편화
- java
- ATDD
- 메모리 파편화
- 동적 디스패치
- Sticky Session
- 동적 타입 언어
- pass by reference
- Clean Architecture
- 컴포짓 패턴
- 뾰족함
- 메모리 단편화
- Memory Fragmentation
- 정적 타입 언어
- Session
- 수평 분할
- 클린 아키텍처
- OOP
- 장애 해결기
- Object Pool
- RestAssured
- SpringBoot 2.2
- 객체 풀
- 세션 불일치
- pass by value
- pool
- 외부 단편화
- multimap
- 육각형 아키텍처
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함