本文介绍: 举个例子,在通信场景下,DTP的作用相当于定义通信需要发送方和接受方,要求这两方都需要发送接收的能力,要求通过系列的通信方式使得他们能正常通话。而2PC/3PC则是相当于定义了具体的通信逻辑比如TCP三次握手和IP协议等等。

一、分布式事务

事务指的是一组操作要么全部成功,要么全部失败事务有四个特性ACID,具体涵义参考数据库原理这篇博客

这里一个银行转账例子说明本地事务和分布式事务区别

本地事务依赖数据库本身提供的事务特性来实现,因此以下逻辑可以控制本地事务

begin transaction//1.本地数据库操作:张三减少金额
    //2.本地数据库操作:李四增加金额
commit transation;

但是在分布式环境下,会变成下边这样:

begin transaction//1.本地数据库操作:张三减少金额
    //2.远程调用:让李四增加金额
commit transation;

可以设想,当远程调用让李四增加金额成功了,由于网络问题远程调用并没有返回,此时本地事务提交失败回滚了张三减少金额的操作,此时张三和李四的数据就不一致了。

​ 因此在分布式架构的基础上,传统数据库事务就无法使用了,张三和李四的账户不在一个数据库中甚至不在一个应用系统里,实现转账事务需要通过远程调用,由于网络问题就会导致分布式事务问题

二、分布式事务的解决方案

1. 全局事务

(1)DTP模型

DTP模型规定了要实现分布式事务的体系结构包含多个协议算法和机制等,以确保分布式环境下的事务能够以一致和可靠的方式执行

它规定了要实现分布式事务,需要三种角色:

DTP主要侧重于业务实现分布式事务时的体系结构,而后面介绍的2PC和3PC则侧重于实现的逻辑,相当于DTP是壳,而2PC/3PC等协议是核

举个例子,在通信的场景下,DTP的作用相当于定义了通信中需要发送方和接受方,要求这两方都需要有发送和接收的能力,要求通过系列的通信方式使得他们能正常通话。而2PC/3PC则是相当于定义了具体的通信逻辑比如TCP三次握手和IP协议等等。

(2) 两阶段提交协议(2PC)

原理

阶段提交又称 2PC,是一个非常经典的强一致、中心化原子提交协议。两阶段提交协议经常用来实现分布式事务。

2PC协议中,节点分为两种角色

将整个事务流程分为两个阶段

在这里插入图片描述

二阶段提交的缺点

(3)三阶段提交协议(3PC)

原理

三阶段提交(Three-phase commit)是二阶段提交(2PC)的改进版本。三阶段提交协议(3PC)主要是为了解决两阶段提交协议的单点故障阻塞问题,2PC 存在问题是当协调者崩溃时,参与者可能在协调者恢复之前保持阻塞

增加的改进措施:

  • 增加超时机制:不只有协调者能感知参与者的超时参与者也能感知协调者的超时,当其超时时,就释放自身的资源,不再继续阻塞
  • 准备阶段前多加了一个准备阶段,变成有 CanCommit、PreCommit、DoCommit 三个阶段

在这里插入图片描述

过程

几种情况示意图如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 基于可靠消息服务

通过消息中间件来实现。

假设有A和B两个系统,分别可以处理任务A和任务B。此时系统A中存在一个业务流程需要任务A和任务B在同一个事务中处理。下面来介绍基于消息中间件来实现这种分布式事务。

总结一下上述过程的特点,

  • 消息中间件扮演者分布式事务协调者的角色。
  • 系统A完成任务A后,到任务B执行完成之间,会存在一定的时间差。在这个时间差内,整个系统处于数据不一致的状态,但这短暂的不一致性是可以接受的,因为经过短暂的时间后,系统又可以保持数据一致性,满足BASE理论。

上述过程中,如果任务A处理失败,那么需要进入回滚流程,如下图所示

  • 向消息中间件发送Rollback请求。和发送Commit请求一样,系统A发完之后便可以认为回滚已经完成,它便可以去做其他的事情。
  • 消息中间件收到回滚请求后,直接将该消息丢弃,而不投递给系统B,从而不会触发系统B的任务B
    在这里插入图片描述
    Commit和Rollback指令都有可能在传输途中丢失,当出现这种情况的时候,消息中间件通过超时询问机制保证事务的一致性

询问的结果三种

  • 提交若获得的状态是“提交”,则将该消息投递给系统B。
  • 回滚若获得的状态是“回滚”,则直接将条消息丢弃。
  • 处理中若获得的状态是“处理中”,则继续等待
    在这里插入图片描述
    为保证一致性,消息中间件必须确保发送的消息能被下游接收,如果超时就会重传,直到得到应答

在这里插入图片描述

在这里插入图片描述

3. 最大努力通知

是最简单的一种柔性事务,适用于一些最终一致性时间敏感度低的业务

最大努力通知型的实现方案,一般符合以下特点:

​ 1、不可靠消息:业务活动主动方,在完成业务处理之后,向业务活动的被动方发送消息,直到通知N次后不再通知,允许消息丢失(不可靠消息)。

​ 2、定期校对:业务活动的被动方,根据定时策略,向业务活动主动方查询(主动方提供查询接口),恢复丢失的业务消息。

4. TCC

TCC分别对应Try、Confirm和Cancel三种操作

TCC实际上把数据库层的二阶段提交上提到了应用层来实现,即Try、Confirm和Cancel操作功能需业务提供

原文地址:https://blog.csdn.net/kazuhura/article/details/134577004

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_13655.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注