分布式事务管理原理 TCC和LCN 分布式详解

分布式事务管理原理 TCC和LCN 分布式详解最近笔者在面试过程中发现 分布式的微服务开发越来越广泛了 越来越多的企业在面试时都需要有微服务的经验 那么在谈到微服务的过程中 很多的面试官都会问到一个问题 有没有接触过分布式事务管理 怎么实现分布式事务管理 那在这里就先要理解一下 什么是分布式事务管理 在单系统中 事务管理想必大家都很清楚 举个栗子 银行转账的过程中 张三的余额有 100 元 李四 0 元 张三要转 50 元给李四

    最近笔者在面试过程中发现,分布式的微服务开发越来越广泛了,越来越多的企业在面试时都需要有微服务的经验,那么在谈到微服务的过程中,很多的面试官都会问到一个问题:有没有接触过分布式事务管理?怎么实现分布式事务管理?

 

    那在这里就先要理解一下,什么是分布式事务管理,在单系统中,事务管理想必大家都很清楚,举个栗子,银行转账的过程中,张三的余额有100元,李四0元,张三要转50元给李四,那么数据库就要保证张三的记录和李四的记录同时修改,要么同时修改,要么不改,那么事务管理就是为了解决这种情况而存在的;单系统中,这种办法很好解决!加个注解就完事了!

    现在大多数项目都用的微服务;多个模块之间相互调用频繁,使得我们也要考虑到分布式事务的问题,比如以下这种情况,用户下单后,扣库存失败,那么会导致超卖,如果下单不成功,扣库存成功,会导致少卖,这两种情况都会导致运营成本增加,在严重情况下需要赔偿用户损失;

分布式事务管理原理 TCC和LCN 分布式详解

那么怎么解决这个问题呢?

    目前有2种方案,TCC 和 LCN;

    TCC解决方案

第一个T:trying,先冻结需要修改的数据,比如库存100卖掉2个,先把卖掉的2冻结起来,库存剩余98;

第二个T:confirm,如果trying操作成功了,就进行确认操作,将冻结的 2 清零,这下库存就真的是98个了;

第三个C:cancel,取消(回滚),如果trying 失败或者异常,进行回滚操作,将冻结的数量 2 加回库存,使库存回滚回原来的数量 2+98=100;

具体执行内容如下图:

分布式事务管理原理 TCC和LCN 分布式详解

 

     LCN解决方案

 注意:LCN不生产任何事务,LCN只是本地事物的协调工具,负责管理微服务的事务;

1、创建事务组

2、各个微服务加入事务组

3、所有的服务执行完sql语句后先不提交,而是通知事务管理器;

4、事务管理器收到各个服务操作成功并且没有失败时,会发送消息通知相应的服务执行提交操作;但只要有一个服务在执行过程中出现异常,事务管理器会发生消息通知相应服务进行回滚操作!

管理流程如下:

是是分布式事务管理原理 TCC和LCN 分布式详解

 

有一些网站上说的非常详细,虽然详细但是看的人眼花缭乱,反而不好理解,我的这种方式更好的诠释了分布式事务的执行过程,和解决方案!当然,既然是通俗版的,肯定不会讲的那么详细,但是拿去面试还是可以将就用的!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214429.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午4:17
下一篇 2026年3月18日 下午4:17


相关推荐

  • Activity专题(一)-Activity流程引擎配置

    Activity专题(一)-Activity流程引擎配置文章目录一 使用 Activity 的 API 设置流程引擎 1 读取默认的配置文件 2 读取自定义的配置文件 3 读取输入流配置二 数据源配置 1 DBCP 数据源配置 2 C3P0 数据源配置 3 数据库策略配置 4 databaseType 配置三 其他属性配置 1 history 配置 2 邮箱服务器配置四 ProcessEngin 及其子类 1 自定义 ProcessEngin 五 Activity 的命令拦截器 1 自定义拦截器 2 配置拦截器 3 运行一 使用 Activity 的 API

    2026年3月19日
    3
  • 【ES6】Promise用法[通俗易懂]

    【ES6】Promise用法[通俗易懂]promise理解及使用Promise解决的问题——异步Promise的基本用法异步操作拒绝及中断调用链ES6对Promise/A+的扩展Promise.all的扩展Promise.race的扩展众所周知的,Javascript是一种单线程的语言,所有的代码必须按照所谓的“自上而下”的顺序来执行。本特性带来的问题就是,一些将来的、未知的操作,必须异步实现(关于异步,我会在另一篇文章里进行讨论)…

    2022年6月18日
    35
  • 数字信封

    数字信封1 定义 数字信封是将对称密钥通过非对称加密 即 有公钥和私钥两个 的结果分发对称密钥的方法 数字信封是实现信息完整性验证的技术 数字信封技术使用两层加密体系 2 过程 信息发送方甲信息接收方乙甲通过加密机获取对称密钥 利用对称密钥加密要发送的信息 再使用乙的公钥来加密对称密钥 这样就形成了一

    2026年3月20日
    2
  • GPT-5.3 Instant 重磅上线!2026最新 ChatGPT 告别说教,国内使用与 Plus 升级教程

    GPT-5.3 Instant 重磅上线!2026最新 ChatGPT 告别说教,国内使用与 Plus 升级教程

    2026年3月15日
    1
  • Pytest(1)安装与入门[通俗易懂]

    Pytest(1)安装与入门[通俗易懂]pytest介绍pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它

    2022年7月28日
    9
  • Ubuntu16.04安装_vs安装路径

    Ubuntu16.04安装_vs安装路径TableofContents一、前言二、安装过程1、下载VSCode2、安装过程3、下载C++模块4、汉化5、常用快捷键一、前言因为要用到在ubuntu系统中使用VSCode来编写C++代码,在此分享VSCode的安装过程。之前我们讲了如何制作U盘启动盘,如何安装双系统,如何安装谷歌浏览器等,如果不了解的同学请看我的分类[操作系统]:操…

    2026年1月18日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号