Hi Paul,
Sorry for the late reply on this - things got delayed due to some travel. These are great questions!
> 1. Are there problems with an AP system that we haven't thought of?
> 2. Why are so many service discovery solutions CP? It seems this must have been a conscious choice for consul, since the underlying implementation (Serf) is AP.
The main driver for us going CP with Consul is that it's much easier to reason about during operations. There aren't as many dynamic behaviors that are possible as a change ripples across a cluster in an AP system, and the behavior in the face of failures is also easier to understand (what happens to the minority state when the AP system gets un-partitioned, for example). Adding Consul's KV store with coordination primitives like sessions and locks into the mix makes the AP solution much more challenging to implement, scale (how do you efficiently manage KV updates with thousands of nodes), and reason about. Raft is a distributed log that is serialized, sequential, and agreed upon - these are very convenient properties to rely on and simplify nearly everything else above it.
You are right that some services can deal with these issues on their own, but in general it makes them more complicated internally. Consul tries to hide these details and allow for zero-touch integration with almost anything via DNS, and other things with simple HTTP API calls, so it favors much lighter weight clients for the common case while exposing deeper functionality for clients who need it (locking for leader elections, etc.). In the extreme you could run something like Serf alongside Consul if you needed a truly AP system for a subset of your services, but that's relatively rare to do.
> 3. Are there workarounds (that don't involve writing a backup AP service discovery) that we haven't considered?
For your specific use case of scaling the cluster during an extended partition, you'd want to separate segments of your cluster that are susceptible to extended partitions into different Consul datacenters (running a set of Consul servers on each side of the link). This would give you the independence you need to manipulate each side during a partition, and the ability to query the other side as needed when things are working properly, because Consul will forward requests between the datacenters.
Hopefully this helps! If you think that you'd still need a separate AP backup system we'd be glad to discuss it here, or if you'd like to contact us with any concerns you can't share on the list feel free to send a note to
sup...@hashicorp.com.
-- James