关于CAP定理的疑惑

关于CAP定理的疑惑

CAP中,C和A二选一,这个定理是对于整个系统的还是对于子系统的?

比如银行转账有两个情况,课程里面也提到了这两种,但是没有做区分细讲

1、晚到1天没有关系,所以对于整个银行系统而言应该需要保证可用性,比如建行转工商,不能说还没同步到账,就不能查工商账户余额,它必须随时可查,但是返回的可能是还没到账的旧值。

2、对于建行本身,在各个节点的余额都应该保持一致,不能是G1刚扣除余额,扣光了,发起了转账,G2还没同步,就从G2又发起了全部转账,前后转了两笔,这肯定是不允许的,每个节点的余额应当保持一致。


综上所述,

每个银行都有自己的系统,那么对于转账而言,是不是分为了两个极小的子系统(甚至都不能叫系统?),一个用于发起转账的子系统G1,一个用于收到转账、提供查询等功能的子系统G2。对于G1而言,应该选择CP,而对于G2而言,应该选择AP。


所以,CAP定理是对于子系统而言的,对吗?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,这里跨行转账不能简单的用CAP定理来解释。

这里可用性是指,在系统中一部分节点故障后,系统还能响应客户端的读写请求。

并不是同学理解的没有到账,还能查询余额就是可用性。

祝:学习愉快~

  • 易萧 提问者 #1
    哦哦,意思就是,如果要保持一致性的话,某个节点发起修改后,一旦有个节点没有响应,就无法层层返回响应,所以保证不了可用性,是这样吗? 但是这不是像那个分区容错吗?
    2020-10-23 20:34:20
  • 好帮手慕阿满 回复 提问者 易萧 #2
    同学你好,同学的理解是正确的。 通常是在发生通信失败(也就是即出现分区容错),会在一致性和可用性两者之间做一个选择。如果保证一致性,可用性就不能保证。如果保证一致性,可能查询到不一致的数据。 祝:学习愉快~
    2020-10-24 10:15:30
好帮手慕阿满 2020-10-23 11:14:04

同学你好,CAP定理是对于分布式系统整体而言的,不是对子系统而言。

在转账业务中,建行和工商是两个不同的业务系统,业务上隔离,并且没有共享的数据,不能简单的用CAP定理来解释。

银行操作通常是保证一致性。比如说建行转账,你发起了转账操作,然后扣款成功。不可能说你转出成功(不管转出是否到账)再查询发现余额没变。


  • 提问者 易萧 #1
    保证一致性?那同样对于建行的系统而言,如果向其它银行发起转账,那肯定是保证一致性,但如果是其它银行向建行发起转账,但是还没到账,这时候建行难道就不准查余额了吗?这难道不是查的到账之前的余额,保证可用性吗?
    2020-10-23 15:57:33
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师