前言
通过前面的研究,我们了解了分布式系统的基本概念。与本地事务不同,分布式系统之所以被称为分布式系统,是因为提供服务的多个节点分布在不同的机器上,通过网络相互作用。由于网络问题,整个系统无法提供服务。网络因素成为分布式交易考虑的标准之一。因此,分布式事务需要进一步的理论基础。接下来,让我们学习分布式事务的cap理论。
在解释分布式事务控制解决方案之前,我们需要学习一些基本理论,并通过理论知识指导我们确定分布式事务控制的目标,从而帮助我们理解每个解决方案。
1、 CAP理论
CAP是consistency、availability和partition tolerance的缩写,分别表示一致性、可用性和分区容忍性。
为了便于理解CAP理论,我们使用电子商务系统中的一些业务场景来理解CAP,如下图所示,这是商品信息管理的执行过程:
执行过程如下:
(1) 商品请求主数据库写入商品信息(添加商品、修改商品、删除商品);
(2) 主数据库成功写入对商品和服务的响应;
(3) 商品服务请求从数据库中读取商品信息;
1.1 C - 均匀性
均匀性是写操作后的读操作可以读取到最新的数据状态,当数据分布在多个节点时,从任意节点读取到的数据都是最新的状态。
上图中,商品信息的读写要满足均匀性就是要实现如下目标:
(1) 如果货物和服务成功写入主数据库,新数据将从从数据库中查询成功。
(2) 如果商品服务无法写入主数据库,则无法向从数据库查询新数据。
如何实现一致性?
(1) 写入主数据库后,需要将数据同步到从数据库。
(2) 写入主数据库后,在同步到从数据库期间锁定从数据库,同步完成后解除锁定,避免新数据库写入成功后从数据库查询旧数据。
分布式一致性的特点:
(1) 由于数据同步的过程,相应的写入操作将被延迟。
(2)为了保证数据一致性会对资源暂时锁定,待数据同步完成释放锁定资源。
(3) 如果节点请求数据同步失败,它将返回错误信息,并且不会返回旧信息。
1.2 A-可用性
可用性意味着任何事务操作都可以获得相应的结果,而无需响应超时或响应错误。
在上图中,为了读取商品信息以满足可用性,实现了以下目标:
(1) 从数据库接收查询请求可以立即响应数据查询结果。
(2) 来自数据库的查询不允许响应超时或响应错误。
如何实现可用性?
(1) 写入主数据库会将数据同步到从数据库。
(2) 因为要确保从数据库的可用性,所以无法锁定从数据库中的资源。
(3) 如果实时数据尚未同步,则还应从数据库返回要查询的数据。即使旧数据不可用,也可以根据约定返回默认消息,但不能返回错误或相应的超时。
分布式系统可用性特点:
(1) 所有请求都有响应,并且不会出现响应超时或响应错误。
1.3 P-分区容忍性
通常分布式系统的各个节点部署在不同的子网,这就是网络分区,不可避免的会出现由于网络问题而导致节点之间通信失败,此时仍可对外提供服务,这叫分区容忍性。
上图中,商品信息读写要满足分区容忍性就是要实现如下目标:
(1) 主数据与从数据同步失败不影响读写操作。
(2) 如果一个节点挂断,另一个节点提供的外部服务将不受影响。
如何实现分区容忍性?
(1) 尝试使用异步而不是同步操作,例如,使用异步方法将主数据库中的数据同步到从数据库中,这样节点就可以有效地实现松耦合。
(2) 从数据库节点添加,其中一个节点挂起其他节点以提供服务。
分布式分区容忍性的特点:
(1)分区容忍性是分布式系统具备的基本能力。
2、 CAP结合模式
在所有分布式事务场景中,由于C和a不能在P的前提下共存,因此不会同时出现cap特性。
下图满足了P即表示实现了分区容忍性:
分区容忍的含义:
(1) 主数据库将数据从网络同步到从数据库。可以认为主从数据库部署在不同的分区上,通过网络进行交互。
(2) 当主从数据库之间的网络出现问题时,主从数据库提供的服务不受影响。
(3) 如果一个节点挂断,另一个节点提供的服务将不受影响。
如果要实现C则必须保证数据一致性,在数据同步的时候为防止向从数据库查询的不一致则需要从数据库锁定,待完成同步之后解锁,如果同步失败从数据库要返回错误信息或超时信息。
如果要实现,则必须确保数据可用性。您可以随时从数据库查询数据,并且不能返回错误信息或超时信息
通过分析,在满足P的前提下,C与a之间存在矛盾。
因此,在分布式事务处理的生产中,需要根据需要确定cap的哪两个方面是满足的。
1.1 CA结合
CA结合就是保证一致性和可用性,放弃区域公差,即不进行分区,不考虑由于网络不通或节点挂掉的问题。那么系统将不是一个标准的分布式系统,我们最常用的关系型数据库就满足了CA。
1.2 CP结合
CP结合就是保证一致性和分区容忍性,放弃可用性。Zookerper就是追求强一致性,放弃了可用性,还有跨行转账,一次转账请求要等待双方银行系统都完成整个事务才能完成。
1.3 AP结合
AP结合就是保证可用性和分区容忍性,放弃一致性。这是分布式系统设计时的选择。
三、总结
通过上面我们学习了CAP的基础理论知识,CAP是一个已经证实的理论:一个分布式系统做多只能满足CAP中的两项,为达到良好的响应性能来提高用户体验,因此一般会做出如下选择:保证A和P,舍弃C强一致性,保证最终一致性。
网友评论