今天介绍Apache著名顶级项目ZooKeeper,简称zk。如封面所示,管理zoo的凶猛野兽可不是简单之事。之所以先介绍zk是因为其影响力之大,范围之广,在后续的顶级项目中但凡设计分布式几乎都与其关联,所以还是及早铺垫为妙。
官网介绍,zk是一个分布式的,开源的分布式应用程序协调服务,为分布式应用提供了一致性服务,核心功能包括:配置维护,命名服务,分布式同步,组服务等。前半句比较绕口,大意为,zk本身设计,架构也是分布式的,同时它的核心功能也是为分布式应用提供服务的。呵呵,这年代,技术标榜中不提及分布式都不敢出来混。
另外,其实zk是Google的项目Chubby的开源实现,这里抛几个引子,google可谓是dt时代身后大师,很多知名的项目包括hadoop,hbase以及zk都是根据google的几篇论文而来,zk是来自“The Chubby lock service for loosely-coupled distributed system”。说的直白一点,google本身在大型分布式领域经过了多年技术沉淀,早早领先于业界,首先用google本身都是采用闭源商业开发,所以只好抛几篇paper出来,然而仅仅这2,3片paper就对整个世界都起了大变化,业界的大师以及各it公司如获至宝,茅塞顿开,包括facebook以及中国的阿里与腾讯,纷纷实现Google的开源软件,以至于后来的发展已经超出了google的预计,甚至倒逼Google后来的一些开源,如Go, Kubernetes等,也不知是google成就了dt还是双赢。向Google致敬,带着浓浓的硅谷底蕴,算一家伟大的技术公司!国内的巨头,目前还在霸道,土豪的成长中,带着浓浓的商业气息。
zk目前stable版本是3.4,系统数据模型如下:
可以看出分布式的设计,其核心数据模型理念类似文件目录结构(通过/分割),其中每一个节点zk中称之为znodes,每个节点都可以用根path来决定,总体提供一个分布式环境共享的hierarchal命名空间,这样分布式服务process就可以通过这个命名空间协调。另外,与文件目录的差异,这个数据模型是动态kept in-memory,目的是提供高并发,低延迟。注意,最近的业界,流行提到孪生术语“高并发,低延迟”。zk自己的分布式体现在它的架构设计。
zk的分布式结构,znodes之间通过in-memory,以及也支持持久化transaction logs,snapshots, 同时显然支持replicated。
zk客户端通过tcp链接一个zk服务器,zk客户端通过持续发送request,获得response,监控events,以及发送heart beats,即心跳脉冲,如果连接断掉,会重新自动连接新的server。不用担心,zk客户端通常会被封装在其它高端产品中。
继续回到上边的znodes,这个是其核心之一。zonde可以保存状态信息,配置信息,location信息等。所以每个znode大小很小,几个字节-几k而已。znodes维护了structure的状态信息,版本,acl变化。每次znode数据变化会自动加版本,zk客户端同样可以收到版本信息。znode有一个重要的概念ephemeral nodes,中文意思是指一些短暂生命周期的节点。ephemeral nodes非常有用,它的生命周期是当session创建时激活,session结束了就删除。
另一个zk的功力是watches,zk客户可以监控znodes,一个watch event将被激活当有任何的znode变化,进而zk客户端可以做进一步处理,比如发现某些server不可用,zk客户端可以负载均衡等。
zk的API也清晰简单,create,delete,exists,get,sync等,与普通数据库活着文件系统类似。
zk的replication如下图所示
值得注意的是,zk的replicaitn数据库是in-memory包含整个data tree。 zk的读请求会从local replica服务数据库获取,zk的write请求会通过agreement protocol:所有的write请求会转发到single server,zk术语叫leader,其它的zk server术语叫followers,哪里都有领导啊?哈哈。消息层负责重新选举leader,以及同步leader到followers。
zk性能统计:
放心,性能不好官网也不敢上图了。此统计图来自Yahoo! 注意,啰嗦一下,yahoo后面的!是yahoo的一部分哦。
好了,来点干货,run一下吧,当然要分布式run了,先来3个server吧。Running Replicated ZooKeeper, 单机模式很简单,replicated模式是生产环境必备模式。zk中一个replicated group叫做quorum,replicated模式下,所有的quorum服务器都复制相同配置文件。
别忘了建一个data目录,创建一个myid文件,里面标示server数字如1.
run run run zk
创建一个node吧,run一些命令
可以故意删除一些server,如删除server2,然后继续连接,测试zk的分布式集群。不高兴弄了。大家可以自己玩。
再上一个watch的java用例,来自官网。
好了,先抛转头到这里吧,有兴趣的可以继续深入研究。如zk的分布式锁,以fast paxos为基础的变种ZAB协议,以及leader选举算法。
总结一下,zk目前已经俨然成为分布式集群管理的必不可少的一个模块,包括hadoop,hbase等用它来管理namenode, hbase里的master election,server状态同步。
公众号:技术极客TechBooster
相关推荐
标题中的"apache-zookeeper-3.5.9、cmak-3.0.0.5、kafka_2.12-2.8.2"分别代表了三个关键的开源项目,它们在分布式系统和大数据处理领域中起着至关重要的作用。让我们详细探讨一下这三个组件及其相关知识点。 1. **...
Zookeeper,作为Apache的一个顶级项目,是分布式系统中的关键组件,尤其在大数据、云计算领域扮演着至关重要的角色。Zookeeper 3.4.8是其稳定版本之一,为用户提供了高效、可靠的分布式协调服务。本文将深入探讨...
1. 解压“zookeeper-3.4.6.rar”:首先,你需要在Windows环境下解压这个压缩包,这将生成一个名为“zookeeper-3.4.6”的目录。 2. 配置环境变量:将解压后的bin目录添加到系统的PATH环境变量中,以便在任何位置运行...
Zookeeper源于雅虎研究院的一个研究项目,后来成为Apache顶级项目。它是一个分布式应用程序协调服务,可以视为一种分布式数据基础设施,用于解决分布式系统中的命名、配置管理、组服务、领导者选举等问题。Zookeeper...
Zookeeper,作为Apache基金会的一个顶级项目,是一款高效、可靠的分布式协调服务框架。3.5.3-beta版本是Zookeeper的重要迭代,旨在提供更稳定的性能和更多的新特性。在深入探讨这个版本之前,我们先来理解Zookeeper...
Pulsar最初由Yahoo创建,后来成为Apache顶级项目,以其高性能、低延迟和可扩展性而受到业界广泛认可。在"apache-pulsar-2.7.1-bin.tar.gz"这个压缩包中,包含了Apache Pulsar的2.7.1版本的二进制发行版,用户可以...
2010 年 11 月正式成为 Apache 的顶级项目。 - **关键特性**: - **一致性**: 通过 Zab 协议(Zookeeper Atomic Broadcast)保证所有节点的数据一致。 - **可靠性**: 数据一旦提交,则不会丢失。 - **实时性**: ...
Zookeeper,作为Apache的一个顶级项目,是分布式应用程序协调服务的基石,它提供了一种简单有效的原语集,使得分布式系统的各种复杂问题得以简化。在Windows环境下,Zookeeper 3.4.6版本是一个极为重要的工具,尤其...
Zookeeper,作为Apache软件基金会的一个顶级项目,是一款高可用的分布式协调服务。它为分布式应用提供了一个简单一致的接口,用于管理命名空间、配置信息、同步服务以及分组服务等。Zookeeper 3.4.10是其稳定版本之...
Zookeeper,作为Apache的一个顶级项目,是分布式系统中的关键组件,尤其在大型分布式环境中的服务协调、配置管理、集群状态管理等方面发挥着重要作用。本文将深入探讨Zookeeper 3.4.6这一版本的主要特性和使用场景,...
Zookeeper,作为Apache的一个顶级项目,是分布式应用程序协调服务的开源实现,它提供了一种简单有效的原语集,使得分布式系统的开发者能够处理命名服务、配置管理、集群同步、领导选举等问题。在本文中,我们将深入...
Zookeeper,作为Apache的一个顶级项目,是分布式系统中的关键组件,尤其在大数据、云计算领域,它扮演着核心的协调服务角色。Zookeeper 3.4.6是其稳定版本之一,提供了一套高效、可靠的分布式协调解决方案。下面,...
Zookeeper由雅虎研究实验室于2005年发起,后成为Apache顶级项目。它提供了一种简单易用的接口,用于实现分布式服务的配置管理、命名服务、分布式同步和组服务等。Zookeeper基于一种称为ZNode的层次化命名空间,类似...
"incubating" 表示该版本在Apache基金会的孵化器项目中,意味着它可能还不是Apache顶级项目,但正在朝着这个目标努力。 【描述】"dubbol.00.00000000000000" 看起来像是某种标识符或者序列号,可能是Dubbo项目内部...
Zookeeper源于雅虎研究院的研究项目,后来成为Apache软件基金会的顶级项目。它主要用于解决分布式环境下的命名服务、配置管理、集群管理、分布式锁等常见问题,为分布式应用提供一致性服务。Zookeeper的核心设计目标...
Zookeeper,作为Apache的一个顶级项目,是分布式协调服务的核心组件,广泛应用于大数据领域,尤其是与Kafka的配合,为分布式系统的管理提供了强大的支持。本文将深入探讨Zookeeper 3.4.9版本在Kafka集群设置中的应用...
Zookeeper,作为Apache的一个顶级项目,是分布式系统中的重要组件,尤其在大数据、云计算领域,它扮演着核心的协调者角色。Zookeeper 3.4.8是其历史版本之一,尽管现在已经有更新的版本,但这个版本因其稳定性和广泛...
Apache Solr 是一个高度可扩展、高性能的全文检索服务,基于Java开发,是Apache软件基金会的一个顶级项目。它被广泛用于构建搜索引擎,特别是在大数据量、高并发的环境下。本篇文档,即“apache-solr-ref-guide-6.6....
Zookeeper,作为Apache的一个顶级项目,是分布式系统中的关键组件,尤其在大型分布式环境中的服务协调、配置管理、集群状态监控等方面发挥着重要作用。本文将深入探讨Zookeeper 3.4.13版本的主要特性和使用场景,...