In a blog post last weekI discussed how the CAP theorem prevented enterprise databases from taking advantage of the elasticity benefits of the Cloud. The problem: because the Cloud is inherently partition tolerant and available, it can’t guarantee immediate data consistency.
The reason the CAP theorem is a problem for enterprise databases, of course, is that they do guarantee immediate consistency. In fact, consistency is the “C” in ACID: atomic, consistent, isolated, and durable. ACID is the gold standard for transactionality in highly available enterprise databases, what you get from two-phase commits. As a result, such databases are inherently partition intolerant.
If you can’t have ACID in the Cloud, then what can you have? You can have BASE: Basic Availability, Soft State, and Eventual Consistency. We’ve moved from ACID to BASE, thus raising our pH, get it? (Groan goes here).
The CAP theorem post explained two of these characteristics. Basic availability means that individual nodes can fail and the overall application will keep working. Eventual consistency means that data may be inconsistent for a short amount of time. But what about soft state?
Soft state means that state information may grow stale, and thus applications must refresh it periodically, or assume it has expired. A great example of soft state are instant messaging (IM) buddy lists. If you look at your IM client, you’ll see smiley faces or some other indicator that a buddy is available. But if their phone crashes or otherwise suddenly drops out of communication, it is unable to send a “no longer available” message to you. As a result, it appears to you that your buddy is available even though they aren’t. Fortunately, your IM client knows this situation can happen, so it will eventually time out buddy status information after a fixed amount of time without an update.
If you’re uncomfortable dropping ACID in favor of BASE (I know, another groaner), then remember that BASE behavior has been around for years, long before we started talking about the Cloud. In fact, any horizontally scalable application can at best comply with BASE–including any Web-based application in existence.