관리 메뉴

IT.FARMER

Spring Cloud Gateway, Circuit Breaker and Hystrix with in Eureka 본문

Spring/Spring Cloud

Spring Cloud Gateway, Circuit Breaker and Hystrix with in Eureka

아이티.파머 2021. 7. 21. 19:08
반응형

2021.07.21 - [Spring/Spring Cloud] - Spring Cloud
2021.07.21 - [Spring/Spring Cloud] - Netflix OSS 와 Spring Cloud 의 ecosystem
2021.07.21 - [Spring/Spring Cloud] - spring cloud eureka
2021.07.21 - [Spring/Spring Cloud] - Spring Cloud Gateway, Circuit Breaker and Hystrix with in Eureka
2021.07.21 - [Spring/Spring Cloud] - API Gateway (Application Programming Interface)
2021.07.21 - [Spring/Spring Cloud] - Netflix OSS(eureka, Hystrix , zull, ribbon)
2021.07.21 - [Spring/Spring Cloud] - circuit breaker (hystrix and the resilience4j)

 

Hystrix GatewayFilter

Hystrix 는 Circuit Breaker Pattern 을 구현한 넷플릭스 OSS 라이브러리 중 하나이다. Netflix 에서 hystrix를 유지모드로 설정했다. 이로 인해 스프링클라우드 서킷브레이커 게이트웨이 필터로 Resilience4j를 사용하기를 제안한다.

Spring Cloud Cricuit breaker Gateway filter factory

Resilience4j를 사용한 Spring cloud circuit breaker 이다. Spring cloud circuit breaker GatewayFilter Factory 는 Spring Cloud CircuitBreaker API 를 사용하여 회로 차단기에서 게이트웨이 경로를 감싼다.

Spring Cloud 에서 제안하듯이 Hystrix는 메인터런스 모드로 설정됬음으로 spring boot 2.4 이상버전 부터는 Resilience4j 를 사용하면 된다.

Spring API Gateway with in Eureka

유레카와 스프링 게이트웨이를 사용하여 Discovery Pattern 을 구현한다. (Server Side Discovery Pattern) 이를 사용하게되면 마이크로 서비스(micro module)의 위치가 변경되어도 클라이언트는 마이크로서비스의 위치를 몰라도 되며, 유레카 클라이언트를 사용중인 마이크로 서비스는 자동으로 유레카에 등록된다.

for example, ads micro-service with eureka

server:
  port: ${PORT:8082}
---
spring:
  application:
    name: mos-service-ads
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
    register-with-eureka: true  # 해당 옵션을 false로 하면 유레카 정보를 사용할뿐 자신의 정보를 다른 서버에게 제공하지 않는다.

ads 마이크로 서비스 이며, 어플리케이션 이름은 mos-service-ads로 설정 하였다. 유레카서버로 discovery 될때 mos-service-ads 로 등록된다. 이는 추후 apigateway나 openFeign, ribbon 에서 lb:스키마 로 사용된다.

for example , gateway server properties with eureka

---
spring:
  application:
    name: mos-gateway-server
  cloud:
    gateway:
      default-filters:
        - name: GlobalFilter
      routes:
        - id: ads-service
          uri: lb://MOS-SERVICE-ADS
          predicates:
            - Path=/ads/**
          filters:
            - name: AdsFilter
              args:
                name: TestAds-name
        - id: circuit-breaker-test
          uri: http://localhost:8083
          predicates:
            - Path=/user/**
          filters:
            - name: CircuitBreaker
              args:
                name: userCircuitBreaker
                fallbackUri: forward:/fallback/default
            - name: UserFilter
              args:
                name: sangkil
                message: this is user filter

API Gateway 의 설정파일이다. routes 정보의 id:ads-service 와 id: circuit-breaker-test 에서 uri 를 보면 다르게 설정되어 있다. 이는 discovery pattern을 사용하는 중요한 이유이기도 하다. Eureca 서비스에 등록된 service name 을 lb:schema 로 사용 할 수 있다. 이는 아까도 언급했던 ip 및 포트 정보가 바뀌어도 서버이름으로 해당 서비스를 찾을 수 있음으로 클라이언트가 각각 서비스의 IP 및 PORT 정보를 알지 않아도 되는 장점이 있다. 요즘엔 AWS K8(쿠버네티스)사용으로 인해 실제 인스턴스의 아이피와, 포트가 랜덤하게 바뀜으로 디스커버리 패턴은 마이크로서비스의 필수이며 기본이라 할 수 있다.

lb:schema 는 eureka service 에등록된 이름을 사용한다.

API Gateway 에서 lb:schema 정보를 Application 이름으로 등록하여 사용하면 된다.

reference

https://microservices.io/
https://martinfowler.com/bliki/CircuitBreaker.html
https://cloud.spring.io/spring-cloud-gateway/reference/html/#forward-routing-filter
https://cloud.spring.io/spring-cloud-netflix/reference/html/index.html
https://cloud.spring.io/spring-cloud-netflix/reference/html/appendix.html
https://tommypagy.tistory.com/143
https://velog.io/@tlatldms/서버개발캠프-MSA-아키텍쳐의-API-Gateway-프레임워크-결정
https://cheese10yun.github.io/spring-cloud-gateway/
https://wonit.tistory.com/497
https://brunch.co.kr/@springboot/451
https://brunch.co.kr/@springboot/262
https://livebook.manning.com/book/cloud-native-spring-in-action/chapter-9/v-6/18

반응형

'Spring > Spring Cloud' 카테고리의 다른 글

Netflix OSS(eureka, Hystrix , zull, ribbon)  (0) 2021.07.21
API Gateway (Application Programming Interface)  (0) 2021.07.21
spring cloud eureka  (0) 2021.07.21
Netflix OSS 와 Spring Cloud 의 ecosystem  (0) 2021.07.21
Spring Cloud  (0) 2021.07.21