00:00
接下来呢,我们首先说一下,哎,幂等写入的一个实现,什么叫幂等写入呢?幂等这个操作其实最初应该是数学上的一个名词,大家看一下这个例子啊。幂的话,本身有那个乘方的那个含义对吧?啊,那比方说这里面的这个括号右上角一个小括号一个N,这个其实表示的是高阶求导啊,这个表示是高阶求导,不是乘方啊,大家知道这就是E的X次,这本身是个函数,它有一个非常好的性质就是。求导之后还是自己对吧,所以呢,大家想对于E的X次方这个函数而言,求导这个操作是不是它不管求多少次最后还是自己啊,所以大家想是不是求导这个操作对于他来讲就是一个幂等操作啊。对吧?啊,所以大家看这个所谓密等操作,就是一个操作你可以重复执行很多次,但是呢,最后的结果都一样啊,就是最后相当于呃,或者说就是你可以来了一个操作之后得到一个结果的更改,然后呢,你重复这个操作得到的这个结果更改还是一样的不变,诶那这样的话,呃,我们就可以认为是不是相当于重复写入也没有问题啊。
01:11
所以它相当于我我们说是写入一次,而且只写入一次think这一段对吧?呃,这叫做exactly one这种幂等写入的保证,它有点像,呃,有点像投机取巧了,它不是说只写入一次,而是说我是写入多次,但是写入多次呢,是不是最后的效果还是写入一次的效果啊啊这所以这个叫做幂等写入啊。啊,对应的,其实在计算机系统里面有一个非常典型的应用。大家回忆一下哈希map。哈希map的话,大家知道是里边是一个k value对吧?那那大家想这个我们保存的时候是不是也是按照K本身的那个哈希值去定义它的那个存放位置对吧?然后把它的那个value对应的那个跟跟在对应的那个后边啊,那在这里边我们保存的时候,假如说你把同一个数据KY6对写入好几次的话,写入多次的话,最后效果一样不一样。
02:08
大家想到是不是完全一样啊,因为同一个K,它的那个哈希值对应的位置是一样的,然后它的那个值value是不是也是一样的呀,那最后你存储一定完全效果一样对吧?重复写入不起任何的,呃,就是其他的作用,没有任何副作用。所以这种方式我们在使用的过程当中,呃,大家能想到可以有什么样的一个应用场景吗?之前我们也类似做过啊。大家想一下,我们当时是不是做过think直接输出到里啊,里边本来就是k value6结构对吧,然后我们又直接把它写入到一张哈希表里边的话,那最后的效果是不是就是对你只要回滚之后,那是不是我重新写入最后的效果是一样的呀?对吧,你最后只要是追上了后来我这个故障之前的那个状态,然后再再一步一步往后走,那最终我里边的那个温度值就还是我最新的温度值吗?这个是没什么问题的。
03:05
但是这个过程当中有一点小问题,什么问题呢?那就是大家想一下,就是如果发生故障啊,就就好比我们那个温度值吧,温度,比方说我们现在的这个温度值是在不停的上升啊,就是比方说现在我这个五度,十度,15度,20度。然后呢,比方说我在15度这里来了一个barrier做了一次存盘,那大家想我现在checkpoint里边是不是当前的那个状态就是15度啊,哎,我把这个存起来了啊,然后接下来20 25 30,大家想到就是这样的一个状态,对吧,然后。假如到这个30度的时候挂了,还没来得及存下一个拆的挂了,挂了的话怎么办?很简单,那是不是我在恢复现在状态又变成15,重新提交偏移量,那是不是接下来又是20,二十五三十啊。但是大家想一下,写入到那个里边的数据,最终确实我看到又变成30了,对吧,但是这个过程是不是有点奇怪啊,我看到对中间的这个过程是不是就变成了十五十,15 20 25 30,然后接下来是不是又变成15,因为会首先回滚是回归,回归到那个15的状态了,对吧,十五二十,25 30,然后又追上,接下来是不是就就没问题了,跟之前一样了,三十五四十就往后走了,对吧。
04:33
所以大家会想到,假如说我外面那个release还在做一个大屏监控显示的话,这个就有点问题了,对吧?那是不是在在这个中间好像有一段时间是这个历史重放回滚的一个状态啊,那这一部分状态其实是不必要的,如果我想检检测它是要温度连续上升的话,那反而这一部分就有问题了啊,所以大家注意就是这只能保证幂等写入啊,保证的是最终的结果是一致的,但是中间故障恢复的期间可能有短暂的不一致,对吧?状态的这个回滚可能导致状态短暂不一致。
05:09
这部分是幂等写入。
我来说两句