千家信息网

什么是微服务架构及分布式事务的解决方案

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这期内容当中小编将会给大家带来有关什么是微服务架构及分布式事务的解决方案,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。事务的四中隔离级别read uncommitt
千家信息网最后更新 2025年12月03日什么是微服务架构及分布式事务的解决方案

这期内容当中小编将会给大家带来有关什么是微服务架构及分布式事务的解决方案,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

事务的四中隔离级别read uncommitted 最低级别,任何情况都无法保证read committed 可避免脏读的发生repeatable_read 可避免脏读、不可重复读的发生Serializable可避免脏读、不可重复读、幻读的发生事务的四个特性原子性在计算机程序中,原子性就是对一组数据的操作是一个整体不可分割的意思。一致性经典的转账说明,A给B10000块,那么A 账户少了 10000块,B账户多了10000块,不能出现B账户多了10000块,而A账户的金额没有变化隔离性还是那转账的例子说明,A给B 转账 10000 ,C给D 转账 50000,AB ,CD 这两组直接是没有关系的,是隔离的。持久性持久性就是持久化这样,也没什么可说的。事务的七种传播行为propagation_requeired如果存在一个事务,则支持当前的事务,如果没有事务则开启一个新的事务propagation_supports如果存在一个事务,支持当前事务,如果没有事务,则非事务的执行,但是对于事务同步的事务管理器,propagation_supports 与不使用事务有少许不同propagation_mandatory如果存在一个事务,支持当前的事务,如果没有一个活动的事务,则抛出异常propagation_requires_new总是开启一个新的事务,如果一个事务已经存在,则将这个存在的事务挂起propagation_never总是非事务地执行,如果存在一个活动事务,则抛出异常propagation_not_supported总是非事务的执行,并挂起任何存在的事务propagation_nested如果一个活动的事务存在,则运行在一个嵌套的事务中,如果没有活动事务,则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行

分布式事务

  1. 分布式事务是在分布架构,微服务的架构下出现的,分布式事务就是将多个节点的事务看成一个整体处理。

  2. 分布式事务一般有事务参与者,资源服务器,事务管理器等组成

  3. 分布式事务出现的场景有哪些 eg. 下订单,减库存,支付

  4. 分布式事务强调的不是事务,它依赖于每个单点的事务机制,它强调的是事务的分布式。到底如何解决分布式事务

实现思路

  • 2PC 3PC,也说 两段式,3段式 事务

  • 基于XA 的分布式事务

  • 基于消息的最终一致性方案

  • TCC 编程是补偿事务(比较常用的一种分布式解决方案)

两段式事务 2PC

看图,首先是一个事务管理器,第一个阶段事务管理器先给两个资源管理器发送 prepare 命令,如果两个资源管理器的其中一个没有ready, 那么就要等待了,等两个资源管理器都给事务管理器回复 ready 命令,那么第一个阶段就完事了;接下来进入第二个阶段,事务管理器给两个资源管理器发送 commit 命令,如果两个资源管理器都接收到命令并提交了 committed
那么事务这一组事务OK,但是如果其中一个没有 committed ,那就出问题了。这个2PC 的分布式事务还有其他诸多的问题。

我们来看一下 3PC

  • 三段式提交3PC:三段式事务就是在 两段式事务的 预备 和 提交 中间加了一层 "预">

2PC 和 3PC 在正式分布式系统中一般不会使用

基于XA 的分布式事务

xa 的分布式事务是 2PC 的演进而来。

基于消息的一致性方案

  • 如下图,加入A 是支付系统,B是订单系统,A 发送一个预备消息给 mq,mq 收到预备消息保存,并返回个A 系统说,我mq 已经收到你的预备消息了,你可以执行你的业务逻辑了,然后A系统开始执行本地事务,并发送给mq 提交消息,mq 收到A 系统的提交消息(此时支付系统已经支付了),mq 将消息发送给订单系统 B,说A系统已经支付了,你赶紧给我改订单状态,同时 mq 回调给 A 系统,让A 该干嘛干嘛。这里可能有人就要问了,如果B系统修改订单状态失败怎么办 ? 对啊,这怎么办呢,其实实际中,再A 系统 发送提交消息之前呢,可以另起一个线程,并让它挂起一下,挂起之后,去告诉B 系统,A这边马上就要提交了,你赶紧修改下订单状态吧。等B 修改完订单状态,A 就去提交支付,如果B 修改失败,A就在本地回滚了。

  • 基于消息的一致性方案是属于强一致性的方案,一定是同时成功,或者同时失败,不会出现其他的情况,缺点就是 A 系统支付业务就会暂停,B 修改之前就会一直等待,但是一般是等不起的。后面我们来说说 TCC


TCC补偿性事务

T try ,C confirm ,C cancel中文简单解释就是 : 尝试执行,确认操作,取消操作

假如上图的服务A 是扣减库存,服务B 是创建订单,以扣减库存创建订单这一业务流程来说一下 TCC
首先第一步 app 告诉事务协调器要启动一个事务了,然后就调用 try 接口 ,服务A try 接口扣减库存, 服务B 创建订单,最终 app 收到 AB 两个的try 接口的执行结果,如果有一个失败了,app 告诉事务协调器,刚刚这个事务失败了,你调用 Cancel 接口吧;如果两个都成功了,那么 app 告诉事务协调器调用 Confirm 接口

TCC的核心思想是资源,最核心的就是 在 Try 阶段,一定要把资源做好预留(加锁,加版本号,加分布式锁等方式,先把资源给占着),为什么一定要预留呢,不预留的话,在 Cancel 阶段就无法补偿了,也就违背了TCC设计的初衷。如果对于资源的掌控力度不够,不建议使用TCC,如果资源没办法做预留,没有乐观锁,没有状态等字段,没法预留也就没法用TCC

tcc 补偿性 和 基于 消息的分布式事务 表

  • 基于消息的分布式事务是强一致性的,会存在浪费资源;因为会存在等待,唯独最大的好处就是强一致性,实际业务中,可能要去要对接支付宝支付,微信支付,银联支付等待,这种消息性的事务还是可以使用的

  • TCC 强调的是在 try 的阶段对资源做预留

  • TCC 在确认和取消阶段释放资源

  • 如果是确认阶段,那么将资源删掉就行了,如果是取消阶段,那么我们需要将这些资源进行反向的补偿。

  • 与消息性事务,TCC 的时效性高

上述就是小编为大家分享的什么是微服务架构及分布式事务的解决方案了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

事务 分布式 资源 消息 系统 支付 管理 就是 订单 阶段 服务 方案 一致 一致性 两个 事务管理 接口 状态 资源管理 补偿 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 全国电子教材网络安全 联通网络技术研究院武汉 家用服务器如何搭建网站 三级网络技术蓝牙技术 纬地涵洞项目数据库打开失败 软件开发和软件编程哪个好 kafka传过来的数据库 应该叫数据库清单还是列表 柒零三网络技术公司 计算机网络技术 实验项目 计算机网络技术的技能有哪些 广州家政软件开发常见问题 椒江网络技术有限公司 学校当前网络安全存在的突出问题 三国战纪服务器登陆失败 微信语音说话无法连接到服务器 vfp数据库应用教程与实验答案 数据库调整内存大小 安徽服务器电源生产商 网络安全信息官英文缩写 河南便民平台软件开发公司 金融衍生品的软件开发咋样 中兴基带软件开发二部 我国的网络安全现状图 党内统计系统数据库怎么建立 摄像机的软件开发 高校校园网络安全人才队伍 软件开发办哪些手续 服务器仓库管理目标 c sqlite数据库
0