The CAP FAQ
github.com
github.com
When solving for high Availability through a distributed cluster, you might give up immediate Consistency. But partitions can end up giving different answers (authoritatively, even) and an unavailable master record doesn't mean something won't answer as if it _were_ authoritative.
A single node DB - like a MySQL server - still has failure points, but none that plague CAP systems (well, except Availability, but that's how we got into this mess to begin with).
So I wonder: how did you did it before then?
1. The notion of "high availability" wasn't used much before "web scale" applications.
2. As others have said, the CAP theorem is kind of tautological and does more to confuse about what's possible than to clarify. For example, the CAP theorem implies that even eventual consistency is impossible in the case of partitions. If partitions can be of infinite length then no kind of consistency is possible; if partitions are finite, then all kinds of consistency are possible (with "availability" meaning very high latency, though). In short, the CAP theorem itself doesn't contribute much information to the analysis of distribution problems.
I recommend reading this nice overview of the issues with CAP: http://arxiv.org/abs/1509.05393
Now, people build distributed systems and assume they don't have failure modes AND THEN post about how they've "refuted the CAP theorem". :)
Later as the bug reports come tumbling in you realise there were failure scenarios that you weren't aware of, usually because you were relying on something that you cant actually rely on.
The fact that this is formalised is great because it means people who don't talk about when their systems don't work aren't giving you the whole picture.
Unfortunately and inevitably things are a bit more complicated than a model simplified to 3 words so it has also generated its fair share of confusion.
Anyway being able to use CAP to beat down the developer who wants to use the new webscale shiny that doesn't even begin to discuss or document tradeoffs is a net win in my opinion.
It's a concept that could be much more rapidly explained in an intuitive way with a few interactive diagrams, or honestly a few animated gifs, though.
The CAP theorem is one of those things that's a simple idea, but I didn't understand it the first few times I ran across it just because:
1) the terminology is weird ("partition", huh... well, I know how to partition a disk, but this clearly isn't that)
2) broad concepts need good examples for newcomers -- to bridge the gap from familiar to unfamiliar. If you've worked with large scale distributed processing before, great, but these ideas are especially crucial for people who are going to need such systems but don't yet understand the tradeoffs.
Some systems tolerate that a database (for example) is unavailable for a couple of seconds. Some don't.
When you add a value into a distributed database, how much time are you ready to wait for replicas to propagate? In some cases it's fine to wait several minutes (think DNS) in some other it can have catastrophic results (think finance/banking use cases).