`

Apache顶级项目介绍系列3 - ZooKeeper

阅读更多

今天介绍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

分享到:
评论

相关推荐

    zookeeper开源客户端Curator

    Curator解决了很多ZooKeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等,实现了Fluent风格的API接口,目前已经成为Apache的顶级项目,是全世界范围内使用最广泛的...

    zookeeper的安装

    ZooKeeper由雅虎研究院开发,是Google Chubby的开源实现,后来托管到Apache,于2010年11月正式成为Apache的顶级项目。 ZooKeeper是一个经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高性能、高可用,...

    最详细Zookeeper学习资料(源码)

    ZooKeeper是一个开源的分布式协调服务,最初由雅虎公司开发,后来成为Apache基金会的顶级项目。它为分布式应用程序提供了高性能的协调服务,包括配置管理、命名服务、分布式同步和组服务等功能。 ZooKeeper的主要...

    curator-framework-2.4.2.jar

    Curator解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连,反复注册Watcher和NodeExistsException异常等,现已成为Apache的顶级项目。

    大数据之Kafka学习

    Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica...web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。

    kafka可视化管理工具

    Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica...web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。

    微服务ServiceComb入门案例

    华为把他贡献给了Apache,现在已经成为了Apache的顶级项目。Apache ServiceComb的(注意:官网提供中文版哦,对于英语不好的朋友,这是一个福音,毕竟是咱中国人自己开发的啊)。1、dubbo+zookeeper2、springboot+...

    Kafka面试题.md

    Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica...web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。

    php测试kafka项目示例

    基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。 主要应用场景是:日志收集系统和消息...

    消息队列之kafka.docx

    Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,...用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

    Ambari 开源软件.doc

    Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目。目前最新的发布版本是 2.0.1,未来不久将发布 2.1 版本。就 Ambari 的作用来说,就是创建、管理、监视 Hadoop 的...

    ambari-agent-2.7.5.0-0.x86_64.rpm

    Ambari已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop和Hcatalog等。 Apache Ambari 支持HDFS、MapReduce、Hive、Pig、Hbase、Zookeepr、Sqoop和Hcatalog等的集中管理。也是5...

    大数据处理工具Kafka的使用文档概述

    基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。 主要应用场景是:日志收集系统和消息...

    浅谈分布式消息技术:Kafka.docx

    Kafka的基本介绍 ...基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

    ambari-server-2.7.5.0-0.x86_64.rpm

    Ambari已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop和Hcatalog等。 Apache Ambari 支持HDFS、MapReduce、Hive、Pig、Hbase、Zookeepr、Sqoop和Hcatalog等的集中管理。也是5...

    Kafka学习笔记.pdf

    基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

    大数据私房菜_Kafka详解 (2021)

    pdf密码:dsjsfc ...基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

    浅谈分布式消息技术Kafka

    基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。主要应用场景是:日志收集系统和消息系统...

Global site tag (gtag.js) - Google Analytics