pattern

Client-Side Discovery

The caller queries the registry itself and chooses an instance, rather than sending to a stable address that something else resolves.

discoveryload-balancinglibraries

The caller obtains the instance list and applies its own load-balancing policy — round robin, least connections, latency-aware, zone-preferring. Netflix's Eureka with Ribbon is the well-known example, and gRPC's built-in name resolver and balancer work this way.

What it buys: one fewer network hop, and sophisticated balancing decisions the caller is best placed to make — preferring instances in its own availability zone (cutting latency and cross-zone transfer cost), or shifting away from instances that are responding slowly to it specifically.

What it costs: discovery and balancing logic in every application, in every language, which becomes a library-versioning problem across an estate. This is precisely the burden a service mesh removes by moving the same logic into a sidecar — client-side discovery without client-side code.

Server-side discovery is the alternative: the caller uses a stable virtual address and a load balancer or platform resolves it. Simpler, language-agnostic, one more hop, and what Kubernetes Services and cloud load balancers provide. For most systems it is the right default, with the mesh approach reserved for estates that need the finer control.