00:00
刚才呢,我们已经分析了一下空的算法,那么有的同学呢,可能已经听懂了,那么有的同学呢,可能还是不太明白,那不要紧,我们可以呢边去分析边去记录一下。那通过文字形式把它给记录下来,那么这样的话呢,更多同学呀,就有反应时间了啊。好,那我们来去看一下具体是什么样的一个过程。那么这里呢,咱是read readlo啊算法,那么这个readlo算法呀,我们只讲它的,嗯,加锁过程啊,那么解锁过程呢,是比较简单的,那我们只要在每一个red实例里面把对应的K给删掉就可以了。OK,那么加速呢,是怎么样的一个过程呢?首先呢,我们要有多个release实力,这个release实力啊,相互之间是没有组成关系的,也是没有哨兵这种机制的。他们呢,都是相互独立的,每个节点都可以单独拿出来进行工作,没有依赖关系。那么你最好呢,给它部署在不同的服务器上面,甚至呢,啊,可能是不同的机房里面去。
01:07
那你放在不同的虚拟机上啊,可不可以呢?也是可以的啊。那么然后呢,我们有一个应用程序,那么这个应用程序啊,比如咱这个10010这个应用程序,当然呢,比如说呢,我们这里有两个应用程序,一个是10010,一个是10086。那这个的话呢,我们假设是100,幺零这台服务器要去获取锁了,又加锁了。啊,那么此时啊,它首先这个应用程序在加速的时候,第一步应该怎么样呢?首先要去获取自己的系统当前时间,它这应用程序自己啊,要获取自己的系统当前时间应用程序,那么获取系统当前时间。好,那么然后呢,咱第二步。我们的应用程序,那么使用相同的KV值,那么依次从。
02:09
在多个ready实例中来去获取,那这多个类实例啊,我们这里是五个啊。这五个呀,也是官方给我们提供了一个参照值。啊,一个相对合理的一个值。好,那么啊,所以呢,获金属的时候呀,由于我们是依次获取的啊。所以呢,我们只要去制定一个超时间。如果你不指定超时间的话,就会出现什么情况呢?它可能就一直被第一台服务器给阻塞住了,第一台服务器呢,可能已经挂掉了。那么结果呢,你一直尝试获取锁,尝试获取锁,不停尝试获取锁,直到尝试成功为止,那比如说那个重试,对啊,他可能一直重试下去。那最终都是失败呀。那我这台服务器是挂掉的,那后面几台服务器可能是健康的呀。
03:02
所以呢,我们不能在一棵树上吊死了,如果这台服务器一直获取不到手怎么办呢?那么咱们尽快尝试从下一台服务器来获一锁。他要这样子。那么获取锁时我们会使用一个超时时间。那么如果某一个。某一个节点超过一定时间,那么依然没有获取到所,获取到所那么则直接放弃。放弃那么要尽快。尝试从下一个健康的服务器啊,Red节点啊,或者说啊,来去获取所。那么这个机理呢,一直获取不到锁,已经超时了。那没有关系,那么下一个节点呢,可能是健康的,我们尽快从下一个点中来化解锁。
04:02
那么以避免被一个被一个宕机呃了的节点。那么组合转。OK,那么咱这个第二步。那么第三步啊,我们得要去计算获取锁的消耗时间,获取锁的消耗时间。那么这个消耗时间等于啥呢?等于啊,客户端程序的系统当前时间啊,这个系统之前时间跟第一步的系统更新时间不是同一个时间。那么咱五个节点都尝试完了,尝试完了之后呢,我们再去获取一个系统当前时间。那这是另一个性能时间了啊。那么这个单线时间减去第一步的那个时间。那么就咱总的消耗时间了,减去STEP1中的时间,那就获取到了咱总的消耗时间。
05:04
那霍金所的消耗时间必须要小于总的锁定时间。获取所得消耗消耗时间,消耗时间那么要小于总的锁定时间,比如咱总的锁定时间,那之间都采用的是30秒,那在没有考虑自动续期的情况下,我们的过集时间是30秒。那30秒之后呢,会自动释放锁。那么如果我的锁的获取就花费了30多秒了。那么在30秒的时间,可能在获取锁的过程中都浪费完了。那你获取到锁还有意义吗?已经没有意义了啊。那么所以呢,咱什么情况下获取所成功的只有获取所的消耗时间小于总的锁定锁定时间,那么并且。并且。半数以上节点以上节点获取所成功,那么咱认为呢,就获取所成功了,那否则呢,获取所失败啊。
06:12
那么咱就认为获取所成功,否则就是获取所失败。那获取锁成功的情况下,那我还能锁多长时间呢?那我总的获取时间是30秒,结果你获取锁呢,可能就花了五秒了。那么我的应用程序呢,就是能锁25秒了哈。那应用程序到底锁多长时间,那大家去计算一下。大单第四步,我们开始去计算剩余锁定时间,那么这个锁定时间啊,也是我们的应用程序的有效锁定时间。那咱其实本质呀,它只锁了这么多这么多时间。那等于还等于。我们总的锁定锁定时间,那么减去。
07:02
第呃三步就上一步中的这个时间啊。就上一步呢,我们计算出来这个消耗时间。第三步中的消耗时间就在锁的有效锁定时间。那么,如果霍取所。失败了。如果获取所失败了,比如说呢,可能没有达到半数以上。或者说呢,达到半数以上了。但是呢,这个呃,消耗时间呢,大于锁定时间了,咱都认为呢,是火炬锁失败了。那么此时你几点会议所成功了呢?哪业几点会议所失败了呢?是都成功了呢?啊,是超时的导致的呢?还是部分成功了呢?那么我得要对这些成功的地点的一个释放锁呀。那比如说呢,我可能是这个节点会议所成功了,这个节点会议所失败了,这个节点会议所失败了,哎,他成功了,他又失败了。还是失败了,那么这两个成功的几点你不得去释放草啊?
08:03
哎,得积把它给释放掉,否则的话,那么咱另外一个应应用程序也无法从这个进程获取锁了,因为这个锁呢一直被他给占用,这样而它的话呢,又获取锁失败了。那么逐渐的。啊,那我们这个节点呢,可能都被都被这个呃,无用的锁给占用了啊。所以呢,我们得要去释放所。那么释放所释放的一些节点。那其实咱针对所有节点的一次方数就可以了,如果你获取所失败了,那我去次方数的时候呢,一样条数肯定是零。如果你霍取索成功了,那营养条数呢,肯定是一对吧啊,所以呢,咱不管它,如果霍取所失败了,咱就针对对所有的ready节点来去释放错就可以了。回去删除锁就行了。大自然这个获取所的一个过程,就这样子。那么解锁呢,就比较简单了啊,解锁的话呢,咱比如说呢,我们一开始使用DL指令从一个进入就获取索道来进行讲过。
09:08
那我们这里是集群啊,是多个锐离子机定,那么我要去释放锁也一样啊,哎,我通过第二令把它锁给释放掉,通过第二指令把它锁给释放掉,通过D指令把它数给它释放掉。那如果你是撸瓦脚本的话,那我可以通过撸瓦脚本来把每个节点中的所呢给它释放掉。那这样就可以了啊。好,那么红色方法我们就聊到这里。那我们只讲理论,不写时间啊。那么这个实线呢,呃,其实呃意义不是很大啊,首先呢很麻烦,然后呢,写起来呢非常耗时。那面试官的话呢,也不太可能让你现场去写一个工作方法,而且呢,很多公司呢,压根就玩不了这一步。那么一旦被面试官问到了,你会说就可以了啊,啊会去描述啊,把这五句话呢,跟面试官呢,分别去说一下。OK,嗯。
我来说两句