티스토리 뷰

Dev.

[Eureka] Eureka Basic

인쥭 2020. 12. 14. 14:13
반응형

참고 URL : authentication.tistory.com/m/24

 

제4장 서비스 디스커버리 (1)

서비스 디스커버리 MSA 에서는 여러 서비스 간의 호출로 구성이 된다. 일반적으로 IP와 포트를 통해 호출을 하는데, 클라우드 환경에서는 IP가 동적으로 변경되는 일이 많기 때문에 정확한(유효한

authentication.tistory.com

 

1. Service Discovery

  • MSA는 기능별로 나눠진 여러 서비스가 서로를 호출하는 구성을 갖게 된다.
  • 서비스간 상호 작용에는 IP 및 포트 등의 통신 정보가 반드시 필요하다.
  • 클라우드 기반의 MSA에서는 서비스를 위한 서버가 증설되거나 삭제되는 일이 잦으므로, 결국 서비스별 통신 정보를 정확히 파악할 수 있도록 하는 기능이 필요하다.
  • Eureka는 이러한 서비스 디스커버리 역할을 맡는 서비스가 된다.

 

2. 구조

  • Eureka Server
    • 별도의 Spring Boot Application으로 실행이 필요
    • HA 구성시 서버의 현 상태를 다른 서버로 복제할 수 있음
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'

이후 MainApplication에 @EnableEurekaServer 어노테이션을 추가
  • Eureka Client
    • MSA를 구성할 Application에 포함시켜 사용이 가능
    • 애플리케이션이 시작된 후 서버에 등록되고, 종료 전 서버에서 등록이 해제되는 것을 담당
    • 유레카 서버로부터 주기적으로 서비스 목록을 Fetch하여 최신화
    • 자신을 Discovery Server(Eureka)에 등록
      • 이후 호스트, 포트, 상태 정보, URL 등을 Discovery Server에 송신
      • Discovery Server는 Client의 생존 신호(HeartBeat)를 일정 기간 이상 받지 못했을 경우, 서비스가 삭제된 것으로 간주하고 삭제
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'

이후 MainApplication에 @EnableDiscoveryClient 어노테이션을 추가
  • EnableEurekaClient : spring-cloud-netflix에 존재하며, Eureka만을 위해 동작
  • EnableDiscoveryClient : spring-cloud-commons에 존재하고, Consul, Eureka 등으로부터 공통적으로 동작
  • Eureka Instance
    • 포트, 이름 등 유레카 클라이언트의 행동을 재정의하는 속성

 

3. Eureka Registry로부터 서비스를 빠르게 제거하기

  • Client는 leaseRenewalIntervalInSeconds에 정의된 값에 맞춰 Heartbeat를 주기적으로 서버에 보내 생존을 알린다. (디폴트 30초)
  • Client가 설정한 leaseExpirationDurationInSeconds에 정의된 값에 맞춰, 서버는 Heartbeat가 송신되지 않은 경우 서비스를 Registry로부터 제거한다. (디폴트 90초)
    • 디폴트 90초이며, 즉 90초 이내에 HeartBeat를 송신하지 않은 서비스를 제거한다는 의미가 된다.
    • 이는 즉, Client는 스스로의 설정을 통해 서버에게 '내가 몇 초 주기로 HeartBeat를 보낼텐데, 몇 초 이상 수신되지 않으면 날 지워줘'라고 알리는 것과 같다.
  • Server는 자신이 설정한 evictionIntervalTimerInMs 시간만큼 대기한 후 HeartBeat를 정상적으로 송신하지 않은 Client들을 Registry로부터 퇴거(eviction)시킨다. (디폴트 60초)
    • 즉, leaseExpirationDurationInSeconds 만료 이후에도 서비스가 살아있을 수 있다는 의미가 된다.
    • 따라서 Server는 해당 시간을 주기로 하여 퇴거시킬 서비스를 검사한다.
  • docker-compose down 등의 정상 종료 케이스로 인해 gracefule shutdown(우아한 종료)된 인스턴스는 적시에 Discovery Server로부터 제거된다.
  • 반면 인스턴스 자체의 종료 등, 예기치 못한 종료시 서비스는 위의 과정을 거쳐 Registry로부터 삭제된다.
    • 무용한 서비스를 빠르게 Registry로부터 제거하고 싶다면 위 설정 값을 조정해준다.
  • Eureka 측은 내부 관리 로직을 위해 위 값들을 디폴트에서 되도록 변경하지 말 것을 '권장'한다.
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함