Java开发 - 不知道算不算详细的分布式事务详解

Java分布式事务 事务发起方发送消息到消息队列:// 将消息发送到消息队列// ...事务消费方接收和处理消息:try {// 处理消息的业务逻辑// ...// 消息处理成功,确认消费// 消息处理失败,取消消费,进行补偿或重试// 确认消费成功,将消息标记为已处理// ...// 取消消费,将消息标记为未处理或重新放回消息队列// ... 阅读详情

前言

前日对JUC进行了一个深度总结,不过现在博主能记得的也不多了,只是这东西,不是看几遍写几遍就能完全记住的,功夫在平时,很多知识点都需要反复的看,不光要看,还要用,这样才能了解其原理,掌握其原理,从而能更好的运用于平时的开发中,提高开发效率。今天给大家带来一篇分布式事务相关的总结,详不详细的不敢说,大家还是自己来看看吧。

事务

虽然我们说的是分布式事务,但在这之前,我们还是要了解一下事务的本质,事务分为两种,一种是我们本篇要说的分布式事务,另一种是本地事务。下面,我们对这两种事务的特点进行说明。

本地事务

本地事务也叫做单机事务。但说起来和单机游戏并不一样,它只是相对于分布式事务的一种描述。学完此篇,相信你对单机事务的理解能够加深不少。

本地事务由四大特点,俗称ACID,分别是:

  • A:原子性,即事务中的所有操作,要么全部成功,要么全部失败;
  • C:一致性,即要保证数据库内部的完整性约束,声明性约束。也就是说,在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作;
  • I:隔离性,即对同一资源操作的事务不能同时发生,比如不能喝水的同时还在唱歌,你可以试试看;
  • D:持久性,即数据库的这些操作必须永久保存,不论对错。

分布式事务

分布式事务指的是在多个服务或多个数据库架构下产生的事务,有跨数据源的分布式事务,也有跨服务的分布式事务,可能还有其他类型的分布式事务。最典型的案例就是生成订单的时候,在生成订单时,还要修改库存,如果是购物车下单还要删除购物车下单商品,如果账户可充值还要扣除账户余额,是不是很复杂?但这,就是分布式事务的一部分!

这时,你会发现,每一个服务都是一个单独的单机事务,他们共同组成了这个分布式事务,原子性要求他们要么全部成功,要么全部失败,但对于上图的情况,你很难保证原子性,ACID恐怕就无法保证了,而这就是分布式事务要解决的问题。 

分布式事务的理论基础

为了解决分布式事务问题,诞生了一些用于解决分布式问题原子性的理论,分别是CAP原则和BASE理论,以及在他们基础上提出的最终解决思路。

CAP原则

CAP定理是在1998年,由加州大学的科学家Eric Brewer提出,主要有灿个特性,分别对照CAP:

  • C:一致性,即在分布式系统中的所有数据备份,在同一时刻数据要一致;
  • A:可用性,即在访问多个服务的任何节点时,都能得到相应,不论成功还是失败;
  • P:分区容错性,即系统中任意信息的丢失或失败不会影响系统的继续运作,其原理是,分布式系统中的某节点出现故障时,形成独立分区,分区即使形成,也要保证整个系统依然可以对外提供服务。

CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。关于这点,我们在解决思路上再说。大家看下下面的图,他们的关系如下:

但他们之间存在一个不可调和的矛盾,那就是P一定存在,因为谁也不敢100%保证不会发生服务器故障,这个没有任何争议。这就是我们要说的解决思路,暂且不提,继续往下说。

BASE理论

BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的结论,是基于CAP定理逐步演化而来的,其核心思想是即使无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

BASE理论有三大特性,分别是:

  • BASE是Basically Available(基本可用):分布式系统发生故障时,允许损失部分可用性,但要保证核心功能依然可用,其中,损失包括响应时间上的损失和非核心功能的损失;
  • Soft state(软状态):在一定时间内,允许出现数据不一致的临时状态,称为软状态;
  • Eventually consistent(最终一致性):在无法保证强一致性的条件下,在软状态结束后,要达到数据的最终一致性。

