CAP 定理

2000年提出

CAP定理是一个分布式系统特性的高度抽象,总结了各个特性之间的冲突。CAP定理指出,在一个异步网络环境中,对于一个分布式读写存储系统,只能满足以下三项中的两项,而不可能同时满足三项:

  • 一致性 Consistency
    • 客户端访问任一节点,返回的都已同一份最新的数据。这里的一致性指线性一致性。
  • 可用性 Availability
    • 每次请求都能获取非错误的响应,但不保证获取的数据是最新数据。
  • 分区容错性 Partition Tolerance
    • 节点之间由于网络分区导致消息丢失的情况下,系统仍能正常运行。

CAP定理的意义在于,帮助软件工程师在设计分布式系统时,施加基本的限制,不必浪费时间去构建一个完美的系统。软件工程师应该意识到这些特性需要进行trade off取舍,选择适合自己的特性。

对于分布式系统来说,节点之间通过网络通信,网络分区故障是必然存在的,所以分区容错性是一个基本的要求。因此开发者通常将他们的系统分为两类:

  • AP,选择可用性和分区容错性
  • CP,选择一致性和分区容错性

CAP定理存在一些缺陷:

  • 网络分区很少发生,在系统没发生网络分区时,不应该牺牲一致性或可用性
  • 网络延迟是经常存在的,而CAP的经典解释忽略了网络延迟

PACELC 定理

2012年提出

PACELC定理指出,CAP定理忽略分布式系统中的网络延迟影响是一个重大疏忽,因为网络延迟一直存在,而网络分区不经常发生。

PACELC定理指出,分布式系统在网络分区P的情况下,必须在可用性A和分区容错性P之间做出选择;否则E,在没有网络分区的情况下,应该在延迟L和一致性C之间做出选择。

  • 第一部分还是PA/PC
  • 第二部分定义了新的类型:EL/EC

大部分系统往往属于PA/EL或PC/EC类型

  • PA/EL: Cassandra,MongoDB
  • PC/EC: MySQL cluster, BigTable/HBase

BASE 理论

1990末提出,提出者 Eric Brewer后来又提出了CAP定理

BASE是以下三个词的首字母

  • Basically Available 基本可用
  • Soft state 软状态
  • Eventually Consistent 最终一致

为了高可用,舍弃强一致,选择一致性更弱的最终一致性。最终一致性是指,客户端更新某个数据时,由于网络分区或延迟,导致数据没有立即同步到所有副本,系统中存在旧数据。

此时系统允许继续读写数据,但在某个最终时刻,系统保证这个更新操作一定会同步到所有副本。

提出者也指出,BASE理论好记但不够精确,BASE也确实没有像CAP那样被广泛使用。