Consul vs. SmartStack
Consul is a much simpler and more contained system as it does not rely on any external components. Consul uses an integrated gossip protocol to track all nodes and perform server discovery. This means that server addresses do not need to be hardcoded and updated fleet-wide on changes, unlike SmartStack.
For discovery, SmartStack clients must use HAProxy, requiring that Synapse be configured with all desired endpoints in advance. Consul clients instead use the DNS or HTTP APIs without any configuration needed in advance. Consul also provides a “tag” abstraction, allowing services to provide metadata such as versions, primary/secondary designations, or opaque labels that can be used for filtering. Clients can then request only the service providers which have matching tags.
Consul generally provides a much richer health checking system. Consul supports Nagios-style plugins, enabling a vast catalog of checks to be used. Consul allows for both service- and host-level checks. There is even a “dead man’s switch” check that allows applications to easily integrate custom health checks. Finally, all of this is integrated into a Health and Catalog system with APIs enabling operators to gain insight into the broader system.