1. Eureka란
스프링 클라우드에서 제공하는 Eureka는 마이크로서비스 아키텍처에서 서비스의 등록, 발견, 및 관리를 위한 서비스 디스커버리 라이브러리입니다. 이를 통해 마이크로서비스 간의 통신이 효율적으로 이루어질 수 있습니다.
Eureka는 로드 밸런싱과 함께 헬스체크(=서비스 감지)까지 진행하고 있어 Eureka를 사용하면 Gateway는 서비스가 살아 있는지에 대한 고민을 하지 않고 유레카에 의뢰합니다.
1.1 주요 특징:
- 서비스 등록 (Service Registration): 마이크로서비스가 시작될 때 Eureka 서버에 자신의 위치 정보를 등록합니다. 이를 통해 다른 서비스나 클라이언트가 해당 서비스를 찾을 수 있습니다.
- 서비스 감지 (Service Discovery): Eureka 클라이언트 라이브러리를 사용하여, 서비스를 찾고 해당 서비스의 메타데이터를 가져올 수 있습니다. 이를 통해 동적으로 서비스의 위치를 파악할 수 있습니다. == 등록했을 때 이런 서비스가 있다.
- 서비스 상태 감시 (Health Monitoring): Eureka는 주기적으로 등록된 서비스의 상태를 확인합니다. 이를 통해 장애가 발생한 서비스를 감지하고 다른 서비스로 요청을 라우팅할 수 있습니다. == 서비스가 죽었는지 살아있는지 확인
- 동적 서비스 변경 (Dynamic Service Changes): 새로운 서비스 인스턴스가 추가되거나 기존의 인스턴스가 제거되어도 Eureka는 이를 감지하고 서비스 목록을 업데이트합니다. == 수평적 스케일링을 할 때 유레카가 빠르게 감지하고 서비스 목록을 업데이트한다.
- 클라이언트 사이드 로드 밸런싱 (Client-Side Load Balancing): Eureka 서버는 여러 인스턴스 중 하나를 선택하여 서비스로 요청을 보내는데, 이를 통해 부하를 분산합니다.
1.2 구성:
1. Eureka 서버 구동( Eureka 디스커버리 서버)
2. 디스커버리 서버를 사용하는 Eureka 디스커버리 클라이언트
1.3 작동 원리:
- Eureka 서버 구동: 마이크로서비스에서 사용할 Eureka 서버를 실행합니다. 이는 서비스 디스커버리의 중심 역할을 합니다.
- 서비스 등록: 마이크로서비스가 시작될 때, 해당 서비스는 Eureka 서버에 자신의 정보를 등록합니다. 이 정보에는 서비스의 이름, IP 주소, 포트 번호 등이 포함됩니다.
- 서비스 감지: 다른 마이크로서비스나 클라이언트가 특정 서비스를 호출하려면, Eureka 클라이언트 라이브러리를 사용하여 Eureka 서버에서 해당 서비스의 인스턴스를 찾습니다.
- 서비스 사용: 클라이언트는 Eureka로부터 받은 서비스 인스턴스 목록 중 하나를 선택하여 요청을 보냅니다. 이때, 클라이언트 사이드 로드 밸런싱을 통해 부하가 고르게 분산됩니다.
- 서비스 상태 감시: Eureka 서버는 주기적으로 등록된 서비스의 상태를 확인합니다. 만약 서비스가 응답하지 않는다면 해당 인스턴스를 다른 인스턴스로 대체할 수 있습니다. 30초당 3번 request로 확인합니다.
- 동적 서비스 변경: 새로운 서비스 인스턴스가 추가되거나 기존 인스턴스가 제거되면, Eureka는 이를 감지하고 서비스 목록을 업데이트합니다.
2. Eureka 서버 설정
2.1 yml 파일
server:
port: 8761
spring:
application:
name: discovery-server
eureka:
client:
register-with-eureka: false # 유레카 서버도 유레카에 등록할 것인가? 클라이언트 서버가 아니라서 false
fetch-registry: false # 등록된 마이크로서비스들과 실시간 동기식 통신을 할 것인가? 유레카 서버에서 유레카 서브를 헬스체크 하지 않기 때문에 false
2.2 서버 측면에는 Application java 파일에 @EnableEurekaServer 어노테이션을 붙여야 유레카 서버가 수집을 시작한다.
package com.example.discoveryserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class DiscoveryServerApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryServerApplication.class, args);
}
}
'MSA' 카테고리의 다른 글
기존 마이크로서비스를 Eureka 클라이언트로 등록 (0) | 2023.10.24 |
---|---|
스프링 디스커버리를 위한 Eureka 클라이언트 생성 (1) | 2023.10.24 |
yml 파일에 필터 적용하기 (2) | 2023.10.23 |
Config파일을 이용한 라우팅 정보 설정 + 기본 필터 활용 (0) | 2023.10.19 |
Spring Cloud Gateway와 MSA 학습을 위한 게이트웨이 서버 설정 (1) | 2023.10.18 |