C:Consistency(一致性)A:Availability(可用性)P:Partition tolerance(分区容忍性)
CAP理论是指在分布式系统设计中,没有一种设计可以同时满足Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性)3个特性,这三者不可得兼。
一致性(C)
在分布式系统中,对于不同客户端的每次读操作,要么读到的是最新的数据,要么读取失败,保证在同一时刻读到的值都是一样的,通俗的讲就是要么返回一个错误,要么返回绝对一致的最新数据,其强调的是数据正确。
可用性(A)
要求服务在接受到客户端的请求后,都能够给出响应,服务可用性考量的是系统的可用性,要求系统在高并发和部分节点宕机的情况下,系统整体依然能够响应客户端的请求。通俗的讲我一定会给出响应,不会给你返回错误,但不保证数据是最新的,强调的是不出错。
分区容忍性(P)
对于一个分布式系统而言,首先要满足分区容忍性,因为只要有网络交互就一定会有延迟和数据丢失,这种情况不可避免,必须保证系统不能挂掉,否则分布式系统的扩展将会受到限制,即服务节点的部署数量和地区将会受限,违背了分布式系统设计的初衷。
举例:
假设有一个非常简单的分布式系统,它只有两台机器A和B,并且发生了网络分区,即A和B之间不能互相通信。
此时,客户端向A发起了一个写请求,并且收到了成功的响应。接着客户端又对B发起了一次读请求,因为B没有收到来自A的同步信息,所以B只有两种选择:要么返回自身已知但已过时的信息,这就违背了一致性;要么不做出响应,这就违背了可用性。
总结:
CAP理论是在设计分布式系统的过程中,处理数据一致性问题时必须考虑的理论。
在分布式系统中,P是前提,本质上是对C、A的选择,可根据实际情况进行权衡。