标签:一致性 思路 机制 分布 问题 zook 分布式 没有 客户
借助数据库、Redis集群、Zookeeper集群作为辅助系统。
面临的问题:
进程a先查询表,如果没有记录就向表中插入锁,拿到了锁,继续处理自己的逻辑;
进程b也做同样的操作,查询发现表中已存在记录,表示锁被他人持有,进程b自旋查询等待;
进程a处理完自己的逻辑后删除表中的记录。
进程b查询表发现没有记录,将锁插入表,拿到了锁,继续处理自己的逻辑。
每一个进程都到某个znode下创建一个临时有序子节点,同时每个进程都监听这个父znode。
父znode下的每个子节点的变动都会触发进程重新拉取子节点列表,每个进程得到列表后比较自己的节点是否是列表中最小的那一个,如果是则表示得到了锁。执行完毕后断开连接,session失效对应的节点被删除,完成锁的释放。
借助setIfAbsent + expire + redlock + 后台续约线程。
标签:一致性 思路 机制 分布 问题 zook 分布式 没有 客户
原文地址:https://www.cnblogs.com/JaxYoun/p/12335222.html