分布式事务解决思路

上面两个理论看完之后,相信你对解决思路已经有了一个大概的了解,总结起来就是两个模式:AP和CP:

  • AP:最终一致性模式,即各子事务分别执行和提交,允许出现软状态,然后采取弥补措施保证数据的最终一致性;
  • CP:强一致性模式,即各子事务执行后后想等待,要么全部成功,要么全部失败,失败后回滚。

但无论是AP还是CP,在执行的过程中都离不开一个很重要的东西,那就是事务的协调者TC,我们会在下面的Seata中讲到。在分布式系统下,子系统的事务就是分支事务,有关联的事务统称为全局事务。

Seata核心架构

关于Seata,其实博主在微服务那篇博客中讲到过,也有过使用的案例:Java开发 - 数风流人物,还看“微服务”

有兴趣的可以看看,也可以去搜下其他Seata相关的教程,了解Seata的可以继续往下看。关于Seata,博主就不再详细介绍了,我们直接切入正题,说说Seata的架构 。

在Seata的事务管理中,有三个重要的角色,我们在上面已经提到了一个事务协调者TC,还有一个事务管理器TM和资源管理器RM。他们的作用如下:

  • TC:维护全局和分支事务的状态,说白了就是提交或者回滚,类似于接线员;
  • TM:定义了全局事务的范围,控制全局事务的开始,提交或者回滚,是真正的管理者;
  • RM:用于管理各分支事务的资源,比如向TC注册分支事务,向TC报告分支事务的状态,驱动分支事务的提交或者回滚,是个执行者。

三者的关系结构如下图:

Seata基于此架构又提出了四种用于解决分布式事务的方案:

XA:强一致性分阶段事务模式,强一致性虽有性能损耗,但却没有业务侵入;

AT:最终一致的分阶段事务模式,无业务侵入,是Seata的默认模式;

TCC:最终一致的分阶段事务模式,有业务侵入;

SAGA:长事务模式,有业务侵入。

Seata四大模式

XA模式

原始的XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,描述了全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范提供了支持。

原始的XA其实是一种规范,目前的主流数据库都实现了次规范,其实现原理是基于两阶段提交:

第一阶段:

TC通知分支事务进行事务处理本地事务,并将执行结果上报TC,此过程只执行SQL,不提交,继续持有数据库锁。

第二阶段:

TC根据各分支事务上报的结果进行处理,如果全部执行成功,则通知所有分支事务进行提交,提交后锁释放;如果有一条以上的失败消息,则通知所有分支事务进行回滚,最终释放锁。

原始的XA请看下图:

Seata中的XA是在XA的基础上做了封装和改造,我们来看看其架构图,它和我们前面画的TM,TC,RM的关系图很像:

看图,其两个阶段都在做什么就一目了然了。

虽然XA模式实现简单,使用了强一致性,且没有代码的侵入,但和传统XA一样,第一阶段不提交,所以锁在第二阶段释放,性能略差,此模式也必须依赖关系型数据库才可以使用。

其实现也比较简单,分两步完成:

第一步,开启XA模式:

seata:
  data-source-proxy-mode: XA

第二步,给发起全局事务的入口方法添加@GlobalTransactional注解。

关于Seata的使用就不再详细说了,既然你看到这里,就代表Seata你至少是知道怎么用的,比如依赖和配置,不了解的可查看博主在上面放的微服务的链接或自行查找学习。

AT模式

AT模式前面提到过,是分阶段提交的事务模型,它主要解决了XA模式中资源锁定时间太久的问题,因此,它并不是强一致性的,而是最终一致性的,它对代码同样没有侵入,是Seata的默认模式。

下面,我们来看看它的架构流程图:

架构图很清晰,但也略微复杂,我们来画一个简易版的流程图:

这样,流程有没有更清晰一点?画图能省不少文字啊,不过画图确实比较费时间。

