Spring Cloud Netflix Eureka

안녕하세요 김지운입니다.
최근 우리 FISA(클라우드 엔지니어링) 파이널 프로젝트를 마쳤습니다. 저희의 프로젝트는 MSA로 설계하고 구현한 프로젝트입니다. 프로젝트에 대한 자세한 설명은 아래 링크로 확인하실 수 있습니다.

MSA로 구현하기 위해서 Spring Cloud의 다양한 라이브러리를 사용했습니다. Spring Cloud Neflix Eureka, Spring Cloud Config, Spring Cloud Gateway 등…말입니다.

이 중 핵심이 되었던 기술은 바로 Netflix Eureka였습니다. 분리 되어 있는 여러 마이크로서비스들을 중앙 집중식으로 관리하기 위해서였습니다. 간단한 주석처리만으로 Discovery Service가 제공되는 것이죠.

Spring Cloud Neflix의 공식문서에 적힌 Eureka Server 특징으로는 다음 두개가 있습니다.

  • Eureka 인스턴스를 등록할 수 있으며 클라이언트는 Spring이 관리하는 Bean을 사용하여 해당 인스턴스를 찾을 수 있습니다.
  • 선언적인 자바 설정으로 내장된 Eureka 서버를 생성할 수 있습니다.


이미지

*[배포된 ArteModerni의 서비스들]

Eureka Server는 위와 같이 UI도 제공하기 때문에 Eureka Server로 접속하면 등록된 서비스들의 서비스 이름, 서비스의 Host IP, 포트번호를 확인할 수 있습니다.

Spring Cloud Eureka Server 왜 쓰는걸까?

MSA는 하나의 아키텍처 스타일이기 때문에, MSA를 하기 위해 꼭 Spring Cloud를 사용해야 하는 것은 아닙니다. 마찬가지로 Spring Cloud를 사용한다 해도 Eureka Server는 필수가 아닙니다. 하지만, Eureka Server를 통해 MSA로 시스템을 구현하는것에 있어 Eureka Server는 많은 도움을 줍니다. 왜 유명하고 자주 사용하는지 공식 깃허브에 작성되어 있었습니다.

When

  • Eureka Server는 외부에 트래픽을 노출시키고 싶지 않기 위해 사용하는 중간계층 서비스 (ex. AWS ELB)를 가지고 있을 때
  • 간단한 라운드로빈 로드 밸런싱을 찾고 있거나, 로드 밸런싱 요구에 맞게 Eureka를 확장할 준비가 되어 있을 때
  • 스티키 세션의 필요 없이, 외부 캐시 시스템에서 세션 데이터를 로드할때
  • 클라이언트 기반 로드 밸런서를 사용하려고 할때

How

Service Registry

마이크로서비스의 인스턴스가 시작될 때, Eureka Server에 자신의 정보를 등록합니다. 서비스의 IP, 포트, 헬스 체크 URL등과 같은 메타데이터를 포함합니다.

Heartbeat

서비스가 Eureka에 등록되고 나면, 해당 서비스는 주기적으로 Eureka Server에 신호를 보내서 여전히 활성 상태임을 알립니다. Eureka 서버는 일정 시간동안 heartbeat를 받지 못하면 해당 서비스 인스턴스를 “사라진”것으로 간주하고 레지스트리에서 제거합니다.

Service Discovery

서비스는 Eureka Server를 통해 다른 서비스를 찾을 수 있습니다. 이는 마이크로서비스간 통신에 아주 중요한 역할을 합니다. 또 Eureka 클라이언트는 서비스 정보를 로컬에 캐시하므로 네트워크 장애 시에도 서비스 발견이 가능합니다.

LoadBalancing

Eureka는 Netflix Ribbon 라이브러리와 연결되어 로드밸런싱 기능도 작동합니다. 클라이언트가 서비스를 호출할 때, 로컬 캐시에 저장된 서비스 인스턴스 목록을 바탕으로 로드 밸런싱을 수행하는 것입니다.

Replication

하나 이상의 Eureka Server 인스턴스가 실행되고 있을 때, 하나의 서버에 등록된 정보는 다른 서버 인스턴스들과 자동으로 동기화 합니다.

MSA에서의 Eureka Server

앞서 말씀드렸지만, MSA라고 해서 꼭 Eureka Server를 사용해야하는 것은 아닙니다.하지만, MSA가 가지고 있는 장점들을 극대화 하기 위해선 Spring Cloud의 Eureka Server, Conifg, Gateway를 적극 활용하는 것이 도움이 많이 됩니다. 또, 마이크로 서비스 시스템이 고도화 되면서 마이크로서비스간 통신, 분산 로깅 추적 등 시스템 아키텍처의 안정성을 갖추기 위해선 Eureka Server가 많은 도움이 될 수 있습니다. 이번 프로젝트를 진행하면서도 마이크로 서비스간 동기 통신(Feign)을 사용했을 때, Eureka Server가 많은 도움이 되었습니다.

참고 및 관련 레포