-
Eureka - [Spring Cloud]개발 2022. 12. 29. 14:28
Eureka?
Cloud 환경의 다수의 서비스(ex. api server)들의 Load Balancing 및 Health check, 장애 조치 목적을 가진 Middleware Server.
- Load Balance : 특정 서비스를 운영하는 서버들이 존재 할때 한 서버에 트래픽이 몰리지 않게 트래픽을 분산 시켜주는 기술
- Middleware : 데이터를 주고받는 서비스와 서비스의 사이의 중간의 매개체 역할
Eureka는 middleware 기능을 수행하기 위해 각 연결된 서비스의 IP, Port, Instance Id(host name)를 소유하고 있고,
REST방식으로 동작하며, MSA의 핵심 중 하나인 Service Discovery 역할을 수행한다 (지속적으로 변동하는 서비스의 IP,Port를 확인)
Client - Server방식으로 동작하며 Eureka Server에 등록된 서비스는 Eureka Client이다.
Eureka Server는 REST 기반으로 동작하기 한다.
따라서 HTTP통신을 이용해 Eureka Client Register, Fetch, Heartbeats, Delete 등 다양한 기능을 수행할 수 있다.
Operation Http Action Description Client Register POST | /eureka/apps/{appId} Input: JSON/XML payload, 아래 참조 HTTP Code: 204 on success Client Delete DELETE | /eureka/apps/appId/InstanceId HTTP Code:
200 on successHeartbeats(Renew) PUT | /eureka/apps/appId/InstanceId HTTP Code:
* 200 on success
* 404 if instanceID doesn’t existClient Fetch Registry GET | /eureka/apps
GET | /eureka/apps/deltaHTTP Code: 200 on success Output: JSON/XML - Register
- Eureka Client는 실행중인 Instance의 Ip, Port등 정보를 Eureka Server에 등록 한다.
- Delete
- Eureka에 있는 본인의 Instance를 삭제한다. 서비스가 종료 될 때 Client에서 Server로 전송한다.
- HeartBeats(Renew)
- Eureka Client는 30초를 주기로 Eureka Server에 HeartBeats를 보내고, Server는 Client로 부터 90초 동안 HeartBeat요청이 없으면 해당 Client를 제거한다
- Fetch Registry
- Eureka Client는 Server가 올라올 때 Eureka Server에 올라와 있는 모든 정보를 가져와 local cache에 저장한다. 이후 cache에 저장된 정보를 http 통신에 사용한다 (매 30초를 주기로 변경되는 부분에 대해 부분 업데이트를 진행한다 - delta update)
Eureka Server 구성
Gradle
dependencies { implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server' }
Spring
@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
application.yml
server: port: 8092 spring: application: name: discovery-service eureka: client: register-with-eureka: false # Eureka server를 Registry 등록 여부 fetch-registry: false # Registry select 여부
Eureka Client 구성
Gradle
dependencies { implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' }
Spring
@SpringBootApplication @EnableDiscoveryClient public class EurekaClientApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientApplication.class, args); } }
application.yml
spring: application: name: eureka-client-loo server: port: 8081 eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://127.0.0.1:8092/eureka <-Eureka Server
'개발' 카테고리의 다른 글
[Spring] Constructor injection(생성자 주입) vs Field injection (필드 주입) (0) 2023.01.16 Spring Multi Module (0) 2022.12.29 Gradle 기본 정리 (0) 2022.12.21 Effective Java Study - 1 (1) 2022.09.08 JPA 연관 관계 매핑 (0) 2022.08.02