ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Eureka - [Spring Cloud]
    개발 2022. 12. 29. 14:28

    Eureka?

     

    Cloud 환경의 다수의 서비스(ex. api server)들의 Load Balancing 및 Health check, 장애 조치 목적을 가진 Middleware Server.

    • Load Balance : 특정 서비스를 운영하는 서버들이 존재 할때 한 서버에 트래픽이 몰리지 않게 트래픽을 분산 시켜주는 기술
    • Middleware : 데이터를 주고받는 서비스와 서비스의 사이의 중간의 매개체 역할 

    Eureka는 middleware 기능을 수행하기 위해 각 연결된 서비스의 IP, Port, Instance Id(host name)를 소유하고 있고,

    REST방식으로 동작하며, MSA의 핵심 중 하나인 Service Discovery 역할을 수행한다 (지속적으로 변동하는 서비스의 IP,Port를 확인)

     

    Client - Server방식으로 동작하며 Eureka Server에 등록된 서비스는 Eureka Client이다.

    이미지 출처 https://coe.gitbook.io/guide/service-discovery/eureka

    Eureka ServerREST 기반으로 동작하기 한다.

    따라서 HTTP통신을 이용해 Eureka Client Register, Fetch, Heartbeats, Delete 등 다양한 기능을 수행할 수 있다.

    Operation Http Action  Description
    Client Register POST |  /eureka/apps/{appId} Input: JSON/XML payload, 아래 참조 HTTP Code: 204 on success
    Client Delete DELETE | /eureka/apps/appId/InstanceId HTTP Code:
    200 on success
    Heartbeats(Renew) PUT | /eureka/apps/appId/InstanceId HTTP Code: 
    * 200 on success 
    * 404 if instanceID doesn’t exist
    Client Fetch Registry  GET | /eureka/apps
    GET | /eureka/apps/delta
    HTTP Code: 200 on success Output: JSON/XML
    • Register
      • Eureka Client는 실행중인 Instance의 Ip, Port등 정보를 Eureka Server에 등록 한다. 
    • Delete
      • Eureka에 있는 본인의 Instance를 삭제한다. 서비스가 종료 될 때 Client에서 Server로 전송한다. 
    • HeartBeats(Renew)
      • Eureka Client는 30초를 주기로 Eureka Server에 HeartBeats를 보내고, Server는 Client로 부터 90초 동안 HeartBeat요청이 없으면 해당 Client를 제거한다
    • Fetch Registry
      • Eureka Client는 Server가 올라올 때 Eureka Server에 올라와 있는 모든 정보를 가져와 local cache에 저장한다. 이후 cache에 저장된 정보를 http 통신에 사용한다 (매 30초를 주기로 변경되는 부분에 대해 부분 업데이트를 진행한다 - delta update)

     

    Eureka Server 구성

    Gradle

    dependencies {
        implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
    }

    Spring

    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaServerApplication.class, args);
        }
    }

    application.yml

    server:
      port: 8092
    
    spring:
      application:
        name: discovery-service
    
    eureka:
      client:
        register-with-eureka: false # Eureka server를 Registry 등록 여부
        fetch-registry: false       # Registry select 여부

     

    Eureka Client 구성

    Gradle

    dependencies {
        implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    }

    Spring

    @SpringBootApplication
    @EnableDiscoveryClient
    public class EurekaClientApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaClientApplication.class, args);
        }
    }

    application.yml

    spring:
      application:
        name: eureka-client-loo
    
    server:
      port: 8081
    
    eureka:
      client:
        register-with-eureka: true
        fetch-registry: true
        service-url:
          defaultZone: http://127.0.0.1:8092/eureka <-Eureka Server

    '개발' 카테고리의 다른 글

    [Spring] Constructor injection(생성자 주입) vs Field injection (필드 주입)  (0) 2023.01.16
    Spring Multi Module  (0) 2022.12.29
    Gradle 기본 정리  (0) 2022.12.21
    Effective Java Study - 1  (1) 2022.09.08
    JPA 연관 관계 매핑  (0) 2022.08.02
Designed by Tistory.