Eureka + Ribbon
App ---> Ribbon (client library) ---> multiple service instances
^ |
| v
Eureka (registry) <------+
- load balancing happens inside the application process
- apps must embed Ribbon & talk to Eureka
Envoy
App ---> Envoy proxy -----> Service instances (sidecar)
- load balancing, discovery, retries, metrics, etc. done in the proxy
- app code stays clean and unaware of network logic
- envoy usually deployed as a side-car to the app