Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[Arch.] 마이크로서비스를 검색하고 동적으로 관리하는 Service Discovery (Spring Cloud Netflix Eureka) 본문
Backend/Architecture
[Arch.] 마이크로서비스를 검색하고 동적으로 관리하는 Service Discovery (Spring Cloud Netflix Eureka)
Gaejirang-e 2023. 10. 10. 10:27
𐂂 Service Discovery
외부에서 마이크로서비스들을 검색하기 위해서 사용되는 개념이다.
컴퓨터 네트워크 환경에서 사용가능한 마이크로서비스의 위치와 구성을 자동으로 찾고 식별하는 프로세스를 말한다.
특정 마이크로서비스가 가동되는 '서버의 이름'이 Key값이 되고,
마이크로서비스가 '가동되는 위치'가 Value값이 된다.
마이크로서비스는 Eureka Server(service discovery)에 자신을 등록한다.
클라이언트가 특정 마이크로서비스를 검색하고 싶으면 API Gateway와 같은 서비스를 통해
요청정보를 Eureka Server에 전달한다.
Eureka Server는 등록된 마이크로서비스 정보를 조회하여, 클라이언트가 찾고자하는 마이크로서비스를 검색하고
해당 마이크로서비스가 발견되면, 해당 마이크로서비스의 위치(호스트 및 포트)를 클라이언트에게 제공한다.
🍩 서비스 식별
: 네트워크상에 존재하는 마이크로서비스의 고유 식별자를 제공한다.
(클라이언트는 이를 통해 필요한 마이크로서비스를 식별해 찾을 수 있다.)
🍩 동적 서비스 관리
: 마이크로서비스가 추가되거나 제거되는 경우에도 즉시 업데이트된 정보를 제공한다.
(🧩 확장성, 🧩 유연성)
🍩 로드밸런싱
: 요청을 여러 서버로 분산시키는 로드밸런싱을 수행할 수 있다.
(트래픽이 균형적으로 분산되고, 서비스의 🧩 가용성과 성능을 향상)
🍩 자동화 및 유연성
: 수동적인 설정 및 관리 작업을 최소화하고, 자동화된 환경에서 마이크로서비스를 관리한다.
컴퓨터 네트워크 환경에서 사용가능한 마이크로서비스의 위치와 구성을 자동으로 찾고 식별하는 프로세스를 말한다.
특정 마이크로서비스가 가동되는 '서버의 이름'이 Key값이 되고,
마이크로서비스가 '가동되는 위치'가 Value값이 된다.
마이크로서비스는 Eureka Server(service discovery)에 자신을 등록한다.
클라이언트가 특정 마이크로서비스를 검색하고 싶으면 API Gateway와 같은 서비스를 통해
요청정보를 Eureka Server에 전달한다.
Eureka Server는 등록된 마이크로서비스 정보를 조회하여, 클라이언트가 찾고자하는 마이크로서비스를 검색하고
해당 마이크로서비스가 발견되면, 해당 마이크로서비스의 위치(호스트 및 포트)를 클라이언트에게 제공한다.
🍩 서비스 식별
: 네트워크상에 존재하는 마이크로서비스의 고유 식별자를 제공한다.
(클라이언트는 이를 통해 필요한 마이크로서비스를 식별해 찾을 수 있다.)
🍩 동적 서비스 관리
: 마이크로서비스가 추가되거나 제거되는 경우에도 즉시 업데이트된 정보를 제공한다.
(🧩 확장성, 🧩 유연성)
🍩 로드밸런싱
: 요청을 여러 서버로 분산시키는 로드밸런싱을 수행할 수 있다.
(트래픽이 균형적으로 분산되고, 서비스의 🧩 가용성과 성능을 향상)
🍩 자동화 및 유연성
: 수동적인 설정 및 관리 작업을 최소화하고, 자동화된 환경에서 마이크로서비스를 관리한다.
⚙ Eureka Server Setting
📜 DiscoveryserviceApplication.java
@EnableEurekaServer
@SpringBootApplication
public class DiscoveryserviceApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryserviceApplication.class, args);
}
}
🔧 application.yml
server:
port: 8761
spring:
application:
name: discoveryservice #Eureka MicroService의 고유한 이름(id)
eureka:
client:
register-with-eureka: false # 현재 server를 Eureka Client로 등록하지 않음(Eureka Server이기 때문)
fetch-registry: false # 현재 server가 Eureka Server로부터 인스턴스들의 정보를 주기적으로 가져올지 여부: 해제(Eureka Server이기 때문)
𖠃 @EnableEurekaClient vs @EnableDiscoveryClient
@EnableEurekaClient
consul, zookeeper와 같은 외부 라이브러리들이 구현되어 있다.
MSA를 Eureka 기반으로 구성하지 않은 경우 권고.
@EnableDiscoveryClient
eureka 관련 라이브러리만 의존하므로
MSA를 Eureka 기반으로 구성할 경우 권고.
consul, zookeeper와 같은 외부 라이브러리들이 구현되어 있다.
MSA를 Eureka 기반으로 구성하지 않은 경우 권고.
@EnableDiscoveryClient
eureka 관련 라이브러리만 의존하므로
MSA를 Eureka 기반으로 구성할 경우 권고.
⚙ Eureka Client Setting
📜 DiscoveryserviceApplication.java
@EnableDiscoveryClient
@SpringBootApplication
public class DiscoveryserviceApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryserviceApplication, args);
]
}
🔧 application.yml
server:
port: 9001
spring:
application:
name: user-service
eureka:
client:
register-with-eureka: ture
fetch-registry: ture
service-url:
defaultZone: http://127.0.0.1:8761/eureka # 통신할 Eureka Server의 위치를 지정, Eureka Server에 Eureka Client를 등록
'Backend > Architecture' 카테고리의 다른 글
[Arch.] 요청에 대한 단일 진입점 API Gateway (0) | 2023.10.10 |
---|---|
[Arch.] 클라우드 환경에서의 애플리케이션의 설계, 개발, 배포 방식과 12가지의 지침(+ 3 factors) (0) | 2023.09.20 |
Comments