zoukankan      html  css  js  c++  java
  • ZooKeeper 分布式锁

    分布式锁
            是控制分布式系统之间同步访问共享资源的一种方式。 是通过一些互斥手段来防止彼此之间的干扰,以保证一致性。

    分布式锁有两种
        一    排它锁(写锁 or 独占锁)
                核心是保证当前有且仅有一个事物获得锁,并且锁被释放后,其他正在等待锁的事物都能够被通知到。

                定义锁:
                    在 ZooKeeper 中没有类似于 synchronized 机制。 二是通过 ZooKeeper 上的数据节点来表示一个锁。例如 /Test/test1/lock_node. 就可以定义为一个锁。
                获取锁:
                    通过调用 create()接口, 在 lock(/Test/test1/temp_node) 节点下创建临时子节点。就认为客户端获得了锁。同时 所有没有获取到所得客户端就需要在 锁(/Test/test1) 节点上注册一个 节点变更通知的 Watcher 监听。 以便实时监听到 lock 节点的变更情况.
                释放锁:
                    1) 当前获取锁的客户端宕机,那么 ZooKeeper 上的这个临时节点就会被移除
                    2) 正常执行完业务逻辑后,客户端就会主动将自己创建的临时节点删除。

    排它锁



            共享锁(Shared Locks) 又称读锁 S 锁。
                若第一个事物对 A 数据对象加上 S 锁,则第一个事物可以读A但是不能修改A,此时再来第二个事物对A加锁,则第二个事物可以读 A 但是不能修改A。 直到所有的事物都放开了A的锁, 才可以对A进行修改。
                
        

    改进后的共享锁。   检测最小后 只对比自己小一个的几点注册 Watcher







    God has given me a gift. Only one. I am the most complete fighter in the world. My whole life, I have trained. I must prove I am worthy of someting. rocky_24
  • 相关阅读:
    WikiPedia技术架构学习笔记
    MySQL 架构设计篇 (十二) 可扩展设计的基本原则
    php前端控制器二
    php前端控制器三
    构建可扩展的WEB站点读书笔记
    发布脚本开发框架代码
    改良dbgrideh的文字过滤
    cxgrid在当前View插入记录
    生成不重复单据编号
    cxgrid按条件计算合计值
  • 原文地址:https://www.cnblogs.com/rocky24/p/4863436.html
Copyright © 2011-2022 走看看