In the decade since its introduction, designers and researchers have used (and
sometimes abused) the CAP theorem as a reason to explore a wide variety of novel
distributed systems. The NoSQL movement also has applied it as an argument
against traditional databases.
The “2 of 3” formulation was always misleading because it tended to oversimplify
the tensions among properties.
CAP prohibits only a tiny part of the design space: perfect availability and consistency in the presence of partitions, which are rare.
Although designers still need to choose between consistency and availability
when partitions are present, there is an incredible range of flexibility for
handling partitions and recovering from them.
The modern CAP goal should be to maximize combinations of consistency and
availability that make sense for the specific application.
Such an approach incorporates plans for operation during a partition and for
recovery afterward, thus helping designers think about CAP beyond its
historically perceived limitations.