目录
一.事务概述
1.事务的四大特性
2.本地事务
3.分布式事务
4.分布式理论
5.刚柔事务
二.常用事务解决方案模型
1.两阶段提交(2PC)
2.三阶段提交(3PC)
三.Seata分布式事务
1.Seata简介
2.Seata角色
(1)原子性(atomicity):事务是一个不可分割的工作单位,要么同时成功,要么同时失败。
(2)一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态,事务的中间状态不能被观察到的。
(3)隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。隔离性又分为四个级别:读未提交(read uncommitted)、读已提交(read committed,解决脏读)、可重复读(repeatable read,解决虚读)、串行化(serializable,解决幻读)。
(4)持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
大多数场景下,我们的应用都只需要操作单一的数据库,这种情况下的事务称之为本地事务( Local Transaction )。本地事务的ACID特性是数据库直接提供支持。
(1)跨库事务
一个应用某个功能需要操作多个库,不同的库中存储不同的业务数据。
(2)跨服务事务
多个服务直接相互调用
1.CAP理论:在一个分布式系统中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(PartitionTolerance)三者中的两个,另外一个必须被牺牲。
(2)一致性
(3)可用性
(4)分区容错性(当出现网络分区后,系统能够继续“履行职责”。)
一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域,数据就散布在了这些不连通的区域中。
2.BASE理论: 是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency),是基于CAP定理演化而来, 是对CAP中一致性和可用性权衡的结果;核心思想是即使无法做到强一致性 (CAP 的一致性就是强一致性),但应用可以采用适合的方式达到最终一致 性。
(1)刚性事务:它的事务是原子的,要么都成功要么都失败,也就是需要保障ACID理论。
(2)柔性事务:只需要保障数据最终一致即可,需要遵循BASE理论。
(1)两个阶段:准备阶段、提交阶段
(2)两个角色:协调者(事务发起者),参与者(事务的执行者)
(3)2PC的处理流程
<1>准备阶段
a.协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待参与者答复
b.参与者执行事务,记录undo、redo日志,单不提交事务
c.如果参与者执行成功,反馈给协调者yes,表示可以提交事务了
<2>提交阶段
a.协调者向所有参与者发出提交事务的请求
b.参与制执行提交任务
c.参与者反馈给协调者提交任务完成的ack应答
d.协调者收到所有参与者ack消息后完成事务提交
(4)2PC存在的问题
2PC是一个强一致性的同步阻塞协议,容易产生如下问题:
<1>性能问题:所有参与者在事务提交阶段处于同步阻塞状态,占用系统资源,容易导致性能瓶颈。
<2>可靠性问题:如果协调者故障,参与者将无法完成事务提交处于锁定状态
<3>数据一致性问题:如果发生局部网络问题,会导致节点之间数据不一致
(1)3PC简介: 三阶段提交协议,是二阶段提交协议的改进版本,与二阶段提交不同的是,引入超时机制。同时在协调者和参与者中都引入超时机制( 2PC 中只有协调者有超时机制)。
三阶段提交将二阶段的准备阶段拆分为2个阶段,插入了一个preCommit 阶段,使得原先在二阶段提交中,参与者在准备之后,由于协调者发生崩溃或 错误,而导致参与者处于无法知晓是否提交或者中止的“不确定状态”所产生的可 能相当长的延时的问题得以解决。
(2)3PC的处理流程
<1>canCommit阶段
a.协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待参与者答复
b.参与者收到协调者的请求后,如果认为可以执行事务反馈yse,否则反馈no
<2>preCommit阶段
a.协调者向参与者发出preCommit请求,进入准备阶段
b.参与者收到请求后,执行事务操作,记录undo/redo日志,但不提交事务
c.参与者向协调者反馈ack应答
<3>doCommit阶段情况一阶段2正常反馈ack
a.协调者向所有参与者发出doCommit请求
b.参与者收到请求后,提交事务,释放资源,向协调者反馈ack消息
c.协调者收到消息后,完成事务提交
<3>doCommit阶段情况二阶段2反馈no
a.协调者向所有参与者发出abort请求
b.参与者使用阶段2中undo信息执行回滚,释放资源,向协调者反馈ack消息
c.协调者收到消息后,完成事务中断
(3)3PC的优缺点
优点:
相比二阶段提交,三阶段提交降低了阻塞范围,在等待超时后协调者或参与者会中断事务。避免了协调者单点问题,阶段3中协调者出现问题时,参与者会继续提交事务。
缺点:
数据不一致问题依然存在,当在参与者收到preCommit请求后等待do commite指令时,此时如果协调者请求中断事务,而协调者无法与参与者正常通信,会导致参与者继续提交事务,造成数据不一致。
Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性 能和简单易用的分布式事务服务
(1)TC (Transaction Coordinator)
事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。
(2)TM (Transaction Manager)
事务管理器:定义全局事务的范围:开始全局事务、提交或回滚全局事务。
(3)RM (Resource Manager)
资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
3.Seata的AT模式
(1)AT模式简介
Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造 一站式的分布式解决方案。其中AT模式最受欢迎,使用也非常简单,但它内在的原理不简单。
官网介绍连接:https://seata.io/zh-cn/docs/overview/what-is-seata.html