分布式基础理论 CAP & BASE

CAP和BASE理论可以说是分布式系统的基础理论了,只要面试的时候遇到分布式的问题,基本上都会问到这两个理论。但是好多没毕业的同学,或者参加工作时间不长的同学,可能没有在实际开发中接触过分布式系统,这种情况我的建议是多看优质博客,自己多思考,然后找一些开源的项目看一下理论的实际运用。当然有相关经验的同学也可以复习巩固一下。

一、CAP定理

CAP定理又被称为布鲁尔定理,是加州大学计算机科学家埃里克·布鲁尔提出来的猜想,后来被证明成为分布式计算领域公认的定理。不过布鲁尔在出来CAP的时候并没有对CAP三者(Consistency,Availability,Partition tolerance)进行详细的定义,所以在网上也出现了不少对CAP不同解读的声音。

CAP定理在发展中经历过两个版本,后一个版本比较完善,我们以第二个版本为准:在一个分布式系统中(指互相连接并共享数据的节点集合)中,当涉及到读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。

其中的关系如下图所示:

 

一致性(Consistence) , 这个是针对数据来说的,比如数据库MySQL中的数据,一个分布式系统中,某个节点修改了一个数据,那么之后其他所有节点读取这条数据的时候,得到的一定是最新的数据。

可用性(Availability),分布式系统中某些节点挂掉了,但是不会影响整体的业务,比如 C 这个微服务,有10个实例组成一个集群,其中5个挂了,另外5个正常,这种情况下整个系统还是可用的,不会因为挂了那5个,导致系统整体不可用。

分区容错性(Partition Tolerance),分布式系统出现网络分区的时候,仍然能够对外提供服务。

只能三选二?

我在网上看了一些博客,有些说这三个特性只能三选二,不可能同时满足。这其实是一个具有误导性质的说法。

因为在分布式系统中,网络不是100%可靠的,网络分区是必选项,也就是P是必选的,如果我们不选P,选CA,这个时候如果网络发生了分区,那么为了保证C,系统就会禁止写入数据,这样就与A产生了冲突,如果为了保证A,那么正常的分区可以写入数据,有故障的分区就不能写入了,这就与C产生了冲突。

简单来说,就是P是必须要实现的,因为网络不是100%可靠的,在此基础上C 和 A 二选一组成 CP 或者 AP 架构。

比如Zookeeper 是CP架构,Eureka是AP架构,Nacos 不仅支持 CP 架构也支持 AP 架构。

对于服务注册来说,针对同一个服务,即使注册中心的不同节点保存的服务注册信息不相同,也并不会造成灾难性的后果,对于服务消费者来说,能消费才是最重要的,就算拿到的数据不是最新的数据,消费者本身也可以进行尝试失败重试。总比为了追求数据的一致性而获取不到实例信息整个服务不可用要好。

所以,对于服务注册来说,可用性比数据一致性更加的重要,选择AP。

二、BASE理论

BASE理论是对CAP的一致性和可用性权衡的一种解决思路,包含三个思想:

Basically Available (基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。
Soft State (软状态):在一定时间内,允许出现数据临时不一致的中间状态。数据同步允许一定的延迟。
Eventually Consistent (最终一致性):虽然无法保证数据强一致性,但是在软状态结束后,最终达到数据一致。

分布式事务最大的问题是各个子事务的一致性问题,因此可以借鉴CAP定理和BASE理论:

    •CP模式:各个子事务执行后互相等待,同时提交,同时回滚,达成强一致 

    •AP模式:各个子事务分别执行和提交,允许出现数据临时不一致,然后采取弥补措施恢复数据          即可,实现最终一致

在分布式架构中,是无法脱离CAP理论的,因为网络永远不能100%可靠,硬件也会老化,软件可能出现BUG,所以分区容错性(Partition Tolerance)是避不开的,只要是分布式,只要是集群,都面临着选AP或者CP,如果你都想要,那只能对一致性做出一些妥协,也就是引入BASE理论,在业务允许的情况下实现最终一致性。

究竟是选择AP还是CP,在于业务,比如涉及到金钱交易,库存相关的会优先考虑CP模型,而例如社区发帖,评论这种相关的可以选择AP模型。总之选什么模型是由业务来决定的。

  • 48
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值