-
分布式锁
分布式锁
解决分布式锁的核心思路
- 在多台服务器集群中,只能够保证一个jvm/进程进行操作。
基于数据库
基于redis
- 多个客户端,使用setnx命令方式,同时在redis上创建相同的一个key,因为rediskey不能够允许重复,谁能创建key成功,返回1,谁就能够获取到锁。没有创建key成功,就返回0,jvm就会进行等待。
- 两个超时时间
- 在获取锁之前的超时时间---在尝试获取锁的时候,如果在规定的时间内还没有获取锁成功,直接放弃。
- 在获取锁之后的超时时间---在尝试获取锁成功后,对应的key有对应的有效期,在对应的时间内shi
基于zookeeper
- zookeeper是一个分布式协调工具,在分布式解决方案中,多个客户端,同事在zk上创建相同的临时节点,因为临时节点路径是保证唯一的,只要谁能够创建节点成功,谁就能够获取到锁,没有创建节点成功的,就会进行等待,到锁释放的时候,采用事件通知给客户端从而充当新去获取锁资源。
基于redis和基于zookeeper的异同
- 不同点
- rdis是基于缓存,zookeeper是基于分布式协调能力。
- zookeeper更适合于分布式环境。
- 核心不同点总结
- 获取锁
- zookeeper:多个客户端(jvm),会在Zookeeper上创建同一个临时节点,因为Zookeeper节点命名路径保证唯一,不允许出现重复,只要谁能够先创建成功,谁能够获取到锁。
- Zookeeper:多个客户端(jvm),会在Zookeeper上创建同一个临时节点,因为Zookeeper节点命名路径保证唯一,不允许出现重复,只要谁能够先创建成功,谁能够获取到锁。
- 释放锁
- Zookeeper:使用直接关闭临时节点session会话连接,因为临时节点生命周期与session会话绑定在一块,如果session会话连接关闭的话,该临时节点也会被删除。这时候客户端使用事件监听,如果该临时节点被删除的话,重新进入获取锁的步骤
- Redis在释放锁的时候,为了确保是锁的一致性问题,在删除的redis 的key时候,需要判断同一个锁的id,才可以删除。
- 死锁问题
- Zookeeper使用会话有效期方式解决死锁现象。
Redis 是对key设置有效期解决死锁现象
总结
- redis的性能比zookeeper的性能高。因为redis毕竟是基于nosql的操作。
- Zookeeper可靠性比Redis更好。因为Redis有效期不是很好控制,可能会产生有效期延迟,Zookeeper就不一样,因为Zookeeper临时节点先天性可控的有效期,所以相对来说Zookeeper比Redis更好
-
相关阅读:
JMETER(七) 后置处理器
JMETER(六) 前置处理器
JMETER(四) 配置元件
QNET网络测试工具
修改exe程序图标
自解压捆绑文件钓鱼
BigIP Cookie 解码获取真实IP (python2)
关于windowspwnsafeseh的理解简单随笔
bilibili动画下载视频批量改名(python)
好用!网页模板网站
-
原文地址:https://www.cnblogs.com/frankltf/p/10272865.html
Copyright © 2020-2023
润新知