mirror of https://github.com/hashicorp/consul
parent
71f69f7419
commit
63e9369405
@ -0,0 +1,39 @@
|
||||
---
|
||||
layout: "intro"
|
||||
page_title: "Consul vs. SkyDNS"
|
||||
sidebar_current: "vs-other-skydns"
|
||||
---
|
||||
|
||||
# Consul vs. SkyDNS
|
||||
|
||||
SkyDNS is a relatively new tool designed to solve service discovery.
|
||||
It uses multiple central servers that are strongly consistent and
|
||||
fault tolerant. Nodes register services using an HTTP API, and
|
||||
queries can be made over HTTP or DNS to perform discovery.
|
||||
|
||||
Consul is very similar, but provides a super-set of features. Consul
|
||||
also relies on multiple central servers to provide strong consistency
|
||||
and fault tolerance. Nodes can use an HTTP API or use an agent to
|
||||
register services, and queries are made over HTTP or DNS.
|
||||
|
||||
However, the systems differ in many ways. Consul provides a much richer
|
||||
health checking framework, with support for arbitrary checks and
|
||||
a highly scalable failure detection scheme. SkyDNS relies on naive
|
||||
heartbeating and TTLs, which have known scalability issues. Additionally,
|
||||
the heartbeat only provides a limited liveness check.
|
||||
|
||||
Multiple datacenters can be supported by using "regions" in SkyDNS,
|
||||
however the data is managed and queried from a single cluster. If servers
|
||||
are split between datacenters the replication protocol will suffer from
|
||||
very long commit times. If all the SkyDNS servers are in a central datacenter, then
|
||||
connectivity issues can cause entire datacenters to lose availability.
|
||||
Additionally, even without a connectivity issue, query performance will
|
||||
suffer as requests must always be performed in a remote datacenter.
|
||||
|
||||
Consul supports multiple datacenters out of the box, and it purposely
|
||||
scopes the managed data to be per-datacenter. This means each datacenter
|
||||
runs an independent cluster of servers. Requests are forwarded to remote
|
||||
datacenters if necessary. This means requests for services within a datacenter
|
||||
never go over the WAN, and connectivity issues between datacenters do not
|
||||
affect availability within a datacenter.
|
||||
|
@ -0,0 +1,57 @@
|
||||
---
|
||||
layout: "intro"
|
||||
page_title: "Consul vs. SmartStack"
|
||||
sidebar_current: "vs-other-smartstack"
|
||||
---
|
||||
|
||||
# Consul vs. SmartStack
|
||||
|
||||
SmartStack is another tool which tackles the service discovery problem.
|
||||
It has a rather unique architecture, and has 4 major components: ZooKeeper,
|
||||
HAProxy, Synapse, and Nerve. The ZooKeeper servers are responsible for storing cluster
|
||||
state in a consistent and fault tolerant manner. Each node in the SmartStack
|
||||
cluster then runs both Nerves and Synapses. The Nerve is responsible for running
|
||||
health checks against a service, and registering with the ZooKeeper servers.
|
||||
Synapse queries ZooKeeper for service providers and dynamically configures
|
||||
HAProxy. Finally, clients speak to HAProxy, which does health checking and
|
||||
load balancing across service providers.
|
||||
|
||||
Consul is a much simpler and more contained system, as it does not rely on any external
|
||||
components. Consul uses an integrated [gossip protocol](/docs/internals/gossip.html)
|
||||
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.
|
||||
|
||||
Service registration for both Consul and Nerves can be done with a configuration file,
|
||||
but Consul also supports an API to dynamically change the services and checks that are in use.
|
||||
|
||||
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.
|
||||
|
||||
The systems also differ in how they manage health checking.
|
||||
Nerve's performs local health checks in a manner similar to Consul agents.
|
||||
However, Consul maintains seperate catalog and health systems, which allow
|
||||
operators to see which nodes are in each service pool, as well as providing
|
||||
insight into failing checks. Nerve simply deregisters nodes on failed checks,
|
||||
providing limited operator insight. Synapse also configures HAProxy to perform
|
||||
additional health checks. This causes all potential service clients to check for
|
||||
liveness. With large fleets, this N-to-N style health checking may be prohibitively
|
||||
expensive.
|
||||
|
||||
Consul generally provides a much richer health checking system. Consul supports
|
||||
Nagios style plugins, enabling a vast catalog of checks to be used. It also
|
||||
allows for service and host-level checks. There is also a "dead man's switch"
|
||||
check that allows applications to easily integrate custom health checks. All of this
|
||||
is also integrated into a Health and Catalog system with APIs enabling operator
|
||||
to gain insight into the broader system.
|
||||
|
||||
In addition to the service discovery and health checking, Consul also provides
|
||||
an integrated key/value store for configuration and multi-datacenter support.
|
||||
While it may be possible to configure SmartStack for multiple datacenters,
|
||||
the central ZooKeeper cluster would be a serious impediment to a fault tolerant
|
||||
deployment.
|
||||
|
Loading…
Reference in new issue