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개의 댓글

관련 채용 정보