成都制作手机网站,北京网页设计软件培训学校,市场营销培训,办图网ppt模板免费下载本文主要讲解如下内容#xff1a; 为什么要使用分布式锁#xff1f;分布式锁特性#xff01;分布式锁的实现方式有哪些#xff1f;Curator分布式锁原理Curator分布式锁实现类UML及相关类的介绍基于Redis#xff0c;数据库实现分布式锁为什么要使用分布式锁#xff1f; 在…本文主要讲解如下内容 为什么要使用分布式锁分布式锁特性分布式锁的实现方式有哪些Curator分布式锁原理Curator分布式锁实现类UML及相关类的介绍基于Redis数据库实现分布式锁为什么要使用分布式锁 在传统的单机应用中我们使用JAVA提供的synchronized、ReentrantLock、Semaphore、AtomicInteger等解决多线程并发问题达到同步目的。单机应用所有的请求都会分配到当前服务器的JVM内部线程间是可以共享某一个变量的。当随着业务的发展单机演变成集群一个JVM扩展到多个甚至数十个JVM的时候就不能共享同一变量了。如下图所示 上图中同样的业务部署在多台服务器上但是又要操作同一个数据的时候JAVA的synchronized等关键字也就无力回天了这是分布式锁正式登场。 分布式锁特性 1、在分布式系统环境下一个方法在同一时间只能被一个机器的一个线程执行 2、高可用的获取锁与释放锁 3、高性能的获取锁与释放锁 4、具备可重入特性 5、具备锁失效机制防止死锁 6、具备非阻塞锁特性即没有获取到锁将直接返回获取锁失败。 分布式锁的实现方式有哪些 目前几乎很多大型网站及应用都是分布式部署的分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性Consistency、可用性Availability和分区容错性Partition tolerance最多只能同时满足两项。”所以很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中都需要牺牲强一致性来换取系统的高可用性系统往往只需要保证“最终一致性”只要这个最终时间是在用户可以接受的范围内即可。 在很多场景中我们为了保证数据的最终一致性需要很多的技术方案来支持比如分布式事务、分布式锁等。有的时候我们需要保证一个方法在同一时间内只能被同一个线程执行。 基于数据库实现分布式锁
基于缓存Redis等实现分布式锁
基于Zookeeper实现分布式锁这三种方案之间没有最好只有更适合具体要看业务场景 Curator分布式锁原理 注意判断自己是否是locks目录下序号最小的节点只会和比自己序号小的那个相邻节点进行比较这样大大提高了效率。比如N节点只会和N-1几点比较不会和N1N-2节点比较。 另外zookeeper有效解决了下面的问题重点重点重点 锁释放 使用Zookeeper可以有效的解决锁无法释放的问题因为在创建锁的时候客户端会在ZK中创建一个临时节点一旦客户端获取到锁之后突然挂掉Session连接断开那么这个临时节点就会自动删除掉。其他客户端就可以再次获得锁。 阻塞锁 使用Zookeeper可以实现阻塞的锁客户端可以通过在ZK中创建顺序节点并且在节点上绑定监听器一旦节点有变化Zookeeper会通知客户端客户端可以检查自己创建的节点是不是当前所有节点中序号最小的如果是那么自己就获取到锁便可以执行业务逻辑了。 可重入锁 使用Zookeeper也可以有效的解决不可重入的问题客户端在创建节点的时候把当前客户端的主机信息和线程信息直接写入到节点中下次想要获取锁的时候和当前最小的节点中的数据比对一下就可以了。如果和自己的信息一样那么自己直接获取到锁如果不一样就再创建一个临时的顺序节点参与排队。 单点问题 使用Zookeeper可以有效的解决单点问题ZK是集群部署的只要集群中有半数以上的机器存活就可以对外提供服务。 Curator分布式锁实现类UML及相关类的介绍 接口InterProcessLock作为神一般的存在其它类均实现了这个接口。 看一下这个接口定义 接口中定义了四个方法 public void acquire();//获取锁 public boolean acquire(long time, TimeUnit unit);//获取锁可以指定阻塞时间 public void release();//释放锁boolean isAcquiredInThisProcess();//判断当前是否持有锁实际使用中如果持有锁可以进行锁的释放。 实现类 InterProcessMultiLock 将多个锁作为单个实体管理的容器 InterProcessMutex 分布式可重入排它锁 InterProcessReadWriteLock 分布式读写锁 InterProcessSemaphoreMutex 分布式排它锁 InterProcessSemaphoreV2 信号量 基于Redis数据库实现分布式锁 基于redis和数据库实现的分布式锁大家可以参考以下文章 分布式锁的实现 分布式锁的几种实现方式转载于:https://www.cnblogs.com/shileibrave/p/9850637.html