• Can not be achieved in the same time
    • Consistency
    • Availability
    • Partition tolerance

image.png

Partition Tolerance

the system continues to operate despite arbitrary message loss or failure of part of the system

Can not be avoided.

Consistency

all nodes see the same data at the same time

  • 客户端
    • 从客户端来看,一致性主要指的是多并发访问时更新过的数据如何获取的问题。
  • 服务端
    • 从服务端来看,则是更新如何分布到整个系统,以保证数据最终一致。
  • 强一致性
    • 对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。
  • 弱一致性
    • 如果能容忍后续的部分或者全部访问不到,则是弱一致性。
  • 最终一致性 (Eventual Consistency)
    • 如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。

Availability

Reads and writes always succeed


  • CA without P:如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但其实分区不是你想不想的问题,而是始终会存在,因此CA的系统更多的是允许分区后各子系统依然保持CA。
  • CP without A:如果不要求A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。
  • AP wihtout C:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。