zookeeper实现分布式锁的原理

it2025-10-13  9

分布式锁

单点故障:

分布式锁:双主服务器问题。备用服务器ping不同主服务器,代替其成为主服务器。然而主服务器只是因为网络延迟没有及时反馈。并没有挂掉,从而出双主问题。(解决方案:分布式锁)

如zookeeper(服务注册与发现中心)解决了分布式锁:

所有服务到zookeeper注册.

有zookeeper选举主节点。(如果主节点出现网络问题,删除主节点,选举备用节点为主节点。主节点恢复后重新注册,成为新的备用节点)

为什么要使用分布式锁:

为了保证一个方法或属性在高并发时只能被一个线程执行。

单机控制锁失效

需要跨jvm的互斥机制控制共享资源的访问

实现:

(同一个方法)myzookeeper目录下创建顺讯节点。如 1 2 3.

获取MyZookeeper目录下所有的子节点,然后获取比自己小的兄弟节点,如果不存在,则说明当前线程顺序号最小,获得锁

线程B获取所有节点,判断自己不是最小节点,设置监听比自己次小的节点

线程A处理完,删除自己的节点,线程B监听到变更事件,判断自己是不是最小的节点,如果是则获得锁

最新回复(0)