【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

支付宝分布式事务测试方案

  • 2014-05-23
  • 本文字数:1283 字

    阅读完需:约 4 分钟

什么是分布式事务

传统的基于数据库本地事务的解决方案只能保障单个服务的一次处理具备原子性、隔离性、一致性与持久性,但无法保障多个分布服务间处理的一致性。因此,我们必须建立一套分布式服务处理之间的协调机制,保障分布式服务处理的原子性、隔离性、一致性与持久性。

支付宝为什么需要分布式事务

基于 SOA 架构,整个支付宝系统会拆分成一系列独立开发、自包含、自主运行的业务服务,并将这些服务通过各种机制灵活地组装成最终用户所需要的产品与解决方案。

在多个服务协同完成一次业务时,由于业务约束(如红包不符合使用条件、账户余额不足等)、系统故障(如网络或系统超时或中断、数据库约束不满足等),都可能造成服务处理过程在任何一步无法继续,使数据处于不一致的状态,产生严重的业务后果,所以我们需要一个分布式事务的解决方案, 用来协调多个服务的业务一致性。

支付宝的分布式事务框架

支付宝开发的分布式事务是基于两阶段提交的理论 (Two Phase Commit),首先给出两阶段提交的逻辑图:

为了能够有效的让框架进行分布式事务的提交、回滚等动作,框架需要在整个两阶段执行过程中记录下足够的信息,设计了两张表来记录相关信息:

分布式业务控制活动主表:记录了全局事务的活动状态;

原子业务活动表:记录了原子业务活动的状态;

我们用一个例子来说明:

看一个典型的分布式事务场景。

业务场景描述: 用户购买商品,使用支付宝余额支付;

测试方案

分析步骤

  • 角色定位
  • 各分支的业务活动记录状态
  • 梳理业务各个场景
  • 验证梳理场景
  • 恢复 & 回查机制

角色定位

首先测试人员需要分析所测试的系统处于分布式事务中的哪一个环节中, 是处于事务的发起者, 还是事务的参与者, 不同的角色的定位对于测试分析角度不同, 主要有以下的区别:

发起者:

分为同库 / 异库模式,主要区分是控制全局事务状态的主事务记录是否持久化在自己系统的 db 中;

参与者:

分为本地 / 远程模式,主要区分是是否可以创建嵌套的分布式事务;

各分支的业务活动记录状态

主事务记录:

根据业务场景的不同,主事务记录状态也会相应改变,主要的状态机变化如图所示,测试人员需要模拟业务场景来验证状态机的迁转是否正确;

同库:初始状态:I; 提交成功:C; 提交失败:I

异库:初始状态:U; 提交成功:U; 提交失败:U

梳理 & 验证业务场景

• 分析维度

  • 一阶段:预处理:成功 / 失败;
  • 二阶段:提交 / 回滚;
  • 预期结果
  • 各个状态场景

恢复 & 回查

  • 恢复:应用使用分布式事务,出现处理失败的业务活动,为了确保产生的影响不破坏业务一致性,我们必须对这些记录进行恢复处理
  • 回查:对于异库模式,事务状态为 U,若提交或回滚失败,分布式事务总控系统无法感知这笔分布式事务是否执行成功,需要业务系统提供相应的回查接口;

恢复及回查接口需要特别关注,对于分布式事务的正常二阶段提交或回滚,业务场景覆盖时多半都能 check 到,但是对于恢复及回查逻辑,很多时候都会遗漏,所以测试人员需要对这块特别做一个分析;


感谢侯伯薇对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-05-23 04:4912459

评论

发布
暂无评论
发现更多内容

未来的直播技术将会有哪些新的进化形式?

字节跳动视频云技术团队

互联网 科技革命 直播技术 低延时 音视频技术

网络安全kali渗透学习 web渗透入门 Metasploit---基于SMB协议收集信息

学神来啦

网络安全 kali kali Linux

记某核心MongoDB集群索引优化实践

MongoDB中文社区

mongodb

车辆GPS定位整套管理系统,轨迹播放,车辆管理,电子围栏,报警记录,数据库/人员定位/宠物定位/物流跟踪/资产定位

andy_zf

Java Java web GPS

JAVA只要掌握内部类,多继承和单继承都不是问题

华为云开发者联盟

Java jdk 多继承 内部类 单继承

一次代码审计实战案例【思路流程】

H

网络安全

通过蜜罐技术获取攻击者手机号、微信号【网络安全】

H

黑客 网络安全

阿里 BladeDISC 深度学习编译器正式开源

阿里云大数据AI技术

深度学习 开源 编译器

科创人·弘玑Cyclone CEO高煜光:从RPA到超自动化,以客户需求构建战略纵深

科创人

直播系统聊天技术(七):直播间海量聊天消息的架构设计难点实践

WorkPlus

网络安全:小记一次代码审计

网络安全学海

网络安全 信息安全 渗透测试 安全漏洞 代码审计

如何为招聘机构选择CRM系统

低代码小观

低代码 企业管理 企业管理系统 CRM系统

进入2022年,移动互联网的小程序和短视频直播赛道还有机会吗?

WorkPlus

2023总结

明明

基础

无需嵌码的主动式监测:一种预先感知用户体验的最佳实践

博睿数据

MongoDB常见问题解答:时间与时区

MongoDB中文社区

mongodb

基于大数据的医疗健康疾病筛查及风险评估系统

andy_zf

医疗方案 医疗AI 医疗信息化

构建测试的体系化思维(进阶篇)

BY林子

测试体系 质量内建

浙江省人民医院:用宜搭助力党建改革工作,重构医院重大事项议事决策机制

一只大光圈

钉钉 低代码 钉钉宜搭 宜搭 宜搭数字化

技术实践 | 如何给NVMe做RAID

沃趣科技

raid 硬盘

高级IO模型之kqueue和epoll

程序那些事

Java io nio 程序那些事 3月月更

2021年信创产业融资分析报告

统小信uos

云开发在教育应用开发、运维全流程实践

阿里云云效

云计算 阿里云 DevOps 云原生 开发

fastposter v2.5.1 发布 轻松在线作图

物有本末

Shopee Games 游戏引擎演进之路

Shopee技术团队

前端 游戏开发 egret 游戏引擎

理想很丰满,现实很骨感,坎坷前行的区块链产业化路在何方?

Akumas

区块链 数字化转型 新基建 十四五规划

关于 ZEGO 支撑 100 亿场高质量直播的秘笈

ZEGO即构

后台开发 CDN 音视频技术 音视频引擎

数字化背景下,为何J2PaaS低代码平台,能成为企业技术升级的优选?

J2PaaS低代码平台

低代码 数字化 企业数字化转型 低代码平台 企业级低代码平台

什么是SDK,它是怎样威胁我们的隐私?

郑州埃文科技

基于Java+SpringMVC+MySql+Layui+H5实现企业门户网站

andy_zf

网站建设

2022年炙手可热的边缘计算与端智能

战场小包

边缘计算 端智能 3月月更

支付宝分布式事务测试方案_语言 & 开发_李跃_InfoQ精选文章