分布式锁实现介绍

Posted 子娴爱编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式锁实现介绍相关的知识,希望对你有一定的参考价值。

    业务研发中,经常会有使用分布式锁的需求,在并发要求不高的情况下,可以基于Zookeeper实现分布式锁。 项目中需要单台服务器初始化队列,服务down掉的情况下,由其他服务器进行接管,直接使用zookeeper第三方库Curator客户端,这个客户端中封装了一个不可重入的锁服务。

 另:InterProcessMutex是可重入的分布式锁实现。        使用ZK实现的分布式锁其实存在一个缺点,那就是性能上可能并没有缓存服务那么高。因为每次在创建锁和释放锁的过程中,都要动态创建、销毁瞬时节点来实现锁功能。ZK中创建和删除节点只能通过Leader服务器来执行,然后将数据同不到所有的Follower机器上。

    其实,使用Zookeeper也有可能带来并发问题,只是并不常见而已。考虑这样的情况,由于网络抖动,客户端可ZK集群的session连接断了,那么zk以为客户端挂了,就会删除临时节点,这时候其他客户端就可以获取到分布式锁了,就可能产生并发问题。这个问题不常见是因为zk有重试机制,一旦zk集群检测不到客户端的心跳,就会重试,Curator客户端支持多种重试策略。多次重试之后还不行的话才会删除临时节点。(所以,选择一个合适的重试策略也比较重要,要在锁的粒度和并发之间找一个平衡。)


分布式锁主要有三种实现方案,如下:
  • 基于数据库实现分布式锁

  • 基于缓存,实现分布式锁,如memcached,redis

  • 基于Zookeeper实现分布式锁

参考文章:

  • 基于redis的分布式锁实现

  • 分布式锁的一点理解

  • 分布式锁1 Java常用技术方案

  • 分布式锁的几种实现方式


以上是关于分布式锁实现介绍的主要内容,如果未能解决你的问题,请参考以下文章

分布式锁三种解决方案

编程实践分布式锁的实现代码

Redis分布式锁Redisson原理

基于zookeeper实现分布式锁

分布式锁,及Redis实现分布式锁

分布式锁的作用及实现