00:00
这呢,我们基于keep来去实现分布入索就基本完成了,那么单这的话呢,来去分析一下,或者我们来去小结一下啊,那么到这里我们的the分布式所都具备了哪些特征?那么首先呢,它具备了独占排他,然后呢,啊也实现了阻塞所。呃,还实现了可重入的一些功能。那么同样的,咱们无意间呢,其实也实现了一个公平所。公平是分那个玩意儿。那么啊,咱们啊,也是借助于那个有序节点,那么先来的请求可以先创建一个,创建一个比较小的节点,他就有机会呢,最先获一道锁。那么后月请求的话呢,它是只能去排队了啊。好,那么是公平所,那么走keep的分母索呀,我们就基本上实现这四个特征啊,那我们可以去结合咱之前的那个red那个分母所。那么来去对比一下,我们有没有解决分布所的一些特征?
01:03
或者一些问题。那release分所呀,咱其实呢,无非有这么几个特征啊,那第一个特征呢,是独占,然后排他的互斥使用啊,咱们呢已经解决了。啊,那我们使用的是这个节点啊,节点啊,不重复这样的一个特征啊,可以呢,做到独占排他有序使用。啊,那么然后第二个特征呢,那是咱们防死索这个特征,那么在组keep里,在里面我们有两种搜索搜索情况。那么第一种情况呢,是客户端,那么程序获取到,获取到锁之后,那么服务器,服务器立马宕机,可能会带来搜索。那么在release里面,我们是通过给节点设置过期时间能来解决问题的。那么在一组K炮里面呢,咱要不要设置过期时间了呢?不需要,因为呢,我们有临时,咱使用的是临时啊节点的那个玩意儿。
02:05
临时节点啊,那么临时节点呢,我们一旦这个客户端程序会到锁之后啊,一旦宕机。那么这个临时节点呢,它就会被销毁。好,那么临时件特征啊,是啊,一旦客户端啊,服务器服务器宕机宕机,那么咱们这个链接。链接就会就会关闭。那么此时我们的ZK心跳,它就监测监测不到咱们的这个客户端,客户端程序了啊。那么那么最后的话呢,就会。就可以删除对应的什么临时临时节点,临时节点,那么既然的话呢,它的锁呀就会自动释放,所以呢,我们不需要去通过设置过期时间什么之类的来以解决这种死锁问题。
03:07
所以呢,咱这个东西呢,通过临时节点就比较巧妙的避开了啊。那么然后第二个搜索呢,就是不可重入,不可重入会带来思索,那我们在release里面啊,还是借助于哈希数据模型接接合lur脚本能么来实现的。那这K里面呢,咱也实现了这个可重入锁啊啊可重入锁,那么在可重入锁来借助于那个local来实现的,但实现方式呢,多种多样,我们也可以呢,借助于啊节点的那个数据内容的一个实现。那我们也可以借助于其他的一些东西,比如说contain哈希map啊,也可以去实现啊。那后续呢,我们讲那个呃,K这个分布式锁框架的时候呀,啊K它底层呢,也实现了分布入索哈,也实现了分布索,那它底层的那个实现原理啊,它使用了使用了抗开的哈ma。
04:02
那这时我们就可以看到啊。啊,那么然后呢,我们再去看第三个特征就是防雾衫,那我们这个地方能不能做到防雾衫呢。啊,那么red里面怎么做到防护衫的,咱也可以每个请求呢,生成一个唯一标识,生成一个UID加线程ID的这样的一个唯一标识。那我们删除的时候呢,咱会先判断这是不是我的锁,如果是我的锁我才能删除,否则咱是不能删除的啊。那么在组K炮里面能不能做到防护衫呢?还是可以做到的。因为我们会给啊给每一个请求线程,那么来去创建按一个一个唯一的序列化,序列化节点。那每一个请求的线程创建的都是唯一的一个啊,它是不会重复的啊。那我释放的时候,在删除的时候,我只删除这个序列化节点对应的节点就可以了。
05:01
那所以呢,咱是不会导致误传的,那我们删除的什么呢?删除是对应的这个序列化节点啊。OK,那我们啊,也可以去结合这个代码呢,来去看一下啊,比如说呢,我们再去做那个删除的时候呀,找那个keep的分布式所啊,另外我们删除的时候呢,是根据当前基定这个路径啊,全路径可删除的。所以呢,不会删除其他节点的。所以呢,也就不会导致误伤。好,那我们啊在这里呢,第四个特征就是原子形了啊原子性,那这个原子性呢,咱怎么保证的呢。啊,其实呢,在组keep里面呢,我们创建创建节点。那么还有呢,呃删除呃删除节点,那么以及呢,我们是呃查询呃即监听啊及监听插听和监听啊,我们同时操作的啊,比如说呢,我们去获取监听那个小机顶的时候呀,比它小的机顶的时候呀,我们是先判断是否存在,然后判断存在之后的话呢,就立马就绑定这个监听时间了啊。
06:07
啊,这个判断存在和这个间星之间啊,也是具备原则性的。那我们创建节点删除节点查询器监听啊,都是具备,都是本身具备这个原子性的啊,所以的话呢,这个原子性问题啊,啊,咱也不用去关心它了。但是我们去寻找前置节点的时候呀,那个东西呢,没有原则性。那该怎么保证原子性呢?我们找完之后呀,啊再去判断一次,那同时的话添加监听可以保证原子性的。好,那么是咱们这个第四个啊,第五个特征啊,啊在里面。我们还去实现了可重录对吧?好,那我们在keep里面呢,也实现了可录,那怎么实现可重录的呢。我们是通过那个嗯,所的local啊来去实现的啊,所local那么来实现的,当然实现方式呢多种多样,只是我们这的话呢,使用是所logo。
07:05
那你也能说得过去啊,那我们也验证了一下,他确实是可以做到成功啊。那我们呃也可以呢,比如说那个那个咱也可以使用那个节点节点数据啊,节点数据来实现,那我们也可以通过这个concurrent啊哈希啊,Map也可以去实现,大家的实现方式呢,太多了啊,任何方式实现,你只要实现都可以啊,都是好的实现。好,那我们啊第六个啊特征啊,就是自动续期,自动续期,那么在release分布式所里面呢,咱是有过期时间的啊,那为了防止过期时间不够,我们要进行自动续期。那这个自动续期啊,呃,Ready里面比较比较特别的一个东西啊,那么在咱那K里面需要这个东西吗?啊,咱是不需要的。因为k point它是临时节点,但没有过去时间,那没有过期时间就谈不上什么自动续期,我们是临时节点,你只要连接没有没有挂掉,你只要没有手动去删除,那它会一直存在。
08:09
那一旦你的服务器挂掉了,它就会自动删除了啊,啊,你要是没有挂掉的话,然后又没有自动删除的情况下,它会一直存在,是实话咱不需要自动回气。啊,那么咱嗯,组key跑分母锁呀,没有过期时间啊,也就不需要那么自动续期啊,咱第六个特征呢,在组K胞分布所里面也是没啥问题的啊,然后第七个特征啊,这第七个特征啊,可以认为是两个特征,咱可以分开来去谈。那么一个是单机啊,单机啊故障问题,对吧,单机故障问题。那么啊,在呃,Red里面呢,我们肯定要可能要搭建集群,但如果搭建主从集群的话,那有可能会导致锁机制失效,如果你单个服务器的话呢。呃,可能会出现单点故障问题。
09:00
好,那么单点故障问题呢,在组K里面啊,那咱其实呢是几乎不会发生的啊,因组K咱使用的时候呢,一般都是集群度数集群部署啊,这地方ZK啊,一般啊都是集群部署,所以呢单点故障你谈不上。那它会不会在集群情况下导致所机使失效呢?啊the k炮啊呃the k炮集群,嗯,其实不会出现这问题的啊,集群可能会有这种风险,因为它组成呢,数据同步需要时间,那么做K的话呢,其实它是一个相对来说,嗯偏向于偏向于这个一致性的啊,偏向于一致性的。啊,这种集群啊,所以呢,它这个集群啊,服务器之间啊,数据同步呢,啊比的数据同步呢要好很多。那这个问题呢,是几乎我们没有的啊。好,那么由此可以发现。呃,我们呢,呃,在乳K分布式所里面,咱虽然演变的特征比较少,但是呢,几乎分布式所具备的一切特征,那我们呢,都具备。
10:10
但是呢,我们反过来说。三组K具备的一些特征,那么ready分布式所具备吗?啊,其实反而不具备了,为什么呢?利用了这个阻塞索,那咱在release里面是使用的是啊,无限递归或者无限循环啊,来去通过自旋来去获取所得。那在组K里面,我们就可以很容易的去实现这种阻塞所,那能不能实现呢?啊,也有办法去实现,只是呢啊稍微比较麻烦一些而已。OK,那么这是咱们呃这样的一个东西,然后呢,是公平所呢,也非常好实现,那ready面能不能实现公平所呢,也可以实现,只是呢,呃,也稍微有点麻烦啊,OK,好,那么是咱们这个两者的一个对比哈,我们就对比到这里。
我来说两句