如何实现靠谱的分布式锁?

---刘通晓---


实现分布式锁常采用两种方式,一种是基于redis,一种基于zookeeper

基于Redis 的分布式锁

基于redis的分布式锁实现原理是使用redis的set nx ,就是当key不存在时才能设置成功,否则返回false,多实例并发去获取锁时由于redis的原子性以及set nx的特性,有一个实例能设置成功后,其他实例则不能获取锁,这时设置成功的实例拿到了这把锁,其他的实例自然没能拿到锁。

存在问题:redis很容易单点故障,如果使用官方的redlock也存在很大大争议,而且实现复杂,所以一般基于zookeeper实现。

基于zookeeper的实现

在zookeeper的某一节点下多个实例创建同一个临时节点,由于zookeeper中同一个节点是唯一的,也就是只有一个实例能创建成功,创建成功则获取到锁,否则不该持有锁。zookeeper是基于paxios算法的,能保证高可用,强一致性,性能比redis实现稍弱。


如何避免死锁

redis在设置锁时提供超时时间,如果客户端宕机,在超时时间过后锁自动释放。

zookeeper是使用临时节点,一旦客户端宕机也会自动删除。


分享到:


相關文章: