NOTE

1.2 如何实现分布式锁

1. 什么是分布式锁 分布式环境(跨进程或者机器)的锁 满足以下条件 - 原子性 加锁和解锁的操作必须是原子的 - 互斥 在任意时刻,只有一个客户端能持有锁 - 无死锁 即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁 - 加锁和解锁必须是同一客户端 加锁和解锁必须是同

分布式系统创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 什么是分布式锁

分布式环境(跨进程或者机器)的锁 满足以下条件

  • 原子性 加锁和解锁的操作必须是原子的
  • 互斥 在任意时刻,只有一个客户端能持有锁
  • 无死锁 即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁
  • 加锁和解锁必须是同一客户端 加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了 比如这样的场景,A加锁,锁的持有时长为10s,但是A实际运行了15s,那么锁自动释放;然后B加锁成功,到了第15s,A执行完毕释放锁,那么在这里就是A释放了B加的锁

2. 为什么需要分布式锁

各种语言内置的锁,比如Java的synchronized、Go的mutex只能保证单个进程内部的锁特性,无法跨进程或者机器

3. 如何实现分布式锁

3.1. Zookeeper

Zookeeper分布式锁.md

3.2. Redis

Redis分布式锁.md

3.3. Zookeeper vs Redis

Redis Zookeeper
加锁失败 需要不停的主动轮询 注册个监听器等待回调即可
加锁的客户端挂了 等待超时时间过了才能继续加锁 临时节点自动释放锁
性能

4. 参考