注意:这里存在一个问题,就是AT模式因为在第一阶段直接提交后释放的锁,第二阶段无法保证其他事务是否会操作同一条数据,所以会存在脏写的问题。 

解决办法就是引入全局锁,在释放DB锁之前,先拿到全局锁,避免在同一时刻有另外一个事务来操作当前数据。这一点要格外注意。

目前使用全局锁@GlobalLock时,限制条件过于苛刻,必须要添加@Transaction注解,同时必须是for update语句,否则不会触发全局锁检查。更详细的大家在使用过程中再详细了解,本文不再延伸介绍。

使用AT模式也很简单:

seata:
  data-source-proxy-mode: AT # 默认就是AT

修改配置即可直接使用,详细代码不再给出,可参考:

详解 Seata AT 模式事务隔离级别与全局锁设计

Seata AT 模式

https://github.com/seata/seata-samples

TCC模式

TCC模式与AT模式非常相似,每阶段都是独立事务,不同的是TCC通过人工编码来实现数据恢复(其实就是业务侵入)。需要实现三个方法:

  • Try:资源的检测和预留;
  • Confirm:完成资源操作业务,要求 Try 成功 Confirm 也一定能成功;
  • Cancel:预留资源释放,可以认为是回滚操作。

它和AT相比的优点是不依赖undolog,事务回滚通过资源的预留和cancel操作。其架构如下:

看起来和AT及其相似,只是没有了对undolog文件的操作,多了try,confirm和cancel操作。 从图中,我们应该还能看出来一个问题,那就是TCC模式不依赖数据库事务,可用于非事务性数据库。

那么,你在上图还能看出有哪些问题呢?Let us see......

有两个问题需要格外注意:空回滚和事务悬挂。

空回滚

我们假设在try阶段发生了阻塞,这可能会导致全局事务超时,进而导致cancel操作被触发,在try操作没有执行的情况下,执行cancel的回滚操作就是空回滚。如果不对空回滚加以防范的话,可能会造成资源的无效释放,即在没有预留资源的情况下就释放资源,造成异常。

解决办法是:执行cancel操作时,应当判断try是否已经执行,如果尚未执行,则不应执行空回滚。

事务悬挂

对于已经空回滚的业务,之前被阻塞的try操作恢复,继续执行try,就永远不可能confirm或cancel ,事务一直处于中间状态,这就是业务悬挂。

解决办法是:执行try操作时,应当判断cancel是否已经执行过了,如果已经执行,应当阻止空回滚后的try操作,避免悬挂。

总结

总的来说,这俩其实算是一个问题,可以通过创建一张新表,字段自己随便定,只要每个事务不一样即可,推荐使用全局事务id,三个函数中的操作如下:

  • try中记录事务状态到表中;
  • confirm中根据全局事务id删除这条数据;
  • cancel中恢复记录表中的数据到初始状态;

判断空回滚方法:

  • cancel业务中,根据xid查询数据,如果为null则说明try还没做,可不执行空回滚,然后根据全局事务id插入一条状态数据留给try做空回滚判断;
  • try业务中,根据xid查询数据 ,如果已经全局事务id,则存在Cancel已经执行的情况,可拒绝执行try业务
  • 以上两条满足一条即可,如果空回滚做了,try绝对不能执行,但若是经过判断避免了,那try继续,否则try执行了,真到了要执行cancel的时候是要正常执行的。

SAGA模式

Saga模式是SEATA提供的长事务解决方案,在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。

看图,分布式事务执行过程中,各节点依次执行正向操作,如果所有正向操作均执行成功,那么分布式事务提交。如果任意一个正向操作执行失败,那么分布式事务会在当前节点,也就是FAILS的地方通过补偿服务退回去,执行前面各节点的逆向回滚操作,把已提交的节点的操作回滚,使分布式事务回到初始状态。 

适用场景:

  • 业务流程长、业务流程多
  • 参与者包含其它公司或遗留系统服务,无法提供 TCC 模式要求的三个接口

