Before services can invoke each other, they need to be able to find each other using some kind of service discovery mechanism. This means being able to translate a service name into a network location (IP address and port). Traditional applications maintained the network locations of services to send requests to, probably in a configuration file (or worse, hardcoded in the application code). This approach assumes that network locations are relatively static, which isn't going to be the case in modern, cloud-native applications. The topologies of microservice architectures are constantly changing. Nodes are being added and removed through auto-scaling, and we have to assume that some nodes will fail either completely or by serving requests with unacceptably high latency. As a microservice architecture grows, you'll need to consider a more feature-rich...





















































