今天介绍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
相关推荐
Curator解决了很多ZooKeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等,实现了Fluent风格的API接口,目前已经成为Apache的顶级项目,是全世界范围内使用最广泛的...
ZooKeeper由雅虎研究院开发,是Google Chubby的开源实现,后来托管到Apache,于2010年11月正式成为Apache的顶级项目。 ZooKeeper是一个经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高性能、高可用,...
ZooKeeper是一个开源的分布式协调服务,最初由雅虎公司开发,后来成为Apache基金会的顶级项目。它为分布式应用程序提供了高性能的协调服务,包括配置管理、命名服务、分布式同步和组服务等功能。 ZooKeeper的主要...
Curator解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连,反复注册Watcher和NodeExistsException异常等,现已成为Apache的顶级项目。
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica...web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica...web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。
华为把他贡献给了Apache,现在已经成为了Apache的顶级项目。Apache ServiceComb的(注意:官网提供中文版哦,对于英语不好的朋友,这是一个福音,毕竟是咱中国人自己开发的啊)。1、dubbo+zookeeper2、springboot+...
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica...web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。
基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。 主要应用场景是:日志收集系统和消息...
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,...用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目。目前最新的发布版本是 2.0.1,未来不久将发布 2.1 版本。就 Ambari 的作用来说,就是创建、管理、监视 Hadoop 的...
Ambari已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop和Hcatalog等。 Apache Ambari 支持HDFS、MapReduce、Hive、Pig、Hbase、Zookeepr、Sqoop和Hcatalog等的集中管理。也是5...
基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。 主要应用场景是:日志收集系统和消息...
Kafka的基本介绍 ...基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
Ambari已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop和Hcatalog等。 Apache Ambari 支持HDFS、MapReduce、Hive、Pig、Hbase、Zookeepr、Sqoop和Hcatalog等的集中管理。也是5...
基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
pdf密码:dsjsfc ...基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。主要应用场景是:日志收集系统和消息系统...