CAP理论的个人理解

CAP理论指出在分布式系统中只能保证一致性、可用性和分区容忍性中的两者。本文通过实例解释了当选择分区容忍性时,如何在一致性和可用性之间做出抉择。在正常情况下,保持数据一致性与可用性是可能的,但当发生服务端故障或网络分区,必须决定是牺牲一致性以保证可用性(返回旧数据),还是牺牲可用性以维护一致性(拒绝服务直到数据同步)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CAP理论的理解

        假设现在有一个客户端,两个服务端A,B,它们共同构成一个系统。
        这时有一个变量,存在A机器上。那么由于只有一份数据,所以一致性是可以保证的,只要机器A不坏(默认情况),那么可用性也是可以保证的。这个时候等于选择了CAP中的一致性和可用性,放弃了分区容忍性,即不容忍分区,即不对这个变量在不同机器上做多个副本。
        但是存在一种情况,服务端A坏了,只有一份的这个变量没了,系统直接崩了。我们肯定不愿意看见这个情况,为了解决这种情况,我们自然而然地想到把这个变量做副本,分别存在A和B两台机器上,这样不就更可靠了吗。在我们产生这个想法的时候,我们实际上进行了数据分区,也就是潜意识里选择了分区容忍性。这个时候客户端的请求经过负载均衡既可能到A,也可能到B。看起来好像很不错。但是这个时候,A和B之间网线断了,导致客户端对A中这个变量的写操作无法更新到B里去,这个时候客户端又访问了B,但是这个时候B中的这个变量是旧的啊,那么这就需要你做一个选择,是把B中这个旧值返回还是不返回。如果返回,那么恭喜你,系统可用性得到了保障,但用户拿到了旧数据,等于说放弃了一致性。如果不返回,这个时候放弃了可用性,但是用户不会拿到旧数据,等于说选择了一致性。
        这就是本人的理解了,但是感觉在学这个概念的过程中,有很多地方把P翻译成分区容错性,让我走了很多弯路。相比之下,分区容忍性就说得更精确一些。分区容忍性简单说就是一个变量是否在多台机器上存储多分拷贝,在我们有多台机器的情况下,肯定放多个拷贝我们的系统才会更可靠。所以这也就是为什么那么多博客说一般情况下,我们会选择分区容忍性P,而在可靠性和一致性之间做一个选择。其实就是选择当不同拷贝由于网络故障不能更新为最新值的时候,你是否愿意把旧的数据返回给用户。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值