The problem seems simple at first: How do clients determine the IP and port for a service that exist on multiple hosts?
When developing and running resource-efficient distributed systems like
Apache Mesos (a cluster manager) that simplifies the complexity of running applications on a shared pool of servers, this is a very important decision to make.
Jason Wilder has looked at a number of general purpose, strongly consistent registries (Zookeeper, Doozer, Etcd) as well as many custom built, eventually consistent ones (SmartStack, Eureka, NSQ, Serf, Spotify’s DNS, SkyDNS).
Many use embedded client libraries (Eureka, NSQ, etc..) and some use separate sidekick processes (SmartStack, Serf).
Interestingly, of the dedicated solutions, all of them have adopted a design that prefers availability over consistency.
Please read this really nice writeup by Jason Wilder to learn more.