Service Discovery
MSA로 구성되어있는 서비스 인스턴스 각각의 ip와 포트 정보들을 등록하고 관리하는 역할을 하는 것.
필요한 이유?
아래 그림 처럼 클라우드 환경에서 각각의 서비스 인스턴스들은 동적으로 할당된 네트워크 ip/port 들이 있을텐데, 이러한 인스턴스들이 AutoScaling으로 동적으로 ip/port들이 변경될 가능성이 많다. 그럴때마다 client 혹은 api gateway가 이 변경점에 대해서 일일이 알아내고 수정하기에는 어려움을 겪을 것이기에 Service Discovery가 필요하다.
서비스 디스커버리를 구현하는 방식에는 2가지 방법이 있는데, 클라이언트 사이드 디스커버리 패턴과 서버 사이드 디스커버리패턴이 있다.
클라이언트 사이드 디스커버리 패턴
클라이언트는 사용 가능한 서비스 인스턴스의 네트워크 위치를 결정하고 요청에 대한 로드 밸런싱을 담당합니다. 클라이언트는 사용 가능한 서비스 인스턴스의 데이터베이스인 서비스 레지스트리에 정보를 요청하고 그 정보를 바탕으로 로드 밸런싱 알고리즘을 사용하여 사용 가능한 서비스 인스턴스 중 하나를 선택하고 요청합니다.
서비스인스턴스의 네트워크 위치들은 시작될 때 서비스 레지스트리에 등록되고, 종료되면 제거됩니다. 인스턴스 등록은 일반적으로 하트비트 매커니즘을 사용하여 주기적으로 새로고침합니다.
서버 사이드 디스커버리 패턴
클라이언트는 로드밸런서를 통해서비스에 요청하는데, 로드밸런서는 서비스레지스트리에 정보를 요청하고 각 요청을 사용 가능한 서비스 인스턴스로 라우팅을 합니다. 클라이언트 사이드 패턴과 마찬가지로 서비스 인스턴스는 서비스 레지스트리에 등록 및 제거 됩니다.
Spring-boot
spring-boot discoveryservice : spring-cloud-starter-netflix-eureka-server
spring-boot eureka-client : spring-cloud-starter-netflix-eureka-client
참조
https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/
'정리 > Spring Cloud' 카테고리의 다른 글
Spring Cloud Config (0) | 2022.08.07 |
---|---|
API gateway (0) | 2022.08.07 |
댓글