V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
noble4cc
V2EX  ›  问与答

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

  •  
  •   noble4cc · 2023-02-28 22:18:44 +08:00 · 545 次点击
    这是一个创建于 663 天前的主题,其中的信息可能已经有所发展或是发生改变。
    分布式锁 看门狗机制 有线程不断刷新未完成任务的锁过期时间
    但是这是和任务线程是两个 如果锁续约线程挂了 任务还在执行 那这个锁过期了不就被释放了吗
    有什么好的解决方法
    8 条回复    2023-03-02 19:46:36 +08:00
    litguy
        1
    litguy  
       2023-03-01 08:32:00 +08:00
    我们过去的逻辑是,如果任务还在执行,但是锁续约失败了,直接触发 crash
    否则,你的逻辑要出错,因为出现了两个干活的任务并发了
    noble4cc
        2
    noble4cc  
    OP
       2023-03-01 11:48:02 +08:00
    @litguy 续约线程直接终止进程吗 貌似有道理
    litguy
        3
    litguy  
       2023-03-01 13:52:09 +08:00
    @noble4cc 是啊,进程自杀就行了
    noble4cc
        4
    noble4cc  
    OP
       2023-03-01 14:13:27 +08:00
    @litguy 续约的线程挂了 怎么检测续约的线程挂了呢
    另外如果任务线程挂了 续约线程不知道不就会无限续约了吗
    litguy
        5
    litguy  
       2023-03-02 08:27:06 +08:00
    @noble4cc 我们不是续约线程挂,是续约线程 申请 lease 没成功(不论是网络原因还是什么原因),线程自己触发 core 就行了,他没申请到 lease ,那肯定别人申请到了,也许没申请到,总之不能冒险
    litguy
        6
    litguy  
       2023-03-02 08:28:30 +08:00
    你用 etcd 的锁就可以作这个,一个线程负责获取锁,在锁失效期到来前要再次获取,如果不能获取,就自杀,这样可以保证执行工作的线程总是在本机持有锁的情况下工作的,不会导致和别的节点并发执行
    noble4cc
        7
    noble4cc  
    OP
       2023-03-02 14:35:02 +08:00
    @litguy 哦哦 你们本质是不续约 只是异步线程不断获取锁 获取失败了 就自杀整个进程
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2444 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:48 · PVG 23:48 · LAX 07:48 · JFK 10:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.