@[toc]我说我写了Tienchin项目。最近,该分布式事务是分支任务。今天是最后一篇文章。Song Brother有一个短篇小说,朋友可以总结分布式交易。
首先,谈论一个大原则:不要使用分布式交易,毕竟,仍然存在一些麻烦。当然,它不使用或不使用。
有一些基本理论可以学习分布式事务。我们需要先了解。
本地事务是指整体使用多个语句的功能。通过数据库交易,交易范围内的所有操作都可以成功或所有失败。如果交易失败,则效果与这些SQL的效果相同,不会更改数据库数据。也就是说,事务是原子。交易中的一系列操作要么成功或全部失败。从总体上讲,交易具有4个属性:
这四个属性通常称为酸特征。
这个松兄弟先前录制了相关的视频,我不会在这里详细介绍。
当我们的项目在微服务上时,分布式交易是一个更常见的问题,我们还将遇到许多相关的方案。
以我们谈论的是我们前一天谈论的商品的分布式交易的案例,如以下服务,有五项服务。架构如下:
当用户想要下订单时,将调用业务中的接口,并且商店中的接口称呼其自己的服务。在服务中,呼叫存储中的界面以通过假扣除库存,然后通过假装来调用它。用户帐户的余额)。
这三个操作,我们希望它们能在同一时间成功或失败。如上图所示,这三个微服务具有自己的DB。这是三个完全不同的DB,相当于三个不同的本地事务。根据传统的地方事务规则,我们显然无法同时实现三项操作。同时取消或失败。
如果要同时实施存储,订单和帐户成功或失败中的操作,则必须考虑分布式交易。
最后,让我们看一下分布式交易的概念:分布式交易是指事务参与者,服务器,资源服务器和事务管理者的不同节点。这取决于本地数据库的执行结果以及执行结果和执行结果。第三 - 方系统和分布式交易确保这些操作是成功的或全部失败的。本质上,分布式交易是为了确保不同数据库的数据一致性。
CAP定理(CAP定理),有时称为Brewer的定理,该定理指出,对于分布式计算系统,不可能同时满足以下三个点:
CAP原理的本质是AP,CP或AC,但没有CAP。因为在分布式系统中,P是不可避免的,因此不选择P。一旦出现分区,整个分布式系统就完全不可用。这样的系统太脆弱了。因此,对于分布式系统,我们只能考虑如何在分区错误发生时选择一致性和可用性(一致性的选择意味着服务在一定时间内不可用,并且可用性可用。返回的数据不一致)。
根据一致性和可用性的选择,开源分布式系统通常被分为CP系统和AP系统。
系统系统失败后,客户端的任何请求都被卡住或超时,但是系统的每个节点始终返回一致的数据。然后,该系统是CP系统,例如Zookeeper,例如Zookeeper。
如果系统有分区故障,客户端仍然可以访问系统,但是获得的一些数据是新数据,有些是旧数据,那么该系统是AP系统,例如Eureka等经典系统。
因为不可能同时遇到帽子,所以存在基本理论。基础理论是指:
基本理论的核心思想是,即使它不能坚固,也应以合适的方式使用它来确保最终的一致性。
基本理论实质上是帽子理论的扩展,也是对CAP中AP解决方案的补充。
有严格的交易和柔性交易。
严格的交易(例如单个数据库中的本地事务)完全遵循酸性规格,即数据库交易正确执行的四个基本要素:
灵活交易主要是分布的交易。为了满足可用性,绩效和降级服务的需求,灵活交易降低了一致性和隔离。
当然,柔性交易也遵循酸的规格:
灵活的交易具有不同的类别,但基本上可以将其视为分布式交易的解决方案:
让我们先谈谈XA。
XA是典型的两阶段提交(2PC,两阶提案协议),而两阶段提交是强大的一致性设计。在这两个阶段中,通常引入交易协调员的角色来协调和管理各种交易协调员中的每一个,以协调和管理每个助手的参与者,例如我们上一篇文章中使用的SEATA服务器,实际上是交易协调员。因此,称两个阶段是指准备和提交的两个阶段。
XA规范是由X/OPEN定义的分布式交易(DTP,分布式事务处理)的标准。
XA规范描述了全局交易管理器与本地资源管理器之间的接口。XA规范的目的是允许多个资源(例如数据库,应用程序服务器,消息队列等)访问相同的事务,以便酸性属性可以在整个应用中有效。
XA规格分为两个阶段提交,以确保所有资源都同时提交或汇回任何特定交易。
XA规范是在1990年代初期提出的,几乎所有主流数据库,例如MySQL,Oracle,MSSQL等,都为XA规格提供了支持。
XA交易的基础是两个阶段提交协议。需要交易协调员确保所有交易参与者都完成准备工作(第一阶段)。所有要提交的交易(第二阶段).MysQL扮演参与者在本XA交易中的角色,而不是协调员(交易管理器)。
MySQL的XA交易分为内部XA,外部XA。外部XA可以参与外部分布式交易,需要以坐标为坐标。内部XA交易用于在同一实例下用于交叉 - 持续发动机交易,Binlog用作协调员。例如,当提交存储引擎时,有必要将信息写入二进制日志中。这是一项分布式的内部XA交易,但是二进制日志的参与者本身是MySQL。MysQL扮演参与者在XA事务中的角色,而不是协调员。
XA事务的特征是:
3PC主要生产以弥补2PC的缺点。2PC的缺点是什么?
3PC试图解决2pc.3pc的这些问题主要将2pc的第一阶段划分为两个阶段,因此3PC具有三个不同的阶段:CanCommit,Precommit和docommit.commit.scommit.scommit.commit.3pc不解决2pc的所有问题。3PC主要解决单点故障的问题并减少障碍物。交易参与者(分支事务)无法在交易协调员中接收信息,然后分支交易将默认情况下执行提交,而无需持有交易资源和阻碍性,但这种机制也带来了新的新问题,假设交易协调员向每个分支机构提供了流产的指导。但是,滚动分支之间的数据不一致。
让我们看一下3PC的过程:
相反,如果分支机构的分支未完成或预订的反馈超时,则协调员将向所有参与者节点发送流产请求以中断交易。
TCC(Try-Confirm-Cancel)的概念首先提出了一篇名为“超越分布交易的生命(叛教者的意见”的论文”,由Pat Helland于2007年发表。
TCC模式主要具有以下优点和缺点:
优势:
缺点:
TCC主要是两个阶段,这些步骤如下:
在我们的上一篇文章中,兄弟宋还为您提供了TCC的示例,我不会在这里详细介绍。
Saga于1987年首次出现在Hector Garcaa-Molrna&Kenneth Salem的论文中。本文的核心思想是将长交易分为多项短交易。它由传奇交易协调员协调。如果每项简短的交易成功提交,则全球事务将正常完成。如果步骤失败,它将基于Conconverse Call赔偿操作。
传奇事务的特征是:
有许多适用于传奇的场景,适用于对中间结果不敏感的业务场景。
本地新闻表最初是在2008年由eBay建筑师Dan Pricechett发表的ACM发表的一篇文章中提出的。
顾名思义,本地消息表将具有存储本地消息的手表。通常将其放置在数据库中,然后将业务的操作放置,并在执行业务时将消息放在同一交易中的消息表中。这样,它可以确保将消息放入本地表面和业务必须成功实施。
成功执行操作后,然后执行下一个操作。如果下一个操作调用成功,则可以将消息表的消息状态直接更改为成功;如果下一个任务调用失败,则无关紧要,背景任务中会有一个固定的时间,可以定期进行定期阅读本地消息表,筛选出失败的消息,然后拨打相应的服务(重试),该服务,服务更新成功,然后更改消息的状态。
可以保证检索相应服务的方法,并且通常会重复最多的次数。如果超过最大数量,则可以记录警报以进行人工处理。
根据上面的描述,朋友实际上可以看到本地消息表实际上已经实现,这可以容忍数据暂时不一致的情况。
本地消息表的功能:
根据本地消息表格的特征,我们可以发现本地消息表格适用于异步执行和随后的操作,而这些操作无需退缩。
该方案的核心思想实际上是通过消息传递中间部件将全球事务转变为本地事务,并确保可以成功地将各个分支的每个分支都成功地称为。
Song Brother Song在RabbitMQ实施之前写了一篇文章:
但是,后来发现使用阿里巴巴的RocketMQ(4.3之后)可以更好地实现分布式交易。
RockEtMQ是一项分布式交易,最终是一致的,也就是说,它可以保证消息最终是一致的,不如2pc,3pc和TCC强大的分布式交易。暂时消费者无法消费的消息。尽管生产商已成功将消息发送给经纪人终端,但该消息被标记为未交付的状态。该状态中的消息称为半序列。在此时间之前,第二次确认,消费者可以花费它。
RocketMQ是基于半消息的分布式交易,并给出了转移的示例:
一些朋友可能会说,如果B最终无法执行该怎么办?在这种情况下,我们几乎可以得出结论,导致异常的代码存在问题,因为消费者RocketMQ具有重试机制。如果不是代码问题,它可能会成功多次。
如果代码的原因导致多次重试失败,则无关紧要。记录了例外。处理手动处理,手动口袋处理后,交易可以达到最终的一致性。
通过某种机制通过某种机制通知业务处理结果的计划。特定于:
前两个部分中引入的本地新闻表和交易消息是可靠的新闻,这与我们在此处介绍的最大努力通知不同吗?
就是这样。
在特定解决方案中,最大努力通知所需的消息启动器以提供接口,以便通知方可以通过接口查询业务处理结果。
最大的努力适用于业务通知的类型。最常见的情况是支付回调。在收到第三届服务付款的成功通知后,付款服务首先更新库中的订单付款状态,然后同步订单服务付款。如果同步通知失败,则订单服务的接口将连续称为通过异步脚步声。
最大的努力通知是更多的业务设计。在基础架构层中,您可以直接使用第二阶段消息或事务消息,本地消息表格等来实现它。
好吧,学习分布式交易解决方案的最大感觉是:没有银炸弹!
上一篇文章还与您交谈了许多实用的解决方案,并在Tienchin项目中记录了相应的分布式交易视频。欢迎讨论。
参考资料:
原始:https://juejin.cn/post/7111177859146170404