# CAP学习

# CAP理论

CAP定理第一版(outdated) (opens new window)

CAP定理第二版 (opens new window)

CAP定义:分布式系统中涉及读写操作时,只能保证 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容忍性)三者中的两个,不可能同时满足三者。

第二版更加严谨的阐述了CAP定理,但第一版更加简单,更容易让人记住:

在分布式计算系统中,不可能同时满足CAP三个设计约束。


分布式系统是指有数据共享的节点集合,为什么要如此定义呢,例如Memcached是分布式缓存系统,但每个节点是独立的,不存在数据共享,也就不适用CAP定理。

涉及读写操作限制了CAP系统的操作仅限于读写,而不是其他的所有功能。如果只有读操作,那没有一致性问题,所以AP也能满足,即不存在CAP问题;例如zk的选举机制,同样不适用于CAP定理。

# Consistency(一致性)

对某个指定客户端,读操作保证能够返回最新的写操作结果。

# Availability(可用性)

非故障节点在合理的时间内返回合理的响应。

# Partition Tolerance(分区容忍性)

出现消息丢失或者分区错误时,系统能正常运行。

分区错误的现象包括很多原因:丢包、网络连接中断、网络堵塞等。

# 为什么CAP只能满足两者?

如果三者同时满足,意味着发生分区现象时,要满足CA,但CA又是冲突的,故无法同时满足。

# 为什么通常都是CP或AP,没有CA?

首先,分布式系统中,不能保证网络100%可靠,所有分区是一个必然现象。

然后,在分布式系统中,分区后,C要求读取一致,那系统整体便不支持写(会导致分区数据不一致),此时又无法满足A,CA是冲突的。

# CP

当发生分区现象时,若要保证C,则多个分区只能由一个提供读写服务,其余分区无法提供服务,故不满足A。

# AP

当发生分区现象时,若要保证A,让多个分区都能正常提供服务,由于不同分区进行读写操作后,数据无法同步,故不同分区读取的数据无法保证一致,也就无法满足C。

返回的数据不一致,并不代表失去了可用性。例如A分区进行过写操作,B分区仍然是旧数据,但旧数据依然是合理的数据,不是错误的数据。

# CAP应用

分析现如今常见分布式系统,都是如何适配CAP定理。

# zookeeper是满足CAP中哪两个?

修改于: 8/11/2022, 3:17:56 PM