Spring Cloud Eureka Server

반영환·2023년 7월 1일
0

springCloud

목록 보기
2/4
post-thumbnail

Eureka Server

Eureka Server?

MSA 아키텍처에서 client-side service discovery 역할을 한다.

컨테이너 pod는 언제든 꺼졌다가 켜졌다가 할 수 있으므로 host와 port가 동적으로 변하더라도 서비스 인스턴스를 관리할 수 있어야 한다.

이를 도와주는 것이 Spring Cloud의 Eureka Server인 것이다.

유레카는 middle-tier load balancer로 정의된다.

middle-tier load balancer 는 로드밸런싱과 장애복구가 가능한 서비스 환경을 구성했을 때 클라이언트에게 사용 가능한 서비스의 위치 정보를 동적으로 제공해야한다.

클라우드 환경에서는 서버의 위치가 동적으로 변하고 있기에 더욱 주목받는 기술이다.

용어 정리

Eureka 행동 및 구성 요소

  • Service Registration : Client(마이크로서비스)가 자신의 정보를 유레카에 등록하는 행동을 의미한다.

  • Service Registry : Client의 정보들(목록, 가용 Client의 위치)을 저장하는 위치

  • Service Discovery : 클라이언트가 Service Registry에서 요청을 보내야하는 대상을 찾는 과정

  • Eureka Client : 다른 서비스의 위치 정보를 알아내기 위해 유레카 서버에 질의하는 서비스

  • Eureka Service : 유레카 Client가 요청하였을 때 발견의 대상이 되는 서비스 즉, 유레카에 등록되어 있는 Service라고 볼 수 있다.

  • Eureka Server : 유레카 서비스가 자기 자신을 등록(Service Registration)하고 Eureka Client가 Eureka Service를 찾기 위해 가용 서비스 목록(Service Registry)를 요청하는 서버다.

  • Eureka Instance : 유레카에 등록되어 Service Registry에서 조회 가능한 Eureka Service를 의미한다.

  • Renew :
    Client는 유레카에 등록된 이후 설정된 주기마다 heartbeat를 전송하여 자신의 존재를 알린다. (eureka.instance.lease-renewal-interval-in-seconds(default: 30))
    유레카 서버는 설정된 시간동안 heartbeat를 받지 못하면 heartbeat를 전송하지 않은 Eureka Instance를 Service Registry에서 제거한다. (eureka.instance.lease-expiration-duration-in-seconds(default: 90))
    Renew Interval은 서버 내부적으로 유레카 클라이언트를 관리하는 로직이 있기 때문에 변경하는 것을 권장하지 않는다.

  • Fetch Registry : Client는 Server로 부터 Service Registry 정보를 가져와서 로컬 캐시로 저장해두고 일정 주기마다 업데이트 한다. (eureka.client.registryFetchIntervalSeconds(default: 30))

  • Time Lag : 유레카 서버의 Service Registry가 변경되어도 Client가 새로 Fetch 하기 전까지는 데이터의 차이가 있을 수 있다. 이러한 차이를 Time Lag라고 부른다.

서버 구축하기

build.gradle

프로젝트를 만들 때 spring discovoery에서 eureka server를 체크해주고 만들어준다.

동적 변경 확인을 위해 actuator 설정을 넣어준다.

dependencies {
	implementation 'org.springframework.cloud:spring-cloud-starter-config'
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
}

Main Class 수정

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaApplication.class, args);
	}

}

bootstrap.yml 수정

spring:
  cloud:
    config:
      uri: http://localhost:8888
      name: eureka
      profile: default

management:
  endpoints:
    web:
      exposure:
        include: health, refresh

Config Server에서 설정값을 가져오기 위해 우선적으로 리딩되는 bootstrap.yml 에 Config Server를 바라보게 하는 설정을 넣어주고, running-server.com/actuator/refresh 에 post요청을 해 변경된 설정 파일을 바로 적용하기 위해 management 설정을 넣어주었다. actuator 부분에 대해선 다음 포스팅에서 자세히 다루어보도록 하겠다.

출처

RoyOps
Eureka Config server 등록

profile
최고의 오늘을 꿈꾸는 개발자

0개의 댓글