CAP定理指出,分布式系统只能提供三个期望特性中的两个:一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)(CAP)。
让我们详细了解CAP定理所指的三个分布式系统特性。
一致性
一致性意味着所有客户端同时看到相同的数据,无论它们连接到哪个节点。要做到这一点,每当数据写入一个节点时,必须立即在系统中的所有节点之间转发或复制数据,然后写入才被视为“成功”。
可用性
可用性意味着任何请求数据的客户端都会得到响应,即使一个或多个节点停机。
分区容错性
分区容错性意味着即使消息丢失或部分故障,系统仍能继续工作。分区容错的系统可以承受任何数量的网络故障,而不会导致整个网络故障。数据在节点和网络的组合中充分复制,以使系统在间歇性停机期间保持正常运行。
一致性和可用性权衡
我们生活在一个物理世界中,无法保证网络的稳定性,因此分布式数据库必须选择分区容错性(P)。这意味着要在一致性(C)和可用性(a)之间进行权衡。
CA 数据库
CA数据库跨所有节点提供一致性和可用性。如果系统中的任何两个节点之间存在分区,它就无法做到这一点,因此无法提供容错。
例子:PostgreSQL, MariaDB。
CP 数据库
CP数据库以牺牲可用性为代价提供一致性和分区容错性。当任何两个节点之间出现分区时,系统必须关闭不一致的节点,直到该分区的问题被解决。
例子:MongoDB,Apache HBase。
AP 数据库
AP 数据库以牺牲一致性为代价提供可用性和分区容错性。当分区发生故障时,所有节点都保持可用,但位于分区错误端的节点可能会返回比其他节点旧的数据版本。解决分区故障后,AP 数据库通常会重新同步节点,以修复系统中的不一致问题。