分布式系统之CAP原则

什么是CAP原则?

分布式系统的基础理论,描述分布式系统在CAP三个特性中,最多满足其中两个,不能同时满足CAP。

C:一致性(Consistency)
A:可用性(Availability)
P:分区容错性(Partition tolerance)

分布式系统之CAP原则

特性 说明
一致性 分布式系统中的写操作之后的读操作,都应该读到写操作最新写入的值。也就是说要保证分布式系统各个节点每时每刻的数据一致性。(PS:有点类似volatile在JMM中的可见性)
可用性 客户端可以一直得到系统的正常响应,也就是一直可以用,一直可以正常读写操作
分区容错性 分区,部分出故障不影响整个系统,仍然对外满足A和C

如何理解AP和CP不能同时满足?

个人理解,有不当请指出。
假设系统有S1和S2两个节点,客户端1号去改S1的值,还没有写完,这时客户端2号去读S2的值,此时矛盾产生:

  1. 如果要满足一致性,这时就得让S2无法使用
  2. 如果要满足可用性,两个客户端读取到的值必然不一样,破坏了一致性

所以无法保证同时满足。

如何选择?

  • CP:放弃可用性,在数据一致性要求严格的场景下使用。一旦网络故障发生或者消息丢了,会牺牲用户体验,恢复了才能访问。
  • AP:放弃一致性,数据一致性要求不严格,用户体验好的场景下使用。并不是真的数据不一致,而是慢慢回复一致性。
  • AC:放弃容错就违背了分布式系统啊!不用。