基于MySQL和PHP的分布式事务处理.pdf

4星(超过85%的资源)
所需积分/C币:50 2012-10-24 15:41:52 987KB PDF
65
收藏 收藏
举报

在讨论分布式事务处理模型及事务提交协议的基础上, 针对实际应用中的银行转账模型, 分 析一般分布式事务处理失败的原因, 给出基于XA接口的MySQL( 关系型数据库管理系统) 和 PHP( 超级文本预处理语言) 对分布式事务处理的实现方法和过程. 研究结果表明, 该分布式事务 处理方法可靠, 并可简化程序的实现.
黄雅萍,等:基于 MySQL和PHP的分布式事务处理 MYSOL // write log∥/ PHP PDO 2.2 MySQL PHP ATM (CCB (ICBC B MySQL PHP (1) ID (CCB) 10000RMB (ICBC) 20000RMB I5RMB B Server24( Serverl MYSQL 3 XA PHP MYSQL PHP //S money S logfilepath XA MySQL PHP function transaction($ money, s logfilepath)[ XA MYSQL PHP a B MYSOL S conn24= new My SQLi("172. 16.0. 248" PHP XA My SQL MySQL root",,test") XA RM S com18= new My SQL("172. 16.0. 243", MySQL PHP root,password",test") conn24-> query( Set auo Commit= O) S conn18-> query( Set auoCommit = O $sq1=?;S12=? S return 4= conn24->query (s sql 1) S return18=$ conn18-> query($ sql2); (2pc if(s retum24&$ retum18) //commit }else{∥ throw exception 3 catch(Exception S e)i 3.2 MySQL PHP /rol lback o1994-2012 China Academic Journal Electronic Publishing House. Au X Nnts reser MySOL PhPw cnki. net 东华大学学报(自然科学版) 37 务处理,解决2.1节所列举的操作实例转账过程的 任何一个环节出现问题,整个交易过程失败,记录相 执行失败抛出异常 应的错误信息至由账户和时间组成的唯一文件中.如 f( Server执行失败){ 果两个过程都成功,整个交易完成、转账成功,记录转 /在所在 Server操作失败写入标识为账户 账金额日志表.对于引入XA概念的分布式事务处 和日期的文件 理,有一个对应的XA标识(XID)生成,这个X1D必 cls 须是唯一的,任何一个事务执行都从一个独一无二的 在数据库记录操作日志 XID开始直至结束.本例中模拟是否出现异常主要通 过是否获取用户的标识号(ID)判断.值得注意的是, /1pc结束 不管操作成功或出现异常情况,都要在1pc结束且 $conn24一> query(" XA END′$xid"); 2pc准备好后才执行2pc,否则数据无法回滚或提交 S conn18-> query(XA END' xid"); 以下代码实现相应分布式事务处理过程: 12pc准备阶段 ∥始化账户A和B的数据库连接 S conn24-> query(XA PREPARE S conn24 new MySQL("172.16.0.248 'S xid");S conn18- query("XA root PREPARE S xid") S conn18= new MySQLi("172.160.243 /2pc执行阶段 roo t","password","test" ); S conn24-> query(XA COMMIT '$ xid") 随机生成数字表示存取钱 S conn18-> query("XA COMMIT'S xid") S account rand(1, 1000) ∥生成唯一XA的ID编码 ∥/异常处理并回滚 S xid= datc("Ymd").timc( catch(Exception $c)i 1lpc开始 1pc结束 S conn24-> query ("XA START S xid") S conn24-> query("XA END S xid); S conn18->query("XA START 'SS xid") S conn18-> query("XA END$ xid") /模拟异常数据现象 /2pc准备阶段 s values= array(1,) S conn24 query("XA PREPARE S idl= S values rand(0, 1)1 S xid"); S conn18-> query("XA PREPARE S id2=$[rand(0,1) S xid"); 模拟存取过程 2pc回滚阶段 Sops= array ("+","-");Sop= S opsl rand(o S conn24-> query( " XA ROLLBACK 1)] S xid"); S conn18-> query("XA ROLLBACK if( S op +"){ S xid ") S action24="CCB Turn In";S 8 -"ICBC Turn Out";S op24 + 关闭账户A和B连接 opI 18 图3~8分别示出了银行转账成功和失败过 else 程.图3为分布式事务执行成功的过程,从图3可 $ action24=" CCB Turn Out";以看出,运行在两台 Server上的事务被正确执行 $ action18=" ICBC Turn In";$op24并将成功信息写入日志,此时账目情况如图4和5 ;Sop18="+" 所示 图6示出了银行转账失败的执行过程.假设客户 ∥获取 Server24和 Server18的账户余额语句 希望从甲银行的账户∧转账9RMB到乙银行的账户 try B上,从图6可知,事务执行过程中,由于 Server24(甲 对转账过程相关数据进行操作和日志记录 银行)机器执行出现问题,虽然 Server18(乙银行)仍继 $ return1=$conn24-> query($sq124);续执行,但由于分布式事务的某个分支事务出现问题, $ return2=$conn18-> query($sq18);使得整个分布式事务被回滚,转账失败;此时再查看账 o1994-2012ChinaAcademicJournalElectronicPublishingHouse.Allrightsreservedhttp://www.cnki.net 黄雅萍,等:基于 MySQL和PHP的分布式事务处理 85 食,此HM,kh,即南 如计m1到购1,,m, 2.2 腰T’210013612549871” whele Traction Se Fig 3 Success of dis tributed transaction processing ⅩA MYSOL PHP log date ccount id account leave account type account number 口px20100126126449871 1 20015 ICBC Receive XA Serv Fig. 4 Log on server 24 shows success of distributed transact ion process ing log_date account_id account_ leave account_ type account_number 口x201001261264498871 85 CCB Give ⅩA Serverl 8 Lo Fig 5 Log on server 18 shows success of dis tr ibuted transact ion process ing 78 212+1kshA121021/h/t,.eh/hh,x er1 a YA START'20100128126449927g CCB Give Money To ICBC, The Number Is: 9 UPDATE Lser Account sET account=accaunt-9 WhERE id= PDAE Iser Account sEt account=account+9 WhERe id=l CCB Fail Serverl& XA EI’2010c1261264499278 XA er18 AA PREPARE20100126126149927 Server24 ROLLBACK'201001261254499272 erver18 XA ROLLBACK201001261254499273 MYSOL PHP The Whole Traction Feil Fig.6 Failure of distributed t ransaction pr oces sing iD User D Account 口2×1 1 9985 PHP IMI 2002 24A Fig.7 Account on Server24 shows failure of distributed transact ion process ing 2002,22(8):46 [3 The Open Group. X/Open Cae Sp ecif icat ion Distributed ID User D Account Transaction Process ing: The XA Specifi cat ion [M1.U K: X 口少×1 Open Com pany Ltd, 1991 20015 009,31(3):23+241 Serverl8 a ccount Fig 8 Account on Serverl 8 shows failure of [5] WH, WANG Y, PU C. A Dy namie Tw e Phas e Commit distributed trans act ion process in g Protocol for Self Adapting Ser vices I C|//2004 IEEE Internat ional Conference on Services Com put ing. Shan ghai XA MySQL PHP IEEE Computer Society, 2004: 715. [6] SPILLE M XA ExPoSed, Part IEBOL].(20100122)[200404 031.http:/!www.jroller.com/pyrasun/entry/xa_expose 才JAⅤAEYP PHP [EB/OL].(2010 0h22)[200909211.http://www.javaeye.com/ o1994-2012ChinaAcademicJournalElectronicPublishingopid4s071gilrightsreservedhttp://www.cnki.net

...展开详情
试读 5P 基于MySQL和PHP的分布式事务处理.pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
Linland 不错,容易上手。
2014-06-03
回复
goosoo_msn 不错,容易上手。
2013-08-09
回复
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
基于MySQL和PHP的分布式事务处理.pdf 50积分/C币 立即下载
1/5
基于MySQL和PHP的分布式事务处理.pdf第1页

试读结束, 可继续读1页

50积分/C币 立即下载 >