分布式锁实现介绍
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常用技术方案
分布式锁的几种实现方式
以上是关于分布式锁实现介绍的主要内容,如果未能解决你的问题,请参考以下文章