分布式锁场景
- 分布式系统
- 操作共享资源,库里唯一的用户数据
- 同步访问,多个进程同时操作共享资源
分布式锁方案
- setnx key value expire key 10s
watchdog 防止key过期- 加锁没释放 delete key
- 加锁没来得及执行释放锁,程序挂了。使用key的过期机制
- 删除的锁一定要是自己加的
- 基于zookeeper 临时节点,顺序节点
zookeeper分布式锁实现原理
- 顺序节点特性:
zk集群按照发起顺序创建节点,最后一位依次递增,节点名由zk完成 - 临时节点特性:
临时节点由客户端创建,当客户端与zk集群断开连接时,节点被自动删除
根据zk中节点是否存在,可以作为分布式锁的锁状态:
- C1用create()创建临时顺序节点
- C1 getchildren()获取所有已经创建节点
- 判断自己序号是否排第一,若是则获得锁 不是监听前一节点,监听节点变更时等待重复2 3
zk和redis做分布式锁区别
redis:
- 最终一致性 有延迟,强一致性要求中使用zk
- 响应时间最低
zk:
- 由网络问题,客户端掉线 节点消失,锁被错误释放
- 较好的稳定性