本文来说下分布式事务模型之最大努力通知型分布式事务

文章目录

  • 概述
  • 最大努力通知型分布式事务
    • 举个例子
    • 特点剖析
  • 本文小结

概述

事务是一组不可分组的操作集合,这些操作要么都成功执行,要么都取消执行。最典型的需要事务的场景是银行账户间的转账:假如 A 账户要给 B 账户转账 100 元,那么 A 账户要扣减 100 元,B 账户要增加 100 元,这两个账户的数据变更都成功才可算作转账成功。更严格来说,可以用 ACID 四个特性表述事务:

  • Atomicity:原子性,事务中的所有操作要么都成功执行,要么都取消执行,不能存在部分执行,部分不执行的状态。
  • Consistency:一致性,举个例子简单的理解就是,A、B 两个账户各有 100 元,无论两个账户并发相互转账多少次,两个账户的资金总额依然是 200 元。
  • Isolation:隔离性,并发事务之间的相互影响程度,隔离性也是分级别的:读未提交、读已提交、可重复读等。
  • Durability:持久性,事务完成后对数据的更改不会丢失。

单体数据库不涉及网络交互,所以在多表之间实现事务是比较简单的,这种事务我们称之为本地事务。

但是单体数据库的性能达到瓶颈的时候,就需要分库(分物理实例),就会出现跨库(数据库实例)的事务需求;随着企业应用的规模越来越大,企业会进一步进行服务化改造,以满足业务增长的需求;当前微服务架构越来越流行,跨服务的事务场景也会越来越多。

这些都是分布式事务的需求。分布式事务是指是指事务的发起者、参与者、数据资源服务器以及事务管理器分别位于分布式系统的不同节点之上。

概括起来,分布式事务有三种场景:

  • 跨数据库分布式事务
  • 跨服务分布式事务
  • 混合式分布式事务


分布式事务中涉及的参与者分布在异步网络中,参与者通过网络通信来达到分布式一致性,网络通信不可避免出现失败、超时的情况,因此分布式事务的实现比本地事务面临更多的困难。下面介绍几种常见的分布式事务解决方案。


最大努力通知型分布式事务

最大努力通知型的分布式事务解决方案,也是基于 MQ 系统的一种解决方案,但是不要求 MQ 消息可靠。

举个例子

假设小明通过联通的网上营业厅为手机充话费,充值方式选择支付宝支付。整个操作的流程如下:

  • 小明选择充值金额“50 元”,支付方式“支付宝”。
  • 联通网上营业厅创建一个充值订单,状态为“支付中”,并跳转到支付宝的支付页面(此时进入了支付宝的系统中)。
  • 支付宝验明确认小明的支付后,从小明的账户中扣除 50 元,并向联通的账户中增加 50 元。执行完毕后向 MQ 系统发送一条消息,消息的内容标识支付是否成功,消息发送允许失败。
  • 如果消息发送成功,那么支付宝的通知服务会订阅到该消息,并调用联通的接口通知本次支付的结果。如果此时联通的服务挂掉了,导致通知失败了,则会按照 5min、10min、30min、1h、…、24h 等递增的时间间隔,间隔性重复调用联通的接口,直到调用成功或者达到预订的时间窗口上限后,则不再通知。这就是尽最大努力通知的含义。
  • 如果联通服务恢复正常,收到了支付宝的通知,如果支付成功,则给账户充值;如果支付失败,则取消充值。执行完毕后给支付宝通知服务确认响应,确认响应允许失败,支付宝系统会继续重试。所以联通的充值接口需要保持幂等性。
  • 如果联通服务故障时间很久,恢复正常后,已超出支付宝通知服务的时间窗口,则联通扫描“支付中”的订单,主动向支付宝发起请求,核验订单的支付结果。

特点剖析

最大努力通知型方案本质是通过引入定期校验机制来对最终一致性做兜底,对业务侵入性较低、对 MQ 系统要求较低,实现比较简单,适合于对最终一致性敏感度比较低、业务链路较短的场景,比如跨平台、跨企业的系统间的业务交互


本文小结

本文详细介绍了分布式事务模型之最大努力通知型分布式事务,后续会对相关知识以及内容进行深入的分析。

