分布式锁解决方案_Zookeeper实现分布式锁

这篇具有很好参考价值的文章主要介绍了分布式锁解决方案_Zookeeper实现分布式锁。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
分布式锁解决方案_Zookeeper实现分布式锁


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

Zookeeper 是一个开源的分布式协调服务,它提供了一种简单而强大的方式来管理分布式系统中的数据和状态。通过利用 Zookeeper 的特性,我们可以构建一个高可靠性和高性能的分布式锁实现。
博客将详细介绍 Zookeeper 实现分布式锁的原理和步骤,包括创建锁节点、获取锁、释放锁。我们还将讨论 Zookeeper 的可靠性和容错性,以及如何处理节点的删除和会话超时。
通过阅读这篇博客,你将了解到如何使用 Zookeeper 来实现分布式锁,以及如何在实际的分布式系统中应用这些技术。无论是构建高性能的分布式应用还是解决并发问题,分布式锁都是一个重要的工具。希望这篇博客能为你提供有价值的信息,并帮助你在分布式系统中更好地管理共享资源。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Zookeeper实现分布式的优点?

  1. 简单易用:Zookeeper 提供了简单的 API 来创建和管理锁,使用起来相对容易。
  2. 可靠性高:Zookeeper 本身具有高可用性和容错性,能够确保锁的可靠性和一致性。
  3. 支持公平锁:Zookeeper 支持公平锁,即按照先来先服务的原则分配锁。
  4. 支持可重入锁:Zookeeper 可以通过节点的子节点数量来表示锁的持有次数,从而支持可重入锁。
  5. Zookeeper 可以设置锁的超时时间,避免死锁的情况发生。
  6. 超时机制:Zookeeper 可以设置锁的超时时间,避免死锁的情况发生。
  7. 支持跨进程和跨机器:Zookeeper 是一个分布式协调服务,可以用于跨进程和跨机器的锁管理。
  8. 顺序保证:Zookeeper 保证了节点创建的顺序性,可以利用这一点来实现顺序锁。

二、实现原理

获得锁

  1. 当第一个客户端请求过来时,Zookeeper 客户端会创建一个持久节点 locks。如果它(Client1)想获得锁,需要在 locks 节点下创建一个顺序节点 lock1。
  2. 接着,客户端 Client1 会查找 locks 下面的所有临时顺序子节点,判断自己的节点 lock1 是不是排序最小的那一个,如果是,则成功获得锁。
  3. 这时候如果又来一个客户端 client2 前来尝试获得锁,它会在 locks 下再创建一个临时节点 lock2。
  4. 客户端 client2 一样也会查找 locks 下面的所有临时顺序子节点,判断自己的节点 lock2 是不是最小的,此时,发现 lock1 才是最小的,于是获取锁失败。获取锁失败,它是不会甘心的,client2 向它排序靠前的节点 lock1 注册 Watcher 事件,用来监听 lock1 是否存在,也就是说 client2 抢锁失败进入等待状态。
  5. 此时,如果再来一个客户端Client3来尝试获取锁,它会在 locks 下再创建一个临时节点 lock3。
  6. 同样的,client3 一样也会查找 locks 下面的所有临时顺序子节点,判断自己的节点 lock3 是不是最小的,发现自己不是最小的,就获取锁失败。它也是不会甘心的,它会向在它前面的节点 lock2 注册 Watcher 事件,以监听 lock2 节点是否存在。

释放锁

  1. 如果是任务完成,Client1 会显式调用删除 lock1 的指令。
  2. 如果是客户端故障了,根据临时节点得特性,lock1 是会自动删除的。
  3. lock1 节点被删除后,Client2 可开心了,因为它一直监听着 lock1。lock1 节点删除,Client2 立刻收到通知,也会查找 locks 下面的所有临时顺序子节点,发下 lock2 是最小,就获得锁。
  4. 同理,Client2 获得锁之后,Client3 也对它虎视眈眈

三、实现步骤

1.引入Curator依赖

    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-framework</artifactId>
      <version>5.2.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-recipes</artifactId>
      <version>5.2.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-client</artifactId>
      <version>5.2.0</version>
    </dependency>

2.编写Zookeeper配置

@Configuration
public class ZookeeperConfig {
  @Bean
  public CuratorFramework zookeeperClient() {
    CuratorFramework client = CuratorFrameworkFactory.builder()
         .connectString("127.0.0.1:2181")//zookeeper地址
         .sessionTimeoutMs(5000)//会话超时时间
         .connectionTimeoutMs(5000)//连接超时时间
         .retryPolicy(new ExponentialBackoffRetry(1000, 3))//重试机制,1秒重连3次
        //.namespace("test")
         .build();
    client.start();
    return client;
   }
}

