0%

CAP理论

CAP理论

转载 John_nok , CAP理论的理解

CAP理论作为分布式系统的基础理论,它描述的是一个分布式系统在以下三个特性中:

  1. 一致性(Consistency)
  2. 可用性(Availability)
  3. 分区容错性(Partition tolerance)

最多同时其中的两个特性.

一致性: 在分布式系统完成某写操作后任何读操作,都应该获取到该写操作写入的那个最新的值。相当于要求分布式系统中的各节点时时刻刻保持数据的一致性。

可用性: 一直可以正常的做读写操作。简单而言就是客户端一直可以正常访问并得到系统的正常响应。用户角度来看就是不会出现系统操作失败或者访问超时等问题。

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

事实上我们在设计分布式系统是都会考虑到bug,硬件,网络等各种原因造成的故障,所以即使部分节点或者网络出现故障,我们要求整个系统还是要继续使用的(不继续使用,相当于只有一个分区,那么也就没有后续的一致性和可用性了)。

CAP理论的分析

如果先保证了分区容错性,也意味某个节点出现故障,用户还是可以继续访问,设存在两个节点G1和G2,初始值均为v0,此时:

  1. G1写入v1后,client读取G2节点,但G1与G2失去连接,G1数据未同步到G2,则出现不一致性情况
  2. 同上,但client读取G2节点时,由于未同步到数据,此时一直等待,则出现不可用性.

CAP的取舍

  1. CA: 保证一致性和可用性,但这意味放弃系统扩展,系统不再是分布式.
  2. CP: 优先保证一致性和分区容错性,放弃可用性。在数据一致性要求比较高的场合(譬如:zookeeper,Hbase) 是比较常见的做法,一旦发生网络故障或者消息丢失,就会牺牲用户体验,等恢复之后用户才逐渐能访问。
  3. 优先保证可用性和分区容错性,放弃一致性。NoSQL中的Cassandra 就是这种架构。跟CP一样,放弃一致性不是说一致性就不保证了,而是逐渐的变得一致。
您的支持是对我最大的动力 (●'◡'●)