`
supben
  • 浏览: 330238 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

zookeeper学习之二(高级特性)

 
阅读更多

一、三个概念

 

1.CreateMode

在create的时候可以设置znode的类型

主要有四种:

PERSISTENT (持续的,相对于EPHEMERAL,不会随着client的断开而消失)

PERSISTENT_SEQUENTIAL(持久的且带顺序的)

EPHEMERAL (短暂的,生命周期依赖于client session)

EPHEMERAL_SEQUENTIAL  (短暂的,带顺序的)

 

2.Watcher

Watcher是一种反向推送机制,即zonde(包括他的child)有改变的时候会通知客户端。

可以自定义Watcher,注册给zonde。

watcher分为两大类:data watches和child watches。前者监听数据的变动,后者监听子node的变动。

Watcher是一次性的!一旦被调用,则需要重新注册。

 

3.ACL

acl即access control。zookeeper通过ACL机制来控制权限。创建znode的时候可以指定。前边我们讲过,一套zookeeper会被多个程序使用。就像linux支持多用户一样。所以需要有一套权限控制:不然自己创建的节点,被别的应用程序无缘无故删了,那找谁去?

 

Zookeeper的权限级别:

READ: 允许获取该节点的值和列出子节点。

WRITE: 允许设置该节点的值。

CREATE: 允许创建子节点。

DELETE: 可以删除子节点。

ADMIN: 超级权限。相当于root

从上到下递次增强,后面的权限包含前面的权限。

 

 

zookeeper的很多高级特性,都是基于以上三个概念来实现的。特别是CreateMode和Watcher

 

二、java客户端

zookeeper官方提供了java客户端。提供的接口也比较基础。比前一篇测试用到的telnet客户端唯一强的一点就是:我们可以在代码里实现Watcher接口实现扩展的业务!在命令行可是做不到这点的。。

maven依赖:

 

<dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
	<version>3.4.6</version>
</dependency>
 

 

下面是一些重要的接口列表。

 



 

 接口都很直观,描述也很详细。就不做额外的说明了。

 

三、一些高级特性实现原理。

 

1.Name Service:有点类似JNDI,树形目录天生的就有全局唯一名称。这功能实践中也没什么用,而且替代方案也很多。略。

 

2.配置推送:比如某个前端网站有100台机器,我们要做的是在每台机器上都有一个main程序连zookeeper,注册好Watcher。在本地连zookeeper把配置写入,zookeeper就会通过Watcher,自动把配置推送到这些机器上。而不需要去手动去更新。(相当于运维的脚本。)



 

 

3.集群管理:

每个Server起来之后都在 Zookeeper 上创建一个 EPHEMERAL 类型的znode,假设他们都有一个共同的父GroupMembers!我们在每个Server上调用getChildren(GroupMembers)方法,并注册一个 Child Watcher。由于是 EPHEMERAL 的znode,当创建它的 Server 死去,这个znode也随之被删除,所以 Children 将会变化,这时 getChildren上的 Watcher 将会被调用,所以其它 Server 就知道已经有某台 Server 死去了。新增 Server 也是同样的原理。

 

4.Leader选举

和集群管理的设计基本一样,不同的地方是,这次创建的znone类型是EPHEMERAL_SEQUENTIAL ,不仅仅随着member的同生同灭,而且是有顺序的。我们只要把编号最小的member认为是Master,就可以做到Leader的动态选举!

 



 

 

5.全局锁

     zookeeper可以利用他优秀的数据一致性算法来提供可靠的全局锁服务。

获得锁是一个递归的过程

1.创建znode "/distributed_lock"

2.在distributed_lock下新建子节点"/distributed_lock/xxxxxx",EPHEMERAL_SEQUENTIAL 模式,当前序号假如是i。

3.对distributed_lock调用getChildren(),如果i是children列表里最小的,则获得锁;否则进入第4步

4.等待children列表里紧跟在i后边的那个节点被删除的通知(exists()方法)。记为j。而j又依赖于仅比j小的节点k。一直递归等待最小的znode的被删除。。

 

注:虽然EPHEMERAL_SEQUENTIAL是递增的,但仍然不能粗暴的认为紧跟在i后边的节点j=i-1。这是因为释放锁的顺序并不是完全按照节点顺序!

 

释放锁:

删除自己创建的子节点即可

 

6.分布式队列

类似于上边全局锁的设计。只要确保每次消费的时候编号都是最小的。就能做到先进先出。

 

7 。。。略  根据zookeeper创建节点类型的不同,再结合Watcher特性。还可以提供其他很多的功能。比如各种类型queue,各种类型的Lock(上面仅仅介绍了write锁),barriers,信号量Semaphore  原子类型AtomicInteger等等。。。

所有的这些都是分布式的,高可靠的。

 

更多更全的功能在netflix 公司开源的 zookeeper客户端Curator中有实现。作为普通开发者,直接使用Curator是最高效的!

 

还等什么,一起移步下篇  zookeeper学习之三(Curator客户端)

 

 本文参考:

http://zookeeper.apache.org/

http://curator.apache.org/curator-recipes/index.html

http://www.cnblogs.com/zhangchaoyang/articles/2536178.html

http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/

 

  • 大小: 13.2 KB
  • 大小: 10.7 KB
  • 大小: 188.6 KB
分享到:
评论

相关推荐

    zookeeper学习之三(Curator客户端)

    Curator客户端是Apache Curator框架的一部分,该框架为开发人员提供了一系列高级API和工具,用于处理常见的ZooKeeper用例,降低了使用ZooKeeper的复杂性。以下是对Curator客户端及其主要特性的详细阐述: 1. **连接...

    ZooKeeper学习笔记

    ### ZooKeeper的核心特性 #### 分布式协调服务 ZooKeeper通过提供一系列的服务来简化分布式系统的开发,这些服务包括但不限于: - **同步机制**:确保分布式系统中的进程能够以有序的方式运行。 - **配置维护**:...

    zookeeper安装包和脑图.rar

    高级特性 - **Quorum机制**:Zookeeper通过Quorum机制保证服务的高可用性,即多数节点正常工作,系统就能正常运行。 - **ACL权限控制**:Zookeeper支持细粒度的访问控制,可以设置不同的权限策略。 - **命令行...

    apache-zookeeper-3.6.2-bin

    Apache ZooKeeper 是一个分布式协调服务,它为分布式应用程序提供了一个高效、可靠的、可扩展的命名服务、...通过深入学习,你还可以了解其更多高级特性,如ACL(访问控制列表)和ZooKeeper Ensemble Tracker (ZET)等。

    ZooKeeper_程指南中文.rar

    2. **ZooKeeper编程指南(二)**:可能会进一步探讨ZooKeeper的API使用,如创建、读取、更新和删除(CRUD)操作,以及watcher机制,这是ZooKeeper中的一个重要特性,用于实时监控数据变化。 3. **ZooKeeper编程指南...

    zookeeper文档

    《Zookeeper:集群与介绍》 Zookeeper,作为Apache软件基金会的一个开源项目,是分布式应用程序协调...通过深入学习官方文档,可以进一步了解Zookeeper的高级特性和最佳实践,为构建健壮的分布式系统打下坚实基础。

    maven-zookeeper

    它还包括了一些高级特性,如recipes,如分布式锁、分布式计数器、领导选举等,这些recipes是解决分布式系统常见问题的预定义模式。 在实际应用中,使用Curator可以简化与Zookeeper的交互。例如,Curator的`...

    Mac zookeeper

    在了解了基本的安装步骤后,你还可以进一步学习Zookeeper的高级特性,如选举算法、分布式锁、队列服务等,以及如何将多个Zookeeper实例配置成一个高可用的集群。Zookeeper在分布式系统中的应用广泛,是许多大数据和...

    zookeeper 教程资料

    Zookeeper 是一个分布式协调服务...在实际使用中,你可能还需要学习更多高级用法,例如 ACL 设置、选举算法、数据同步策略等。通过这份教程资料,你可以逐步掌握 Zookeeper 的核心功能,并将其应用于你的分布式系统中。

    dubbo+zookeeper案例

    此外,Dubbo还支持多种高级特性,如: - **负载均衡**:Dubbo提供了多种负载均衡策略,如轮询、随机、最少活跃调用数等,可以根据实际需求选择。 - **容错机制**:当服务不可用时,Dubbo提供了多种容错策略,如失败...

    zookeeper之分布式环境搭建.zip

    在IT行业中,ZooKeeper...不过,要真正掌握Zookeeper,还需要进一步深入研究它的高级特性,如Watcher机制、事务操作以及与其他分布式系统的集成策略。在实践中不断探索,才能更好地利用Zookeeper解决实际的分布式问题。

    Linux版zookeeper-3.4.5.tar.gz

    ZooKeeper的分布式特性使其在大数据处理框架如Hadoop、Spark和Kafka中广泛应用。例如,在Hadoop中,ZooKeeper用于管理NameNode的主备切换,确保集群的高可用性;在Spark中,它用于协调任务调度和管理集群资源;在...

    Apache Zookeeper Essentials-iteblog.com.pdf

    3. **高级特性**:深入探讨ZooKeeper提供的高级功能,如临时节点、顺序节点等。 4. **应用场景示例**:通过具体案例展示如何使用ZooKeeper解决实际问题,如分布式锁、配置管理等。 5. **性能优化**:讨论如何优化...

    ZooKeeper 客户端的使用(一)

    **正文** 在分布式系统领域,ZooKeeper 是一个至关重要的组件,它被广泛用于实现命名服务、配置管理、集群同步等...为了深入理解,可以继续学习 ZooKeeper 的高级特性,如 ZNode 的权限控制、Watcher 的触发机制等。

    SpringBoot整合Dubbo、Zookeeper

    在实际项目中,我们可能还需要考虑其他因素,如服务的负载均衡、熔断、降级等高级特性,这些都可以通过Dubbo提供的API或者SpringCloud的扩展来实现。同时,为了监控服务的运行状态,还可以集成监控工具,如Dubbo的...

    zookeeper客户端原理代码操作应用场景

    如"01第一次课程"可能涵盖了Zookeeper的基础概念和安装教程,"02第二次课程"可能讲解了客户端连接和基本操作,"03第三次课程"可能涉及到了Zookeeper的会话和watcher机制,"04第四次课程"可能介绍了一些高级特性,如...

    zookeeper编程程序指南(中文)

    《ZooKeeper编程指南》的四个部分可能分别涵盖了这些主题的不同方面,如基础概念、高级特性和实战技巧等。通过学习这些内容,开发者将能更好地理解和运用Zookeeper,构建出高效、可靠的分布式系统。

    深入探索Zookeeper:从客户端使用到集群特性的全面指南

    Zookeeper集群管理是其核心特性之一。文章中提到了Zookeeper集群的不停机动态扩容和缩容,这是保证服务高可用的关键。在不中断服务的情况下,可以通过增加或减少服务器来调整集群规模,以应对负载变化。这通常涉及到...

    zookeeper-3.4.10.zip

    本篇文章主要探讨的是Zookeeper的旧版本3.4.10,尽管它相比最新的版本有所简化,但在某些场景下,如测试、学习或特定项目需求,仍然具有实用价值。尤其是对于那些在Linux环境下编译客户端库文件的开发者来说,...

    dubbo+zookeeper案例,dubbo和Zookeeper详解,Java源码.zip

    Dubbo的核心特性包括: 1. **服务接口定义**:通过Interface和Method元数据定义服务,使接口和实现分离。 2. **服务注册与发现**:服务提供者在启动时向注册中心注册其提供的服务,服务消费者在启动时从注册中心...

Global site tag (gtag.js) - Google Analytics