数据发布与订阅(配置中心) |
发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,服务式服务框架的服务地址列表等就非常适合使用。 |
1. 应用中用到的一些配置信息放到ZK上进行集中管理。这类场景通常是这样:应用在启动的时候会主动来获取一次配置,同时,在节点上注册一个Watcher,这样一来,以后每次配置有更新的时候,都会实时通知到订阅的客户端,从来达到获取最新配置信息的目的。 2. 分布式搜索服务中,索引的元信息和服务器集群机器的节点状态存放在ZK的一些指定节点,供各个客户端订阅使用。 3. 分布式日志收集系统。这个系统的核心工作是收集分布在不同机器的日志。收集器通常是按照应用来分配收集任务单元,因此需要在ZK上创建一个以应用名作为path的节点P,并将这个应用的所有机器ip,以子节点的形式注册到节点P上,这样一来就能够实现机器变动的时候,能够实时通知到收集器调整任务分配。 4. 系统中有些信息需要动态获取,并且还会存在人工手动去修改这个信息的发问。通常是暴露出接口,例如JMX接口,来获取一些运行时的信息。引入ZK之后,就不用自己实现一套方案了,只要将这些信息存放到指定的ZK节点上即可。 注意:在上面提到的应用场景中,有个默认前提是:数据量很小,但是数据更新可能会比较快的场景。 |
负载均衡 |
这里说的负载均衡是指软负载均衡。在分布式环境中,为了保证高可用性,通常同一个应用或同一个服务的提供方都会部署多份,达到对等服务。而消费者就须要在这些对等的服务器中选择一个来执行相关的业务逻辑,其中比较典型的是消息中间件中的生产者,消费者负载均衡。 |
1. 每个分区针对同一个group只挂载一个消费者。 2. 如果同一个group的消费者数目大于分区数目,则多出来的消费者将不参与消费。 3. 如果同一个group的消费者数目小于分区数目,则有部分消费者需要额外承担消费任务。 在某个消费者故障或者重启等情况下,其他消费者会感知到这一变化(通过 zookeeper watch消费者列表),然后重新进行负载均衡,保证所有的分区都有消费者进行消费。 |
命名服务(Naming Service) |
命名服务也是分布式系统中比较常见的一类场景。在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。被命名的实体通常可以是集群中的机器,提供的服务地址,远程对象等等——这些我们都可以统称他们为名字(Name)。其中较为常见的就是一些分布式服务框架中的服务地址列表。通过调用ZK提供的创建节点的API,能够很容易创建一个全局唯一的path,这个path就可以作为一个名称。 |
分布式通知/协调 |
ZooKeeper中特有watcher注册与异步通知机制,能够很好的实现分布式环境下不同系统之间的通知与协调,实现对数据变更的实时处理。使用方法通常是不同系统都对ZK上同一个znode进行注册,监听znode的变化(包括znode本身内容及子节点的),其中一个系统update了znode,那么另一个系统能够收到通知,并作出相应处理 |
1. 另一种心跳检测机制:检测系统和被检测系统之间并不直接关联起来,而是通过zk上某个节点关联,大大减少系统耦合。 2. 另一种系统调度模式:某系统有控制台和推送系统两部分组成,控制台的职责是控制推送系统进行相应的推送工作。管理人员在控制台作的一些操作,实际上是修改了ZK上某些节点的状态,而ZK就把这些变化通知给他们注册Watcher的客户端,即推送系统,于是,作出相应的推送任务。 3. 另一种工作汇报模式:一些类似于任务分发系统,子任务启动后,到zk来注册一个临时节点,并且定时将自己的进度进行汇报(将进度写回这个临时节点),这样任务管理者就能够实时知道任务进度。 总之,使用zookeeper来进行分布式通知和协调能够大大降低系统之间的耦合 |
集群管理与Master选举 |
1. 集群机器监控:这通常用于那种对集群中机器状态,机器在线率有较高要求的场景,能够快速对集群中机器变化作出响应。这样的场景中,往往有一个监控系统,实时检测集群机器是否存活。过去的做法通常是:监控系统通过某种手段(比如ping)定时检测每个机器,或者每个机器自己定时向监控系统汇报“我还活着”。 这种做法可行,但是存在两个比较明显的问题: 1. 集群中机器有变动的时候,牵连修改的东西比较多。 2. 有一定的延时。 1. 客户端在节点 x 上注册一个Watcher,那么如果 x?的子节点变化了,会通知该客户端。 2. 创建EPHEMERAL类型的节点,一旦客户端和服务器的会话结束或过期,那么该节点就会消失。 2. Master选举则是zookeeper中最为经典的应用场景了。 |
1. 在搜索系统中,如果集群中每个机器都生成一份全量索引,不仅耗时,而且不能保证彼此之间索引数据一致。因此让集群中的Master来进行全量索引的生成,然后同步到集群中其它机器。另外,Master选举的容灾措施是,可以随时进行手动指定master,就是说应用在zk在无法获取master信息时,可以通过比如http方式,向一个地方获取master。 2. 在Hbase中,也是使用ZooKeeper来实现动态HMaster的选举。在Hbase实现中,会在ZK上存储一些ROOT表的地址和HMaster的地址,HRegionServer也会把自己以临时节点(Ephemeral)的方式注册到Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的存活状态,同时,一旦HMaster出现问题,会重新选举出一个HMaster来运行,从而避免了HMaster的单点问题 |
分布式锁 |
分布式队列 |
队列方面,简单地讲有两种,一种是常规的先进先出队列,另一种是要等到队列成员聚齐之后的才统一按序执行。对于第一种先进先出队列,和分布式锁服务中的控制时序场景基本原理一致,这里不再赘述。 第二种队列其实是在FIFO队列的基础上作了一个增强。通常可以在 /queue 这个znode下预先建立一个/queue/num 节点,并且赋值为n(或者直接给/queue赋值n),表示队列大小,之后每次有队列成员加入后,就判断下是否已经到达队列大小,决定是否可以开始执行了。这种用法的典型场景是,分布式环境中,一个大任务Task A,需要在很多子任务完成(或条件就绪)情况下才能进行。这个时候,凡是其中一个子任务完成(就绪),那么就去 /taskList 下建立自己的临时时序节点(CreateMode.EPHEMERAL_SEQUENTIAL),当 /taskList 发现自己下面的子节点满足指定个数,就可以进行下一步按序进行处理了。 |
- 浏览: 958891 次
- 性别:
- 来自: 北京
最新评论
-
baichoufei90:
hadoop权威指南说ZK的zab协议不是用的paxos算法。 ...
zookeeper原理(转) -
shin1355:
看了一小部分,看不下去了,
zookeeper原理(转) -
b_l_east:
表示没看懂楼主关于选举算法的描述,顿时没了读下去的兴致
zookeeper原理(转) -
prince4426:
好前沿的技术呀
hive选型讨论 -
zk519720303:
zookeeper原理(转)
相关推荐
【Zookeeper场景介绍1】 Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、...
### Zookeeper使用场景及详解 #### 一、概述 Zookeeper是一个分布式的、开放源码的数据管理和协调服务框架。它最初是由雅虎研究院开发并开源的,后来成为了Apache的一个顶级项目。Zookeeper的设计目的是为了简化...
### ZooKeeper典型使用场景详解 #### 一、概述 ZooKeeper是一款开源的分布式协调服务框架,主要用于解决分布式系统中的数据一致性问题。它基于Paxos算法实现,确保了即使在网络分区的情况下,也能保证分布式环境下...
zookeeper应用场景
在本课程“第三课:Zookeeper典型使用场景实践1”中,主要讨论了Zookeeper在分布式系统中的四个关键应用场景:分布式集群管理、分布式注册中心、分布式JOB和分布式锁。下面是针对这些场景的详细说明: 1. **分布式...
在压缩包中,我们提供了Zookeeper场景介绍.pdf,详细讲解了Zookeeper在实际应用中的各种场景。ZkClient文档.pdf和Curator文档.pdf则分别介绍了这两个客户端的使用方法和最佳实践。 1. **ZkClient实战**: - 首先,...
ZooKeeper经典应用场景 ZooKeeper是一个高可用的分布式系统,广泛应用于分布式锁、服务注册中心等场景。下面将对ZooKeeper在经典应用场景中的知识点进行详细说明。 分布式锁 在分布式集群工作的开发场景中,需要...
### ZooKeeper 典型的应用场景详解 #### 一、引言 ZooKeeper是一个高度可用的协调服务,用于分布式应用程序中的管理和同步。它基于观察者模式设计,通过存储和管理共享数据来支持集群间的协作。当这些数据发生改变...
尽管ZooKeeper最初并非为特定应用场景设计,但开发者们逐渐发掘出了一系列典型用途,利用其提供的API接口(原语集)来满足需求。 1. 数据发布与订阅(配置中心) ZooKeeper可以作为一个配置中心,允许发布者将数据...
如图03_zookeeper的元数据_配置管理场景所示,所有节点都从Zookeeper获取配置,当配置发生变更时,Zookeeper会通知所有订阅的节点,实现了配置的实时更新。这种方式避免了传统配置文件同步的复杂性和不一致性问题,...
模拟场景1:模拟目的场景概述是指模拟Zookeeper集群的leader选举过程。操作步骤包括:1. 每个server发出一个投票;2. 接受来自各个服务器的投票;3. 处理投票;4. 统计投票;5. 改变服务器状态。 模拟场景2:模拟...
Linux 集群搭建是 ZooKeeper 的一种常见应用场景,本文将详细介绍 ZooKeeper Linux 集群搭建流程。 准备前提 在开始搭建 ZooKeeper 集群之前,需要提前在本地安装好 JDK,因为 ZooKeeper 是用 Java 编写的,需要...
ZooKeeper被广泛应用于解决多种分布式问题,以下是一些典型的ZooKeeper应用场景: 1. 数据发布与订阅(配置中心): ZooKeeper作为一个配置中心,允许发布者将数据发布到特定节点,订阅者则可以通过注册Watcher...
ZooKeeper经典应用场景实战(一) 本节课重点介绍了 ZooKeeper 的经典应用场景,并通过 Java 客户端 API 连接和操作 ZooKeeper 集群。 ZooKeeper 官方提供的 Java 客户端 API 虽然提供了基本的操作,但是存在一些...
在本文中,我们将深入探讨Zookeeper客户端的工作原理,如何通过代码进行操作,并探讨其在实际应用中的场景。 首先,让我们理解Zookeeper客户端的基本原理。Zookeeper客户端通过TCP连接与服务器建立会话。这个会话...
- **分布式锁**:通过 Zookeeper 的临时节点机制,实现跨节点的分布式锁,保证在高并发场景下的数据一致性。 - **集群管理**:Zookeeper 可以监控集群中节点的状态,当节点发生变化时,可以通过事件通知其他节点,...
书中还详细介绍了ZooKeeper的应用场景,如命名服务、配置管理、集群管理、分布式锁等。在命名服务中,ZooKeeper可以作为一个全局的名字注册表,使得分布式系统中的组件可以找到彼此。配置管理则允许系统动态更新配置...
Apache ZooKeeper 是一个高度可靠的分布式协调系统,广泛应用于云原生环境中的服务发现、配置管理、命名服务等场景。Zookeeper-3.8.0 是该系统的最新版本,提供了更稳定和高效的服务。 Zookeeper 的核心概念包括...
总结,ZooKeeper 3.4.9在Windows和Linux上的部署与应用涵盖了从基本安装到集群配置,再到实际应用场景的多个层面。理解并熟练掌握这些知识,对于构建和管理分布式系统至关重要。无论是单机还是集群模式,ZooKeeper都...
接下来,我们将深入探讨Zookeeper的核心特性、工作原理以及如何在实际场景中应用。 1. **核心特性** - **一致性**:Zookeeper 提供了一致性模型,所有客户端看到的数据视图是一致的,确保了数据的高可用性。 -...