当我们有一个带有TTL的分布式锁时,锁可能会因为TTL配置而过期,而拥有该锁的进程还没有完成计算,并且它将继续操作它获得锁的对象,因为它不知道该锁已经过期。我们如何才能避免这种情况呢?
发布于 2022-05-13 04:04:11
您正在寻找的解决方案称为“击剑令牌”。长话短说-每个突变命令/操作都应该包括令牌,执行器应该检查令牌是否仍然有效。
令牌只是一个数字,称为“术语”,每次发出新的锁时,术语就会增加。
执行器有一个简单的逻辑,它从不接受带有旧术语的命令。
可以说,这是真正避免任何与锁相关的问题的唯一选择。比如拥有时间戳,或者显式的锁版本--所有这些都天生就容易出现各种种族问题。
我推荐的另一个指针-- Red算法;以及它所存在的问题--这里有更多介绍:https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html
https://stackoverflow.com/questions/72210246
复制相似问题