00:03
好,我们下班。呃,来看呃,这个这些概念啊,这些基础分布式事物的啊,基础知识,首先什么是分布式事物,那对分布式事物啊。呃,通俗的说,通俗的说就是一次操作由若干分支操作构成。这些分支操作分属于不同的应用。呃,放放在不同的呃应用里边是吧是吧,分布在不同的服务器上,你在不同的机器上,你注意在不同的机器上就意味着什么,在不同的GVM上。对不对,然后分布式事物需要保证这些分支操作。要么全部成功,要么全部失败。分割事务与普通事物一样,就是为了保证操作结果的一致性。我们刚才说的这个解决方案里边是吧。
01:00
就这个问题引入的时候,它里面是不是出现了数据不一致的情况了,所以他这啊,本质上我们分布式事物就为了解决什么啊,这个一致性问题,解解决一致性问题啊。呃,其实说到这个事物啊,我们大家应该说很很很了解啊是吧,我们,呃,这个事物,它是我们关于数据库里边这样一个。概念是吧,我们通常说的是关系数据库里边的啊。那么。比如说我们举个例子啊,我们这个DP系统是吧,系统里边这种像。采购我们采购业务调用这个库存业务。你采购又调库存业务。你是不是得保证?你数据库里边那个采购表和库存表。他的修改,他的写操作是不是要满足ACAD啊。就是你要么都成功,要么都失败是吧,你不能说我我这个采购啊,采购表里增加了库存表没有增加。
02:08
那肯定是不行的。对吧。但你说在一个机上,如果你的这个。你的这个采购业务啊,库存业务啊,你在一个机器上。啊,你的采购表库存表在一个机器上。那这个问题其实很好解决。是不是你本地事务是不是就可以解决了,可如果说他们都在不同的主机上,你现在怎么能保证它的这个一致性呢?就没办法保证了。所以我们这时候就得用分布式事物。好,那我们再来看什么是事消息啊。Q,啊,提供了类似于X open X open啊,我一会说它啊,X open xa啊X opena,那我们一会说啊,在这儿详细要说它。
03:05
呃的分布式事物功能。是吧,然后呢,通过事物消息,呃,能达到分布式事物的最终一致。通过事物消息能够达到分布式事物的最终以及XCXC。什么是一种分布式事物解决方案?分布式事务的解决方案是一种分布式事物的处理模式,那我详细说啊,在这我们先先不用管它。那我们再来看这个半事消息,刚才我们就见到了啊,半事消息什么东西呢。就是但不能投递的消息。暂时不能投递的消息。什么是暂不能投递的消息?就是发送方已经成功的将消息发送到了broker。但是博克尔未收到确最终确认指令。Poker。
04:00
未受到最终的限制。此时,该。消息被标记为暂不能投递状态。呃,其实就是暂你暂时不或者这样说吧。我们更好理解来说,就是暂不能消费。其实这个已经投递了,这,但这个说法是官方的说法啊,就官方的说我们也不去不去给他改了,其实是什么是暂不能消费。是不是是暂不能消费啊,就是不能被消费者看到,处于这种状态的消息称为半数而行。啊,这个大家。嗯,了解就可以了啊,了解就可以了。呃,那么我们再再看这个本地事务状态,刚才给大家已经说过了。是吧,啊,我们我们再看一下这怎么描述啊,Producer回调执行,呃回调producer啊回调操作,Producer回调操作执行的结果啊为本地事务状态。
05:04
你回调操作的结果。半个句啊。啊,回调操作。执行的结果是本地事物的状态。啊七会发送给TC,这个状态会发送给TCTC,会再发给TM。TM会根据TC发送的本地事务状态来决定全局事务,呃,指这个确认指令是吧,发给TCTC。你看看看这个图。他发给TC啊。半事状态是吧,半半事状态他他他会发给TCTC呢。呃,本地本地事物状态,本地事物状态就是你这样,你这样本地事我们这儿就就是这啊是这你这个回调执行的这个结果会发给TC。
06:07
TC会把这个街舞给了TM。对吧,TC会把这个结果给了TM。啊,这是我们我们说这个本地事务状态啊,刚才在这说过了。再给点。再给大家写到这儿啊好。那么下边我们看一个重要的概念啊,叫消息回查。先看什么是效益回响。消息回查,即重新查询本地事务的执行状态。就我们刚才。就我们刚才这你这个是不是调用回调嘛,是吧,你这个回调你执行回调,就是我们本地生活,你回调执行的结果是怎么样的。
07:07
成功了没有呢?我我给你返回来,我这回调执行的结果给了个,所以我不知道成功了没有,所以我需要再再次查看一下,到底执行成功了没有,所以这是什么,这就是我们的消息回调。呃,就本例来说,就是重新到。我们的DB里边,因为他这个预提交啊,这个预扣款,他也会扣款到哪,我们数据库里边。只不过这个数据库里边这个数据是用户看不到的。用户看不到啊,所以本来就是重新到DB里边查看预扣款操作是否。执行成功了。呃。哎,这需要需要大家注意一点啊,需要大家注意就是到这儿以后,有有些哥们儿老是会弄错一个概念,就是这个。消息回查,它不是重新执行。
08:02
回到操作。消息回查不是重新执行回调操作。这需要说明一点啊,注意一点。注意。的消息。灰常。不是。同心执行,呃,这个。回家操作。为什么?你这个回调操作,你看我我们这个图不是回调操作,是干嘛调用这个回调做这个预扣款的。回调是做预扣款的,而回查是查你预扣款执行的结果呢?明白吧?所以这个消息。呃。这个回调。或者说回调操作吧,啊回调操作呃是进行。
09:01
玉扣玉扣款。操作。R。消息。回查。呃,主要是。查看。嗯。扣款操作执行的。结果。所以这俩是不一样的啊,这俩是不一样的。我们大家看啊,看这个,看这个图叫工行系统回调操作,你看这我回调吧,然后我就看这回调的结果。回到的结果是不是正常,什么叫正常?正常就是你你这。是正常的也是正常的。不正常就是安。是不是正常的,如果正常好,我就把正常这个结果TM向TC发出全局确认值你注意啊,这这个这个我们就中间省了一些过程啊。
10:01
那你如果这个这个结果是正常的TC。会把这个结果报给TMTM,再根据这个结果是不是发出全局确认指令,我们这中间省了一些,呃,过程啊。为了简化嘛,所以直接是说TM像TC。发出。啊,全局千人指令。然后呢,如果说你这不正常。你这个不正常。不正常,怎么样,我就进行消息回查。所有的消息回答就是到数据库里面去查看,去扣款结果。然后你这一查能查到结果,不能肯定能查到结果。肯定能查到结果啊。嗯。查到结果就走到这儿了,如果查不到的,那自己重新再回查,查不到再回查,不到再回查,直到查到结果了到这。当然,以后确认指令给了谁了,给了我们的。呃,TC了是吧。
11:00
那TC你能收到不能。有可能说为啥就收不到。你注意啊,TM和TC之间是通过网络连接的。那你如果出现了网络抖动。是吧,或者是超时了,发生这个超时了,我就收不到了。如果能收到,那TC向发出分支确认指令是吧?那是没收到的,没收到重新回查。重新走到这儿进行回场。所以啊,从这个流程图我们可以看出来。我们可以看出来啊。就是,呃。引发消息回传的。呃。原因有两个,其实啊最呃常见的啊呃。常见。
12:02
第一个是什么?就是我们的回调。操作。返回。好,好,安诺。对吧,啊。第二个就是我们的。没有接收到。TM。呃的。最终,呃。呃,这个全局。十。确认。他没有收到。这里边啊,还有哪种情况。会引发。没有收到。你这样不是这个回调结果正常是吧,给了TC了,TC是要上报给TM。你这这这也是通过网络的呀。
13:02
他根本就没有放。上报成功。我TM就没有收到。超时了。所以我这不可能给你发。所以这。是不是这个位置有可能会出现问题,对吧,让你正常上报给他了,他是不是要把结果确认指定。我发给你,这也是网络。也有可能会出现超时或者是发不过去。你不管是哪种情况,只要超时了,那我这边肯定就怎么样。就就就重新会引发这个消息,会场。好,这是我们说的这个回查啊,嗯,然后我们再说一下这个Q里边这个消息回查是怎么样设置的啊,我们我们是可以设置一些呃属性的。关于消息回肠啊,有三个常见的属性设置。他们都在broke加载的配置文件里边,Broke下载配置文件不就诶。
14:03
不就这吗?呃,配置文件就就我们这儿是吧,那你要是单机的是不是在它里边,呃,你要是呃集群的,呃就是就就在这这些里边的,呃文件里边,这些文件里边是吧,那不说了啊。这三个是谁呢?第一个传开come out,我这样给它复制为20,什么意思呢?指定TM在20秒内,TM在20秒内应将最终确认结果发送为PC,我们刚才不是说了一个。这个这个这个超时嘛。外线有个20秒,TM要把结果填看着啊看着图。TM要把这个结果发给TC。这个超时时间我设定的是20秒。设定是20秒啊。否则会引发,你要不发啊,我这儿就会进行消息回查。
15:01
默认是60秒70默认值。然后还有一个transition check ma。是指令最多回查,我这儿最多回查五次。超过以后会报错是吧?丢弃消息并记录错误日志。默认是15次。还有一个transaction。啊check啊。啊,十十秒,这是指定设置的多次消息回查的间隔,就你这儿不是能能回查五次吗?这五次我查完了,马上又会查吗?不是。我间隔十秒钟,我再回城。再间隔十秒钟再回查,最多我会查五次。而默认是60秒,末日60秒。那么这是我们关于这个,呃。关于我们这个这个这个这个叫税务消息啊,它的一些基础的一些知识一些概念。
16:05
呃,大家需要结合前面我们画的这个图啊来理解。
我来说两句