이는 두 가지 패턴을 조합한 서비스 디스커버리 방식입니다. 첫째, 자가 등록(self registration) 패턴입니다. 서비스 인스턴스는 자신의 네트워크 위치를 서비스 레지스트리 등록 API를 호출해서 등록합니다. 헬스 체크 URL(11장)을 제공하는 서비스도 있습니다. 서비스 인스턴스가 현재 건강한지, 요청을 순조롭게 처리할 수 있는 상태인지 서비스 레지스트리가 주기적으로 확인하기 위해 필요한 API 끝점이죠. 서비스 인스턴스가 자신이 전에 등록한 네트워크 위치가 만료되지 않도록 주기적으로 ‘하트비트(heartbeat, 맥박)’ API를 호출해야 하는 서비스 레지스트리도 있습니다.
Note≡ 패턴: 자가 등록
서비스 인스턴스는 서비스 레지스트리에 자기 자신을 등록한다.25
둘째, 클라이언트 쪽 디스커버리 패턴입니다. 클라이언트는 서비스를 호출할 때 먼저 서비스 레지스트리에 서비스 인스턴스 목록을 요청해서 넘겨받습니다(이 목록을 캐시하면 성능을 높일 수 있습니다). 그런 다음 서비스 클라이언트는 라운드-로빈(round-robin)26이나 랜덤(random) 같은 부하 분산 알고리즘을 이용하여 서비스 인스턴스를 선택한 후 요청을 전송합니다.
Note≡ 패턴: 클라이언트 쪽 디스커버리
서비스 클라이언트는 서비스 레지스트리에 있는 가용 서비스 인스턴스 목록을 조회하고 부하 분산한다.27
26 프로세스 간의 우선순위 없이 무조건 들어온 순서대로 일정하게 리소스를 할당하는 방식