支付宝分布式事务介绍PPT课件.pptx_第1页
支付宝分布式事务介绍PPT课件.pptx_第2页
支付宝分布式事务介绍PPT课件.pptx_第3页
支付宝分布式事务介绍PPT课件.pptx_第4页
支付宝分布式事务介绍PPT课件.pptx_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

支付宝分布式事务介绍 2009年7月27日核心开发组红雪 2020 3 22 1 What 分布事务快速浏览Why 为什么要引入分布事务How 如何实现分布事务Warning 注意点 2020 3 22 2 大纲 2020 3 22 3 事务 复习 操作时间 资源位置 A1 1 2 3 4 5 A B C C2 B3 C4 A5 事务1 事务2 事务3 事务 由一组操作构成的可靠 独立的工作单元ACID Atomicity 原子性 Consistency 一致性 Isolation 隔离性 Durability 持久性 难点 高度并发资源分布大时间跨度 2020 3 22 4 本地事务 本地事务事务由资源管理器 如DBMS 本地管理优点支持严格的ACID属性可靠高效状态可以只在资源管理器中维护应用编程模型简单 在框架或平台的支持 局限不具备分布事务处理能力隔离的最小单位由资源管理器决定 如数据库中的一条记录 应用 应用服务器 应用框架AP 资源管理器RM 开始会话 开始事务 操作1 操作n 提交 回滚事务 完成会话 锁 日志 复习 2020 3 22 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协议全局事务管理器与资源管理器的接口 2020 3 22 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 2020 3 22 7 网关未独立前 一条龙 回顾 7 账务处理逻辑 iwallet 交易处理逻辑 主库 网银处理逻辑 持久操作1 持久操作2 持久操作4 提交 回滚本地事务 持久操作3 2020 3 22 8 网关独立部署 回顾 账务处理逻辑 iwallet 交易处理逻辑 主库 网银处理逻辑 持久操作1 持久操作2 持久操作3 bankgw 账务处理逻辑 通知 持久操作4 提交 回滚本地事务 提交 回滚本地事务 2020 3 22 9 交易服务化进程 回顾 账务处理逻辑 trade 交易处理逻辑 主库 网银处理逻辑 持久操作1 持久操作2 持久操作4 bankgw 通知 持久操作4 提交 回滚本地事务 提交 回滚本地事务 账务处理逻辑 iwallet 持久操作3 提交 回滚本地事务 2020 3 22 10 账务服务化 回顾 主库 持久操作4 bankgw 账务库 trade acctrans 持久操作1 持久操作2 持久操作3 确保通知 提交 回滚分布事务 提交 回滚分布事务 2020 3 22 11 双峰插云 回顾 主库 持久操作1 mipgw 账务库 paycore acctrans 持久操作3 持久操作2 提交 回滚嵌套分布事务 支付库 2020 3 22 12 基本原则 集成 适用场景业务活动中包括账务参与者的只要操作账务 必须使用分布式事务 支付宝系统特有账务是作为默认参与者存在的多个业务活动参与者之间必须保持语义状态一致性的可选 对于非实时类业务 可使用高可靠的ESB消息完成一致性遵守必须在本地事务块中开启分布式事务 必须使用全局唯一的主事务号 2020 3 22 13 工作原理及步骤 集成 业务系统开启本地事务块 启动一个业务活动 事务同步器持久化此业务活动记录至DB 并将主事务号存放至本地线程变量中 业务系统开始调用账务服务 账务的服务接口参数列表的txId主事务号是无需设置的 事务同步器会用本地线程变量内的主事务号替换之 账务前置进行账务处理后同步响应处理结果 业务系统分析账务处理结果 如正常则提交本地事务块 事务同步器调用账务交易结束器完成账务提交 如账务提交失败则后续等待分布式事务恢复查询继续尝试提交 直至账务提交完成为止 若本地事务回滚 同步器则调用账务交易结束器完成账务回滚 如账务回滚失败则后续等待分布式事务恢复程序继续尝试回滚 直至账务回滚成功为止 2020 3 22 14 示例代码 集成 publicAccountTransResultfoo return AccountTransResult transactionTemplate execute newTransactionCallback 确保在本地事务块中publicObjectdoInTransaction TransactionStatusstatus AccountTransResulttransResult null try businessActivityControlService start 启动业务活动transResult accountTransFacade freezeAccountBalance null 请求账务交易处理 判断账务前置处理结果if transResult isSuccess localBizHandle 本地业务逻辑处理localDBHandle 本地数据持久处理 else logger error status setRollbackOnly 显式回滚 catch Exceptione logger error status setRollbackOnly 显式回滚 returntransResult 2020 3 22 15 本地事务模板 集成 transactionTemplate 使用主库dataSource 在本地事务提交 回滚发生时 主事务记录 处于主库 的提交 回滚状态可做到确保一致 当事务同步器无法顺利提交 回滚账务操作 则分布式任务恢复程序在进行恢复时无需回查业务当前状态使用非主库dataSource 在本地事务提交 回滚发生时 主事务记录 处于主库 的提交 回滚状态无法做到确保一致 当事务同步器无法顺利提交 回滚账务操作 则分布式任务恢复程序在进行恢复时需要回查业务当前状态 2020 3 22 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 try WithdrawInstructionDOdata 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 else logger error 严重异常 支付指令数据状态不正常 当前状态 data getStatus 尝试解释业务活动状态 businessType businessType businessId businessId 时 returnBusinessActivityStateResolver UNKNOWN catch Exceptione logger warn 警告 数据库异常 尝试解释业务活动状态 businessType businessType businessId businessId 时 e returnBusinessActivityStateResolver UNKNOWN else logger error 严重异常 无需进行业务活动解释的类型 尝试解释业务活动状态 businessType businessType businessId businessId 时 returnBusinessActivityStateResolver UNKNOWN 2020 3 22 17 启动业务活动 集成 businessActivityControlService start 业务活动的启动有两种方式 带参数 businessType businessIdbusinessType 业务活动类别 每个类别的前三位对应到某个业务类型 后三位是对此业务类型的具体操作 如002代表提现 而002001代表提现申请中的冻结部分businessId 业务数据的ID或可以唯一定位到业务数据的key无参数 系统自动分配业务活动ID 全局唯一 推荐使用以businessType businessId方式启动业务活动 根据businessType可准确定位至业务及操作 便利了对故障的分析 排查 以及出错系统的快速定位利用businessType的前三位 分布式任务恢复程序可以找到正确的回查实现者通过businessId 可以迅速的定位到具体的业务数据 日志信息等 2020 3 22 18 分布任务恢复回查配置 集成 2020 3 22 19 配置 集成 accountTransActionInterceptor 2020 3 22 20 配置 集成 com alipay acctrans service facade AccountTransFacadeaccountTransFacadeMulePort acctrans service url services accountTransFacade acctrans service url services accountTransFacade wsdl20000 2020 3 22 21 配置 集成 com alipay sofa platform xts bacs spi AccountTransFinalizeraccountTransFinalizerMulePort acctrans service url services accountTransFinalizer acctrans service url services accountTransFinalizer wsdl20000 2020 3 22 22 配置 集成 businessActivityDAObusinessActionDAO 2020 3 22 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 enums BalanceDirec

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论