基础-CAP理论

CAP定理指出在分布式系统中,一致性、可用性和分区容错性不能同时保证。由于网络分区不可避免,系统通常需要在CP和AP之间选择。当追求一致性时,分区可能导致部分节点无法提供服务,牺牲了可用性;而侧重可用性时,可能在分区情况下返回旧数据,牺牲了一致性。理解CAP对于构建高可用和高一致性的分布式系统至关重要。
摘要由CSDN通过智能技术生成

1. 介绍

1.1 定义

CAP 定理(CAP theorem)又被称作布鲁尔定理(Brewer's theorem),是加州大学伯克利分校的计算机科学家--埃里克·布鲁尔(Eric Brewer),在 2000 年的 ACM PODC 上提出的一个猜 想。2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch) 发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。

CAP 定理,指的是在一个分布式系统(指互相连接并共享数据节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲,如图 4-6 所示。

1.2 含义

  • 一致性(Consistency), 对某个指定的客户端来说,读操作保证能够返回最新的写操作结果。一致性又可分为:弱一致性、强一致性、最终一致性

  • 可用性(Availability),非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。可用性模式可分成:工作到备用切换(Active-passive)、双工作切换(Active-active)

  • 分区容错性(Partition Tolerance),当出现网络分区后,系统能够继续履行职责。

1.3 应用

虽然 CAP 理论定义是三个要素中只能取两个,但放到分布式环境下来思考的话,我们会发 现必须选择 P(分区容错)要素,因为网络本身无法做到 100%可靠,有可能出故障,所以分区是 一个必然的选项。如果我们选择了 CA 而放弃了 P,那么当发生分区现象时,为了保证 C,系统需要禁止写入, 当有写入请求时,系统返回 error,这又和 A 冲突了,因为 A 要求返回 no error 和 no timeout。 因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。

如图 4-7 所示,为了保证一致性,当发生分区现象后,N1 节点上的数据已经更新到 y,但 由于 N1 和 N2 之间的复制通道中断,数据 y 无法同步到 N2,N2 节点上的数据还是 x。这时客户端 C 访问 N2 时,N2 需要返回 Error,提示客户端面 C:“系统现在发生错误”, 这种处理方式违背了可用性(Availability)的要求,因此 CAP 三者只能满足 CP。

如图 4-8 所示,为了保证可用性,当发生分区现象后,N1 节点上的数据已经更新到 y,但 由于 N1 和 N2 之间的复制通道中断,数据 y 无法同步到 N2,N2 节点上的数据还是 x。这时客户 C 访问 N2 时,N2 将当前自己拥有的数据 x 返回给客户端 C 了,而实际上当前最 新的数据已经是 y 了,这就不满足一致性(Consistency)的要求了,因此 CAP 三者只能满足 AP。注意:这里 N2 节点返回的 x,虽然不是一个“正确”的结果,但是一个“合理”的结果, 因为 x 是旧的数据,并不是一个错乱的值,只是不是最新的数据而已。

2. FAQ

2.1 什么是网络分区

分布式通常假设网络是异步的,意味着网络可能会导致任意的重复、丢失、延迟或者乱序的节点间消息传递。在实际中,TCP状态机会保证节点间消息传递的不丢失、不重复、时序。但是,在Socket级别上,节点接发消息会阻塞,超时等等。检测到网络失败是困难,因为我们唯一能跟得到其他节点状态的信息就是通过网络来得到,延迟跟网络失败也无从区分。这里就会产生一个基本的网络分区问题:高延迟可以考虑作为失败。当分区产生后,我们没有渠道去了解到其他节点到底发生了什么事: 它们是否还存活?或者已经crash?是否有收到消息?是否正在尝试回应。当网络最终恢复后,我们需要重新建立连接然后尝试解决在不一致状态时的不一致。很多系统在解决分区时会进入一个特殊的降级操作模式。CAP理论也告诉我们要么得到一致性要么高可用性,但是很少有数据库系统能够达到CAP理论的极限,多数只是丢失数据。

2.2 什么是TCP状态机

3. 参考资料

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值