2分布式事务介绍 · SpringCloud微服务实战 · 看云

导航

在介绍分布式事务有两个理论肯定是需要了解的,那就是CAP和BASE理论

1. CAP理论

一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项
c3349086166b089b75005bedc5de69f5_MD5.webp

**C: 一致性(Consistence) **指“all nodes see the same data at the same time”,即所有的节点访问都是同一份最新的数据副本
A: 可用性(Availability) 指“Reads and writes always succeed”,即每次请求都能获取正确的响应,但是不保证获取的数据为最新的数据
**P: 分区容错性(Tolerance of network Partitiion) ** 指“the system continues to operate despite arbitrary message loss or failure of part of the system”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务

1.1 如何理解分区容错性?

分区容错性我们可从“分区”和“容错”两个角度来理解。
我们在设计一个分布式系统的时候,一般会有多个服务组成,并且节点之间通过网络通信,当有些服务因为网络原因不能继续通信的时候,就会形成孤立的服务,就形成了网络分区(也叫脑裂)。
容错是一种分布式的能力,因为我们在设计分布式架构的时候要考虑到节点之间发生网络异常后整个分布式系统要仍然是可用的,因此为了提高分布式系统的容错能力,会把数据复制到分布式系统的所有服务上面,当分区出现时,每次服务上面的请求都能够访问数据,保证了可用性,这样也带来了一致性的问题,复制的服务越多,服务上的数据不一致性的可能性就越大,主要还是因为网络的问题。

1.2 为什么CAP 不能同时满足?

我们在学习CAP理论的时候,总是被告知CAP不能同时被满足,下面我们来分析一下原因
下图是一个分布式系统中的两个服务,每个服务里面有自己的应用和数据库。
d119fe63dace74c06a3b93ddbcb6a968_MD5.webp

  如何理解CAP 不能同时满足,我们下面通过一组图来看,首先需要满足分区容错性,我们前面说到分布式系统最大的不确定性就是网络,我们分析下如果服务A与服务B之间的网络通信突然出现故障,那么一致性和可用性能否同时满足?
(1) 用户发送请求到服务A,服务A接到请求之后,对数据库A插入了一组数据
bc913c6eab03faffa27bf93631de70a0_MD5.webp

(2) 由于服务A与服务B之间发生了网络通信故障,那么服务A像服务B数据同步的时候失败。数据库B里的数据就比数据库A少了一组数据
a151bcc7a25be58d10196fc5919bf164_MD5.webp

(3) 此时用户发送一个读请求到服务B,由于数据B没有同步到数据库A的数据,因此返回的数据还是老数据,这个时候有两种选择,选择一,牺牲数据一致性,返回用户老的数据,选择二,牺牲可用性,让用户等待,知道网络恢复,数据同步到数据库B,返回给用户正确的数据。
7ea6ea9d3f50a97fa9ec0536053e7c0c_MD5.webp

这个过程证明了分布式系统在满足分区容错性的前提下,一致性和可用性只能选择一个。

2. BASE 理论

BASE理论是由eBay架构师提出的。BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网分布式系统实践的总结,是基于CAP定律逐步演化而来。其核心思想是即使无法做到强一致性,但每个应用都可以根据自身业务特点,才用适当的方式来使系统打到最终一致性。

BASE 是基本可用(BasicallyAvailable)、软状态(Soft state)和最终一致性(Eventually consistent)三个词语的简写

  • 基本可用性: 分布式系统出现故障的时候,允许损失一部分可用性,拿响应时间和功能上的损失来换取可用。比如大促的时候访问量非常大,可以对一些不重要的功能做降级处理,同时在响应时间上做放宽限制来保证系统可用。
  • 软状态: 也叫做若状态获柔性状态,比如订单系统,再下单进行支付的时候,我们可以让订单状态显示为支付中,待支付的后端同步完数据,再修改为支付完成。允许系统存在中间状态,这个中间状态不会影响系统的可用性。例如数据库的读写分离(会有一个延迟),实际上也是一种柔性状态。
  • 最终一致性: 在允许出现中间状态的情况下,经过一段时间,各项数据状态才最终达到一致,与最终一致性对应的是强一致性和弱一致性,最终一致性可以理解为特殊的弱一致性。

3. 总结

ACID 是传统数据库常用的设计思想,它追求的是强一致性。CAP 是分布式系统下的定理,鉴于分布式系统网络特性,CAP不能同时满足的主要原因是网络原因,当然也可能是本身的应用超时造成的。互联网常见应用的CAP,大部分保证A和P,对于C保证最终一致性。BASE 是大型分布式系统场景下的设计思想,通过牺牲一致性获得高可用性。