[Spring Cloud]Spring Cloud

Wintering·2022년 6월 21일
0

내일배움캠프

목록 보기
16/17

Spring Cloud

  • MSA의 개발, 배포, 운영에 필요한 아키텍쳐를 쉽게 구성할 수 있도록 지원하는 Spring Boot 기반 프레임워크
  • 분산 시스템 상에 필요한 여러 패턴들을 표준 패턴화 시켜 손쉽게 개발할 수 있도록 지원함

🔻중요 컴포넌트
Spring Cloud Netflix의 Zull, Eureka, hystrix, ribbon EOS, Spring Config

Service Discovery

MSA의 중요한 핵심요소

  • 각 서비스의 위치를 알 수 있도록 하고, Netflix의 Eureka를 많이 사용

Eureka

  • 동적 서비스 등록, 발견
  • MSA의 서비스들의 목록과 위치(IP, Port)가 동적으로 변화하는 환경에서 서비스들을 효율적으로 관리하기 위한 Service Discovery Server/Client
  • 서버 개수 동적 조절
    • eureka-server: 자기 자신을 등록(Service Registration)하는 서버, Eureka Clientrㅏ 가용한 서비스 목록(Service Registry)를 요청하는 서버
    • eureka client: 서비스들의 위치 정보를 Eureka Server로부터 fetch하는 서비스
  • 서비스 제공자 관점 프로세스
  • 새로운 서비스 시작 시 중앙 서비스 레지스트리에 등록
  • 장애 발생 시, 서비스 레지스트리 제외
  • 레지스트리는 항상 최신 정보

  • 사용자 관점 프로세스
  • 사용자가 서비스 레지스트리에 필요한 서비스를 찾아서 호출
  • URL을 정적으로 관리하는 대신 서비스 레지스트리를 통해 사용 가능한 URL 발견 가능
  • Eureka-server
    @EnableEurekaServer
//application.propetries
server.port=8761
spring.application.name=discovery-service
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
  • Eureka-client
    @EnableEurekaClient
//application.properties
server.port=0
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
spring.application.name=my-service1
eureka.instance.instance-id=${spring.application.name}:${spring.application.instance_id:${random.value}}

Gateway가 필요한 이유 (Eureka client 중 하나)

Frontend 개발자 에게 통일된 요청 정보가 필요함. Eureka는 단지 등록된 서비스들을 관리하는 역할만 함.
Load Balance와 유저 인증등 통일된 로직을 한곳에서 할 수 있음.
Nexflix Zuul이 있으나 2.4부터 nexflix 서비스들은 유지만 하는상태임.
Spring 측에서 Zuul을 대체한 Spring cloud Gateway를 만듬. (netty vs tomcat)

@EnableEurekaClient

//application.yml
server:
  port: 8000

eureka:
  client:
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone: http://localhost:8761/eureka
  instance:
    instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}

spring:
  application:
    name: gateway-service

  cloud:
    gateway:
      routes:
        - id: my-serv1
          uri: lb://MY-SERVICE1
          predicates:
            - Path=/serv1/**

        - id: my-serv2
          uri: lb://MY-SERVICE2
          predicates:
            - Path=/serv2/**

Filter

0개의 댓글