zookeeper 节点有啥用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zookeeper 节点有啥用相关的知识,希望对你有一定的参考价值。

ZooKeeper 节点是有生命周期的,这取决于节点的类型。在 ZooKeeper 中,节点类型可以分为持久节点(PERSISTENT )、临时节点(EPHEMERAL),以及时序节点(SEQUENTIAL ),具体在节点创建过程中,一般是组合使用,可以生成以下 4 种节点类型。

持久节点(PERSISTENT)

所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点——不会因为创建该节点的客户端会话失效而消失。

持久顺序节点(PERSISTENT_SEQUENTIAL)

这类节点的基本特性和上面的节点类型是一致的。额外的特性是,在ZK中,每个父节点会为他的第一级子节点维护一份时序,会记录每个子节点创建的先后顺序。基于这个特性,在创建子节点的时候,可以设置这个属性,那么在创建节点过程中,ZK会自动为给定节点名加上一个数字后缀,作为新的节点名。这个数字后缀的范围是整型的最大值。

临时节点(EPHEMERAL)

和持久节点不同的是,临时节点的生命周期和客户端会话绑定。也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉。注意,这里提到的是会话失效,而非连接断开。另外,在临时节点下面不能创建子节点。

临时顺序节点(EPHEMERAL_SEQUENTIAL)

可以用来实现分布式锁

客户端调用create()方法创建名为“_locknode_/guid-lock-”的节点,需要注意的是,这里节点的创建类型需要设置为EPHEMERAL_SEQUENTIAL。
客户端调用getChildren(“_locknode_”)方法来获取所有已经创建的子节点,注意,这里不注册任何Watcher。
客户端获取到所有子节点path之后,如果发现自己在步骤1中创建的节点序号最小,那么就认为这个客户端获得了锁。
如果在步骤3中发现自己并非所有子节点中最小的,说明自己还没有获取到锁。此时客户端需要找到比自己小的那个节点,然后对其调用exist()方法,同时注册事件监听。
之后当这个被关注的节点被移除了,客户端会收到相应的通知。这个时候客户端需要再次调用getChildren(“_locknode_”)方法来获取所有已经创建的子节点,确保自己确实是最小的节点了,然后进入步骤3。
参考技术A · 集群管理:监控节点存活状态、运行请求等。
· 主节点选举:主节点挂掉了之后可以从备用的节点开始新一轮选主,主节点选举说的就是这个选举的过程,使用 zookeeper 可以协助完成这个过程。
· 分布式锁:zookeeper 提供两种锁:独占锁、共享锁。独占锁即一次只能有一个线程使用资源,共享锁是读锁共享,读写互斥,即可以有多线线程同时读同一个资源,如果要使用写锁也只能有一个线程使用。zookeeper可以对分布式锁进行控制。
· 命名服务:在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。

有啥用?和:[重复]

【中文标题】有啥用?和:[重复]【英文标题】:What is the use of ? and : [duplicate]有什么用?和:[重复] 【发布时间】:2012-08-24 19:11:39 【问题描述】:

可能重复:JS How to use the ?: (ternary) operator

我下载了一个用于 wordpress 的插件,该插件中有一个 javascript。 进入那个 js 代码我不明白它是如何工作的。

function ddet_javascript() 

echo '
<script language="JavaScript" type="text/javascript"><!-- 
function expand(param)  
param.style.display=(param.style.display=="none") ? "" : "none"; 
  
  //--></script>';

在这段代码中,我不明白下面给出的行。

param.style.display=(param.style.display=="none") ? "" : "none";

有什么用?和:在这一行。如果有人知道,请告诉我。

【问题讨论】:

jQuery != JavaScript。这篇文章中没有 jQuery。完全没有。 【参考方案1】:

它是一个运算符:

(条件)?真:假

是这样的:

if(param.style.display=="none")
       param.style.display="";
else
       param.style.display="none;

【讨论】:

【参考方案2】:

这是三元运算符。 它的工作原理类似于 if else 语句。

查看此链接:

http://davidwalsh.name/learning-ternary-operators-tips-tricks

http://jqfundamentals.com/#example-2.16

【讨论】:

这个链接对我理解三元运算符真的很有帮助。【参考方案3】:

这是三元条件运算符:表达式

Cond ? a : b

评估Cond,如果为真则延迟返回a,否则返回b

在您的情况下,表达式的整个结果被分配给param.style.display。也就是说,如果display已经设置为"none",则设置为"",否则设置为"none"

此运算符在许多语言中都很常见,因为它为您提供了单个 表达式,其值取决于某事。

【讨论】:

我真的希望 JavaScript 包含第二个三元运算符,这样每个人都会感到困惑。 (开个玩笑,我只是想要它)【参考方案4】:

在你的代码中它是这样工作的:

if(param.style.display=="none")
   param.style.display = "";  
 else
    param.style.display = "none";  

【讨论】:

你明白了吗@Wasim Kazi ya Sandinp 现在我很清楚我们如何在 Jquery 中使用三元运算符了。【参考方案5】:

称为条件(三元)运算符。

test ? expression1 : expression2

如果 test 为真,则返回表达式 1,否则返回表达式 2。

这不是特定于 jquery 的,而是一个 javascript 运算符。

欲了解更多信息,ternary operator javascript

【讨论】:

+1 用于获得正确的名称 (ecma-international.org/ecma-262/5.1/#sec-8.4)。 :-)【参考方案6】:

x=a?b:c, ?: 是一个三元运算符(适用于 3 个操作数)。 这意味着如果 a 为真,则 x=b 否则 x=c

【讨论】:

【参考方案7】:
if (param.style.display=="none")
  param.style.display = "";
else
  param.style.display = "none";

【讨论】:

以上是关于zookeeper 节点有啥用的主要内容,如果未能解决你的问题,请参考以下文章

大白话带你认识 ZooKeeper !重要概念一网打尽!

etcd是啥东西?它和ZooKeeper有啥区别

蚂蚁面试官:Zookeeper 的选举流程是怎样的?我当场懵逼了。。。

RocketMQ消费者是如何获取消息的?转疯了!

Zookeeper 与 Spring Cloud 配置服务器有啥区别?

Java开发自学教程!Java开发者该学习哪些东西提高竞争力