Service Discovery 패턴

참고

Service Discovery 패턴이 등장하게 된 배경

기존 서비스 인스턴스의 개수와 IP 가 고정적이였던 온 프레미스 환경과 달리 MSA 환경에서는 Application 들이 AutoScaling 을 하면서 동적으로 줄었다가 늘어나면서 IP 자체도 동적으로 바뀌게 됐습니다.

Client 나 Gateway 입장에서 서비스 인스턴스들이 동적으로 늘었는지 줄었는지에 대한 파악을 하기가 어려운 문제가 있었고 그에 따른 LoadBalancing 하는데 어려움이 있었습니다.

Service Discovery 패턴에서는 Service EndPoint 를 조회 및 관리하기 위한 Service Registry 가 있습니다. MSA 의 각 서비스들은 Service Registry 에 자신의 EndPoint 들을 등록합니다.

Service EndPoint 를 접근하는 방식에 따라 두가지로 나뉘게 됩니다. 첫번째는 Client-Side Discovery 두번째는 Server-Side Discovery 패턴이 있습니다.

출처: https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/

Client Side Discovery

MSA 내 한 서비스가 다른 서비스를 호출할때 Service Registry 로 부터 EndPoint 를 조회한 후 해당 서비스를 호출하는 방식입니다.

출처: https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/

Server Side Discovery

Server Side Discovery 패턴은 기존 Client Side Discovery 와는 다르게 Service Registry 앞에 Load Balancer 를 두는 형태를 띄고 있습니다.

Server Side Discovery 는 Client Side Discovery 와 다르게 각 서비스간의 호출시에는 Load Balancer 를 통해 호출을 하게 되고 Load Balancer 가 Service Registry 에 등록된 EndPoint 들을 확인한 후 라우팅하는 방식입니다.

Server Side Discovery 패턴의 장점은 각각의 서비스 들에게 DNS 를 부여해 Domain 이름으로 호출할 수 있는 장점이 있고 Client Side Discovery 와는 달리 서비스 호출에 Load Balancer 를 거쳐야 하는 문제가 있어 Network Hop 이 늘어나는 단점이 있습니다.

쿠버네티스에서는 Server Side Discovery 를 제공합니다.

출처: https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/

Share