Service discovery patterns
Microservices-based applications may often scale to such a large number of services that it may not be feasible for each microservice to keep a track of all other active service locations. In such scenarios, the service registry helps in discovering microservices to perform a particular task. There are primarily two patterns for service discovery—client-side discovery and server-side discovery, as shown in the following diagram.
In the client-side discovery pattern, the responsibility for determining the location of services by querying the service registry is on the client. Therefore, the service registry must be accessible to the client to look up the location of the required services. Also, each client must have service discovery implementation built-in for this pattern to work.
On the other hand, in the server-side discovery pattern, the responsibility for connecting with the service registry and looking up the location of services is of a router or a gateway that acts as a load balancer as well. Clients just need to send a request to a router and the router takes care of forwarding the request to the required service. Orchestration tools such as Kubernetes support server-side discovery using proxies.