Eureka Service Discovery 개념

Hyunjun Jang·2021년 8월 15일
2
post-custom-banner

Service Discovery란 ?

보통의 경우 한 서비스에서 다른 서비스를 호출할 때 IP와 Port정보를 이용하여 해당 서비스를 식별하여 요청한다. 하지만 클라우드 환경에서는 IP와 Port정보가 Auto-scaling 등으로 인해 동적으로 바뀌게 된다. 그렇기 때문에 해당하는 서비스를 식별할 수 있는 다른 방법이 필요하다.

Service Discovery는 서비스의 위치와 가용 상태 등을 관리하여 클라이언트 서비스가 요청할 서비스를 식별 가능토록 한다.

Service Discovery의 종류

  • Client Side Discovery
    생성된 서비스는 Service Registry에 서비스를 등록되고, 서비스를 사용할 클라이언트는 Service Registry에서 서비스의 위치를 찾아 호출하는 방식이다.

  • Server Side Discovery
    서비스를 사용할 클라이언트와 Service Registry 사이에 Load Balancer를 두는 방식이다.
    클라이언트는 Load Balancer에 서비스를 요청하고 Load Balancer가 Service Registry에 호출할 서비스의 위치를 질의하는 방식이다.

Eureka란?

Eureka는 중간 계층 서버의 로드 밸런싱 및 장애 조치를 목적으로 서비스를 찾기 위해 클라우드에서 주로 사용되는 REST(Representational State Transfer) 기반 서비스이다.

서비스 인스턴스 목록과 그 위치(host, port)가 동적으로 변하는 환경에서 사용자가 그 위치를 모두 관리하기는 어렵다.

Eureka를 사용하면 등록된 모든 서비스의 정보를 registry로 관리하고, 이에 대한 접근 정보를 요청하는 서비스에게 목록을 제공한다.

  • Eureka Server: Eureka Service가 자기 자신을 등록(Service Registration)하는 서버이자 Eureka Client가 가용한 서비스 목록(Service Registry)을 요청하는 서버.

    Eureka는 Middle-tier server(비즈니스 로직이 위치한 애플리케이션 서버단)의 로드밸런스와 Failover를 위해 서비스를 배치해주는 REST 기반 서비스 이다.

  • Eureka Client: 서비스들의 위치 정보를 Eureka Server로부터 fetch하는 서비스

    서버와 상호작용을 더쉽게 해주는 것을 Eureka Client라 부른다. 클라이언트도 Round-Robin 방식을 기본적으로 사용하는 로드밸런스를 내장하고 있다.

Eureka High level Architecture

위의 아키텍처는 Eureka가 Netflix에 배포되는 방식을 보여주며 이것이 일반적으로 실행되는 방식이다. 이 하나 개의 당 유레카 클러스터 지역 에만 지역의 인스턴스에 대해 알고있다. 최소한에있다 하나 당 유레카 서버 영역 핸들 영역 실패한다.

Eureka client를 내장한 Application Service와 Client가 Eureka Server에 등록을 요청하고 30초마다 갱신을 위한 하트 비트를 보낸다.

이러한 등록 정보와 갱신 정보는 클러스터의 모든 유레카 노드에 복제가 되고 클라이언트들은 레지스트리 정보를 찾아 해당 서비스를 찾고 원격 호출이 가능하게 된다.

Reference

https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance

https://velog.io/@dnjscksdn98/Spring-Boot-MSA-Eureka-Service-Discovery

https://velog.io/@dhk22/Spring-Cloud-Service-Discovery-Netflix-Eureka

profile
Let's grow together😊
post-custom-banner

0개의 댓글