• 分布式锁


    分布式锁

    解决分布式锁的核心思路
    • 在多台服务器集群中,只能够保证一个jvm/进程进行操作。
    基于数据库
    • 不建议 性能不好
    基于redis
    • 多个客户端,使用setnx命令方式,同时在redis上创建相同的一个key,因为rediskey不能够允许重复,谁能创建key成功,返回1,谁就能够获取到锁。没有创建key成功,就返回0,jvm就会进行等待。
    • 两个超时时间
      • 在获取锁之前的超时时间---在尝试获取锁的时候,如果在规定的时间内还没有获取锁成功,直接放弃。
      • 在获取锁之后的超时时间---在尝试获取锁成功后,对应的key有对应的有效期,在对应的时间内shi
    基于zookeeper
    • zookeeper是一个分布式协调工具,在分布式解决方案中,多个客户端,同事在zk上创建相同的临时节点,因为临时节点路径是保证唯一的,只要谁能够创建节点成功,谁就能够获取到锁,没有创建节点成功的,就会进行等待,到锁释放的时候,采用事件通知给客户端从而充当新去获取锁资源。
    基于redis和基于zookeeper的异同
    • 不同点
      • rdis是基于缓存,zookeeper是基于分布式协调能力。
      • zookeeper更适合于分布式环境。
    • 核心不同点总结
      • 获取锁
        • zookeeper:多个客户端(jvm),会在Zookeeper上创建同一个临时节点,因为Zookeeper节点命名路径保证唯一,不允许出现重复,只要谁能够先创建成功,谁能够获取到锁。
        • Zookeeper:多个客户端(jvm),会在Zookeeper上创建同一个临时节点,因为Zookeeper节点命名路径保证唯一,不允许出现重复,只要谁能够先创建成功,谁能够获取到锁。
      • 释放锁
        • Zookeeper:使用直接关闭临时节点session会话连接,因为临时节点生命周期与session会话绑定在一块,如果session会话连接关闭的话,该临时节点也会被删除。这时候客户端使用事件监听,如果该临时节点被删除的话,重新进入获取锁的步骤
        • Redis在释放锁的时候,为了确保是锁的一致性问题,在删除的redis 的key时候,需要判断同一个锁的id,才可以删除。
      • 死锁问题
        • Zookeeper使用会话有效期方式解决死锁现象。
          Redis 是对key设置有效期解决死锁现象
    总结
    • redis的性能比zookeeper的性能高。因为redis毕竟是基于nosql的操作。
    • Zookeeper可靠性比Redis更好。因为Redis有效期不是很好控制,可能会产生有效期延迟,Zookeeper就不一样,因为Zookeeper临时节点先天性可控的有效期,所以相对来说Zookeeper比Redis更好
  • 相关阅读:
    JMETER(七) 后置处理器
    JMETER(六) 前置处理器
    JMETER(四) 配置元件
    QNET网络测试工具
    修改exe程序图标
    自解压捆绑文件钓鱼
    BigIP Cookie 解码获取真实IP (python2)
    关于windowspwnsafeseh的理解简单随笔
    bilibili动画下载视频批量改名(python)
    好用!网页模板网站
  • 原文地址:https://www.cnblogs.com/frankltf/p/10272865.html
Copyright © 2020-2023  润新知