다양한 서비스의 등록 및 탐색을 위한 서비스 레지스트리, 서비스 디스커버리 패턴

클라이언트가 여러 개의 마이크로 서비스를 호출하기 위해서는 최적 경로를 찾아주는 라우팅 기능과 적절한 부하 분산을 위한 로드 밸런싱이 제공되어야 한다. 넷플릭스 OSS에서는 라우팅은 줄(Zuul)이 로드 밸런싱은 리본(Ribbon)이 담당한다.

라우터는 최적 경로를 탐색하기 위해 서비스 명칭에 해당하는 IP주소를 알아내야 한다. 마이크로 서비스의 명칭과 유동적인 IP 정보를 매핑해서 보관할 저장소가 필요하다. 넷플릭스 OSS의 유레카(Eureka)가 기능을 담당하고 이러한 페턴을 서비스 레지스트리 패턴이라고 한다.

service discovery pattern

그림 처럼 각 인스턴스가 로딩될 때 자신의 서비스 이름과 할당된 IP 주소를 서비스 레지스트리에 등록한다. 그리고 클라이언트가 호출할 때 레지스트리 서비스를 조회해 이름과 매핑되는 IP를 확인한 후 호출한다. 이 레지스트리 서비스는 모든 마이크로서비스의 인스턴스의 주소를 알고 있는 서비스 매핑 저장소가 된다. 서비스가 종료될 때 이러한 위치정보는 삭제된다. 서비스 레지스트리는 관리와 운영을 위한 기반서비스의 주소도 함께 보관한다. 예를들어 config, 모니터링, 추적 등의 서비스도 모두 이름을 가지고 있기 때문에 주소를 가지고 있어야한다.

이러한 패턴은 다른 솔루션에서도 제공하는데 쿠버네티스의 경우는 쿠버네티스 DNS 및 서비스(Kubernetes Service)로 제공한다.

출처

도메인 주도 설계로 시작하는 마이크로서비스 개발 - YES24