00:00
好,接下来呢,我们来看一下啊,解决分布式一次性问题的其中一个非常经典的算法叫P算法啊。那这个pth算法它解决什么问题呢?我们先来看一下啊,首先这句话说拍算法啊,一种,它是一种基于消息传递且具有高度容错特性的一致性传法。OK,怎么理解呢?你看这是一个集群对吧?啊,这是集群里面有各种服务器节点,那么这个拍它就用来解决如何快速正确的在一个分布式系统当中对某个数值达成一致,并且保证无论发生任何异常都不会破坏整个系统的一致性。那比如说那这里面发生意外,包括哪些意外呢?比如说在其中一个节点宕机了。在生产环境下有可能发生吗?对吧,还有呢,就是这两个节点之间网络出现异常,比如说像延迟,重复丢失等等这种情况。
01:03
那这个P3算法呢,就是想办法保证不管你发生任何意外,都能够让每一个节点的数据是一致的。这就是排查的算法要解决的问题。那下面来看一下他怎么解决的。打开这个。派查算法的一个描述啊,首先介绍一下基本的概念,在一个这个派查算法的一个系统当中,所有的节点划分成三类,一个呢叫提议者。接收者还有呢,Learn学习者还每一个节点可以身兼数职啊,可以说具备它既是提议者,也可以是接收者,也可以是学习者,都可以。那什么意思呢?比如说这里面是个节点啊,为了这个让你好理解,我就假设这个节点它就是开场啊,这个呃,Proposal相当于是提议者,你说发起提案的人。那这个接收者呢?还是答应他?哎,说你的投票啊,我可以答应你啊,赞你投你一票对吧?啊投你票,那这个lender呢,Lender呢,就是你们这边已经表决完毕之后,那么我是来执行你们对的命令的这个人。
02:11
好,来看一下啊,具体看一下第一个一个完整的拍摄算法分成这么三步阶段,第一个阶段叫准备阶段。那首先这个提案的人呢,像这个发出这个提案请求说就相当于这个,这认为村长吧,啊这样。村长。对吧,这些呢,是参与投票的人,这些人呢,你认为是这个弃权的。啊,他弃权了,他不参与投票,不想投。OK吧,嗯,好啊,这些是,呃,选举人选举人。这么几个角色,那这个村长说,哎,你们几个能不能选我一票啊,对吧,啊,发出让他们问他们能不能选,那这些人呢,会做出一个承诺。说村长你放心啊,我就选你了啊,叫村长候选人更准确一些啊,村长候选人说我就投你。
03:02
OK,做出承诺之后,那下面接收解答。那么这个村长成功当选了,当选之后他就会向这个多个头啊发送对应的请求,那就说我给你们下达对应的这个命令啊成的命令。那下达命令之后,那这个呢,就会针对这个提案进行一个接收。啊,说你我同意你对应的这个题啊,你说真正的前面呢,是答应你说你无论你提什么要求我都OK,那现在呢,是提了一个具体的要求。能懂意思吗?啊,你说真正参与投票的时候,他选了这个村长,这个村长候选人一票啊。那最后呢,最后学习阶段,也就是说不管你有没有参与投票,最终。他当选为村长的时候对吧,那他对他也有对应的领导权。哎,让他们你得接受啊,我这个领导。这是这个含义。那下面再往下看。
04:03
那还是有这么几个角色对吧?啊,一个呢是提案的人,还有三层以及呢学习者。第一个。呃,这个prepare说这个提验者呀,生成全局唯一的且递增的这个ID,所有的这个呢,发送提案。这里无需携带体验内容,比如说第一次发送的时候,只是问他你能不能同意我所做的所的事情就行了,嗯,只要你同意就OK,那好。对吧,嗯,发生了一个提案发给他,那他呢,说没问题,我肯定啊。呃,听你的,然后在这里面的这个,呃,Promise呢,收到这个提案后,他会做出两个承诺,一个应答,哪两个承诺呢,第一个。他不再接受这个提案,ID小于当前请求的,你这不是当前的提案吗?那如果别人再给我发起提案,说那个你能不能选我一票啊,那对不起,不能选了。
05:01
嗯,而且这个是外地,必须得是你比如说你这这。举例子。他又发起了一个pro ID是001 001很显然是老的,你说旧的执行事物,这003是不是新的呀?那我是不得听新的。对吧,哎,谁是新的我就听谁的,旧的呢,这已经作废了,所以说他会说不再接受这个person这个提案ID小于等于当前的这个。因为这里面的技术全局的递增啊。再来一个啊,这不接受了,那不再接受,说是ID小于当前请求的。啥意思呢?你呀,之前已经答应了他,说要投他。对吧,哎,但是呢,你会发现啊,这个pro ID是002,它的这个呢,啊TID是零零。那我答应了004,那你这个就说。回啊,就给你返回一个空就可以了,这个也不行,然后呢,不违背以前做出承诺的情况下,回复已经过的这个提案中事务ID最大的那个提案,那肯定啊,所有的处理原则都是找这个提案还是事物啊,最高的这个,那最高的就是最新的嘛。
06:16
好,没有的话呢,就回一个空就行了。啊,这个啊啊搜到多数这个这个允许就说比如说他发了N多个这个请求,说你能不能选我,能不能选我,哎一旦超过半数之后,那它是不是就可以进行这个提案的一个发送了。对吧,哎,这块呢,他必须得达到这个半数啊。再往下说,S收到这个,呃,比如说这个提案者请求后,在不违背自己之前做出的承诺下接收并持久化,当前的啊,不是ID。啊,也说这正常情况下,你这边已经第一次询问我了,说能不能投我一票啊,那这个俄赛特说已经答应了,说能投,那好,那下面真正的选举的时候,那你确实得把这票啊给人家啊,投给人家是这个意思。
07:04
到后边呢,就是这个lender lender呢,就是这边呢,这个收到多数的这个啊选票之后,那后续呢,那这个表决结果,你这边得坚决服从。啊,这个呢,算法呢比较抽象啊,稍微了解一下。那么来往下看看第一种情况。举个例子啊。方便你去了解说呀,有A1到A55名议员,他干一些什么事呢?说要调整这个税率问题,进行一个表决。啊,来看说这个A1啊,作为提案者说我们要发起一个提案,这个提案你们能不能答应我或者同意我的提案。还没说什么事呢啊,还没说什么事呢,问他能不能同意。那这个2345呢,说同意,你只要说啥我都同意。大家来。好,那A1呢,就发出了一个说啊,我这里啊,我要发起一个税率调整为10%这么一个提案,你刚才你们这个1234,这个234已经答应我了,对不对啊,那发过去之后,那他们就确实得回应这个A。
08:09
说我同意,哎,你对应的这个提案啊,这个调整税率为10%。啊,就这意思,先问你能不能答应,然后呢,再发具体的这个啊事件。那答应完之后,那这个事儿就通过了,那这个提案税率就已经达到10%。那相当于如果答应之后,正常所有节点的数据其实就是一致的。啊,对吧,都保持一致。那这是第一种情况,比较顺利啊,就完事了,那下面总有意外的情况吧。看一下还是这种情况啊,五个一元进行一个税率。定律,那A1呢,也是提啊。A5呢,也要发几天,有两个题你看啊。A1A1提了一个,A5提了一个,那A1A5呢,它俩是同时发出的,但是序号呢是这个啊A1呢,要是一,A2呢是二,是不是它相当于这个事ID更大一些。
09:04
他更大一些哈,往下走说呢,这个A2呢,承诺了A1说你都你提什么一呀,我都答应你A4呢,答应了A5,那现在就差这个A3吧,A3答应谁是不是谁就超过了半数。那往下看说要情况一,第一种情况A3呢,先收到了A1的消息。那收到的话,那我就我就答应你呗,对吧,哎,就答应了他,那他的提案序号是不是一呀,那是不是这个事儿,这个A1就可以发布更新了,对吧?啊,那A1呢,就发了一个说税率呢,调整为10%。那A2A3接受已经超过基金半数,那这事儿哎。所有的节点是不是都更新为10%了?OK,那再来之后呢?这个A3呢,又收到了这个A5的一个提案,说要定为这个20%,因为刚才只有A41票吗,现在又收到它。那收到这一票,如果说他允许的话。
10:00
那是不是,那我就按照这个A5去。那什么呀,哎,去升级啊,对吧,啊,也就是说A3又收到了这个A5的消息,回复说并承诺。那确实啊,A3。又答应了A5啊答应了A5,那么A5呢,呃,那他就再次广播,那再把这个事情呢,啊更更新为20%,因为他的这个45ID或者是一个TID是要大一些啊又把之前的又覆盖。啊,就是这样一个过程,比如说在一个这个呃,集群当中有多个体验者的时候,就会发生这种情况啊,一个覆盖一个。那再来一种情况,再来。再来一个更复杂一点的哈。什么复杂一点呢,还是这五个提案得啊A1A5啊,那A1A5呢,还是同时发了这个提案,一个是序号一,一个是序号二往下走。首先呢,是这个A2啊,承诺了A1没问题,然后A4呢,承诺的是A5,然后A3仍然是关键是吧。拍照。
11:00
那第一种情况说这个A3呢,收到了A1的消息,那答应了A之后呢,他又立即收到了A5。诶收到它之后立即收到A5,那这个时候这个A1有没有发布这个10%这个广播呢。你记住啊,他是同时回复他又回复他。对吧,是不是还没收到呢,嗯,OK。打印完了,然后呢,那A1呢,会发起这个嗯,这个的题案。那就是发起这个投票。但是呢,你发起完之后,你会发现没有足够的响应,因为他是不是先回应了他呀,因为他的这个是ID是不是二啊。对吧,啊,回复了他回了他这边,他是不是就达不到这个。超过半数的选票了。对吧?嗯,那他是不是就A1又重新发起提案,那这时候这个序号是不是变成三了。三数比这个二要大了啊,那A3呢,再次又承诺了A1。往下走。那么这个时候呢?
12:01
这个A5他这个20%,因为这个A3这个答应了A1,那他是不是又达不到这个百分之啊,这个超超过半数了,对吧?哎,超过半数了,那怎么办呢?那A5他又重新提出这个提案,那这个序号就变成四。啊,又大于你这个三了,那这个A3呢,他又随风的又答应了这个A5,你会发现这样如此往复下去是没有的尽头啊。哎,所以说这就是拍三算法的一个啊问题。是吧,也就是说有多个体验者,那来看一下啊,说造成这种情况的原因呢,是系统当中有一个以上的这个体验者,多个呢,这个相互争夺这个ET,造成迟迟无法达到一致的这种情况。针对这种情况怎么办呢?哎,一种改进的拍摄算法被提出来了,说你这里面能不能我就只有一个体者。哎,你别整那么多了,你整那么多的话,这个一会答应他,一会答应他,这个容易乱套,哎,那如果我只有一个这个,呃,体验者的话,那我就选举出来一个leader。
13:01
对吧?哎,只有这个leader能发起对应的提案,其他的这个follow都不能发起,那这事不就解决了吗?啊,那基于这种算法,其实就提出来对应的ZB协议,ZB协议就是P算法的一个改进,算法里面只有一个leader,其他的节点都是。
我来说两句