Covers: Client-Side vs Server-Side Discovery, Service Registries, Service Mesh (Istio/Envoy), Kubernetes DNS

The Problem That Didn't Exist in the Monolith

In a monolith, calling another module is simple: OrderService.create(data). It's a function call. The compiler resolves the address. It always works (assuming the code compiles).

In microservices, "calling another service" means: where is it, right now, on the network?

This sounds trivial until you consider what's actually happening in a production environment: