Software Architecture/MSA

[MSA] Service Discovery

bu119 2024. 3. 12. 09:00
728x90
반응형

Service Discovery

마이크로서비스 아키텍처(MSA)로 구성되어 있는 서비스들은 각자 다른 IP와 Port를 가지고 있다.

이러한 서로 다른 서비스들의 IP와 Port 정보에 대해서 저장하고 관리할 필요가 있는데 Service Discovery라고 한다.

 

즉, MSA에서는 Service의 IP와 Port가 일정하지 않고 지속적을 변화한다. 그렇기 때문에 Client에 Service의 정보를 수동으로 입력하는 것은 한계가 분명하다. Service Discovery란 이런 MSA의 상황에 적합하다.

 

서비스의 인스턴스가 생성 혹은 소멸되거나 신규 서비스들이 지속적으로 증가하는 등 서비스의 정보가 지속적으로 바뀔 수 있다. 디스커버리 서버는 이러한 가변적인 모든 서비스의 정보들은 각 서비스의 고유 ID(거의 변하지 않는)에 매핑하여 관리한다. 그리고 각 서비스들은 지속적으로 1) 자신의 정보를 디스커버리 서버에 등록하며 2) 다른 서비스들의 정보를 조회한다. 그럼 각 서비스들은 다른 서비스의 IP와 PORT를 몰라도 서비스의 고유 ID만 가지고 연계가 가능해진다.

 

정리하자면, Service Discovery

  • 마이크로서비스의 정보(위치 등)를 등록할 수 있다.
  • 외부의 요청이나 서비스가 마이크로서비스의 정보를 검색하기 위해 사용된다.

 

이러한 서비스 디스커버리의 구현을 쉽게 도와주는 것이 Spring Cloud의 Eureka이다.

 

Spring Cloud Netflix Eureka

Spring Cloud Netflix Eureka는 Service Discovery의 역할을 수행한다.

 

Eureka의 구성 요소

  • Service Discovery : 외부에서 마이크로서비스를 찾아주는 기능
  • Service Registry : 각각의 서비스가 자신의 위치 정보를 특정 서버에 등록하는 작업

즉, Eureka는 Eureka Server와 Eureka Client로 구성된다.

  • Eureka Server (서버 라이브러리) : 서비스들의 정보를 관리, 제공
  • Eureka Client (클라이언트 라이브러리: 서버에 자신의 정보를 제공, 다른 서비스의 정보를 조회

 

말 그대로 Eureka Server는 디스커버리 서버에 탑재되며, Eureka Client는 각각의 서비스들에 탑재된다.

 

 

위의 그림과 같이 각 서비스들이 기동 될 때 혹은 가동 중에도 지속적으로 자신의 정보를 디스커버리 서버에 등록(갱신)하며, 서버는 이 정보들을 캐싱하여 관리한다.

 

 

이와 동시에 각 서비스들은 디스커버리 서버로부터 다른 서비스들의 정보를 지속적으로 조회한다.

(이 정보들 또한 기본적으로 서비스들이 캐싱하여 관리한다.)

 

그리고 각서비스 들은 서로의 고유 ID만 가지고 연계가 가능하다.

예를 들어, 상품 서비스가 주문 서비스로 REST API 요청을 할 때 IP와 PORT 대신 고유 ID로 통신이 가능해진다.

 


참고 자료

https://junhyunny.github.io/spring-boot/spring-cloud/msa/spring-cloud-netflix-eureka/

https://cloud.spring.io/spring-cloud-netflix/reference/html/#service-discovery-eureka-clients

https://mangchhe.github.io/springcloud/2021/04/07/ServiceDiscoveryConcept/

https://wonit.tistory.com/m/495

https://enjoy-dev.tistory.com/10

728x90
반응형