[Spring] Netflix Eureka

buckshot·2024년 7월 23일

Spring

목록 보기
3/8
post-thumbnail

Spring Cloud Netflix Eureka??

Netflix 회사의 자사 클라우드 기술들을 Spring 재단에 기부를해서 사용할 수 있는 기술이다.

분산 시스템에서 마이크로서비스의 서비스 디스커버리(서비스 발견)와 등록을 제공하는 도구이다.
Netflix OSS(Open Source Software) 스택의 구성 요소 중 하나로, 특히 마이크로서비스 아키텍처에서 서비스 인스턴스를 동적으로 등록하고 발견하는 기능을 제공을 한다.

클라이언트가 자신이 요구하는 정보를 로드 밸런서, API Gatway에 요청을 전달하게 되면, 해당 요청 정보가 Discovery-Service에 전달이 되고, 이후 다시 Discovery-Service가 요청에 맞는 서버로 가면 원하는 정보를 받을 수 있게 안내해준다.
그렇게 안내받은 내용을 토대로 그에 맞는 서버로 요청을 하게된다.


Eureka Server

Eureka Server는 모든 클라이언트 어플리케이션의 위치와 상태를 등록하는 레지스트리 역활을 한다.

다른 마이크로 서비스 어플리케이션이 필요하는 서비스를 찾을 수 있도록 서비스 정보를 제공하는 서비스 디스커버리service discovery가 있다.

그리고 주기적으로 각 서비스 인스턴스의 상태를 확인하고, 응답없는 인스턴스를 제거를 한다.

Service-Discovery

클라이언트가 서비스를 호출을 할 때 서비스의 위치와 상태 등 정보를 저장하고 관리를 한다.

서버를 통해 필요한 서비스 인스턴스 목록을 조회하여 서비스 간의 통신이 가능하게 만들어 준다.

Servic Discovery는 크게 Client-side Discovery 방식과 Server-side Discovery으로 구분을 할 수 있다.

1. Client-side Discovery

클라이언트가 직접 서비스 디스커버리를 수행하는 방식이다.

클라이언트는 Eureka Server와 통신을 통해 서비스 인스턴스 목록을 가져와 로컬에 캐시를 한다.

그리고 클라이언트가 서비스 인스턴스 목록을 기반으로 로드 밸런싱을 수행한다.

이러한 방식의 장점으로는

  • 클라이언트가 직접 Eureka Server와 통신하여 필요한 서비스 인스턴스를 찾기 때문에, 별도의 로드 밸런서가 필요 없어 단순하다는 것이고
  • 서비스 요청이 중간 로드 밸런서 없이 직접 서비스 인스턴스로 전달되기 때문에, 네트워크 오버헤드가 줄여 효율이 좋다

단점으로는

  • 각 클라이언트에 디스커버리와 로드 밸런싱 로직을 구현해야 하므로, 클라이언트의 복잡성이 증가한다.
  • 클라이언트가 서비스 인스턴스 목록을 주기적으로 업데이트해야 하며, 이 과정에서 네트워크 트래픽이 발생한다

2. Server-side Discovery

해당 방식은 로드 밸런서가 서비스 디스커버리를 수행을 한다.

클라이언트는 로드밸런스로 서비스 요청을 전송하면, 로드밸런서가 서비스 네트워크 주소를 확인한 후 사용 가능한 서비스로의 라우팅을 한다.

이러한 방식의 장점

  • 클라이언트는 디스커버리 로직을 구현 할 필요가 없어지며, 디스커버리 관련 내용을 클라이언트로 분리가 가능해진다.

단점

  • 로드밸런스는 배포 환경에서 구축이 되어야 한다는 점이 있다.
  • 로드밸런스가 다운이 된다면 전체 시스템에 영향을 끼친다
  • 클라이언트 요청이 로드 밸런스를 거쳐 서비스 인스턴스로 전달되기 떄문에, 약간의 네트워크 오버헤드가 발생할 수 있다.

Eureka Client

클라이언트는 서버에 자신의 메타데이터(호스트, 포트, 상태 등)을 등록을 한다.


MSA의 핵심 구성으로, 서비스의 동적 등록과 발견으로 분산 시스템의 확장성과 유연성을 극대화를 해준다.
Eureka Server는 중앙 레지스트리 역활을 담당하며, Client는 어플리케이션의 위치 정보를 서버에 등록을 하고, 필요한 다른 서비스의 위치 정보를 확인을 한다. 서비스 디스커버리는 클라이언트 어플리케이션이 동적으로 다른 서비스 인스턴스를 찾고 통신이 가능하게 해주며, 시스템의 복잡성을 줄이고 가용성을 높여준다.

profile
let's go insane

0개의 댓글