zoukankan      html  css  js  c++  java
  • [译]ZOOKEEPER RECIPES-Leader Election

    选主

    使用ZooKeeper选主的一个简单方法是,在创建znode时使用Sequence和Ephemeral标志。主要思想是,使用一个znode,比如"/election",每个客户端创建一个子节点"/election/guid-n_",并同时使用Sequence和Ephemeral标志。使用sequence标志后ZooKeeper会自动递增序列号。拥有最小编号的节点就是主节点。
    这还不是全部,同时还需要watch主节点的失效,在当前主节点失效后,会产生新的主节点。一般情况是所有节点都监视着最小的那个节点,并在主节点失效时检查自己是否成为新的主节点(由于使用了ephemeral,节点失效就会删除对应znode)。但是这会造成羊群效应,当前主节点失效,所有其他进程都会收到通知,并运行getChildren来获得当前所有存活的节点。如果节点数量很大,就会导致ZooKeeper的工作量激增。为了避免羊群效应,可以只监视比自己小的那个节点。如果一个客户端收到一个watch通知,它就成为新的主节点。这样就避免所有节点监视一个节点导致的羊群效应。

    伪代码

    假设ELECTION是用于选主的路径。为了竞选主节点:
    1.创建znode z路径为"ELECTION/guid-n_"并同时使用SEQUENCE和EPHEMERAL
    2.假设C是"ELECTION"的子节点集,i是z的序列号
    3.监视"ELECTION/guid-n_j",j是仅次于自己的序列号。j<i且在C中存在n_j节点
    在被监视节点删除后收到通知:
    1.假设C是ELECTION最新的子节点集
    2.如果z是C中最小的节点,则进行主节点的工作
    3.不然监视"ELECTION/guid-n_j",j是仅次于自己的序列号。j<i且在C中存在n_j节点

    注意

    • 如果一个znode是最小的节点,并不代表它知道自己是主节点,所以可以通过在一个不同的目录创建节点来标识已经完成主节点的操作。
    • guid的使用可以参考可恢复错误和GUID

    Curator实现

    Leader Latch

    public LeaderLatch(CuratorFramework client,
                       String latchPath)
    /**
    client 		客户端实例
    latchPath 	选举路径
    **/
    
    leaderLatch.start();	//开启选举
    leaderLatch.heasLeadership()	//返回是否为主节点
    leaderLatch.await();	//等待直到成为主节点
    leaderLatch.close();	//关闭
    

    Leader Election

    public LeaderSelector(CuratorFramework client,
                          String mutexPath,
                          LeaderSelectorListener listener)
    /**
    client 		客户端实例
    mutexPath 	选举路径
    listener 	被选中后的监听器
    **/
    
    leaderSelector.start();	//开启选举
    leaderSelector.close();	//关闭选举
    
  • 相关阅读:
    入门教程: JS认证和WebAPI
    ASP.NET Core 之 Identity 入门(二)
    在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序
    .Net Core+Angular Cli/Angular4开发环境搭建教程
    简单易用的.NET免费开源RabbitMQ操作组件EasyNetQ解析
    Razor
    一个简易的反射类库NMSReflector
    发布 Ionic iOS 企业级应用
    AngularJS中的Provider们:Service和Factory等的区别
    Linux企业运维人员必备150个命令汇总
  • 原文地址:https://www.cnblogs.com/resentment/p/6258813.html
Copyright © 2011-2022 走看看