转载分布式事务
微服务架构的分布式事务解决方案
分布式系统架构中,分布式事务问题是一个绕不过去的挑战。而微服务架构的流行,让分布式事问题日益突出!
下面我们以电商购物支付流程中,在各大参与者系统中可能会遇到分布式事务问题的场景进行详细的分析!
如上图所示,假设三大参与平台(电商平台、支付平台、银行)的系统都做了分布式系统架构拆分,按上数中的流程步骤进行分析:
1、电商平台中创建订单:预留库存、预扣减积分、锁定优惠券,此时电商平台内各服务间会有分布式事务问题,因为此时已经要跨多个内部服务修改数据;
2、支付平台中创建支付订单(选银行卡支付):查询账户、查询限制规则,符合条件的就创建支付订单并跳转银行,此时不会有分布式事务问题,因为还不会跨服务改数据;
3、银行平台中创建交易订单:查找账户、创建交易记录、判断账户余额并扣款、增加积分、通知支付平台,此时也会有分布式事务问题(如果是服务化架构的话);
4、支付平台收到银行扣款结果:更改订单状态、给账户加款、给积分帐户增加积分、生成会计分录、通知电商平台等,此时也会有分布式事务问题;
5、电商平台收到支付平台的支付结果:更改订单状态、扣减库存、扣减积分、使用优惠券、增加消费积分等,系统内部各服务间调用也会遇到分布式事问题;
如上图,支付平台收到银行扣款结果后的内部处理流程:
1、支付平台的支付网关对银行通知结果进行校验,然后调用支付订单服务执行支付订单处理;
2、支付订单服务根据银行扣款结果更改支付订单状态;
3、调用资金账户服务给电商平台的商户账户加款(实际过程中可能还会有各种的成本计费;如果是余额支付,还可能是同时从用户账户扣款,给商户账户加款);
4、调用积分服务给用户积分账户增加积分;
5、调用会计服务向会计(财务)系统写进交易原始凭证生成会计分录;
6、调用通知服务将支付处理结果通知电商平台;
如上图,把支付系统中的银行扣款成功回调处理流程提取出来,对应的分布式事务问题的代码场景:
/** 支付订单处理 **/
@Transactional(rollbackFor = Exception.class)
public void completeOrder() {
orderDao.update(); // 订单服务本地更新订单状态
accountService.update(); // 调用资金账户服务给资金帐户加款
pointService.update(); // 调用积分服务给积分帐户增加积分
accountingService.insert(); // 调用会计服务向会计系统写入会计原始凭证
merchantNotifyService.notify(); // 调用商户通知服务向商户发送支付结果通知
}
本地事务控制还可行吗?
以上分布式事务问题,需要多种分布式事务解决方案来进行处理。
订单处理:本地事务
资金账户加款、积分账户增加积分:
TCC型事务
(或两阶段提交型事务),实时性要求比较高,数据必须可靠。
TCC每项操作需要做的事情如下:
1、Try:尝试执行业务。
- 完成所有业务检查(一致性)
- 预留必须业务资源(准隔离性)
2、Confirm:确认执行业务。
- 真正执行业务
- 不做任何业务检查
- 只使用Try阶段预留的业务资源
3、Cancel:取消执行业务
- 释放Try阶段预留的业务资源
用一张图来说明TCC的机制:
会计记账:
异步确保型事务
(基于可靠消息的最终一致性,可以异步,但数据绝对不能丢,而且一定要记账成功)
商户通知:
最大努力通知型事务
(按规律进行通知,不保证数据一定能通知成功,但会提供可查询操作接口进行核对)
针对上以分布式事务问题,龙果学院(http://www.roncoo.com)的《微服务架构的分布式事务解决方案》视频教程中将提供详细完整的方案供大家学习和应用
相关推荐
### 微服务架构中的分布式事务处理机制 ...通过合理选择和运用TCC型分布式事务方案、最大努力通知方案、可靠消息服务等技术手段,结合Dubbo等成熟框架的支持,可以有效应对分布式环境下的事务一致性挑战。
分布式事务课程列表: 第01节--课程介绍 第02节--解决方案的效果演示 第03节--常用的分布式事务解决方案介绍 第04节--消息发送一致性方案探讨(可靠消息的前提保障) 第05节--JMS规范的消息发送与接收特点 第...
LCN 分布式事务框架提供了多种模式以适应不同场景的需求,通过代理、补偿机制等手段,确保在分布式环境中实现事务的一致性和可靠性。在实际应用中,根据业务特点和需求选择合适的模式,同时充分利用其特性优化性能和...
最全分布式事务视频课程详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。...5.分布式事务解决方案之可靠消息最终一致性 6.分布式事务解决方案之最大努力通知 7.分布式事务综合案例分析
5. 最大努力通知(Best-Effort Notification):是一种基于事件驱动的分布式事务实现技术。它可以在分布式事务中提供实时性的通知机制,避免了事务的同步等待。 分布式事务应用场景: 1. 电子商务系统:分布式事务...
- **最大努力通知**:尝试多次执行事务,直到成功,但不保证事务一定能成功,适用于对事务一致性要求不高的场景。 4. 综合案例分析 - 分析实际场景中的分布式事务问题,如银行转账过程中涉及的账户服务和交易记录...
为了解决大家在实施分布式服务化架构过程中关于分布式事务问题的困扰,本教程将基于支付系统真实业务中的经典场景来对“可靠消息的最终一致性方案”、“TCC两阶段型方案”和“最大努力通知型方案”这3种柔性事务解决...
1. **分布式事务理论基础**:分布式事务的基本概念源于ACID(原子性、一致性、隔离性、持久性)原则,它要求分布式系统中的事务操作如同单机事务一样可靠。在分布式环境中,由于网络延迟、节点故障等问题,实现ACID...
可靠事件模式通过本地事件表和外部事件来确保事务的可靠性和最终一致性。 **5.1.1 本地事件表** 本地事件表是一种存储事务状态的机制,用于记录事务的关键信息,确保在事务执行过程中出现问题时可以从这些信息中...
最后,最大努力通知方案则是系统尽最大努力保证事务的最终一致性,但并不保证在任何情况下都能成功。在实际业务中,往往需要根据业务场景选择合适的分布式事务处理方案,以平衡系统的一致性、可用性和分区容忍性。 ...
分布式事务解决方案「手写代码」,完整版视频教程下载。 课程大纲 ...4.可靠消息最终一致性:唯有了解方案原理,方能熟悉RocketMQ的事务消息 5.最大努力通知:原来微信支付、支付宝的支付成功是这样的原理
【标题】"dubbo分布式TCC事务demo"是关于如何在分布式系统中...通过深入研究这个dubbo分布式TCC事务demo,开发者可以掌握如何在实际项目中应用TCC模式,解决分布式环境下的事务一致性问题,提升系统的稳定性和可靠性。
1. **最大努力通知**:通过多次尝试保证消息传递,但不保证可靠交付。 2. **可靠消息最终一致性**:异步确保消息的传递,确保事务最终达到一致。 3. **TCC(Try-Confirm-Cancel)**:两阶段提交的变种,通过预操作、...
为了解决大家在实施分布式服务化架构过程中关于分布式事务问题的困扰,本教程将基于支付系统真实业务中的经典场景来对“可靠消息的最终一致性方案”、“TCC两阶段型方案”和“最大努力通知型方案”这3种柔性事务解决...
本资料包提供了多种分布式事务解决方案的深入探讨,包括单块系统中的事务、两阶段提交、本地消息表、TCC(Try-Confirm-Cancel)方案、可靠消息最终一致性以及最大努力通知方案。 首先,单块系统里的事务主要指传统...
- **最大努力通知型方案**:这是一种相对简单的解决方案,主要用于那些不需要强一致性的业务场景,比如支付系统的商户通知业务场景。这种方式虽然不能保证绝对的一致性,但在大多数情况下可以满足需求。 #### 实现...
分布式事务解决方案「手写代码」,完整版视频教程下载。 从理论基础知识,从简入深进行讲解,在理论的基础上,通过「手写代码」进行分布式事务的实践。...课程设计到2PC/3PC、TCC、可靠消息最终一致性、最大努力通知。