优势:

  • 一阶段提交本地事务,无锁,高性能
  • 事件驱动架构,参与者可异步执行,高吞吐
  • 补偿服务易于实现

缺点:

  • 不保证隔离性,其实还是脏写问题
  • 其软状态持续时间不可预测

关于Saga,更详细内容可见这里:Seata Saga 模式

博主个人感觉Sage模式是四大模式中最复杂的了,说实话,没用过,和前三种比起来,Saga更难理解,博主也没有理解透,惭愧惭愧!!!但有一点博主是明确的,其补偿服务是另类的回滚,可以通过一个单独的节点完成此操作。大家还是自己看吧,不要被误导,谁要是搞懂了回来给博主科普科普。

四大模式对比

XAATTCCSAGA
一致性强一致性弱一致性弱一致性最终一致性
隔离性完全隔离基于全局锁隔离基于资源预留隔离无隔离
代码侵入无无有,try,confirm,cancel有,编写状态机和补偿服务
性能差好非常好非常好
使用场景对一致性和隔离型要求高的事务基于关系型数据库的大多数分布式事务场景都可以,比较通用
  • 对性能要求高
  • 使用非关系型数据库的
  • 业务流程长、业务流程多
  • 参与者包含其它公司或遗留系统服务,无法提供 TCC 模式要求的三个接口

Seata高可用架构了解

这个东西说起来其实很简单,但做起来嘛又很麻烦,博主只简单的提一嘴,毕竟做起来是有成本在里面的,各公司做起来还可能不一样。

使用Seata就一定离不开类似Nacos的注册中心,使用分布式事务,就一定离不开类似Dubbo的远程调用服务。然后集群搞起来,高可用性的主从架构搞起来,再土豪一点的话搞异地容灾,其实都不复杂,就是砸钱。

关于这些内容,不再本篇详细介绍,准备单独出,各位,咱今天就到这里吧。

结语

看到这里,想必你对分布式事务的解决方案就多多少少有些了解了,虽然没有提供详细的代码,但在各位略懂Seata的情况下,你基本已经可以通过默认的AT模式来解决大部分问题了,这篇博客虽然才写了短短五六千字,但却浓缩了精华,觉得不错,就给博主点个赞吧!

Java开发运用Spring Cloud实现分布式事务 在当今的软件开发领域,微服务架构已经成为一种主流的架构模式。Spring Cloud作为微服务架构的优秀解决方案,为开发者提供了一系列的工具和组件,帮助他们构建分布式系统。然而,在分布式系统中,事务管理是一个非常复杂的问题。因为在微服务架构中,一个业务操作可能会涉及多个服务的调用,如何保证这些服务的操作要么全部成功,要么全部失败,就需要引入分布式事务的概念。本文的目的就是详细介绍在Java开发中如何运用Spring Cloud来实现分布式事务。 阅读详情

相关推荐

探索Spring Boot在Java开发中的分布式事务解决方案对比

在当今的软件开发领域,随着业务规模的不断扩大和复杂度的增加,分布式系统逐渐成为主流架构。分布式系统将一个大型应用拆分成多个独立的服务,这些服务可以独立开发、部署和扩展,提高了系统的灵活性和可维护性。然而,分布式系统也带来了新的挑战,其中分布式事务的处理就是一个关键问题。本文的目的是深入研究Spring Boot在Java开发中处理分布式事务的各种解决方案,并对它们进行全面的对比分析。通过本文的研究,开发者可以了解不同解决方案的原理、优缺点和适用场景,从而根据项目的实际需求选择最合适的分布式事务处理方案。

Java大师兄的博客 865

【分布式】java实现分布式事务的五种方案

部署在不同结点上的系统通过网络交互来完成协同工作的系统。比如:充值加积分的业务,用户在充值系统向自己的账户充钱,在积分系统中自己积分相应的增加。充值系统和积分系统是两个不同的系统,一次充值加积分的业务就需要这两个系统协同工作来完成。事务是指由一组操作组成的一个工作单元,这个工作单元具有原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。原子性:执行单元中的操作要么全部执行成功,要么全部失败。

