分布式锁锁续约线程挂了怎么办?

2023-02-28 22:18:44 +08:00
 noble4cc
分布式锁 看门狗机制 有线程不断刷新未完成任务的锁过期时间
但是这是和任务线程是两个 如果锁续约线程挂了 任务还在执行 那这个锁过期了不就被释放了吗
有什么好的解决方法
534 次点击
所在节点    问与答
8 条回复
litguy
2023-03-01 08:32:00 +08:00
我们过去的逻辑是,如果任务还在执行,但是锁续约失败了,直接触发 crash
否则,你的逻辑要出错,因为出现了两个干活的任务并发了
noble4cc
2023-03-01 11:48:02 +08:00
@litguy 续约线程直接终止进程吗 貌似有道理
litguy
2023-03-01 13:52:09 +08:00
@noble4cc 是啊,进程自杀就行了
noble4cc
2023-03-01 14:13:27 +08:00
@litguy 续约的线程挂了 怎么检测续约的线程挂了呢
另外如果任务线程挂了 续约线程不知道不就会无限续约了吗
litguy
2023-03-02 08:27:06 +08:00
@noble4cc 我们不是续约线程挂,是续约线程 申请 lease 没成功(不论是网络原因还是什么原因),线程自己触发 core 就行了,他没申请到 lease ,那肯定别人申请到了,也许没申请到,总之不能冒险
litguy
2023-03-02 08:28:30 +08:00
你用 etcd 的锁就可以作这个,一个线程负责获取锁,在锁失效期到来前要再次获取,如果不能获取,就自杀,这样可以保证执行工作的线程总是在本机持有锁的情况下工作的,不会导致和别的节点并发执行
noble4cc
2023-03-02 14:35:02 +08:00
@litguy 哦哦 你们本质是不续约 只是异步线程不断获取锁 获取失败了 就自杀整个进程
litguy
2023-03-02 19:46:36 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/919970

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX