zoukankan      html  css  js  c++  java
  • zookeeper 食谱

    以示例形式说明 zk 食谱。

    假定有 4 个客户端,分别执行 create -s -e /lock/read xx 或 create -s -e /lock/write 获取锁。

    一、获取读锁的情况:
    /lock/write001
    /lock/write002
    /lock/read003
    /lock/read004

    客户端 3 获取读锁:
    1. 创建 /lock/read003
    2. 获取 /lock 的孩子
    3. 发现 writexxx 的最小序号 1 比 3 小
    4. 发现 /lock/write002 存在
    5. watch /lock/write002 节点,获得通知后,再进入步骤 2

    /lock/write001
    /lock/read002
    /lock/read003
    /lock/read004

    客户端 2 获取读锁:
    1. 创建 /lock/read002
    2. 获取 /lock 的孩子
    3. 发现 writexxx 的最小序号 1 比 2 小
    4. 发现 /lock/write002 不存在
    5. 进入步骤 2

    /lock/read001
    /lock/write002
    /lock/read003
    /lock/read004

    客户端 1 获取读锁:
    1. 创建 /lock/read001
    2. 获取 /lock 的孩子
    3. 发现 writexxx 的最小序号 2 比 1 大,则获得锁

    二、获取写锁的情况:
    /lock/write001
    /lock/read002
    /lock/read003
    /lock/read004

    客户端 1 获得写锁:
    1. 创建 /lock/write001 节点
    2. 获得 /lock 孩子
    3. 发现最小的序号是 001,就是自己,则获得锁

    /lock/write001
    /lock/read002
    /lock/write003
    /lock/read004

    客户端 3 获得写锁:
    1. 创建 /lock/write003 节点
    2. 获得 /lock 孩子
    3. 发现 001 是最小的序号
    4. 发现 xx002 存在
    5. watch xx002,等待通知进入步骤 2

    /lock/write001
    /lock/write002
    /lock/read003
    /lock/read004

    客户端 2 获得写锁:
    1. 创建 /lock/write002 节点
    2. 获得 /lock 孩子
    3. 发现最小的序号是 001
    4. 发现 xx002 不存在,因为自己就是
    5. 进入步骤 2

    三、leader 选举
    创建顺序、瞬时节点:create -s -e /election/n- xx

    假定 4 个客户端,分别创建如下节点:
    /election/n-001
    /election/n-002
    /election/n-003
    /election/n-004

    则:
    /election/n-001 是 leader

    为了避免出现羊群效应,不让所有的客户端 watch 同一个节点。
    /election/n-002 watch /election/n-001
    /election/n-003 watch /election/n-002
    /election/n-004 watch /election/n-003

  • 相关阅读:
    PhpStorm Terminal 消失
    PhpStorm10.0快捷键大全 PhpStorm10.0常用快捷键和配置
    Laravel 学习笔记之语言包 IDE IDE提示工具 IDE插件笔记
    服务器搭建之php报错---<php5isapi.dll加载失败>
    ios观察者模式和通知中心
    UIScrollView 实践经验
    ios app企业证书发布及升级
    关于数组在遍历过程中修改问题
    UIWebView与JavaScript的交互
    WebViewJavascriptBridge JS与iOS Native Code互调方法
  • 原文地址:https://www.cnblogs.com/allenwas3/p/9279268.html
Copyright © 2011-2022 走看看