分布式锁:为了防止系统中的多个进程之间相互干扰,我们需要一种分布式协调结束来对这些进程进行调度。而这个分布式协调技术的核心就是实现这个分布式锁。
分布式锁应该具备哪些条件:
1. 分布式系统环境下,一个方法同一时间只能被一个机器的一个线程执行
2. 高可用的获取锁与释放锁
3. 高性能的获取锁与释放锁
4. 具备可重入的特征
5. 具备锁失效机制,防止死锁
6. 具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失效
分布式锁的实现有哪些:
zookeeper:利用zookeeper的顺序临时借点,来实现分布式锁和等待队列。zookeeper的设计初衷就是为了实现分布式锁服务的。
memcached:原子性操作,只有在key不存在的情况下,才能set成功;
redis:原子性操作,只有在key不存在的情况下,才能set成功;
三大致命问题:
1. 非原子性操作
1.1 setnx() 宕机
1.2 expire
2. 误删锁
2.1 set(key,value,expire)
2.2 数据没有操作完
2.3 操作完成,删除的是下一个jvm的锁
解决方案,判断是不是自己的锁
3. 2的基础上
jvm1要判断是否处理完成
jvm1数据处理完成后才能释放锁
jvm1增加守护进程
引出zookeeper
概述:
zookeeper是一个分布式协调服务,
什么是分布式协调服务?分布式协调服务是为了实现分布式锁;
什么是分布式锁?是为了多进程之间共享同一资源时希望这个资源有序的访问。