1、为什么要使用分布式锁?
如下图所示,成员变量A存在JVM1、JVM2、JVM3三个JVM内存中。由于成员变量A同时都会在三个JVM上分配一块内存:
- 若三个请求同时对这个变量操作时,显然结果是不对的;
- 若三个请求依次分别请求三个不同的JVM内存区域的数据时,由于各JVM之间的变量A不存在共享,也不具有可见性,处理结果也不对。
这就是分布式锁要解决的问题。
2、分布式锁概念
用于实现在分布式系统中多个进程对临界资源的互斥访问,保证分布式系统数据的一致性。
分布式协调技术的核心就是实现分布式锁。
3、分布式锁的特点
(1)互斥性:在分布式系统环境下,同一时间内不同节点的不同线程对特殊资源的互斥访问;
(2)高可用的获取锁和释放锁;
(3)高性能的获取锁和释放锁;
(4)可重入性:同一个节点上的同一个线程如果获取了锁之后还可以可以再次获取这个锁;
(5)锁超时:具备锁超时失效机制,防止死锁;
(6)非阻塞:没有获取到锁将直接接返回获取锁失败支持阻塞和非阻塞;
(7)支持公平锁和非公平锁(可选):公平锁是按照请求加锁的顺序获取锁,非公平锁即随机获取锁。
4、分布式锁的实现
4.1、Memcached分布式锁
Memcached的add命令。此命令是原子性操作,只有在key不存在的情况下,才能add成功,也就意味着线程获得锁。
4.2、Redis分布式锁
Redis分布式锁的实现和Memcached方式类似。利用Redis的原子性操作setnx命令,只有在key不存在的情况下,才能set成功。
4.3、Zookeeper分布式锁
利用Zookeeper的顺序临时节点,来实现分布式锁和等待队列。Zookeeper设计的初衷,就是为了实现分布式锁服务的。
4.4、Chubby分布式锁
Google公司实现的粗粒度分布式锁服务,底层利用了Paxos一致性算法。
出处: https://www.cnblogs.com/DeepInThought
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。