Cloud

Eureka

Jungsoomin :) 2020. 12. 7. 16:19

 

  • 정의

    • Middle-tier load balancer

  • 목적

    • 로드밸런싱장애복구(failover)가 가능한 Middle-tier 서비스 환경을 구성 했을 때 클라이언트(API Gateway 또는 다른 서비스)에게 가용한 서비스 인스턴스들의 위치 정보를 동적으로 제공할 수 있어야 한다.

  • 용어
    • Service Registration : 서비스가 자신을 Eureka 에 등록
    • Service Registry : 등록된 서비스 목록 , 서비스 위치정보로 갱신
    • Service Discovery : 클라이언트가 요청을 보내고자 하는 서비스를 Service Registry 에서 찾아오는 것
  • 구성요소
    • Eureka Client : 서비스의 위치정보를 얻고자 Eureka Server에 질의하는 서비스
    • Eureka Service : Eureka Client  에 발견되기 위해 Eureka Server 에 등록을 요청한 서비스
    • Eureka Server : Eureka Service가 등록되는 서버, Eureka Client 가 질의하는 서버
    • Eureka Instance : Eureka 에 등록되어 조회가능한 Eureka Service

Eureka Client 동작과 Eureka Server 간의 의사소통

 

  • Instance Startup
    • eureka.instance/client 설정 값을 바탕으로 Eureka Instance 정보를 만들어 냄
    • HeartBeat 스케쥴러를 통해 Eureka Server에 HeartBeat 를 송신
    • Eureka Server 에 Instance 등록
  • 등록 결과확인
    • REST endpoint/eureka/apps 를 통해 인스턴스 정보 확인 가능
    • Traffic 수용 준비 완료 시 Eureka Instance status 가 UP으로 변경
    • Eureka Instance status 가 STARTING 이라면 초기화 작업 진행 중인 것
    • eureka.instance.instance-enabled-onit 이 true 일 경우 초기화완료 시 UP 설정 가능
  • Instance StartUp 완료 후 HeartBeat 전송
    • 유레카 클라이언트 등록 후 HeartBeateureka.instance.lease-renewal-interval-in-seconds 에 설정한 주기마다 보낸다. default 는 30 초이다.
    • Eureka Server 는 interval 에 따라 Eureka Service 의 status 를 확인한다. ( DOWN , UP )
    • 최근 HeartBeat 송신 이후 interval 이후 까지 송신을 받지 못하면 eureka.instance.lease-expiration-duration-in-second 만큼 기다린다. default 는 90초이다.
  • Instance StartUp 이후 Instance 정보 Replication
    • 등록 이후 Instance 정보 변경 시 Registry 정보를 갱신하기 위한 REST 를 eureka.client.instance-info-replication-interval-seconds 에 설정한 주기 마다 호출한다. default 는 30초이다.
  • Instance Startup 이후 Eureka Server Infomation Refresh
    • Eureka Server 추가, 변경, 삭제 발생시 Eureka Client가 얼마나 자주 url 을 갱신할 것인지 eureka.client.eureka-service-url-poll-interval-seconds 값으로 조정한다. default 는 0초이다.

 


Service Discovery

  • Instance Startup
    • Eureka 로 부터 Registry 정보를 Fetch 한다.
  • Instance Startup 이후 Fetch Registry
    • 등록 이후 Eureka Client eureka.client.registry-fetch-interval-seconds 에 설정된 주기마다 Local Cache Registry 정보를 갱신 함. default 30 초.

추가정보

  • Client 는 Server 로 부터 Registry 정보를 가져와 로컬에 저장하고 캐싱 함.
  • 캐싱 정보는 eureka.client.registry-fetch-interval-seconds 갱신 됨, default 30초
  • Client shotdown Eureka Server 에 Cancel 요청을 보내 Registry 에서 제거 시킴.
  • Eureka Client 와 Eureka Server 사이에 Registry 사용 캐시로 인해 Eureka Client 가 호출하려는 다른 ServiceInstance 정보가 최신으로 갱신되는 것에 시간차 가 있다.

Self-Preservation Mode(자가보존모드)

  • Eureka 서버는 등록된 instance로부터 heartbeat를 주기적으로 받는다. 하지만 네트워크 단절 등의 상황으로 hearbeat를 받을 수 없는 경우 보통 registry에서 해당 instance를 제거 한다.
  • Eureka로의 네트워크는 단절되었지만, 해당 서비스 API를 호출하는데 문제가 없는 경우가 있을수 있어서, self-preservation 을 사용하여 registry에서 문제된 instance를 정해진 기간 동안 제거하지 않을 수 있다.
  • EvictionTask가 매분 마다 Expected heartbeats 수와 Actual heartbeats 수를 비교하여 Self-Preservation 모드 여부를 결정한다.
  • eureka.server.eviction-interval-timer-in-ms (default: 60 * 1000) 로 설정한다.
spring:
  application:
    name: eureka-server

server:
  port: 8761

eureka:
  client:
    fetch-registry: false
    register-with-eureka: false
    service-url:
      defaultZone: ${EUREKA_SERVER_LIST:http://localhost:8761/eureka/}
    initial-instance-info-replication-interval-seconds: 35 # Server -> Client
    eureka-service-url-poll-interval-seconds: 0 # 유레카 서버 변경 발생시 url 갱신
    registry-fetch-interval-seconds: 20 # Client -> Server 로컬 캐싱
  instance:
    instance-enabled-onit: true #STATUS -> UP
    lease-renewal-interval-in-seconds: 25
    lease-expiration-duration-in-seconds: 80
  server:
    eviction-interval-timer-in-ms: 40000 # 클라이언트 비정상 종료시 기다리는 시간

'Cloud' 카테고리의 다른 글

Ribbon  (0) 2020.12.08
Zuul  (0) 2020.12.07
Netflix Component 설명  (0) 2020.12.07
Netflix Components  (0) 2020.12.07
DiscoveryClient 를 이용한 API 콜  (0) 2020.12.07