五大分布式事务,你都知道吗?

事务(Transaction):一般是指要做的或所做的事情,由 事务开始(begin transaction) 和 事务结束(end transaction) 之间执行的全体操作组成。

简单的讲就是:要么全部被执行,要么就全部失败。

那分布式事务,自然就是运行在分布式系统中的事务,是由多个不同的机器上的事务组合而成的。同上,只有分布式系统中所有事务执行了才能是成功,否则失败。

事务的基本特征ACID:

  • 原子性(Atomicity): 一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
  • 一致性: 指事务执行前和执行后,数据是完整的。
  • 隔离性: 一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 持久性: 也称为永久性,一个事务一旦提交,它对数据库中数据的改变就应该是永久性的保存下来了。

二、分布式事务的目标和实际应用场景

分布式事务的目标:解决多个独立事务一致性的问题。

比如说我们有一个功能,订单系统,横跨了多个微服务,由于每个微服务不在一个库,没法用数据库事务来保证事务,那么这个时候我们就可以使用分布式事务

例如: 商城项目,有用户支付了一个订单,在支付系统中,支付表进行了更新,在另一个订单系统中,订单库里面订单的状态就要变成已支付,那么在订单表和支付表,他们在不同的库,如何保证两个数据库之间的事务呢

支付操作:支付修改余额,修改订单状态

三、分布式事务解决方案

  • 二阶段提交协议(2PC)
  • 三阶段提交协议(3PC)
  • 补偿事务(TCC)
  • 消息中间件实现
  • seata框架

四、 二阶段提交协议(2PC)

基于XA协议的,采取强一致性,遵从ACID

2PC:(2阶段提交协议),是基于XA/JTA规范。

4.1 XA

XA是由X/Open组织提出的分布式事务的架构(或者叫协议)。XA架构主要定义了 (全局)事务管理器(Transaction Manager)和(局部)资源管理器(Resource Manager)之间 的接口。

XA接口是双向的系统接口,在事务管理器(Transaction Manager)以及一个或多个资源管理器(Resource Manager)之间形成通信桥梁。也就是说,在基于XA的一个事务中,我们可以针对多个资源进行事务管理,例如一个系统访问多个数据库,或即访问数据库、又访问像消息中间件这样的资源。这样我们就能够实现在多个数据库和消息中间件直接实现全部提交、或全部取消的事务。XA规范不是java的规范,而是一种通用的规范。

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章