00:00
好,上节课我们主K班的服务端就已经正式启动完毕了,那他启动完毕之后,接下来要做哪些事情呢?对吧?哎,这是我们关心的,那首先我们来看一下哈,再回顾一下主K分里面存储数据的一个结构。其实呢,它是在内存当中存储了一份数据,内存当中数据呢,是以这个data tree这种结构进行一个存储的,每一个节点都是一个date note。OK吧,然后呢,在磁盘当中他还存储了一份快照和对应的编辑日志。那么快照加上编辑日志就能够组成内存当中最新的一个数据,诶,是这样一个原理,那它怎么工作呢?如果你正常刚启动的时候,内存当中数据数没有啊,那它就会加载磁盘里的快照和编辑日志,恢复出来数据进入到内存。那进入到内存之后,后续就会有客户端对我这个集群进行访问,那访问的话,这里面是不是有可能创建节点,也有可能删除节点呢?
01:04
那这样的操作他有没有第一时间更新他的快照呢?没有,他不更新快照,它更新的是这个编辑日志,你说记录下来我干了什么事,只是一个记账就OK了,然后最终后续再把它进行一个合账,合成一个整体的数据。是这样一个工作原理哈,也说既保证了你访问的一个时效性,同时又保证数据的一个可靠性,持久化到十盘嘛。是这意思,让他了解了这个之后,那接下来我们来看一下主K服务端初始化之后,他干了哪些事呢?把这个打开。对吧,哎,这是这个主kper啊的入口啊,初始化and就是上节课我们都走过对吧,走到这之后呢,然后启动了主keepper服务端,那主keepper这个服务端里面这个的方法干了什么事。哎,说的是这个意思,那这个start方法里面首先呢是load date,就说你服务一启动之后,我立即得加载编辑日志和镜像文件里的数据。
02:06
对吧,得恢复到内存当中,OK。那这样的话呢,就是调用这个方法。那一部分呢,这块呢,就是用来恢复快照运的数据。那右侧呢,右侧呢是哎,恢复编辑日志里面对应的数据就是这样一套过程,OK吧,那下面呢,我们就来验证一下它是不是这么干的。还是老规矩,先把它钉出来。OK吧,然后呢,后面用的时候我们再来往下走。那行,我们来到这个代码当中。代码当中,哎,我们上节课呢,是走到这个位置,说这个主K服务端已经正式启动,对吧,那启动了之后,我们看一下这个大的方法里面干了什么事,谢谢。进来之后找到这个位置是不是load data贝,诶说加载数据,看它怎么加载的进来,进来之后仍然调用的是它。
03:02
对吧,啊,还是加载数据。那加载数据有一个数就到这了,你看一下这个位置。相当于我们代码现在数走到这个位置。走到这个位置,那就进去呗。进来之后两个分支了,一个是它,哎叫反序列化。将这个磁盘当中的数据。哎,反序列化到内存当中调用的是它那另一块呢,叫fast forward from,其实就是从这个编辑日志当中进行回复数据。比如说到了这块,现在就两个分支了,一个是对应的它。另一个呢,是这块包括了恢复编辑日志。下面这块啊。对吧,这块呢是用来恢复编辑日志的,它呢是用来恢复快照。那我们来看一看它到底怎么恢复的啊,一点来首先来看一下他呗,哎,反序化对吧,来进。进来之后,那往下走。
04:01
对吧,哎,再点。点到这儿。点过去点过去发现了这块呢,它是一个接口对吧?啊,那接口接口的话,那你得找它的时间类啊,回来回来之后呢,就是这个坦克二加B。进来查找它对应的实现类,那实现类呢,是这个file啊是它啊,那进来之后呢,往下看啊,继续往下走。往下走对吧,哎,这块呢,是循环便利每一个快照文件对吧,往下看。这是不还是有一个序列化方法呀,哎,往下走进来,进来之后看他怎么序列化的。这里面调用了序列化快照啊,相关的方法再找。再去的话,那去列话呢,它这里面,哎继续往下看,哎看这是不是还有一个序列话呀,哎继续走BT。嗯,列化呢,然后下面这个位置看一下它是不是循环便历跟目录下所有的这个值啊,然后干什么事呢,看下在如果是你的负节点,那我就获取对应的负节点信息,如果负节点下面还有子节点,那我就艾child。
05:12
相当于是把快照里的内容一个一个的,这样能好一点啊。相当于现在他干了这么件事。将你快照里的内容一点一点的恢复到这个data tree当中,是一个节点一个节点的恢复啊,先从这个根节点开始恢复,然后只节点在指节点。就这意思。OK吧,那这块呢,就是恢复对应的快照数据,那回来,那接下来我们再往回走,往回走。回到哪呢?嗯。就到这儿。比如说这个方法里面我们已经看到了啊,它就是来恢复目录啊,这个data里面对应的数据,那下面这块呢,是不是对应的这个编辑日志啊,对吧?哎,那我们来看一下这个编辑日志它又是怎么恢复的。打开进来进到这,进到这之后呢,往下走,这是一个循环,在循环体当中,我们往下看,往下看process。
06:11
进来进来之后再往下看啊,那下面你看这是一个根据你的类型,比如说你编辑日志恢复的是什么类型,是创建的筛还是关闭的对吧?啊还是说那不管哪一个,你看这里面是不每一个分支里面都有一个TS。哎,这里面就是恢复对应的数据,记得。任何一个都行,进来之后是不是就到这了,哎,到这之后记笔记就到这,到这往下走,看他干了什么事了。哎,各种j sid啊,类型这块根据你这个操作的类型,我进行后续的相关操作,哎,我是创建创建还是创建TTL啊,以及呢啊,创建contain的容器,删除对应的容器,Set data啊,还是set a CL啊,Set check menu,各种各样的这个编辑日志操作,我这下面都有对应的一个处理。
07:07
其实这个地方呢,就是恢复对应的编辑日志里面对应的行为陈述。能懂我意思吗?哎,一个呢,是这里面恢复。数据到data这里面恢复的是平均值。两个加在一起就是整个data当中对应的数据。
我来说两句