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.