3.代码实现

  @Autowired
  CuratorFramework client;
  @Override
  public String createOrderZookeeper(Integer productId, Integer count) throws Exception {
    // client cruator中zk客户端对象  path 抢锁路径同一个锁path需要一致
    InterProcessMutex lock = new InterProcessMutex(client, "/lockPath");
    //第一个属性:定时的时间数字
    //第二个属性:定义时间的单位
    if (lock.acquire(3, TimeUnit.SECONDS)) {
      try {
        // 业务代码,不予展示,根据具体需求进行编写
       } finally {
        lock.release();
       }
     }
    return "创建失败";
   }




总结

提示:这里对文章进行总结:
总的来说,Zookeeper 是一种强大的工具,可以用于实现分布式锁。通过理解 Zookeeper 的原理和使用方法,我们可以构建高可靠性和高性能的分布式系统。如果你对分布式锁的实现感兴趣,这篇博客提供了一个很好的起点。文章来源地址https://www.toymoban.com/news/detail-771353.html

到了这里,关于分布式锁解决方案_Zookeeper实现分布式锁的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【分布式事务】Seata 开源的分布式事务解决方案

    Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 阿里巴巴作为国内最早一批进行应用分布式(微服务化)改造的企业,很早就遇到微服务架构下

    2024年02月02日
    浏览(41)
  • 分布式锁解决方案

    由于分布式或者集群部署项目时,在某些业务场景下需保证资源的原子性、一致性和互斥性。 如果把房子比作资源,通俗的来讲,我无论在那个城市生活,这个房子我先租的,再没有退房的前提下,别人都不能用 目前最流行的解决方案 redisson 分布式锁 zookeeper 分布式锁 mav

    2024年02月12日
    浏览(31)
  • 【分布式·大数据】大模型赛道如何实现华丽的弯道超车 —— AI/ML训练赋能解决方案

    导读 :Alluxio作为一款强大的分布式统一大数据虚拟文件系统,已经在众多领域展现出了其卓越的应用价值,并且为AI/ML训练赋能提供了一个全新的解决方案。 在人工智能(AI)和机器学习(ML)领域,数据驱动的决策和模型训练已成为现代应用和研究的核心。伴随大模型技术

    2024年02月08日
    浏览(27)
  • 分布式websocket解决方案

    websocket基础请自行学习,本文章是解决在分布式环境下websocket通讯问题。 在单体环境下,所有web客户端都是连接到某一个微服务上,这样消息都是到达统一服务端,并且也是由一个服务端进行响应,所以不会出现问题。 但是在分布式环境下,我们很容易发现,客户端连接的

    2024年02月13日
    浏览(31)
  • ChatGPT:分布式事务解决方案

    随着互联网的发展和技术的不断更新,越来越多的应用程序开始采用分布式架构。然而,由于数据和处理逻辑的分散性和异构性,分布式环境下的事务处理面临着许多挑战。这时候就需要采用分布式事务来确保系统的一致性和可靠性。 分布式事务是指在分布式系统中,涉及多

    2023年04月12日
    浏览(75)
  • Redis 分布式锁解决方案

    我们日常在电商网站购物时经常会遇到一些高并发的场景,例如电商 App 上经常出现的秒杀活动、限量优惠券抢购,还有我们去哪儿网的火车票抢票系统等,这些场景有一个共同特点就是访问量激增,虽然在系统设计时会通过限流、异步、排队等方式优化,但整体的并发还是

    2023年04月22日
    浏览(32)
  • 【SpirngCloud】分布式事务解决方案

    1.1 CAP 理论 1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标: Consistency(一致性):用户访问分布式系统中的任意节点,得到的数据必须一致 Availability(可用性):用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝 Partition tolerance(分区容

    2024年02月15日
    浏览(32)
  • 分布式ID解决方案对比

    在复杂的分布式系统中,往往需要对大量的数据进行唯一标识,比如在对一个订单表进行了分库分表操作,这时候数据库的自增ID显然不能作为某个订单的唯一标识。除此之外还有其他分布式场景对分布式ID的一些要求: 趋势递增:  由于多数RDBMS使用B-tree的数据结构来存储索

    2024年02月04日
    浏览(26)
  • 浅谈分布式事务及解决方案

    在讲述分布式事务的概念之前,我们先来回顾下事务相关的一些概念。 就是一个程序执行单元,里面的操作要么全部执行成功,要么全部执行失败,不允许只成功一半另外一半执行失败的事情发生。例如一段事务代码做了两次数据库更新操作,那么这两次数据库操作要么全部

    2024年02月08日
    浏览(39)
  • 聊聊分布式解决方案Saga模式

    Saga模式使用一系列本地事务来提供事务管理,而一个本地事务对应一个Saga参与者,在Saga流程里面每一个本地事务只操作本地数据库,然后通过消息或事件来触发下一个本地事务,如果其中一个本地事务失败了,Saga就会执行一系列补偿事务来实现回滚操作。(补偿事务简单来

    2024年02月06日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包