CAP理论的学习和理解

目录

文章目录

前言

一、CAP理论是什么?

二、什么是一致性、可用性和分区容错性?

1.一致性

2.可用性

3.分区可容错性

三、理解CAP

总结


前言

CAP理论的学习和理解,共同探讨

一、CAP理论是什么?

CAP理论是分布式系统的一个基础理论,指出了任何分布式系统最多可以拥有两个以下三个属性:

  • Consistency 一致性
  • Availability 可用性
  • Partition tolerance 分区容错性

                                                     CAP理论的学习和理解_第1张图片

如上图所示:任何一个分布式系统最多可以拥有CA/CP/AP任意组合两种属性,不能同时满足三种属性

二、什么是一致性、可用性和分区容错性?

1.一致性

在分布式系统完成某写操作后任何读操作,都应该获取到最新写入的值。就是说分布式系统中的各节点的数据要保持一致性。

2.可用性

 简单来说就是系统可以一直进行正常的访问和读写数据。用户角度来看就是不会出现系统操作失败或者访问超时等问题。

3.分区可容错性

 指的分布式系统中的某个节点或者网络分区出现了故障的时候,整个系统仍然能对外提供满足一致性或可用性的服务。也就是说部分故障不影响整体使用。

应用中我们在设计分布式系统是都会考虑到bug,硬件,网络等各种原因造成的故障,所以即使部分节点或者网络出现故障,我们要求整个系统还是要继续使用的

(不继续使用,相当于只有一个分区,那么也就没有后续的一致性和可用性了)

三、理解CAP

如果我们事先保证了分区容错性,也意味着若某个节点故障了,用户还是可以继续访问。这时用户在访问过程中就会出现一致性和可用性不能同时满足的情况,参考下图:

CAP理论的学习和理解_第2张图片CAP理论的学习和理解_第3张图片

 

如图假设分布式系统有G1,G2两个节点,初始值都是v0。现在有一个client向系统写入了值v1,这里假设直接写的是节点G1。写完之后client再去读取这个值,这时读到了G2节点,

由于G2节点与G1节点失去连接,这时G1节点上的数据还未同步到G2节点,因此客户端读取到的是修改之前的值v0。 这就出现了不满足一致性的情况了。相当于满足了可用性,失去了一致性

 

类似的,如果系统保证了强的一致性,那么在client 写完G1节点后, 而G1向G2节点同步数据出现了问题,这时如果client再去读取G2节点的数据时,client就会一直处于等待状态,因为系统内各节点

数据为同步上,需要等同步上才能使用。这就相当于满足了一致性,而失去了可用性

CAP理论的学习和理解_第4张图片

 

 

考虑多个客户端访问时,一致性和可用性还可以这么理解:假如client1 向G1 修改某个值的时候, 写操作还未完成,client2就发起来对该值的读操作,读的是G2节点,这时如果要满足一致性,

那么就得让client2 暂时无法使用,如果要让client2 使用,那么获取到的数据不是最新的,系统就不满足一致性。

总结

CAP三者不可兼得,该如何取舍:

(1) CA: 优先保证一致性和可用性,放弃分区容错。 这也意味着放弃系统的扩展性,系统不再是分布式的,有违设计的初衷。

(2) CP: 优先保证一致性和分区容错性,放弃可用性。在数据一致性要求比较高的场合(譬如:zookeeper,Hbase) 是比较常见的做法,一旦发生网络故障或者消息丢失,就会牺牲用户体验,等恢复之后用户才逐渐能访问。

(3) AP: 优先保证可用性和分区容错性,放弃一致性。NoSQL中的Cassandra 就是这种架构。跟CP一样,放弃一致性不是说一致性就不保证了,而是逐渐的变得一致。

你可能感兴趣的:(分布式,java)