-
정의
-
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 전송
- 유레카 클라이언트 등록 후 HeartBeat 는 eureka.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 |