DreamSun的博客 8013

分布式事务(再深入)——分布式事务理论基础 & Java分布式事务解决方案

刚性事务:分布式理论的CP,遵循ACID,对数据要求强一致性。XA协议是一个基于数据库层面的分布式事务协议,其分为两部分:事务管理器(Transaction Manager)和本地资源管理器(Resource Manager)。事务管理器作为一个全局的调度者,负责对各个本地资源管理器统一号令提交或者回滚。主流的诸如Oracle、MySQL等数据库均已实现了XA接口。二阶提交协议(2PC): 根据XA协议衍生出来而来;

2401_84254196的博客 1265

java分布式事务——9种解决方案的原理与分类

Prepare 阶段:事务管理器给每个资源管理器发送 prepare 消息,资源管理器判断是否可以执行事务。若可以执行,则开启本地事务,将事务写入本地的 redo log 和 undo log,但是不提交,然后返回成功;若不可以执行,则返回失败。Commit 阶段:若事务管理器没有收到任何资源管理器的失败反馈,则给所有资源管理器发送 commit 消息;若事务管理器收到了部分资源管理器的失败反馈,则给所有资源管理器发送 rollback 消息。

xiaoyaozizai1的博客 3144

Java分布式事务(二)

事务就是针对数据库的一组操作,它可以由一条或多条SQL语句组成,同一个事务的操作具备同步的特点,事务中的语句要么都执行,要么都不执行。

本人是在学习Java的小白,希望各位大佬多多指教! 773

永磁同步电机功率计算实战:从公式到避坑指南(附Excel计算模板)

本文详细解析永磁同步电机(PMSM)功率计算的实战技巧,涵盖三维参数体系、三相与单相系统差异、动态工况补偿及常见计算陷阱。特别提供Excel计算模板,帮助工程师快速准确完成功率计算,避免工业应用中的常见错误,提升工作效率。

x8y9z0的博客 808

Java中的分布式事务

先来个通俗易懂的比喻:想象一下,你和你的几个朋友一起去吃饭,每个人都点了自己的菜,最后却需要一起结账。这时候,如果有人突然没钱了,整个结账过程就会失败,你们需要重新处理。而分布式事务就是类似的概念,它是指在分布式系统中,跨越多个节点的一系列操作要么全部成功,要么全部失败,确保数据的一致性。

weixin_46372265的博客 1908

告别CPU空转!用STC8的SPI+DMA高效驱动上百颗WS2812B灯珠

本文详细解析了如何利用STC8单片机的SPI+DMA外设高效驱动WS2812B全彩灯珠,解决传统软件延时驱动方式在长灯带应用中的性能瓶颈。通过硬件方案设计、数据格式转换和DMA传输配置,实现高达400Hz的刷新率和低于5%的CPU占用率,适用于大规模灯光项目。

weixin_30847939的博客 397

Java开发 - 不知道算不算详细的JUC详解

关于线程的状态,我们用一张图来说明:看看这些线程执行的过程调用不同的方法是不是进入了对应的状态。说实话,写到这里博主已经快要没有耐心了,而这里也只不过是写了一小部分而已,路漫漫其修远兮,吾将上下而求索。换下个话题。两种方式都保证了数据的安全性,在多线程下,只有等到获取到锁的线程将锁释放掉后,下一个线程才能持有锁。synchronized就是通过这种机制来保证数据的一致性的。这是一种对象锁,要求我们锁定的必须是同一个对象,否则将无法生效。注意:你一定好奇,能加在方法上,方法内,难道不能加在类上?

CodingFire的博客 3230

Tessent Atpg系列 第七章 Running ATPG Patterns -- 如何书写proc文件

