CAP理论是指导我们在涉及分布式系统时进行取舍的设计原则,它影响着分布式系统的设计与发展,也是我们在学习分布式系统时必须要掌握的知识。
什么是CAP理论?
CAP理论是Eric Brewer教授在2000年7月的ACM PODC会议上首次提出的一个猜想:
It is impossible for a web service to provide the three following guarantees : Consistency, Availability and Partition-tolerance.
2年之后,来自麻省理工学院的Seth Gilber和Nancy Lynch从理论上证明了Eric Brewer的CAP猜想是成立的,这样CAP理论在学术上正式成为了分布式领域公认的定理,并深刻影响着分布式系统的发展。
CAP告诉我们:一个分布式系统不可能同时满足数据一致性、服务可用性和分区容错性这三个基本要求,最多只能同时满足其中的两个。
一致性(C)
CAP理论中的一致性是指强一致性,又叫线性一致性,它要求多节点组成的分布式系统,能像单节点一样运作,如果一个写操作返回成功,那么之后读请求都必须读到这个新数据;如果返回失败,那么所有的读者都不能读到这个数据。
一致性除了强一致性之外,还和其他的一致性级别,例如序列一致性和最终一致性。
可用性(A)
CAP理论对可用性指的是要求系统提供的服务必须处于100%可用的状态,对于用户的每一次请求,系统总能够在有限的时间内返回结果。
- 100%可用,它指系统完全可用,不允许任何不可用的情况。
- 在有限时间内,它指的是对于客户端的一个请求,系统必须在指定的时间内返回对应的请求结果,如果超过这个时间,系统就被认为是不可用的。
- 系统在完成对客户端请求的处理之后,必须返回一个正常的响应结果。
分区容错性(P)
分区指的是在整个分布式系统中,因为各种网络原因,系统被分隔成多个单独的部分,它不仅包含我们通常说的网络分区,也包含因为网络丢包导致的网络不通的情况。
在现实的分布式系统中,我们面对的就是一个不可靠的网络和有一定概率宕机的设备,因此在分布式系统实现中,分区容错星(P)是一个必须项,不是可选项。
从分布式系统工程实践来说,CAP理论更适合的描述:在满足分区容错性的前提下,没有算法能同时满足数据一致性和服务可用性。
CAP理论重新思考和理解
CAP 理论通过一个简单但是精确定义的模型,论证了在一个满足分区容错的分布式系统中,当我们进行系统设计时,只能在数据一致性和服务可用性之间二选一。
对可用性的重新思考
我们对服务的可用性(A)进行分析,你会发现在我们的日常工作中,几乎没有见过 100% 可用的服务。可用性指标是在 0 到 100% 之间连续分布的,其实一个 100% 可用性的服务和一个99.9999%可用性的服务之间并没有多大的差别,如果我们的服务能实现 99.9999% 的可用性,哪怕它不符合 CAP 理论的可用性,也是符合我们工作中对可用性的要求的。
对一致性的重新思考
在数据一致性方面,虽然我们无法实现强一致性,但是我们也不要全部放弃,可以努力去实现更高的一致性级别,为系统的服务提供更好的抽象。
如果出现网络分区了,我们可以根据系统情况,有选择并且精心设计地降低系统的一致性级别。
对分区容错性的重新思考
在分布式系统中,节点之间必须通过网络来通信,可是网络可能会丢包和中断,节点也可能会宕机,这样的情况就要求我们在系统设计的时候,必须做好系统的分区容错处理。
CAP 理论给我们定义了系统的设计边界,虽然想要设计出超过边界的系统是徒劳的,但是我们却可以无限逼近边界,并且把它作为我们设计系统的目标。
对于 CAP 理论,我们不会简单地三选二或者二选一。对于 AP 模型的系统,我们会努力去提升数据一致性的级别,而对于 CP 模型的系统,我们会努力去提升系统可用性的级别。
此文章为极客时间4月份Day03学习笔记,内容来自《深入浅出分布式技术原理》课程。