分布式事务模型--最大努力通知型分布式事务相关推荐

  1. 《深入理解分布式事务》第十章 最大努力通知型分布式事务原理

    <深入理解分布式事务>第十章 最大努力通知型分布式事务原理 文章目录 <深入理解分布式事务>第十章 最大努力通知型分布式事务原理 一.适用场景 二.方案特点 三.基本原理 四. ...

  2. 我说分布式事务之最大努力通知型事务

    来源:http://t.cn/E4ejkSN 在之前的文章中,我们介绍了基于TCC模式的分布式事务解决方案 我说分布式事务之TCC . TCC适用于公司内部对一致性.实时性要求较高的业务场景,而本文我 ...

  3. 分布式事务(三)、柔性事务之 TCC、Saga、本地消息表、事务消息、最大努力通知

    目录 [前言] TCC Saga [通知型事务] 本地消息表 MQ事务消息 最大努力通知 总结 分布式事务: 分布式事务(一).CAP,BASE理论 分布式事务(二).刚性事务之 2PC.3PC [前 ...

  4. 事务模型与分布式事务总结思考

    转载自 事务模型与分布式事务总结思考 1. 介绍 之前了解过一些分布式事务处理的思想,包括MVCC.TCC等.但是对具体实现的规范和约束还不够理解清晰.本文从事务模型分类来讨论常见的事务模型.事务模型 ...

  5. 分布式事务模型--基于消息的分布式事务

    本文来说下分布式事务模型之基于消息的分布式事务 文章目录 概述 基于消息的分布式事务 基于事务消息的分布式事务 基于本地消息的分布式事务 特点剖析 本文小结 概述 事务是一组不可分组的操作集合,这些操 ...

  6. 事务控制 新增后修改_分布式事务科普(初识篇)

    点击上方"IT牧场",选择"设为星标" 技术干货每日送达! <分布式事务科普>是我在YQ期间整理的一篇科普型文章,内容共计两万五千字左右,应该算是涵 ...

  7. 事务对性能影响_不是事务的事务!(分布式事务系列-完结篇)

    虽然我们都把最大努力通知型作为分布式事务的一种,但是各位同学心里要明白,这个完完全全和事务没有任何关系,为了确保我们这个分布式事务系列的完整性,我有必要用这篇最大努力通知型来做整个系列的收尾. 到现在 ...

  8. java水文模型,分布式水文模型.ppt

    分布式水文模型ppt课件 第九章分布式水文模拟技术 第九章 分布式水文模拟技术 9.1 分布式水文模型的发展 9.1.1 分布式水文模型的研究进展 9.1.1.2 几点讨论 9.1.2 分布式水文模型 ...

  9. 数据库事务系列-事务模型基础

    从这篇文章开始,笔者将会在接下来很长时间里整理记录一个相对独立的知识领域-数据库事务,之所以忽然有这个想法,说来也是一种机缘巧合.本来是单纯计划写写HBase行级事务模型的具体实现的,但是在周末一不小 ...

最新文章

  1. 2.算法-程序的灵魂
  2. 用 Flask 来写个轻博客 (11) — M(V)C_创建视图函数
  3. /etc/fstab和/etc/mtab的区别!
  4. Java基础——Java反射机制及IoC原理
  5. 计算机组成原理固件,计算机组成原理(A卷)
  6. 开源GIS(十四)——openlayers通过geoserver中WFS更改要素
  7. Linux下安装mysql(CentOS7)
  8. Jenkins创建新任务
  9. 解决windows下的mysql匿名登陆无法使用mysql数据库的问题
  10. Pytorch 分布式训练
  11. linspace函数
  12. CRM高端制造业应用案例分析
  13. string之取子串
  14. html火狐里面背景音乐不播放,各位大神有知道怎样在火狐浏览器上添加背景音乐的吗?...
  15. 前无古人,后无来者经典日志大汇总--------生活珍藏版(其实你并了解你所生活的世界!)
  16. KEIL软件错误代码及错误信息
  17. 【01】什么是 APP?移动 APP 有几种类型?
  18. mysql数据库的备份和恢复
  19. JavaIO系统解析
  20. 51_数码管 - DS1302可调时钟

热门文章

  1. 《Adobe Photoshop大师班:经典作品与完美技巧赏析》即将上市
  2. 翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(2)
  3. 我决定不能贱卖自己(2010年11月13日志)
  4. proxmox超融合自动迁移
  5. CSS 再学习,基础篇
  6. spring中文参考手册-核心技术_ioc
  7. python学习10
  8. Spring 4 xml 注解配置谅解 spring
  9. FPGA设计——CMOS摄像与HDMI显示(DVP版)
  10. Your password has expired. To log in you must change it using a client that supports expired pass...