00:00
好,接下来呢,我们正式来看一下主K分的核心代码。首先来看呢,就是主K服务端初始化的一个源码解析。比如说JK的服务端,它启动之后,它到底干了哪些事儿?对吧,那同时呢,这里面也会教会大家说你如何去看一个源码,从哪开始看。OK吧啊,我们先来看一下啊啊,我的特点呢,是先给大家整体上有一个印象,他干了哪些事儿,然后我们按照这个PPT的图,然后去再去看源码,这样会好一些啊啊首先来看一下我们程序的开始的位置,是不是这个j k server啊,点start。这是一个启动一个服务对吧?哎,那我们就从这看起。那在这个文件当中你会看到什么呢?你会看到这些话。说no啊,后台对吧,后台运行Java。啊,加完后面一堆参数会有杠CP。执行啊,程序执行程序,那这有什么呢。
01:01
是不是一个程序的全类名啊?哎,全类名,然后后面呢,会跟上这个全类名,这个代码对应的输入参数啊这种配。情况些参数就OK了,那你一看到这个说我要启动这个类的全类名,那是不是这就是程序的入口啊。宽容P啊,扩容me啊这个啊,那程序的入口呢,确实就在这儿,那就是你要在代码当中去找对的这个类。哎,是这样来的哈,你先看脚本启动脚本怎么写的啊,他要启动哪一个全列名,然后就找对应的类。找到这个类之后,那就走它的main方法呗。在他的main方法当中,然后你会看到这么一个。对象创建一个容片啊。这么一个对象。创建它之后,下面就会执行对应的初始化and。对吧,哎,初始化,初始化对应的这个主kper胡子。那在这个初始化当中,他干了哪些事儿呢啊?
02:01
第一件事儿。你既然传进来了一个参数,这个John大家有印象吗?它是不是就是我们那个配置文件呢?哎,那里面有这个data DR啊,有这个,呃,心跳时间,还有对应的leader和follow之间的通信时长限制,还有顿号。对吧,来相关配置,那我是不是就得对这里面的内容进行解析啊,那就调用解析方法,哎,解析对应的这个文件,然后这里面你还能够获取到什么呢?还能够解析到对应的这个MYID。MYID大家不陌生,它是这个每一个主peopleper唯一的身份标识,非常重要啊,这块呢,就给大家去看一下,好,那再往下走,接下来。咱们说呀,主K存储数据呢,内存里面存一份,然后硬盘当中存一份,硬盘当中存的数据呢,是分两部分,一部分呢叫快照。还有一部分呢,叫镜像文件。啊,快照和这个编辑日志对吧,啊日志。
03:03
这么两部分。那你这里的快照你存储的越来越多,越来越多,如果不删除的话,那是不是占用你释放空间呢?哎,那这里面它给你提供了一个功能,可以帮你去定期的清理掉过期的牌照。啊,是这个功能啊,当然这个功能呢,呃,默认的是关闭的,你可以把它打开。再往下看,下面呢,就是进行的通讯组件的一个初始化。我们现在启动的是服务端,未来是不是还有客户端跟我进行相互的通讯呢?那相互通讯它底层的代码怎么走的呢?你像hi do底层走的是RPC,那么主K牌是不是也走的RPC呢?不是。他走的是呢NIO这个通讯协议。那在这块呢,会创建对应的呃,通讯客户端OK吧,啊后面给大家看。那再往下走,那一切准备工作都已经做完了,那剩下的事就是启动主keepper。
04:00
好,这就是在这个主皮本啊这个。初始化当中我们要做的事情。那接下来要做的事情就很简单了,我们就验证我们这张图是否正确。其实呢,最终啊,你学完这个源码也是啊,大家呢,最终记下来的就是这么几张图啊就OK了。啊,你说海哥,我我能把这个源码里面每一行代码都背下来,有没有用呢?一点用没有啊,最终你给面试官讲的还是这张图,以及呢,你真正的去分析代码相关的内容的时候,我们还是要先看图,然后再去看对应代码,那这样理解起来会好很多,OK,那我们先从这个主黑板服务端启动脚本开始来分析好吧。那我们找到我们的源码。地盘。小贝在这个位置找我们是不是在B目录下,然后启动对应的脚本啊,那是不是他呀,JK serve在。打开之后你往下找,哎找什么呢?正常这都是这个下午脚本啊啊,首先看到这把这定出来。
05:03
这里面是不是有一个啊做啊DR,然后下面来了一个JKV点这一项。对吧,哎,有个它啊,这个你先放在这儿啊,先放在这接出来进来之后呢,往下找啊往下找,找什么呢?找这里面有一个助妹。你看啊,这个助may呢,这是if这个分支有,然后else else下面是不是还有一个助妹啊,哎,都会执行对应的它。那他这里面能干什么事呢?你好看。这里面是有一个全类名啊,Org阿奇主k serve啊这个妹,然后下面这个呢。你拉到最后是不是同样的,它也有对应的这个权利名。啊,这两个都有啊,也就是说这个祝妹啊,无论如何他都会有对应的这个权利名。好,那下面往下看啊,往下走。往下走。我放大一下啊。往下看看这块。咱们那个脚本啊,是不是这个点SH这个脚本,比如说ZK。
06:05
后面是不是调用的是start。你说第一个参数是star。那你看这个case到一是不是就相当于传进来的start啊,那如果你传进来的是start的话,它会怎么走呢?他就会走这个,你看no ho啊,在后台运行Java,然后看这块啊,这中间一堆代码啊,一堆代码一堆参数,然后这杠CP。哎,相当于杠架啊类似的,只不过杠这个CP啊,啊,你后面可以传对应的参数是吧,哎,然后这个做may这就来了,然后后面呢,这个John con。那这个作风con?它的值是多少呢?哎,它不在这个当前这脚本里面,它在哪里呢?它在这个ZKV.ch里面定义的这个变量的值,我们来看一下啊。我先给你他截出来。对吧,好,然后我再打开另一个脚本叫ZK,因为环境变量啊,一般情况下,因为里面存储的都是各种环境变量,嗯,打开之后往下找。
07:05
看到这了吗?嗯。这里面有一个这个作用,你看哎,默认情况下呢,是join点,哎,还可以在前面加上一个主keepper DR啊你那个路径,然后作用能够找到对应的文件。然后CF3。OK了吧,哎,所以说这个值呢,是在这负的。啊,这是执行类代码,所以说现在呢,我们就找到了程序的入口,就是这个入妹它的权利名,那权利名就是。知道吧,哎,找到他。找到它之后,我们来到这个idea当中,然后我们CTRLN,然后V。那就找到了对应的它点开,哎进来进来之后找什么呢?就找这个类的酶方法。OK吧,哎,都关掉啊,没方法,那没方法当中就有对应的A创建这个主keepper相当于对象实体,然后这个实体对象就会进行后续的。
08:10
哎,这就是程序对应的入口。
我来说两句