Seata分布式事务详解

目录

一.事务概述

1.事务的四大特性

2.本地事务

3.分布式事务

4.分布式理论

5.刚柔事务

二.常用事务解决方案模型

1.两阶段提交(2PC)

2.三阶段提交(3PC)

三.Seata分布式事务

1.Seata简介

2.Seata角色


一.事务概述

1.事务的四大特性

(1)原子性(atomicity):事务是一个不可分割的工作单位,要么同时成功,要么同时失败。

(2)一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态,事务的中间状态不能被观察到的。

(3)隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。隔离性又分为四个级别:读未提交(read uncommitted)、读已提交(read committed,解决脏读)、可重复读(repeatable read,解决虚读)、串行化(serializable,解决幻读)。

(4)持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

2.本地事务

大多数场景下,我们的应用都只需要操作单一的数据库,这种情况下的事务称之为本地事务( Local Transaction )。本地事务的ACID特性是数据库直接提供支持。

3.分布式事务

(1)跨库事务

        一个应用某个功能需要操作多个库,不同的库中存储不同的业务数据。

(2)跨服务事务

        多个服务直接相互调用

4.分布式理论

        1.CAP理论:在一个分布式系统中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(PartitionTolerance)三者中的两个,另外一个必须被牺牲。

        (2)一致性

        (3)可用性

        (4)分区容错性(当出现网络分区后,系统能够继续“履行职责”。)

                一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域,数据就散布在了这些不连通的区域中。

        2.BASE理论: 是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency),是基于CAP定理演化而来, 是对CAP中一致性和可用性权衡的结果;核心思想是即使无法做到强一致性 (CAP 的一致性就是强一致性),但应用可以采用适合的方式达到最终一致 性。 

5.刚柔事务

(1)刚性事务:它的事务是原子的,要么都成功要么都失败,也就是需要保障ACID理论。

(2)柔性事务:只需要保障数据最终一致即可,需要遵循BASE理论。

二.常用事务解决方案模型

1.两阶段提交(2PC)

(1)两个阶段:准备阶段、提交阶段

(2)两个角色:协调者(事务发起者),参与者(事务的执行者)

(3)2PC的处理流程

        <1>准备阶段

                a.协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待参与者答复

                b.参与者执行事务,记录undo、redo日志,单不提交事务

                c.如果参与者执行成功,反馈给协调者yes,表示可以提交事务了

        <2>提交阶段

                a.协调者向所有参与者发出提交事务的请求

                b.参与制执行提交任务

                c.参与者反馈给协调者提交任务完成的ack应答

                d.协调者收到所有参与者ack消息后完成事务提交

(4)2PC存在的问题

       2PC是一个强一致性的同步阻塞协议,容易产生如下问题:

        <1>性能问题:所有参与者在事务提交阶段处于同步阻塞状态,占用系统资源,容易导致性能瓶颈。

        <2>可靠性问题:如果协调者故障,参与者将无法完成事务提交处于锁定状态

        <3>数据一致性问题:如果发生局部网络问题,会导致节点之间数据不一致

2.三阶段提交(3PC)

(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.Seata简介

        Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性 能和简单易用的分布式事务服务

2.Seata角色

(1)TC (Transaction Coordinator) 

事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。

(2)TM (Transaction Manager) 

事务管理器:定义全局事务的范围:开始全局事务、提交或回滚全局事务。

(3)RM (Resource Manager) 

资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

Seata分布式事务详解_第1张图片

3.Seata的AT模式

(1)AT模式简介

        Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造 一站式的分布式解决方案。其中AT模式最受欢迎,使用也非常简单,但它内在的原理不简单。

官网介绍连接:https://seata.io/zh-cn/docs/overview/what-is-seata.html

你可能感兴趣的:(java,事务,java,微服务,spring,cloud)