用两阶段提交协议保证WEB服务的事务
- 格式:pdf
- 大小:644.81 KB
- 文档页数:5
用两阶段提交协议
保证WEB服务的事务 奠裕清湖南信息职业技术学院 41 02 00
前育 web服务是一种新的技术.它从根本 上解决了企业之间硬企业内部异构系统之 间的互操作和 通信的问题。它的一个目 的是保证下一代的软件能枉数槲服务之间 动态组合。但是在松耦合的环境下.对 WEBI]I务的事务集成还没有~种可靠的解 决方案。庆幸的是,现在出现了几种不同 的事务标准协议,如ibm和微软的W s t r a n s a cti 0 n和蛳调框架:W s— coordination,还有OASIS的商业事务 议:BTP.但是他们猩相互竞争。BPEI 商 业可执行语言,目I】wEB服务中的工作流, 它的目的是组合一系列分布l在不 地方的 WEB服务作为一个大的服务.放到BPEL 引擎中来执行。但是要在流程-II加入事务, 到现在还没有一种可靠的方案 原子提交协议是支持分布式事务的原 子性的一个笑健元素。两阶段攫变 议 是标准的原了.提交曲-议。广泛的认为. 在复杂的分布式事务中,2PC是僳虹E事务 正确性的关键。因此,用2 P C来保证 WEB服务的组合应H1是可行的。但是 异构的.分布式的WEB服务中,义有新 的特点.比如它是・个松敞的, 确 定事务的边界等。本文牧J{c{W S CO0rdinafion和WS trancation.在B[】EL 引擎中,提¨{了一种有敏的方案.来保 虹糍成WEB服务的原子性。 本文在第二节简单介绍WEB睢务巾 的事务慨念,在第三节【羊细介绍T2PC的概 念・在第四节给出了一个可用于BPEI 中的 蛮际框架一然后在第五节给Lt 5 r例 来 明 框架的町行性。 一.WEB服务中的事务 传统的事务是处于个紧耦台的系统 r{|.要求满足ACID四个性质: ◆原子性(Atam Jc Jiy):要幺执行所 有操作.要么一个也不执行。 ◆一致性(Consistency):得到一致 的结果,隐蔽中间状态的改变。事务的作 用就是保持不变性 ◆隔离性(Isolation):枉事务成功完 成之前.各项操作的结果都不能}业外界所 见。 ◆持九性(I)1wability),薜务完成之 后,其作用将永久保留在系统中 但是在WEB服务中. ・个松耦合的 分布式环境中.要求满足这四个性质是 还不太实际。 为,一方面在有螳情况要 用补偿来回滚事务,另一方面有些事务可 能发生一些比较复杂的故障.而无法确定 原因。迁有传统的锁定技术会把资源锁定 几个小时.或者几天,薜至垂长地时间.这 样导致其它的事务长时间的等待是不合理 的.这时就必需臻引进 个新的算法或著 是一种新的技术来解决选种锁定 此外. 离性在分布武环境F一直 是一个比较热的话题,闽为商业上厦埘资 源的不确定的锁定。 为此需放宽AC1D的定义.…如表1。 二.2PC协议 2.I原理 2PC(两阶段提交)是一个原予事务 .定殳了多个参与者如何就一个原_】!. 事务的输出结果这成・致。它可以分为两 个阶段:准备阶段和提交阶段。在准备阶 段,每一个参与嚣就结 进行投票,要求 垒部同意提交才能提交.否则Rollback。 陶1这个状态嘲指定了在协谰程序与 它的其中一个器与者喹换消息刖双向}办故 的行为”J。状态j互映双方时它仃l之间关系 的丁解。省略r一些细节问题.比如因}办 议错误而覆新发送消息或暂交换错误消息。 佯细情况可以参考文献”。。 惆程序发送Prepare、Rollback和 Commi e消息。 参与者返回Prepared.Aborted、 性质 顾子事务 K删搿舟 原子性 垒做戏仝 做 绌粜m Coordinator和pa,licipmlt商议确定 一致性 秆j到一致的绌聚.胁 中恻状 褂到,敛ffJ鲇 .略微巾n;lJ状忐的改变 们足客户 志的改变 Coordinator出,U“ ・・}lJl”状卷舶列艟决定站粜。 躏尚性 埘见』壁幂『妁l嫩性艘般务控制 IIf地_堑乖¨约嫩性被舭务拧沌4 持久性 窒占粜的持久稳定性 蚰 的持久秘l 性,仍付 l lI】能 稳定
I62 表1 ACI
D的定义 维普资讯 http://www.cqvip.com l 图2 2PC时序图
163 ReadOnly和Committed消息 图2表示客户端调用两个参与者,成功提交两阶段事务的序列 图。 对图中的步骤解释如下: 1.客户发送begin信息到协调器开始一个事务,协调器产生 一个事务上下文context返回给客户端。上下文和其它交互作用 信息在参与者和协调者之间流动,是上下文把整个集合的动作粘 合在一起形成一个事务活动。协调器记录该context--直到事务完 成。 2.返回上下文给客户。 3.客户用context}/II调用信息来调用参与者。Context的作用 是通知参与者要到协调器上注册。因为context是包含在soap信 息的头部,如果要调用的web服务没有处理事务这一功能,也不 会影响到正常调用。 4.参与者拿到包含有事务上下文的调用信息,会到context 指定的协调器上注册(或是本地协调器,再把本地协调器当作远 程协调器的下一级),这时参与者进行町回滚的操作,并把操作 记录到日志上,以便以后进行回滚,然后把结果返回给客户。 5.协调者记录参与者,把它作为事务的一个资源记录下来。 然后返回注册成功的信息。 6.参与者把操作结果返回给客户。 7.同第3步。 8.同第4步。 9.同第5步。 l0.同第6步。 1 1.客户根据返回的消息进行确认,用context来通知协调者 提交哪一个事务。 1 2.协调器根据context找到对应事务的资源,发送prepare 信息,通知参与者准备提交事务。准备意味着准备好接受提交或 回滚的命令。 l3.参与者接到prepare消息,进行试探性的提交,并记录 在日志中。返回prepared消息,说明已经准备好了,可以提交了。 否则,返回Rollback。 l4.同第12步。 l5.同第l3步。 l6.协调器根据参与者的“投票结果”,发出提交或者回滚信 息,并记录在日志上。 1 7.参与者接到提交信息,进行提交,这时才是真正的操 作。如果操作成功则返回committed。 18.同第16步。 l9.同第17步。 20最后返回最终结果给客户,事务成功或者失败。 假设有两个Coordinator,一个上级的,一个下级的,要 进行两阶段提交,可以这样进行:首先,上级的Coordinator 向下级的Coordinator和participant发出prepare消息,然后, 下一级的Coordinator进行第一阶段提交,即向它的participant 发出prepare消息,如果所有的participant返回prepared消息, 则它向上一级的Coordinator返回prepared,否则的话返回 Aborted。接下来,上一级的Coordinator根据返回的消息进行 第二阶段提交。当下一级的接到消息后,进行第二阶段提交, 把最终结果返回给上一级。相应的时序图见图3(N设下 ‘级有两 l 。
维普资讯 http://www.cqvip.com 个参与者)。 3.2故障的数据恢复 恢复处理其实不是两阶段提交的‘部 分。不过更确切地说,2PC启用恢复。也 就是说,因为所有的协调器使用2PC,它 们可以执行这里所描述的动作并且保证数 据的完整性。通过确认所有的可恢复的动 作或者向前或者后退来维持数据的完整性。 据恢复使用基于事务状态的规则, 其中事务状态是由协调器和参与者记录 的。这里给出恢复规则。故障发生后: ◆如果协调器不了解事务(换句话 说,是在协调器日志上有记录之前),那么 恢复规则是撤销所有的动作 ◆如果协调器了解事务,但是事务状 态是Active或preparing,那么规则是 撤销所有的动作。 ◆如果协调器了解事务且事务状态是 Committing,那么规则是提交所有的动 作。同样,如果状态是Aborting,那么 规则是撤销所有的动作。 ◆如果参与者发现有不完全的事务, 就根据记录信息,联系协调器。如果协 圈科技信息2006年第9期 CHINA SClEt,CE_^柚-- .a制瓯_c旧 州陶 ^铆 2。晤≯ %
调器没有发现该事务,则参 者回滚事 务。如果协调器发现了此事务,则根据 协调器的信息重新进事务的提交。 三.BPEL流程中的事务框架 由于在BPEL巾,整个流程的生命周 期有可能是长时间的,比如人工的参与审 批。因此事务也可能是长事务,那么上面 所讲的2PC就不适应了,为此,本文扩展 了2PC协议,并把整个流程划分为若干个 原子事务的组合,任个个部分应用扩展的 2PC协改(图4)。 可以在BPIeL引擎中加进一个协调 器,作为默认的流程协调器。另外提供 一个porttype包括三个operation:begin, commit和cancel,为用户在流程叶1来调 用,分别作为事务的开始,提交和回 滚。用户在书写流程的时候可以在流程 中调用begin操作,和commit或者cancel 操作,来确定事务的范围。引擎在执行 流程的时候,首先扫描整个流程看否有 上述的两个标识,若有引擎就会到协调 器上注册一个协调 下文,拿到协调卜 下文后,在调用事务范围之内的WEB服
图3两级协调器的2PC时序图 务的时候,会自动的把协调上下文加到 SOAP消息的头部。当流程执行到commit 或者cancel时,引擎自动发送提交或回滚 消息到协调器上,进行2PC提交。 另外,用户还可以在调用begin时传 入协调器的地址,这时引擎就会把此协调 器当作流程中的事务协调器。 图5展示了在BPEL中整合事务的框 架图。 四、实例 接下来讲的是一个旅游公司为客户提 供的一个服务,通过它客户可以订购机 票和旅馆。大概流程如下:首先,客户 访问首页,浏览可以订购的机票和旅 馆,然后根据自己的情况选择机票和旅 馆,然后提交。提交之后要进一步的确 认,因为有可能在你选择的时候被他人 订购了或者出现其它意外,那么客户需 要重新订购。当订购成功之后,就会返 回成功信息,否则返回错误信息。整个 事务原则是要么机票和旅馆都订购成功, 要么都失败。所以 以用两阶段提交来 保证。 </pat ̄nerLinks> <variables>
图5
164
图4 维普资讯 http://www.cqvip.com </variables> <sequence> <!~接收客户的访问信息~> <receive name--”receivelnput”…/> <! 分别调用航空公司和旅馆的服务,得到可以订购的机 票和旅馆 > <invoke name=”getFight”…/>  ̄I'IVoke name=”getHotel”…/> <I_返回机票和旅馆信息给用户一一> <reply name= validedFightHotel”…/> <I_一接收客户的ir购信息一一> <receive name=”receiveBook”…/> <!一到事务服务器上注册一个事务 > <invoke name= begin”…/> <! 根据订购信息调用航空公司和旅馆的定购服务 _)<invoke name=”bookFignt”…/> <invoke name="bookHotel”…/> <卜-返回订购信息给客 户一一><reply name=”lx ̄okedMessage”.../> <I_接收客户的确认信息 > <r e c e i v e n a m e=“r e c e i v e C O n fi r m” vafiaMe=”bookMessage”…/> <I_一根据确认信息进行两阶段提交事务 > <switch name= switch-1 ’> <case condition=”bpws:getVariableData (’lx ̄klvIessage。)=’confirm > <sequence> <invokeDame=”co ̄hnn”…/> </sequence> </case> <otherwise> <sequence> <invoke name=…concel”…