Service Discovery / Registry

박다현·2022년 3월 11일
2

Service Discovery

MSA 는 여러 서비스 간의 호출로 이루어진다. 서비스 호출은 IP 주소와 Port 를 이용하는데, 현재 클라우드 환경에서는 서비스가 동적으로 변경되는 일이 잦아 IP가 동적으로 변경되는 일이 많아졌다. 그래서 한 서비스가 다른 서비스를 호출할 때 서비스의 위치 (IP & Port) 를 알아낼 수 있는 기능이 필요하다
이를 서비스 디스커버리 Service Discovery 라고 한다. Service Discovery 는 기본적으로 서비스를 등록하고, 등록된 서비스의 목록을 리턴한다

Service Registry

서비스 레지스트리는 서비스의 위치 (IP & Port) 정보를 저장하는 데이터베이스이며, 항상 최신 정보를 유지해야하며 고가용성이 필요하다

Discovery: 다른 서비스의 연결 정보를 찾는 것

Registry: 서비스의 연결 정보를 등록하는 것

Service Discovery 의 구현

Client Side Discovery

  • Service Client 가 Service Registry 에서 서비스의 위치를 찾아서 호출하는 방식
  • 비교적 간단하다
  • 클라이언트가 사용가능한 서비스를 알기 때문에 개별 서비스별로 맞는 LB 방법을 선택할 수 있다
  • client 와 Service Discovery 사이에 의존성이 생긴다
  • client 에 discovery 기능을 구현해야 한다.
  • 대표적인 예가 Spring Cloud Netflix Eureka 이다

Server Side Discovery

  • 호출 되는 서비스 앞에 proxy 서버 (로드밸런서)를 넣는 방식으로, 클라이언트가 로드밸런서를 호출하면 로드밸런서가 Service Registry 로 부터 등록된 서비스의 위치를 전달하는 방식
  • client 와 discovery 사이에 의존성이 낮다
  • client 는 단순히 LB에 요청만 한다
  • 로드밸런서가 배포환경에서 제공되어야한다
  • 대표적인 예시로는 AWS의 ELB, Kubernetes의 Service 가 있다
  • 다만 몇 시스템은 명시적인 Service Registry가 없는 경우가 있다

0개의 댓글