Spring Cloud Netflix Eureka
Service Discovery
Eureka는 Spring Cloud Netflix에서 제공하는 서비스 디스커버리 도구로, MSA 환경에서 각 서비스의 위치(IP와 포트)를 동적으로 관리한다.
- 서비스 디스커버리란?
- MSA에서는 각 서비스가 독립적으로 배포되고 확장되므로, 고정된 IP와 포트를 사용하는 것이 어렵다.
- Eureka는 서비스 레지스트리로 작동하여 각 서비스의 위치 정보를 등록하고, 다른 서비스가 이를 검색할 수 있도록 돕는다.
- Eureka Server와 Eureka Client
- Eureka Server: 모든 서비스의 위치 정보를 저장 및 관리.
- Eureka Client: 애플리케이션이 Eureka Server에 자신의 위치를 등록하거나, 다른 서비스의 위치를 검색.
- Service Discovery의 흐름
- 서비스 A가 시작되면 Eureka Server에 자신의 위치(IP/포트)를 등록.
- 서비스 B가 서비스 A에 요청하려고 할 때, Eureka Server에서 서비스 A의 위치를 검색.
API Gateway Service
역할
API Gateway는 MSA에서 클라이언트와 백엔드 서비스 간의 중간 관문 역할을 한다.
- 인증 및 권한 부여:
- 요청을 처리하기 전에 인증 및 권한 확인을 수행.
- 서비스 검색 통합:
- Eureka와 통합하여 동적으로 서비스 위치를 확인.
- 응답 캐싱:
- 자주 요청되는 데이터를 캐싱하여 성능 향상.
- 정책, 회로 차단기 및 QoS:
- 장애 격리 및 서비스 안정성을 위해 회로 차단기(Circuit Breaker)와 QoS(품질 보증) 정책 적용.
- 속도 제한:
- 과도한 요청을 방지하기 위해 클라이언트별 요청 속도 제한.
- 부하 분산:
- 여러 인스턴스에 요청을 분산하여 성능 최적화.
- 로깅 및 추적:
- 요청 및 응답에 대한 로깅, 추적 ID 추가로 분산 추적 가능.
- 헤더, 쿼리 문자열 및 청구 변환:
- 클라이언트 요청 헤더 또는 쿼리를 백엔드 서비스에 맞게 변환.
- IP 허용 목록:
- 특정 IP에서만 요청을 허용하여 보안을 강화.
Spring Cloud Gateway에서의 MSA 간 통신
Spring Cloud Gateway는 클라이언트와 여러 MSA 서비스 간의 통신 허브 역할을 하며, MSA 간 통신을 지원한다
Eureka와 연동:
- Spring Cloud Gateway는 Eureka를 사용하여 백엔드 서비스의 위치를 동적으로 확인.
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
라우팅 구성:
- Gateway는 클라이언트 요청을 특정 서비스로 전달하는 라우팅을 설정.
routes:
- id: serviceA-route
uri: lb://serviceA
predicates:
- Path=/serviceA/**
- id: serviceB-route
uri: lb://serviceB
predicates:
- Path=/serviceB/**
(lb://는 Eureka를 통해 로드 밸런싱을 수행.)
필터 적용:
- 요청 및 응답에 대해 필터를 사용하여 헤더 추가, 인증 처리, 데이터 변환 등을 수행.
filters:
- name: AddRequestHeader
args:
name: X-Request-ID
value: ${random.uuid}
회로 차단기와 속도 제한:
- Spring Cloud Gateway는 Resilience4j와 통합하여 회로 차단기를 설정 가능.
routes:
- id: serviceA-route
uri: lb://serviceA
filters:
- name: CircuitBreaker
args:
name: serviceA-cb
fallbackUri: forward:/fallback/serviceA
Spring Cloud Gateway가 정상적으로 실행됐을 때, Netty 비동기 방식으로 실행되는 것을 확인 할 수 있다.
Spring Cloud Gateway와 Eureka를 활용한 MSA 구성의 장점
- 중앙 집중화:
- Gateway를 통해 모든 요청을 중앙에서 관리하고, 클라이언트와 서비스 간의 복잡성을 제거.
- 동적 서비스 디스커버리:
- Eureka와 연동하여 서비스의 위치를 자동으로 탐색.
- 유연한 확장성:
- 각 서비스가 독립적으로 확장 가능하며, Gateway와 Eureka가 이를 지원.
- 보안 및 성능 강화:
- 인증, 속도 제한, 캐싱 등을 통해 성능 최적화 및 보안 강화.
'Infra' 카테고리의 다른 글
| MSA (2) Spring Cloud Gateway - Filter (2) | 2025.01.07 |
|---|