分布式事务处理技术分享共38页文档
- 格式:ppt
- 大小:2.83 MB
- 文档页数:38
分布式事务的处理流程“分布式事务”是指在企业应用中,同时和多个独立系统进行交互时所发生的各种事务,这些事务必须满足原子性,一致性,隔离性和持久性(ACID),以确保系统最终一致性和数据完整性。
近年来,经济社会发展及大数据技术发展的不断提升,分布式事务技术也取得了长足的发展,并在企业应用中得以广泛应用。
本文将从分布式事务的基本概念入手,结合实际应用梳理出分布式事务处理流程,有助于我们更加深入地了解和利用这项技术。
一、什么是分布式事务分布式事务(Distributed Transactions)是指从多个节点(例如:企业应用服务器、业务处理系统、存储设备、云服务等)中同时处理的事务。
这些事务的处理必须满足数据库的ACID(Atomicity、Consistency、Isolation、 Durability)事务特性。
此外,分布式事务也必须满足完整性(completeness),这意味着所有的事务参与者都必须有能力完成当前事务,并对其结果负责,否则系统处于不一致的状态。
二、分布式事务的处理流程1、定义事务参与者:首先,必须明确事务参与者以及其角色,例如:表示需要执行的操作的服务器、存储设备和云服务。
事务参与者将根据其角色执行不同的事务任务,这些任务将确定事务范围及其特征(例如:涉及的资源、执行的操作)。
2、初始化事务:在定义了事务参与者和任务之后,就可以初始化事务了。
分布式事务的初始化需要创建一个全局ID,用于标识事务在所有参与者中的唯一性,以及确保参与者之间的事务同步。
3、预处理阶段:在预处理阶段,事务参与者将根据本地的预执行规则按照预定的顺序执行事务,这些处理操作可以被视为初始处理步骤,它们在实际执行前先被分配给每个参与者,以供执行。
4、提交阶段:在提交阶段,事务参与者将发起一次或多次提交操作,以记录已完成的执行结果。
由于事务的ACID性质,在提交操作完成后,所有参与者必须同时完成提交操作,以确保事务的整体一致性。
分布式事务分布式事务指事务的操作位于不同的节点上,需要保证事务的 ACID 特性。
2PC两阶段提交(Two-phase Commit,2PC)是基于分布式架构下的所有节点在进行事务提交时保持一致性而设计的一种算法。
在分布式系统中,每个节点虽然可以知晓自己的操作成功或者失败,却无法知道其他节点的操作成功或失败。
当一个节点跨域多个节点时,为了保证事务的 ACID 特性,需要引入一个协调者(Coordinator)来统一掌握所有节点(参与者)的操作结果并最终指示这些节点是否要把操作结果真正提交。
思路参与者将操作成败通知协调者,再由协调者根据所有参与者反馈情况决定各参与者是否提交操作还是终止操作。
2 个阶段阶段1:请求阶段(commit-request phase)/ 表决阶段(voting phase)•协调者节点向所有参与者节点询问是否可以执行提交操作,并开始等待各参与者节点的响应。
•参与者节点执行询问发起为止的所有事务操作•各参与者节点响应协调者发起的询问阶段2:提交阶段(commit phase)如果事务在每个参与者上都执行成功,事务协调者发送通知让参与者提交事务;否则,协调者发送通知让参与者回滚事务。
需要注意的是,在准备阶段,参与者执行了事务,但是还未提交。
只有在提交阶段接收到协调者发来的通知后,才进行提交或者回滚。
存在的问题•同步阻塞所有事务参与者在等待其它参与者响应的时候都处于同步阻塞状态,无法进行其它操作。
•单点问题协调者在 2PC 中起到非常大的作用,发生故障将会造成很大影响。
特别是在阶段二发生故障,所有参与者会一直等待,无法完成其它操作。
•数据不一致在阶段二,如果协调者只发送了部分 Commit 消息,此时网络发生异常,那么只有部分参与者接收到 Commit 消息,也就是说只有部分参与者提交了事务,使得系统数据不一致。
•太过保守任意一个节点失败就会导致整个事务失败,没有完善的容错机制。
分布式事务的处理方案以下是 9 条关于分布式事务处理方案的内容:1. 两阶段提交不就是分布式事务处理的一个经典方案吗?就好比大家一起干活,先一起约定怎么做,然后再统一行动。
比如说在电商系统中,下单时要同时更新库存和订单状态,这时候两阶段提交就派上大用场啦!2. 补偿机制也很棒啊!就好像我们走路不小心摔了一跤,得赶紧爬起来弥补一下。
比如在银行转账中,要是中间出了差错,就可以通过补偿机制来让一切恢复正常呀!3. 消息队列是个好东西呀!这不就像我们传纸条一样,把要做的事情通过纸条传递出去。
像外卖系统中,订单信息可以通过消息队列来确保各个环节的处理呢!4. TCC 模式也不能小瞧呀!这就如同搭积木,先准备好,再执行,最后确认或回滚。
在一些金融交易场景中,TCC 模式能保障事务的准确进行呢,难道你不想试试吗?5. 最大努力通知很实用呢!这不就像是给朋友不断提醒一样,直到对方知道为止。
比如物流配送的通知,一遍又一遍地去告知,多执着呀!6. 基于可靠消息的最终一致性也很厉害哟!就好像接力比赛,一棒接一棒,最终到达终点。
像电商退款流程,就可以通过可靠消息来保证事务的最终一致呀,多神奇!7. 分布式事务中间件就像是一个超级管家!它把所有复杂的事情都包揽了。
比如在大型企业的业务系统里,有了它,处理分布式事务就轻松多了呀!8. 事务分组也很有意思哟!可以想象成把一堆任务分成小组来管理,更有条理啦。
像复杂的业务流程中,通过事务分组来让处理更清晰呢,多赞啊!9. 分布式事务的混合方案简直太强大了!就像一个武器库,各种工具都有,按需选用。
在各种多变的场景下,混合方案可以应对自如呀,这不是超厉害的嘛!我的观点结论就是:这些分布式事务处理方案各有各的优势和适用场景,我们要根据实际需求灵活选择和运用,才能更好地处理分布式事务中的各种问题!。
什么是分布式事务以及有哪些解决⽅案?1、什么是分布式事务?答:指⼀次⼤的操作由不同的⼩操作组成的,这些⼩的操作分布在不同的服务器上,分布式事务需要保证这些⼩操作要么全部成功,要么全部失败。
从本质上来说,分布式事务就是为了保证不同数据库的数据⼀致性。
2、分布式事务产⽣的原因?2.1 数据库分库分表 当数据库单表数据达到千万级别,就要考虑分库分表,那么就会从原来的⼀个数据库变成多个数据库。
例如如果⼀个操作即操作了01库,⼜操作了02库,⽽且⼜要保证数据的⼀致性,那么就要⽤到分布式事务。
2.2 应⽤SOA化 所谓的SOA化,就是业务的服务化。
例如电商平台下单操作就会产⽣调⽤库存服务扣减库存和订单服务更新订单数据,那么就会设计到订单数据库和库存数据库,为了保证数据的⼀致性,就需要⽤到分布式事务。
总结:其实上⾯两种场景,归根到底是要操作多数据库,并且要保证数据的⼀致性,⽽产⽣的分布式事务的。
3、分布式事务解决⽅案3.1 两阶段提交(2PC) XA是⼀个分布式事务协议,由Tuxedo提出。
XA中⼤致分为两部分:事务管理器和本地资源管理器。
其中本地资源管理器往往由数据库实现,⽐如Oracle、Mysql等数据库都实现了XA接⼝,⽽事务管理器作为全局的调度者,负责各个本地资源的提交回滚。
XA实现分布式事务的原理如下:总结 ⼆阶段提交看起来确实能够提供原⼦性的操作,但是它存在⼏个缺点:1、同步阻塞问题:执⾏过程中,所有参与节点都是事务阻塞型的。
当参与者占有公共资源时,其他第三⽅节点访问公共资源不得不处于阻塞状态。
2、单点故障:由于(事务管理器)协调者的重要性,⼀旦协调者发⽣故障。
(本地资源管理器)参与者会⼀直阻塞下去。
尤其在第⼆阶段,协调者发⽣故障,那么所有的参与者还都处于锁定事务资源的状态中,⽽⽆法继续完成事务操作。
(如果是协调者挂掉,可以重新选举⼀个协调者,但是⽆法解决因为协调者宕机导致的参与者处于阻塞状态的问题)3、数据不⼀致:在⼆阶段提交的阶段⼆中,当协调者向参与者发送commit请求之后,发⽣了局部⽹络异常或者在发送commit请求过程中协调者发⽣了故障,这会导致只有⼀部分参与者接收到了commit请求。
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。
为了实现分布式事务,需要使用下面将介绍的两阶段提交协议。
* 阶段一:开始向事务涉及到的全部资源发送提交前信息。
此时,事务涉及到的资源还有最后一次机会来异常结束事务。
如果任意一个资源决定异常结束事务,则整个事务取消,不会进行资源的更新。
否则,事务将正常执行,除非发生灾难性的失败。
为了防止会发生灾难性的失败,所有资源的更新都会写入到日志中。
这些日志是永久性的,因此,这些日志会幸免遇难并且在失败之后可以重新对所有资源进行更新。
* 阶段二:只在阶段一没有异常结束的时候才会发生。
此时,所有能被定位和单独控制的资源管理器都将开始执行真正的数据更新。
在分布式事务两阶段提交协议中,有一个主事务管理器负责充当分布式事务协调器的角色。
事务协调器负责整个事务并使之与网络中的其他事务管理器协同工作。
为了实现分布式事务,必须使用一种协议在分布式事务的各个参与者之间传递事务上下文信息,IIOP便是这种协议。
这就要求不同开发商开发的事务参与者必须支持一种标准协议,才能实现分布式的事务。
编辑本段用途分布式事务处理 (TP) 系统旨在协助在分布式环境中跨异类的事务识别资源的事务。
在分布式 TP 系统的支持下,应用程序可以将不同的活动合并为一个事务性单元,这些活动包括从“消息队列”队列检索消息、将消息存储在 Microsoft SQL Server 数据库中、将所有现有的消息引用从Oracle Server 数据库中移除,等等。
因为分布式事务跨多个数据库资源,故强制 ACID 属性维护所有资源上的数据一致性是很重要的。
编辑本段Transact-SQL 分布式事务在 Transact-SQL 中启动的分布式事务的结构相对比较简单: 1. Transact-SQL 脚本或应用程序连接执行启动分布式事务的 Transact-SQL 语句。