cap理论不能同时都满足?

来源:2-15 详细探究CAP定理的三个指标

weixin_慕盖茨4049714

2022-07-18

老师,你好,cap理论不能同时都满足,一致性和可用性可能互斥好理解,那和分区容错性的互斥怎么理解呢?

写回答

1回答

大能老师

2022-07-18

CAP 理论告诉我们,一个分布式系统不可能同时满足一致性(C:Consistency),可用性(A: Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中的2个。

虽然我们知道有 CA、CP、AP 三种组合方式,但是在分布式系统的结构下,网络是不可能做到100%可靠的。既然网络不能保证绝对可靠,那 P(分区容错性)就是一个必选项了。所以通常分布式系统都是围绕AP,或者CP。

原因如下:如果选择 CA组合,放弃 P(分区容错性)。当发生节点间网络故障时,为了保证 C(一致性),那么就必须将系统锁住,不允许任何写入操作,否者就会出现节点之间数据不一致了。但是锁住了系统,就意味着当有写请求进来的时候,系统是不可用的,这一点又违背了 A(可用性)原则。因此分布式系统理论上是不可能有CA组合的,所以我们只能选择 CP 和 AP组合架构。

下面我们来详细看一下 CP架构 和 AP架构的特点:

CP 架构CP架构即 Consisteny(一致性)与 Partition tolerance(分区容错性)的组合。

//img.mukewang.com/szimg/62d4fb3a09717ec305900221.jpg

由于网络问题,节点A和节点B之前不能互相通讯。当有客户端(上图user1)向节点A进行写入请求时(准备写入value2),节点A会不接收写入操作,导致写入失败,这样就保证了节点A和节点B的数据一致性,即保证了Consisteny(一致性)。然后,如果有另一个客户端(上图另一个user2)向B节点进行读请求的时候,B请求返回的是网络故障之前所保存的信息(value1),并且这个信息是与节点A一致的,是整个系统最后一次成功写入的信息,是能正常提供服务的,即保证了Partition tolerance(分区容错性)。上述情况就是保障了CP架构,但放弃了Availability(可用性,写入不可用)的方案

AP 架构

AP架构即 Availability(可用性)与 Partition tolerance(分区容错性)的组合架构。

//img.mukewang.com/szimg/62d4fb4809a4c0a305900221.jpg

如上图,由于网络问题,节点A和节点B之前不能互相通讯。当有客户端(上图user1)向节点A进行写入请求时(准备写入value2),节点A允许写入,请求操作成功。但此时,由于A和B节点之前无法通讯,所以B节点的数据还是旧的(value1)。当有客户端向B节点发起读请求时候,读到的数据是旧数据,与在A节点读到的数据不一致。但由于系统能照常提供服务,所以满足了Availability(可用性)要求。因此,这种情况下,就是保障了AP架构,但其放弃了 Consisteny(一致性)。

总结

对于开发者而言,当我们构建服务的时候,就需要根据业务特性作出权衡考虑,哪些点是当前系统可以取舍的,哪些是应该重点保障的。即使我们按照CAP定理,三个中只能取其二,但不代表我们只需要保障其中的两点。实际上,生产有时候我们不会只选择强一致,放弃可以性。或者只选择高可用性,放弃一致性。更多会结合base理论去权限,是需要更多可用,还是更多一致,需要根据具体业务场景分析。


2
1
weixin_慕盖茨4049714
非常感谢!
2022-07-22
共1条回复

Java分布式架构设计与开发实战

项目贯穿式讲解,真正将理论与实战相结合

325 学习 · 74 问题

查看课程