您的位置:首页 > 其它

事务基本特性和两阶段提交协议

2014-04-02 15:05 295 查看
事务是保证数据库从一个一致性的状态永久地变成另外一个一致性状态的根本,ACDI是其根本特性

a:atomicity 事务涉及多个原子操作,同时成功,同时失败

c:consistency 一致性, 事务提交前后不会破坏数据库内部约束关系,约束关系可以是数据库内部的约束,例如转账后账户余额不能为负数,余额有数值范围

i:isolation 事务未提交前,不会有并行事务访问,例如转账过程,是不会看到余额减少的

durability:持久性,事务提交后,对数据库影响是永久性的

两阶段提交协议

两阶段提交协议(two phase commit protocol,2PC)可以保证数据的强一致性,许多分布式关系型数据管理系统采用此协议来完成分布式事务。它是协调所有分布式原子事务参与者,并决定提交或取消(回滚)的分布式算法。同时也是解决一致性问题的一致性算法。该算法能够解决很多的临时性系统故障(包括进程、网络节点、通信等故障),被广泛地使用。但是,它并不能够通过配置来解决所有的故障,在某些情况下它还需要人为的参与才能解决问题。参与者为了能够从故障中恢复,它们都使用日志来记录协议的状态,虽然使用日志降低了性能,但是节点能够从故障中恢复

请求阶段:

事务协调者记录本地日志,发送一条消息prepare T给事务参与者,询问是否能提交事务;

如果能提交事务,则记录日志,返回给协调者一个ready T消息,进入预提交状态

如果不能提交事务,则记录日志,返回not commit T消息给协调者,同时撤销对数据库修改

参与者能延迟反馈时间

提交阶段

如果协调者收到参与者发来的not commit T消息,那么将记录本地日志,像所有参与者发送Abort T消息,撤销对数据库修改

如果协调者收到参与者发来的ready T消息,那么将日志写入本地,像所有参与者发送commit T消息,若协调者没有收到某个参与者消息,则终止事务,

如果参与者接收到协调者Abort T消息,则写入本地日志,终止事务

如果参与者接收协调者Commit T消息,则写入本地日志,提交事务,

如果协调者发送commit T后,参与者宕机,重启后,参与者可以根据日志,询问其他参与者或协调者,这个事务是否提交

如果只有一个参与者,收到Commit T后,也宕机了,此时需要人工介入

XA是X/Open DTP组织(X/Open DTP group)定义的两阶段提交协议,XA被许多数据库(如Oracle和DB2)和中间件等工具(如CICS 和Tuxedo).本地支持 。

X/Open DTP模型(1994) 包括应用程序(AP)、事务管理器(TM)、资源管理器(RM)、通信资源管理器(CRM)四部分。

在这个模型中,通常事务管理器(TM)是交易中间件,资源管理器(RM)是数据库,通信资源管理器(CRM)是消息中间件。

一般情况下,某一数据库无法知道其它数据库在做什么,因此,在一个DTP环境中,交易中间件是必需的,由它通知和协调相关数据库的提交或回滚。而一个数据库只将其自己所做的操作(可恢复)影射到全局事务中。

XA规范就是X/Open DTP定义的交易中间件与数据库之间的接口规范(即接口函数),交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。XA接口函数由数据库厂商提供。通常情况下,交易中间件与数据库通过XA 接口规范,使用两阶段提交来完成一个全局事务,XA规范的基础是两阶段提交协议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: