“Consul enables services to locate other services running in any environment and provides real-time health status.”
Distributed systems by definition need a level of coordination between its components. While there are several algorithms and methods to achieve a consensus for coordination, practical systems generally use a more complete solution often with more features than just an algorithm. Best known examples in this area are Zookeeper for Hadoop ecosystem, etcd for coreos and then for kubernetes, and consul for … well, everything else.
Consul works with server agents doing the heavy-lifting and client agents for interacting with the state of the services. In practice we run an agent on all nodes, register services to consul, and all the other nodes are able to know which services are where and if they’re healthy. Then use that information for any changes on the cluster. If an application needs some centralized configuration, we use the built-in key-value store. If another requires a distributed lock, we use sessions. All using an easily deployed, high performance consul cluster.
We are using consul since its earliest days in 2014, first in our distributed delivery network solution where it auto-configures very high throughput load balancers, then in our geo-distributed video streaming product where it helps find available streamers over WAN links, then in our auto-leveling storage system where it manages the cluster state, and then in many other projects where it always plays some critical role.