本篇文章是记录Tessent scan ATPG系列 本文并非是对userguide的完全翻译,而是自己对userguide的理解,此外,有部分比较深入的内容可能需要后续实验验证。本系列并不对tessent scan做过多描述。 请勿随意转载: 优快云 博主: ciscomonkey一种是在使用tessent scan之后使用ATPG 另一种是使用第三方工具,如snps的DFTC之后使用tessent的ATPG。 这里我们仅仅介绍without tessent scan之后tessent ATPG:对于t

ciscomonkey的博客 7697

MATLAB实战:纯电动汽车动力性仿真从入门到精通(附完整代码)

本文提供了一份基于MATLAB的纯电动汽车动力性仿真从入门到精通的实战指南。通过理论建模与代码实战相结合,详细讲解了如何构建行驶阻力模型、驱动力平衡方程,并利用MATLAB脚本完整实现了最高车速、加速时间和最大爬坡度三大核心性能指标的仿真计算。文章附有完整代码,帮助工程师快速掌握纯电动汽车动力性仿真的核心技能,为设计与优化提供高效的数字工具。

weixin_29074409的博客 369

Java开发 - 不知道算不算详细的分布式锁详解

看,分布式锁其实也没有那么难嘛,如果你能看到这里,那么相信你一定会有所收获,多看几遍,对理解分布式锁有好处,学完分布式锁,又可以开心的出去装13了,真开心!!!学习是一个循序渐进的过程,学完之后不代表就会了,过一段时间你多半是会忘记的,就好比博主,写完之后过一段很多东西都会忘记,也需要不断的回顾才能加深印象,学习是投资自己,只有金刚钻硬了,才能去揽那瓷器活儿。加油吧,少年们!

CodingFire的博客 925

在 Windows 上安装 OpenCV – C++ / Python

而且,安装并不是一件容易的事。这些安装程序仅适用于安装 OpenCV for C++。如果您想安装适用于 Python 的 OpenCV,您将在博客后面找到相关信息。在这篇博文中,我们将在 Windows 上安装适用于 C++ 和 Python 的 OpenCV。C++ 安装是在自定义安装 exe 文件的帮助下完成的。而Python的安装是通过Anaconda完成的。从源代码安装 OpenCV 需要花费大量时间。根据您的硬件和安装配置,该过程可能需要 5 分钟到 2 小时不等。

Demondai999的博客 2092

Java开发 - 你不知道的JVM优化详解

到此,JVM相关的内容就给大家分享完毕了,每次一说到JVM我就想到了迪迦里面的基里艾洛的人,好顺嘴啊,哈哈哈!!!这一部分内容还是需要大家多探索的,优化没有上限,让我们一起努力吧。

CodingFire的博客 1701

【电机控制入门】——电机控制书籍推荐

电机控制入门书籍推荐及分享 阅读须知: 1.电机控制的入门是涉及到机械、电子与控制等复杂交叉学习,它需要持续投入时间才可以看到学习的效果,如同“一万小时定律”。俗话说,九层之台,起于垒土,因此电机控制入门没有所谓的速成培训班。相反,还需要夯实好一定的基础。为此,博主建议从基础理论抓起,故推荐相关的书籍并分享给大家。 2.学习电机贵在动手实践,无论是借助于MATLAB/Simulink仿真平台来验证理论分析,或是使用板子对所设计的控制系统进行物理实现,博主极力推荐在一定基础(看完部分以下推荐的书籍),一边动手

昔时扬尘处 3万+

工业仪表读数识别:YOLO目标检测 + OCR混合方案实战

仪表整体(meter):粗定位整只仪表,用于快速裁剪、排除背景干扰表盘区域(dial):精确的圆形/方形表盘区域,用于后续矫正和读数数字区域(display)/指针(pointer):数显表定位数码管区域,指针表可辅助定位指针为什么要分三级?因为现场仪表安装角度、距离、光照差异极大。先粗检再精检,比一步到位的准确率高很多,也方便后续做透视变换。工业仪表读数识别,技术路线的选择比算法精度更重要。选对了路线,事半功倍;选错了,怎么调都达不到验收标准。几条落地建议:指针表优先传统算法。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 96

