三个概念:
网络通讯的危险期、一阶段提交(1PC)和两阶段提交(2PC)
网络通讯的危险期
由于网络通讯故障随时可能发生,任何发出请求后等待回应的程序都会有失去联系的危险。这种危险发生在发出请求之后,服务器返回应答之前,如果在这个期间网 络通讯发生故障,发出请求一方无法收到回应,于是无法判断服务器是否已经成功地处理请求,因为收不到回应可能是请求没有成功地发送到服务器,也可能是服务 器处理完成后的回应无法传回请求方。这段时间称为网络通讯的危险期(In-doubt Time)。
一阶段提交(1PC One Phase Commit)
一 阶段提交就是事务处理器向数据库服务器发出提交请求,然后等待数据库服务器的回应,收到回应后完成事务的提交,或者服务器返回提交失败的结果就回撤事务。 危险期从发出请求开始,到收到回应结束,这段时间中数据库完成数据的修改、日志记录等处理,处理越复杂,危险期就越长。
两阶段提交(2PC Two Phase Commit)
两阶段提交把事务提交分成两个阶段:
- 第一阶段,事务处理器向数据库服务器发出"准备提交"请求,数据库收到请求后执行相同的数据修改和日志记录等处理,不同的是处理完成后只是把事务的状态改成"可以提交",然后把结果返回给事务处理器。
- 事务处理器收到回应后进入第二阶段,如果在第一阶段内的危险期中发生了故障,事务处理器收不到回应,则认为事务失败,回撤事务。数据库服务器收不到第二阶段的确认提交请求,把"可以提交"的事务回撤.
- 两阶段的第二阶段中事务处理器向数据库服务器发出"确认提交"请求,数据库服务器把事务的"可以提交"状态改为"提交完成"状态,然后返回应答。
从严格意义上说,两阶段提交并没有完全解决网络通讯危险期的问题,但因为第二阶段的处理很简单,只是修改了事务的状态,与第一阶段相比其处理时间极短,所以危险期极短,发生事务提交故障的可能性几乎不存在。
所谓两阶段提交, 即Two Phase Commit (2PC), 是分布式事务采用的一种处理方式.
XA基础
在谈到XA规范之前,必须首先了解分布式事务处理(Distributed Transaction Processing,DTP)的概念。Transaction,即事务,又称之为交易,指一个程序或程序段,在一个或多个资源如数据库或文件上为完成某些功能的执行过程的集合。
分布式事务处理是指一个事务可能涉及多个数据库操作,分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,提交或回滚事务的决定必须产生统一的结果(全部提交或全部回滚)。
X/Open组织(即现在的Open Group)定义了分布式事务处理模型。X/Open DTP模型(1994)包括应用程序(AP)、事务管理器(TM)、资源管理器(RM)、通信资源管理器(CRM)四部分。
一般,常见的事务管理器(TM)是交易中间件,常见的资源管理器(RM)是数据库,常见的通信资源管理器(CRM)是消息中间件。为表述方便起见,在本文中直接以其常见表现形式进行描述。
通常把一个数据库内部的事务处理,如对多个表的操作,作为本地事务看待。数据库的事务处理对象是本地事务,而分布式事务处理的对象是全局事务。
所谓全局事务,是指分布式事务处理环境中,多个数据库可能需要共同完成一个工作,这个工作即是一个全局事务.
例如,一个事务中可能更新几个不同的数据库。对数据库的操作发生在系统的各处但必须全部被提交或回滚。此时一个数据库对自己内部所做操作的提交不仅依赖本 身操作是否成功,还要依赖与全局事务相关的其它数据库的操作是否成功,如果任一数据库的任一操作失败,则参与此事务的所有数据库所做的所有操作都必须回 滚。
一般情况下,某一数据库无法知道其它数据库在做什么,因此,在一个DTP环境中,交易中间件是必需的,由它通知和协调相关数据库的提交或回滚。而一个数据库只将其自己所做的操作(可恢复)影射到全局事务中。
XA就是X/Open DTP定义的交易中间件与数据库之间的接口规范(即接口函数),交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。XA接口函数由数据库厂商提供。
通常情况下,交易中间件与数据库通过XA 接口规范,使用两阶段提交来完成一个全局事务,XA规范的基础是两阶段提交协议。
在第一阶段,交易中间件请求所有相关数据库准备提交(预提交)各自的事务分支,以确认是否所有相关数据库都可以提交各自的事务分支。
当某一数据库收到预提交后,如果可以提交属于自己的事务分支,则将自己在该事务分支中所做的操作固定记录下来,并给交易中间件一个同意提交的应答,此时数 据库将不能再在该事务分支中加入任何操作,但此时数据库并没有真正提交该事务,数据库对共享资源的操作还未释放(处于上锁状态)。
如果由于某种原因数据库无法提交属于自己的事务分支,它将回滚自己的所有操作,释放对共享资源上的锁,并返回给交易中间件失败应答。
在第二阶段,交易中间件审查所有数据库返回的预提交结果,如所有数据库都可以提交,交易中间件将要求所有数据库做正式提交,这样该全局事务被提交。而如果有任一数据库预提交返回失败,交易中间件将要求所有其它数据库回滚其操作,这样该全局事务被回滚。
分享到:
相关推荐
- **流程模型**: 将早期商机管理分为三个阶段:收集与生成线索、验证与分发线索、跟踪与培育线索。 - **收集与生成**: 主要包括多渠道收集初始信息、分析并生成初始线索、填写提交线索档案。 - **验证与分发**: ...
【标题】"P10 --- Wakyzzz:OC P10 Wakyzzz应用的仓库"揭示了这个项目是OpenClassrooms平台上iOS开发课程的一部分,重点在于第十个阶段,即P10。Wakyzzz是一个实际的iOS应用程序,旨在帮助用户在学习iOS开发...
如果协商不能解决,应提交仲裁机构或其它仲裁机构,依据该机构的仲裁规则进行仲裁。 8. **协议生效条件** - 明确协议生效的条件,如需经过特定机构审批等。 - **示例**:此协议经股权转让双方和合营他方正式签署...
他们恳请ZZXX商业广场投资有限公司认真考虑其提交的管理方案,并期望最终获得合作机会。 总的来说,这份投标书前言突显了物业管理在商业广场中的关键作用,以及投标方的专业化服务承诺和合作诚意。上海锐翔物业管理...
该项目的招标编号为ZZ21002216,由志正招标分公司于2010年负责组织。这个系统的主要目标是确保土地资源的合理利用,提高资源配置效率,同时防止腐败和不公平现象的发生。 第一部分 投标邀请函 投标邀请函是项目启动...
Paxos的核心在于两阶段提交(2PC)和三阶段提交(3PC)的改进,能够在存在拜占庭错误的环境中保持系统的正确运行。理解Paxos协议对于掌握分布式系统中的状态一致性至关重要。 接着,我们要了解Zookeeper,它是...
数字影音后期制作技术赛项的名称为“Post-Production of Digital Video”,编号为ZZ-2017019。 二、竞赛目的 该赛项的目的是检验参赛选手的岗位知识和技能,提升操作能力和创新创意水平,并促进人才培养质量的大幅...
2. 现场检查验收:分为预验收和正式验收两个阶段。 - 预验收涉及对设计图纸、变更记录、设备清单的审查,以及设备质量和功能的初步检查。发现问题后,需书面通知开发商进行整改。 - 正式验收在整改完成后进行,...
本章程主要针对zz家居广场内的厂商装修行为,旨在规范装修流程,确保商场安全和质量。整个装修管理过程分为多个阶段,包括装修申请、装修审核、装修现场施工管理、装修总体验收以及装修后续工作。 1. 装修申请: -...
"f2"可能代表学年的第二学期或是项目的第二阶段,而"zz1"可能是项目内部的代码或分类标识。 综合以上信息,这个项目可能需要学生在ISIMA的第一年学习期间,深入理解和应用数据结构,设计和实现有效的算法。他们需要...
例如:“本研究揭示了XX技术在解决YY问题上的有效性,为ZZ领域的进一步研究提供了新视角。” ### 二、界定材料与方法 清晰地介绍研究中使用的材料和方法是科技论文不可或缺的部分。这部分应包括研究对象的定义、...
《施工组织设计分工表(9-19)》是一份详细规划四川芦山县中咀水电站工程第Ⅴ标(ZZ/CⅤ)施工过程的重要文档。这份分工表明确了各个阶段和具体施工环节的责任人,确保工程的有序进行。以下是根据表格内容解析的关键...
ZZ市XX污水处理厂一期工程设计处理能力为5万吨/天,涵盖了预处理、氧化沟、二沉池、接触消毒池、污泥泵站、污泥脱水及加药间、储泥池和配电间等多个关键单元。下面我们将详细探讨这些环节的设备安装和试运行要点。 ...
4. 购物车功能:允许用户将商品添加到购物车,可以随时修改购物车内容,直到最后提交订单。 5. 支付系统集成:集成第三方支付服务,如支付宝、微信支付等,提供安全的在线支付功能。 6. 用户账户系统:注册、登录、...
在提供的压缩包"婚庆小程序 kundian_wedding zz 全开源版"中,可能包含了上述所有开发环节的源代码,包括WXML、WXSS、JavaScript文件以及相关的资源文件(如图片、字体等)。开发者或爱好者可以通过阅读和学习这些...
在模型开发阶段,参赛者需要进行数据预处理,包括清洗文本、分词、去除停用词、词干化等。然后,可以使用监督学习方法,如支持向量机(SVM)、随机森林(Random Forest)或基于神经网络的模型(如LSTM、BERT)。模型...
4. **评审阶段**:作品提交后,将由专家评审团进行评审,评选出优秀作品。 5. **颁奖典礼**:最终获奖名单将在颁奖典礼上公布,同时也会对获奖队伍进行表彰。 ### 数学建模方法 在数学建模过程中,常用的方法包括...
- **设计阶段**:包括系统架构设计、数据库设计、UI设计等。 - **编码阶段**:根据设计文档进行代码编写。 - **测试阶段**:包括单元测试、集成测试、系统测试等。 - **部署上线**:将开发完成的应用程序部署到...
- **功能性测试**:包括链接测试、表单提交测试、多媒体元素测试等。 - **界面测试**:关注页面布局、控件使用、文字准确性等。 - **性能测试**:进行压力测试、负载测试等,以评估网站在高并发情况下的表现。 -...
参赛队伍需在规定时间内完成指定的数学建模任务,并提交解决方案及相关报告。 ### 获奖论文获取途径 本次提供的信息显示,2020国赛获奖论文的获取途径为百度网盘分享地址。这意味着,参赛者以及其他对此感兴趣的...