【9】分布式锁

分布式锁的概念、特点及实现方式
本文介绍了分布式锁的相关知识。首先说明了使用分布式锁的原因,即解决多JVM环境下对共享变量操作的问题。接着阐述了分布式锁的概念和特点,最后介绍了其实现方式,包括Memcached、Redis、Zookeeper和Chubby分布式锁。

1、为什么要使用分布式锁?

  如下图所示,成员变量A存在JVM1、JVM2、JVM3三个JVM内存中。由于成员变量A同时都会在三个JVM上分配一块内存:

  • 若三个请求同时对这个变量操作时,显然结果是不对的;
  • 若三个请求依次分别请求三个不同的JVM内存区域的数据时,由于各JVM之间的变量A不存在共享,也不具有可见性,处理结果也不对。
    这就是分布式锁要解决的问题。
    1659331-20190623135316466-2090590026.png

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一致性算法。

作者: DeepInThought
出处: https://www.cnblogs.com/DeepInThought
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/DeepInThought/p/10976760.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值