Java Seata分布式事务框架详解

Java Seata分布式事务框架详解

码上红尘仙的博客 822

Oracle EBS Interface/API(43) -自定义AP发票状态说明API

在某项目,客户需求获得AP发票的状态说明,例如对账系统或者某些报表。由于标准系统未提供状态说明,需要通过AP发票的标准Form获得相关业务逻辑,然后自定义AP发票状态说明API。

陈显平的专栏-Oracle EBS 607

Java开发 - 不知道算不算详细的MySQL多维度性能优化剖析

关于优化,我们不能够断章取义,有时候我们会直接去网上搜一些优化相关的博客,然后照着做。这是不对的,起码不是百分百正确,套路是这个套路,但优化就像不同的人去买衣服,每个人都有自己的特殊情况,我们要具体情况具体分析,毕竟不是每个人的应用和服务器都是一样的,千人千面用在这里再好不过了。MySQL几乎是目前绝大多数互联网公司的选择,出色的性能,低廉的成本,丰富的资源深受大众的喜爱。所以本文我们将MySQL作为我们的目标数据库。但优化有风险,优化需谨慎。优化一般针对的是一个复杂的且已经上线的系统;

CodingFire的博客 1567

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

分布式事务理论及java解决方案-超详细

前言 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免,本文就分布式事务来简单聊一下。 数据库事务 在说分布式事务之前,我们先从数据库事务说起。 数据库事务可能大家都很熟悉,在开发过程中也会经常使用到。但是即使如此,可能对于一些细节问题,很多人仍然不清楚。比如很多人都知道数据库事务的几个特性:原子性(Atomicity...

taylor的博客 2167

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java分布式事务实现原理与方案详解

分布式事务

Dcein的博客 1661

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

分布式事务的Java实现方案

分布式事务是分布式系统中的核心挑战,没有银弹解决方案。2PC:经典强一致性方案,适用于对一致性要求极高的场景TCC:高性能最终一致性方案,适用于高并发短事务Saga:长事务解决方案,适用于复杂业务流程本地消息表:简单可靠的异步方案,适用于解耦场景MQ事务消息:高性能异步方案,适用于高并发业务流程在实际应用中,需要根据业务需求(一致性要求、性能要求、事务时长等)选择合适的方案,常常需要结合多种方案来解决复杂问题。同时,要注意幂等性处理、事务监控、补偿机制设计和性能优化等最佳实践。

zzywxc787的博客 1193

ShardingSphere分布式事务详解

ShardingJDBC支持的分布式事务方式有三种 LOCAL, XA , BASE,这三种事务实现方式都是采用的对代码无侵入的方式实现的。

Zhuxiaoyu_91的博客 2317

Java中的分布式事务管理

Java中的分布式事务管理是一个复杂而广泛的领域,涉及多个方面和考虑因素。除了之前提到的内容外,还需要关注数据库隔离级别、幂等性、容错机制、一致性协议和数据一致性模型等方面的细节和最佳实践。同时,随着云原生技术的发展,开发者还需要考虑如何利用云平台的优势来优化分布式事务的管理和性能。通过不断学习和实践,开发者可以构建出更加健壮、高效和可靠的分布式事务系统。

编程小弟的博客 1390

你知道什么是分布式事务吗

这是Java极客技术的第 224篇原创文章最近做项目使用到了分布式事务,下面这篇文章将给大家介绍一下对分布式事务的一些见解,并讲解分布式事务处理框架 TX-LCN 的执...

Java极客技术 660
上一篇: Java开发 - 不知道算不算详细的JUC详解
下一篇: Java开发 - 不知道算不算详细的MySQL多维度性能优化剖析
CodingFire
CodingFire  2022年度博客之星移动开发领域TOP 5 2022年度博客之星移动开发领域TOP 5 领域专家: 移动开发技术领域 领域专家: 移动开发技术领域
博客等级 码龄11年 7927粉丝 387原创
评论 58
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingFire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值