00:00
好,接下来呢,我们就来详细的看一下主K它到底怎么进行选举的,那这里面的代码呢,还是相对来说比较复杂的啊,我们先来看一下啊,整体的一个流程啊。打开打开之后呢,这是程序的入口啊,这之前都讲过了对吧?哎,往下走没问题,走到这之后主推边启动,然后要开启对应的选举了。那在这块启动选举,然后运行,然后你刚一上店的话,是不是一个looking状态呀,对吧?哎,另looking状态的话,那我们就要选举出来对应的老大,看谁是老大,那这块选票的时候就是serve ID c sidd,以及哎,通过他们这个更新对应的选票相关信息啊。这块呢是一个选举算法,然后再往下,你既然找到老大之后,那我是不是得广播呀。啊,或者说找老大的过程当中,我得发送选票嘛,对吧?哎,相互呢,交换对应的一个选票信息,那这块需要创建选票以及呢,诶把选票放入到发生队列。
01:00
其实这块。你这块是不是得把这个选票放入到这个发送队列里面呢。往下走呗。往下走,走完之后,那这块呢,就是用来处理对应的一个选择信息,然后通过这个to send方法,也是在这个work center里面,也是这块啊work center,然后准备往外进行一个发送。是这样吗?可以照着这张图啊,找到这那这样还走。往下走,走到这儿的时候,他要进行判断,因为咱说呀,每一个主K方他都是自私的,他首先要判断是否是发给自己的,对吧?哎,判断是否发给自己,发给自己之后,那直接就后续这一个循环就完事了。那如果是发给别人的呢?对吧,哎,发给别人的你就放到这个啊queen and里面,比如说发声放到这个啊,发生队列准备往出发就可以了。这有点花哨啊,往上看。
02:01
到这那这块我要具体发送选票的时候,那你要发给谁,你是不是就得连接谁呀,对吧?哎连接谁,那连接的话呢,这块呢,就是要建立连接。然后呢,一旦跟其他节点建立连接之后,就可以通过这个输出流来往外发送,同时通过这个输入流读取对方啊对应的一个应答信息相关的一个结果。对吧,一个是发送,一个是接收。然后在这块。下面这块啊,哎,就是具体的,呃,调用谁呢,用它。像这块。啊,这块对外进行发送,以及处理别人发过来的接收请求。赏识这块相关信息啊,那这个图呢,确实啊,这个比较复杂,那我们先来干嘛呢。我先给他盯出来,嗯。刚才那取消了是吧?啊。
03:03
哎,把它盯一下OK吧。然后放在这儿,然后把我们最开始的这个。这张图啊,这个拿出来。哎,照着这个图啊,我们去看源码就会轻松很多。这两张图都给他准备好。OK吧,哎,都给它放在这儿行了,那下面呢,我们开始进行真正的选举工作,那选举工作从哪开始啊?那我们上一个上节课是把这个选举的准备工作做好了,那接下来就开始执行军的选举。那来到这个位置。这位。看到他了吗?对吧,上一步我们说把它执行完了,那接下来我们就来执行这个start啊。那走呗,那你看这里面是superstar,那你看一下。对吧,来看一下啊,现在我们在这个线程的外面,那外面是不是就是它呀,那它的一个大的方法,那我们在它最外面搜索软方法。
04:13
对吧,哎,你看就是它的一个run,那他run之后他干了什么事呢?哎,往下走呗,啊往下看啊,你看。走往前走,走到这个位置你看啊,Y有循环,如果它是一直running状态的话,首先第一个分支,按理说当前节点它是looking状态。哎,那他要干什么事儿呢?那我们当然很显然是这个状态对吧,往下走往下看。看到哪了,往下往下看。哎,那我就current选票,相当于是更新当前选票,那更新当前选票传进来的参数是什么呢?哎,参数是对应的for,很显然通过这个方法来进行选举,好吧。OK吧,啊,这个是核心的方法,好,那进去看一下。看一下发现,哦,这是一个接口,那怎么办呢?诶退回来。
05:03
然后CL out加B。对吧,那你调用哪种选举算法呢?哎,这个是fast leader啊,这种选举算法来。进来之后,那我们往下看呗,对吧?啊,通过这种选举算法往下走,往下走到这,你看这里有一个更新选票相关信息,那更新选票的时候,你可以将这个。啊,Serve ID last,最后一次serve ID以及呢,这个啊,通过他们进行相关的一个更新,那你这个选票一旦创建或者更新完毕之后,那你是不是得把它发给别人呢。这块。现在我们走到这儿了啊,选举算法生成了一张新的选票,那么我就要往外发对吧,往外发,往外发调用的就是它。我点开。调用它之后,你看这里面,哎,这有一个new,一个to send,哎,向外发送相关的message信息,比如说形成了一个你要外要向外发送哪些。
06:01
那由谁发呢?由他发。对吧,3K那是不是就他呀。相当于把这个信息放到了这个消息队列里面。那放到这里面之后,是不是由对应的这个WORKER3它往外发呀。这样道理吧,哎,克往外发,那他往外发,那就找一下呗,在哪个类里面,是不是在这个faster leader lesson在这里面,那我就找一下。赶快来。Work work。Worker。然后。Under对吧,哎是它,那它往外发的话,那它是一个线程,那是不是得执行对应的run方法呀,哎,通过run方法往外发,那你会发现看到这块。看到吗?哎,这个3QUEEN看到吗?哎,通过这里面循环的一个一个的往外去发送。哎,就这意思,哎,通过他往外发,那他往外发这个是发发完的结果,哎这面呢进行一个处理对吧?来处理。
07:05
Process。那他怎么处理的呢?诶通过这个manager,这个manager是谁呢?诶是对应的管理者,然后他往外去发送。那具体怎么发的走记得。进来之后,咱说了这个每一个往外发呀,啊这个JK啊,选举的时候呢,他都是自私的,他先判断是不是发给自己。你看一下,如果说你这个麦ID。和你要发送的ID相等,那就是发给自己的,那直接就添加到一个自己的爱的receive里面,放到这里面,那看一看是不是这样的。进来之后,你看到这是哪一类了。是不是已经变成对应的这个通讯对应的类了啊,那它在这里面就会。还艾特到这个队列里面,然后找对应的这套循环,是这样吗?好,那我再回来。就刚才这块呢,是发给自己的,那如果不相等的话,是不是就是我要往外发呀,哎,往其他节点上发啊。
08:05
那你往其他商节点上发,那就调用的是用的这个方法。爱的to善呗,爱的to善可以。然后对应的连接上对应的哪一个节点,你说你要给谁发,那我就连接谁。这样吧,按照这块呢,就是很显然添加到发送队列,那这个发送队列是谁呀。8万,哎,它就相当于是这里面呗,哎3K。这是吧,哎,就走到这儿了。那回来。那这块呢,说啊,我要发给谁,我就先放到这个队列里面,然后我通过这个connect one啊连接啊进行处理啊进来吧。看一下连接的,怎么连接的。那我连接往下走。找谁呢?哎,这里面还有一个one对吧,这一个connect one啊继续往下点。哎,往下点进来之后,那再往下走。你看这里面啊,你隐隐约约能看到啊,各种创建这个烧的通讯对吧,哎,底层烧的一个通讯,再往下走这块,哎,这上面呢是异步的啊,这呢是一个同步的啊发送诶走。
09:13
红发圣进来,然后start connection啊,继续进行连接。连接之后你会发现哦,这上面它会创建一个输出流,看到了吗?哎,输出流输流,然后呢,下面呢,还会创建一个输入流。其实你就是给对方发送的时候,你是不是也得等待准备接收对方的一个选票,哎,所以说输入流输出流都已经准备好了。那再往下走。往下看,嗯。好,接下来看这块儿啊,这块有点意思啊,如果说呢,这什么自己的ID,如果说小于对方的ID,比如说我自己的ID呢是一,那对方的ID呢是二。我小姨她那我就不把。我就不准备给对方发这个选票了啊,因为发过去之后啊,啊是相当于什么呢?哎,是你选不选我当老大这意思,所以说我自己已经没有资格当老大了,那我就不把这个发过去。
10:05
是这个意思啊啊,那如果不是的话呢,那这里面就要创建对应的散worker和修worker,相当于到哪了,是不是到这个位置了。散窝壳和水秀窝壳,然后这个散蜗壳和水秀窝壳在下面是不是都已经开始启动了啊。那我们就来首先来看一下,在这个三的里面,他干了哪些事情呢?点它进来,进来之后啊,这是一个sand worker,那sand worker要想工作是不是得有对应的run方法呀。对吧,哎,往下看啊,找一找这种方法。是不是它呀,哎,这个方法,那这个sender它就准备往外发送。往外发送的时候,它就会调用这个散的方法。散放往出发。那看一下怎么发的。是吧,哎这样呢,它底层呢,就是right对吧,不断的往外进行一个写操作,OK吧,哎,这是写操作,那接下来我们再回来。
11:02
刚才看到的是这个worker,那么这个receive worker,你说他又是怎么工作的呢?来进来,进来之后仍然是找它对应的run方法。是不是到这啊来找这找这之后呢,你往下看啊。呃,这里面就有对应的啊。这地方。就会接收对应的相关消息,对吧,相关消息然后添加到哪里呢?添加到对应的这个receive里面去。先往这里面填,你看是不是。对吧,往这里面填,那你看当前的类是不是它呀。对吧,就是这个通讯的类里面,这个里面添加,这个里面添加,那接下来我们来看一下在它这个类当中是否有一个receive,然后来监听这里面的数据。是这样吗?好,那我们来到这里面,来到这里面之后呢,我们来搜索一下这个。Worker。Re c啊,这个OK吧,啊到这到这之后呢,进到这里面,进到这里面我们就看它的润方法,看它在润方法里面干了什么事。
12:11
是不干的,没事。哎,Manager,然后队列,哎相当于这块呢,不断的监听这里面发送过来的数据来放到,哎,然后呢,它这里面处理完之后,会写入到对应的人系队列,这样呢,至此呢,就形成对应的闭环操作。你看整个这个选举代码啊,就是按照这样的一个规矩,那他接收到这个这个选票之后,他会继续判断说,诶,我这里面有没有选我当老大的超过了半数。那如果超过半数的话,那就能够形成对应的leader啊,是这一套流程啊,啊稍微复杂一点啊,大家呢啊,就是对照这个图啊去看就会好一些。
我来说两句