`

分布式服务框架zookeeper

 
阅读更多

一、 zookeeper 数据结构 : 具有层次关系的数据结构,非常类似于一个标准的文件系统



 
 

1: 每个子目录项(如NameService,Configuration,GroupMembers,Apps 都被称作为znode),

这个 znode 是被它所在的路径唯一标识,如 Server1 这个 znode 的标识为 /NameService/Server1

2:(临时节点)EPHEMERAL 类型的目录节点不能有子节点目录

3:znode是有版本的,每个znode中存储的数据可以有多个版本。一个访问路径中可以存储多份数据

4:znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除

5:znode的目录名可以自动编号,如App1已经存在,再创建,将会自动命名为App2

6:znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端

 

二、基本操作

// 创建一个与服务器的连接
 ZooKeeper zk = new ZooKeeper("localhost:" + CLIENT_PORT, 
        ClientBase.CONNECTION_TIMEOUT, new Watcher() { 
            // 监控所有被触发的事件
            public void process(WatchedEvent event) { 
                System.out.println("已经触发了" + event.getType() + "事件!"); 
            } 
        }); 
 // 创建一个目录节点
 zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE,
   CreateMode.PERSISTENT); 
 // 创建一个子目录节点
 zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(),
   Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); 
 System.out.println(new String(zk.getData("/testRootPath",false,null))); 
 // 取出子目录节点列表
 System.out.println(zk.getChildren("/testRootPath",true)); 
 // 修改子目录节点数据
 zk.setData("/testRootPath/testChildPathOne","modifyChildDataOne".getBytes(),-1); 
 System.out.println("目录节点状态:["+zk.exists("/testRootPath",true)+"]"); 
 // 创建另外一个子目录节点
 zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(), 
   Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); 
 System.out.println(new String(zk.getData("/testRootPath/testChildPathTwo",true,null))); 
 // 删除子目录节点
 zk.delete("/testRootPath/testChildPathTwo",-1); 
 zk.delete("/testRootPath/testChildPathOne",-1); 
 // 删除父目录节点
 zk.delete("/testRootPath",-1); 
 // 关闭连接
 zk.close();

 输出的结果如下:

已经触发了 None 事件!
 testRootData 
 [testChildPathOne] 
目录节点状态:[5,5,1281804532336,1281804532336,0,1,0,0,12,1,6] 
已经触发了 NodeChildrenChanged 事件!
 testChildDataTwo 
已经触发了 NodeDeleted 事件!
已经触发了 NodeDeleted 事件!

 

 

 三、zookeeper 应用场景

1、统一命名服务:用树形的名称结构是一个理想的选择,树形的名称结构是一个有层次的目录结构,既对人友好又不会重复

 

2、配置管理 : 将配置信息保存在 Zookeeper 的某个目录节点中,然后将所有需要修改的应用机器监控配置信息的状态,一旦配置信息发生变化,每台应用机器就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中

 

3、集群管理 :Zookeeper 不仅能够帮你维护当前的集群中机器的服务状态,而且能够帮你选出一个“总管”,让这个总管来管理集群

 

4、共享锁(Locks)

 实现方式也是需要获得锁的 Server 创建一个 EPHEMERAL_SEQUENTIAL 目录节点,然后调用 getChildren方法获取当前的目录节点列表中最小的目录节点是不是就是自己创建的目录节点,如果正是自己创建的,那么它就获得了这个锁,如果不是那么它就调用 exists(String path, boolean watch) 方法并监控 Zookeeper 上目录节点列表的变化,一直到自己创建的节点是列表中最小编号的目录节点,从而获得锁,释放锁很简单,只要删除前面它自己所创建的目录节点就行了。

 

5、队列管理

  1. 当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达,这种是同步队列。同步队列用 Zookeeper 实现的实现思路如下:

    创建一个父目录 /synchronizing,每个成员都监控标志(Set Watch)位目录 /synchronizing/start 是否存在,然后每个成员都加入这个队列,加入队列的方式就是创建 /synchronizing/member_i 的临时目录节点,然后每个成员获取 / synchronizing 目录的所有目录节点,也就是 member_i。判断 i 的值是否已经是成员的个数,如果小于成员个数等待 /synchronizing/start 的出现,如果已经相等就创建 /synchronizing/start。

  2. 队列按照 FIFO 方式进行入队和出队操作,例如实现生产者和消费者模型。实现的思路也非常简单,就是在特定的目录下创建 SEQUENTIAL 类型的子目录 /queue_i,这样就能保证所有成员加入队列时都是有编号的,出队列时通过 getChildren( ) 方法可以返回当前所有的队列中的元素,然后消费其中最小的一个,这样就能保证 FIFO。

 

 

  • 大小: 29.2 KB
  • 大小: 31.2 KB
分享到:
评论

相关推荐

    分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    分布式服务框架Zookeeper是Apache Hadoop的一个子项目,专门用于管理分布式环境中的数据。它提供了一个高可用、高性能、分布式的命名服务、配置管理以及同步服务,是构建大规模分布式系统的基石。Zookeeper的设计...

    分布式服务框架zookeeper 3.4.13版本

    分布式服务框架Zookeeper 3.4.13版本是一个关键组件,在现代企业级IT系统中广泛用于构建可靠的分布式服务和管理集群。Zookeeper源于雅虎研究院的一个研究项目,后来成为了Apache软件基金会的顶级项目,其设计目标是...

    分布式服务框架 Zookeeper — 管理分布式环境中的数据.doc

    【分布式服务框架 Zookeeper — 管理分布式环境中的数据】 Zookeeper 是一个高度可靠的分布式服务框架,由 Apache Hadoop 项目开发,旨在解决大型分布式系统中的数据管理问题。它的核心功能包括配置管理、命名服务...

    分布式服务框架Zookeeper--管理分布式环境中的数据[收集].pdf

    ### 分布式服务框架Zookeeper--管理分布式环境中的数据 #### 一、Zookeeper简介 Zookeeper是一款开源的分布式协调服务框架,它主要用于解决分布式应用中常见的一致性问题,如命名服务、配置管理、集群管理和分布式...

    分布式服务框架 Zookeeper -- 管理分布式环境中的数据.pdf

    Apache ZooKeeper 是一个分布式服务框架,用于管理分布式环境中的数据,常被用作协调服务,例如在分布式计算、配置管理、命名服务等场景。它的设计目标是简单、高效且高可用,通过一致性协议保证数据的一致性。 在...

    分布式服务框架Zookeeper—管理分布式环境中的数据

    本文介绍的Zookeeper是以3.2.2这个稳定版本为基础,,Zookeeper的安装非常简单,下面将从单机模式和集群模式两个方面介绍Zookeeper的安装和配置。单机安装非常简单,只要获取到Zookeeper的压缩包并解压到某个目录如...

    分布式服务框架Zookeeper介绍、原理及应用

    Zookeeper分布式服务框架是ApacheHadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等等。Zookeeper中的角色主要有...

    《分布式服务框架原理与实践》高清完整版

    分布式服务框架是现代大型互联网应用的核心技术之一,它旨在解决单体系统在高并发、海量数据场景下的扩展性问题。《分布式服务框架原理与实践》这本书深入浅出地讲解了分布式服务的基础理论和实际操作,对于想要深入...

    分布式服务框架Zookeeper入门学习

    ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,是Google的Chubby一个开源的实现。提供功能:命名服务配置管理集群管理分布式锁队列管理特性:顺序一致性:从同一个客户端发起的事务请求,...

    分布式服务框架原理与实践_李林锋pdf(带目录)

    分布式服务框架是现代大型互联网应用的核心技术之一,它旨在解决单体系统在扩展性、可维护性和高可用性上的挑战。李林锋的《分布式服务框架原理与实践》一书深入探讨了这一主题,提供了丰富的理论知识和实践经验。...

    分布式服务框架原理与实践.李林锋(详细书签)

    分布式服务框架是现代大型互联网应用的核心技术之一,它旨在解决单体应用在高并发、大数据量、高可用性等场景下的挑战。李林锋的《分布式服务框架原理与实践》一书深入浅出地探讨了这个领域的重要概念、设计模式以及...

    C++高性能分布式服务器框架

    C++高性能分布式服务器框架,webserver,websocket server,自定义tcp_server(包含日志模块,配置模块,线程模块,协程模块,协程调度模块,io协程调度模块,hook模块,socket模块,bytearray序列化,http模块,Tcp...

    zookeeper, 分布式系统服务ZooKeeper的学习历程.zip

    七、ZooKeeper与其他分布式框架的集成 ZooKeeper常被用于Hadoop、HBase、Kafka等大数据处理框架中,作为它们的协调中心,确保服务的稳定性和数据一致性。 总结: ZooKeeper作为分布式系统的核心组件,其强大的协调...

    分布式服务框架原理与实践_李林锋著.pdf

    根据给定的信息,书籍的标题为《分布式服务框架原理与实践》,作者为李林锋。本书属于计算机编程类,专注于阐述分布式服务框架的内部原理,并结合实践案例进行讲解。 首先,分布式服务框架是现代大型软件系统开发和...

Global site tag (gtag.js) - Google Analytics