




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
支付宝分布式事务介绍,2009年7月27日核心开发组红雪,21:45,1,What-分布事务快速浏览Why-为什么要引入分布事务How-如何实现分布事务Warning-注意点,21:45,2,大纲,21:45,3,事务,复习,操作时间,资源位置,A1,1,2,3,4,5,A,B,C,C2,B3,C4,A5,事务1,事务2,事务3,事务:由一组操作构成的可靠、独立的工作单元ACID:Atomicity(原子性)Consistency(一致性)Isolation(隔离性)Durability(持久性)难点:高度并发资源分布大时间跨度,21:45,4,本地事务,本地事务事务由资源管理器(如DBMS)本地管理优点支持严格的ACID属性可靠高效状态可以只在资源管理器中维护应用编程模型简单(在框架或平台的支持)局限不具备分布事务处理能力隔离的最小单位由资源管理器决定,如数据库中的一条记录,应用/应用服务器/应用框架AP,资源管理器RM,开始会话,开始事务,操作1,操作n,提交/回滚事务,完成会话,锁,日志,复习,21:45,5,全局事务(DTP模型),复习,5,资源管理器RM2,应用/应用框架/应用服务器AP,资源管理器RM1,3.操作1.n,6.提交事务,事务管理器TM,1.开始全局事务,2.注册资源1,4.注册资源2,5.操作1.n,7.准备,8.准备,9.提交,10.提交,全局事务事务由全局事务管理器全局管理事务管理器管理全局事务状态与参与的资源,协同资源的一致提交/回滚TX协议应用或应用服务器与事务管理器的接口XA协议全局事务管理器与资源管理器的接口,21:45,6,两阶段提交(TwoPhaseCommit),复习,准备操作与ACIDA:准备后,仍可提交与回滚C:准备时,一致性检查必须OKI:准备后,事务结果仍然只在事务内可见D:准备后,事务结果已经持久局限协议成本(准备操作是一定必须的吗)准备阶段的持久成本全局事务状态的持久成本潜在故障点多带来的脆弱性准备后,提交前的故障引发一系列隔离与恢复难题,事务管理器TM,资源管理器RM1,1.准备,OK,3.提交,OK,资源管理器RM2,2.准备,OK,4.提交,OK,事务管理器TM,资源管理器RM1,1.准备,OK,3.回滚,OK,资源管理器RM2,2.准备,NO,4.回滚,OK,6,21:45,7,网关未独立前:一条龙,回顾,7,账务处理逻辑,iwallet,交易处理逻辑,主库,网银处理逻辑,持久操作1,持久操作2,持久操作4,提交/回滚本地事务,持久操作3,21:45,8,网关独立部署,回顾,账务处理逻辑,iwallet,交易处理逻辑,主库,网银处理逻辑,持久操作1,持久操作2,持久操作3,bankgw,账务处理逻辑,通知,持久操作4,提交/回滚本地事务,提交/回滚本地事务,21:45,9,交易服务化进程,回顾,账务处理逻辑,trade,交易处理逻辑,主库,网银处理逻辑,持久操作1,持久操作2,持久操作4,bankgw,通知,持久操作4,提交/回滚本地事务,提交/回滚本地事务,账务处理逻辑,iwallet,持久操作3,提交/回滚本地事务,21:45,10,账务服务化,回顾,主库,持久操作4,bankgw,账务库,trade,acctrans,持久操作1,持久操作2,持久操作3,确保通知,提交/回滚分布事务,提交/回滚分布事务,21:45,11,双峰插云,回顾,主库,持久操作1,mipgw,账务库,paycore,acctrans,持久操作3,持久操作2,提交/回滚嵌套分布事务,支付库,21:45,12,基本原则,集成,适用场景业务活动中包括账务参与者的只要操作账务,必须使用分布式事务,支付宝系统特有账务是作为默认参与者存在的多个业务活动参与者之间必须保持语义状态一致性的可选,对于非实时类业务,可使用高可靠的ESB消息完成一致性遵守必须在本地事务块中开启分布式事务;必须使用全局唯一的主事务号,21:45,13,工作原理及步骤,集成,业务系统开启本地事务块;启动一个业务活动;事务同步器持久化此业务活动记录至DB,并将主事务号存放至本地线程变量中;业务系统开始调用账务服务:账务的服务接口参数列表的txId主事务号是无需设置的,事务同步器会用本地线程变量内的主事务号替换之;账务前置进行账务处理后同步响应处理结果;业务系统分析账务处理结果,如正常则提交本地事务块;事务同步器调用账务交易结束器完成账务提交,如账务提交失败则后续等待分布式事务恢复查询继续尝试提交,直至账务提交完成为止;若本地事务回滚,同步器则调用账务交易结束器完成账务回滚,如账务回滚失败则后续等待分布式事务恢复程序继续尝试回滚,直至账务回滚成功为止。,21:45,14,示例代码,集成,publicAccountTransResultfoo()return(AccountTransResult)transactionTemplate.execute(newTransactionCallback()/确保在本地事务块中publicObjectdoInTransaction(TransactionStatusstatus)AccountTransResulttransResult=null;trybusinessActivityControlService.start(.);/启动业务活动transResult=accountTransFacade.freezeAccountBalance(null,.);/请求账务交易处理/判断账务前置处理结果if(transResult.isSuccess()localBizHandle();/本地业务逻辑处理localDBHandle();/本地数据持久处理elselogger.error(.);、status.setRollbackOnly();/显式回滚catch(Exceptione)logger.error(.);status.setRollbackOnly();/显式回滚returntransResult;);,21:45,15,本地事务模板,集成,transactionTemplate使用主库dataSource:在本地事务提交/回滚发生时,主事务记录(处于主库)的提交/回滚状态可做到确保一致;当事务同步器无法顺利提交/回滚账务操作,则分布式任务恢复程序在进行恢复时无需回查业务当前状态使用非主库dataSource:在本地事务提交/回滚发生时,主事务记录(处于主库)的提交/回滚状态无法做到确保一致;当事务同步器无法顺利提交/回滚账务操作,则分布式任务恢复程序在进行恢复时需要回查业务当前状态,21:45,16,回查实现示例代码,集成,/*(non-Javadoc)*seecom.alipay.sofa.platform.xts.bacs.spi.BusinessActivityStateResolver#isDone(java.lang.String,java.lang.String)*/publicintisDone(StringbusinessType,StringbusinessId)if(StringUtil.isBlank(businessType)|StringUtil.isBlank(businessId)logger.error(严重异常:参数不全;尝试解释业务活动状态businessType=+businessType+;businessId=+businessId+时。);returnBusinessActivityStateResolver.UNKNOWN;return(Integer)transactionTemplate.execute(newTransactionCallback()publicObjectdoInTransaction(TransactionStatusstatus)if(StringUtil.equals(WithdrawBusinessType.BALANCE,businessType)tryWithdrawInstructionDOdata=withdrawInstructionDAO.lock(businessId);if(data=null)logger.error(严重异常:支付指令数据不存在;尝试解释业务活动状态businessType=+businessType+;businessId=+businessId+时。);returnBusinessActivityStateResolver.UNKNOWN;elseif(StringUtil.equals(InstructionStatusEnum.PRE_ACCREDITED.getCode(),data.getStatus()logger.warn(成功解释业务活动状态businessType=+businessType+;businessId=+businessId+:未执行。);returnBusinessActivityStateResolver.NOT_DONE;elseif(StringUtil.equals(InstructionStatusEnum.SUBMIT_SETTLED.getCode(),data.getStatus()logger.warn(成功解释业务活动状态businessType=+businessType+;businessId=+businessId+:已执行。);returnBusinessActivityStateResolver.DONE;elselogger.error(严重异常:支付指令数据状态不正常,当前状态:+data.getStatus()+;尝试解释业务活动状态businessType=+businessType+;businessId=+businessId+时。);returnBusinessActivityStateResolver.UNKNOWN;catch(Exceptione)logger.warn(警告:数据库异常;尝试解释业务活动状态businessType=+businessType+;businessId=+businessId+时。,e);returnBusinessActivityStateResolver.UNKNOWN;elselogger.error(严重异常:无需进行业务活动解释的类型;尝试解释业务活动状态businessType=+businessType+;businessId=+businessId+时。);returnBusinessActivityStateResolver.UNKNOWN;);,21:45,17,启动业务活动,集成,businessActivityControlService.start(.);,业务活动的启动有两种方式:带参数:businessType+businessIdbusinessType:业务活动类别,每个类别的前三位对应到某个业务类型,后三位是对此业务类型的具体操作;如002代表提现,而002001代表提现申请中的冻结部分businessId:业务数据的ID或可以唯一定位到业务数据的key无参数:系统自动分配业务活动ID(全局唯一)推荐使用以businessType+businessId方式启动业务活动:根据businessType可准确定位至业务及操作,便利了对故障的分析、排查、以及出错系统的快速定位利用businessType的前三位,分布式任务恢复程序可以找到正确的回查实现者通过businessId,可以迅速的定位到具体的业务数据、日志信息等,21:45,18,分布任务恢复回查配置,集成,、,21:45,19,配置,集成,accountTransActionInterceptor,21:45,20,配置,集成,com.alipay.acctrans.service.facade.AccountTransFacadeaccountTransFacadeMulePort$acctrans_service_url/services/accountTransFacade$acctrans_service_url/services/accountTransFacade?wsdl20000,21:45,21,配置,集成,com.alipay.sofa.platform.xts.bacs.spi.AccountTransFinalizeraccountTransFinalizerMulePort$acctrans_service_url/services/accountTransFinalizer$acctrans_service_url/services/accountTransFinalizer?wsdl20000,21:45,22,配置,集成,businessActivityDAObusinessActionDAO,21:45,23,配置,集成,mand.result.ResultCmon.enums.MessageEnumcom.alipay.acctrans.core.module.enums.FreezeBalanceTypeEnumcom.alipay.acctrans.core.module.enums.AccountMemoEnumcom.alipay.acctrans.core.module.enums.TransResultEnumcom.alipay.acctrans.core.module.enums.TransCodeEnumcom.alipay.acctrans.core.module.enums.SubTransCodeEnumcom.alipay.acctrans.core.module.enums.TerminalEnumcom.alipay.acctrans.core.module.enums.ChannelEnumcom.alipay.acctrans.core.module.enums.AccountTypeEnumcom.alipay.acctrans.core.module.enums.AccountEnableStatusEnumcom.alipay.acctrans.core.module.enums.FreezeModelEnumcom.alipay.acctrans.core.module.en
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年环保项目合作协议环境监测数据保密合同
- 2025年绿色物流水路货运服务合同模板环保升级版
- 建设工程劳务大清包合同
- 排水管道焊接与接头技术方案
- 黑龙江省海林市朝鲜族中学2026届化学高一第一学期期中统考试题含解析
- 2026届河北省郑口中学高一化学第一学期期末调研模拟试题含解析
- 湿地湿度调控与管理方案
- 系统稳定性测试与验证方案
- 2025年汽车用品行业研究报告及未来行业发展趋势预测
- 幼儿园卫生会议记录范文
- 2024年广东南海控股集团有限公司招聘笔试冲刺题(带答案解析)
- QCSG1204009-2015电力监控系统安全防护技术规范
- 学校幼儿园消防安全风险自查检查指南
- 厚积落叶听雨声
- 《机械能及其转化》名师教案
- 智能制造基础与应用(第2版)教案 第二章 智能制造数字化基础 2.数字化设计与仿真
- 开学第一课假期收心主题班会 课件
- 中山酒店行业状况分析
- 船员劳动合同
- 液压车间生产管理制度
- 南城一中高三年级工作计划
评论
0/150
提交评论