00:00
好,接下来呢,我们看一下第五章主K分布式锁的一个案例,那这个案例啊,在生产环境当中呢,也是呃,使用的比较广泛,那我们先来看一下对应的什么叫分布式数。对吧,先把这个名词啊,先给它搞定。那么举个例子啊,比如说呢,这里面啊,有一堆我们要处理的业务或者一些资源嘛。这啊,这有一堆资源。那么这堆资源。我这边有N多个线程,比如说线程一,线程二,线城三,线程四。那谁有权利去获取这个资源呢?那当然都有权利。那如果说同一时间一个人在操作,那还好,那如果是两个线程同时操作这个资源,那是不是就会出现乱套的这种情况,比如说一也向这个志愿里面写数据,二线程也往里面写数据。那这个不合适,那怎么办呢?哎,那我们就来一个加锁的方式,比如中间啊,这有一把锁。对吧,来这把锁。
01:01
啊,比如说线程一要操作这个资源的时候,首先他得拿到这把锁,然后把这个资源呢上锁。哎,来一个小锁头给锁上了。那它锁上之后,那这个234是不是他就不能够访问这个资源了,因为只有他能打开这扇门。能理解吧,啊好,那这个一如果用完这块资源之后干嘛呢?他把这个锁呀释放掉。哎,那他释放掉之后,那这个二就有权利说我也获取到这把锁,然后他过来之后呢,他再把他上把锁。对不对,哎,然后操作里面的队员操作完之后再次放手。哎,是这样的一个概念,这就是分布式数。那我们要想实现这个分布式数,用主K怎么来实现呢?看一下这张图啊。呃,左侧呢,这边呢是对应的客户端,然后这是主K集群里面一个根目录下有个log丝,OK吧,诶是这样一个情况。那现在啊,说接收到请求后,在拉斯节点下创建临时节点,比如说客户端会访问集群,那访问集群的时候他会说啊,我要创建一个临时的带序号的节点。
02:12
那收到这个命令之后,主K班集群是不是就创建一个临时的带序号节点呢?哦,OK,好。那接下来。那这下面我有N多个。操作对吧,N多个,你可以认为N多个客户端线程来在这个目录下创建对应的节点。那创建这个节点有什么用呢啊?那它这里面规定啊,规定说诶,这个序号最小的节点,它有第一优先级,获取到这把锁,然后操作锁里面对应的资源。好,那比如说你看当前这情况,有N多个客户端在这下面创建了对应的节点,那谁来操作呢?他来先操作。能懂我意思吗?啊,在这个节点下,他先操作,那如果说他操作完了。
03:02
那是不是这个节点就可以释放掉,释放掉之后是不是下一个节点就能拿到对应的锁呀?理解一下这个思路,OK,往下走,行。那下面刚才我说了啊,如果说他下线的话,第二个节点它就能够获到这把数,那么这个一他如何知道这个零上线还是下线了呢。哎,你可以来一个watch监听啊,我可以监听我的前一个节点是否释放掉了。这不就OK了吗?那这里面说判断自己是不是当前节点最小的节点,那怎么办?就是获取到所啊,如果不是,那对前一个节点进行一个监听就可以了,监听它是否在线。再来。一个一个监听,那最后一旦他释放掉对吧?哎,他释放掉,那通过这个监听回调我就知道啊,他释放了,那好这个业务我就拿过来了。我们再来回顾一下对应的这个思路,啊啊,再来思路。
04:01
首先呢,这是主客班客户端,这面呢是主客班集群,那好,那他要演示这种分布式锁怎么办呢?他首先客户端对这个目录下创建对应的临时的带序号的节点。OK,因为带序号的话,它是递增的哈,它是递增的有这么一个特点,临时的特点呢,是它一旦用完就释放了啊释放了。那接下来创建了N多个节点,那么序号小的节点,他优先拿到这把锁,进行相关业务的一个操作。OK,再往下走,那下面那其他节点,如果说他上来之后发现自己不是整个这个logs下面最小的那个序号的节点,那怎么办呢?他就监听。它的前一个节点是否使用完了。前一个节点一旦释放,那我就立即获取到对应的这把手。他开始炒作。就这么个事儿。
05:00
OK吧,好,那下面呢,我们就来具体的做一下啊。先把这张图给它钉出来。一会儿呢,我们用这张图啊,来进行相关的一个演示。
我来说两句