【Zookeeper】1.什么是Zookeeper

1.背景
随着互联网技术的高速发展,企业对计算机系统的计算,存储能力要求越来越高,最简单的证明就是出现了一些诸如:高并发,海量存储这样的词汇。在这样的背景下,单纯依靠少量高性能主机来完成计算任务已经不能满足企业的需求,企业的IT架构逐步从集中式向分布式过渡,所谓的分布式是指:把一个计算任务分解成若干个计算单元,并且分派到若干计算机中去执行,最后汇总结算结果的过程。

分布式系统需要解决的核心任务就是,如何把多个计算机协同起来完成一项任务。 好比公司的一个团队,接到公司派发的一个任务,首先团队的主管要把任务进行拆分,划分给不同的人去完成,并对随时跟进任务的进展。如果该主管离职了,我们就从团队的成员中推选一个对业务比较熟悉的人来接替。最后任务由团队的各个成员完成,由主管汇总,上报给公司。在团队内部,需要指定一个或多个工作流程,来确保任务的有序开展。

在分布式系统中,同样需要设计这样一个协作规范,而Zookeeper可以很好的帮我们实现这个目的。

2.Zookeeper介绍
Zookeeper是源代码开放的分布式协调服务,有雅虎创建,是Google Chubby的开源实现。Zookeeper是一个高性能的分布式数据一致性解决方案,它将复杂的、容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并提供一系列简单易用的接口给用户使用。

Zookeeper的特点如下:
(1)源代码开放

这就意味着,我么可以免费的获取和使用,并且可以深入研究其代码,甚至可以根据自己的业务进行改造。

(2)属于分布式协调服务,它解决分布式数据一致性问题
A.顺序一致性:从一个客户端发起一个客户请求,最终会严格按照其发起顺序,被应用到Zookeeper中去。

B.原子性:所有事务请求的处理结果,在整个集群上的所有机器上的应用情况是一致的。

C.单一视图:无论客户端连接到哪个Zookeeper的服务器,它看到的服务端数据都是一致的。

D.可靠性:一旦服务端成功的应用了一个事务,并完成了对客户端的响应,那么这个事务所引起的服务端状态的变更,会一直的保留下来,除非有另外一个事务又对它进行了修改。

E.实时性:Zookeeper保证在一段时间内,客户端最终一定会从服务端读取到最新的数据状态。

(3)高性能
Zookeeper具有很高的吞吐量,一个3台的Zookeeper集群,看可以达到12-13万的QPS(每秒查询率)。

(4)通过调用Zookeeper提供的接口来解决分布式应用中的实际问题

3.Zookeeper的典型应用场景
(1)数据发布/订阅
数据发布/订阅顾名思义就是一方把数据发布出来,另一方可以通过某种手段得到这些数据。
通常数据订阅有两种方式:推模式和拉模式,推模式一般是服务器主动向客户端推送信息,拉模式是客户端主动去服务器获取数据(通常是采用定时轮询的方式)。

Zookeeper采用两种方式相结合,发布者将数据发布到Zookeeper集群节点上,订阅者通过一定的方法告诉服务器,我对哪个节点的数据感兴趣,那服务器在这些节点的数据发生变化时,就通知客户端,客户端得到通知后可以去服务器获取数据信息。

(2)负载均衡
下面是一个数据库负载均衡的小例子:

Client是客户端,中间的是Zookeeper集群,后面3台是数据库服务器。
首先数据库在启动的时候,会在Zookeeper上注册一个临时节点(在服务不可访问时,会将节点删除)。客户端在需要读写数据库时,会在Zookeeper上得到所有数据库的连接信息,即可用的数据库连的列表。之后客户端采用随机的算法,随机的从数据库列表中选取一个数据库,并与该数据库建立连接。
既然是随机的,可能每次会与不同的数据库进行连接,这样就达成了一个简单的负载均衡。

(3)命名服务
顾名思义,就是提供名称的服务。例如数据库表格ID,一般用的比较多的有两种ID,一种是自增长的ID,一种是UUID。两种ID各自有缺陷,自动增长的ID局限在单库单表中使用,不能在分布式中使用;UUID可以在分布式中使用但是由于ID没有规律难于理解,我们可以借用Zookeeper来生成一个顺序增长的,可以在集群环境下使用的,命名易于理解的ID。

(4)分布式协调/通知
在分布式系统中,我们常常需要知道某个机器是否可用,传统的开发中,可以通过ping某个主机来实现。ping的通说明对方是可用的,相反是不可用的。Zookeeper中我们让所有的机器都注册一个临时节点(该节点会在服务不可访问时被去除),我们判断一个机器是否可用,我们只需要判断这个节点在Zookeeper中是否存在就可以了,不需要直接去连接需要检查的机器,降低系统的复杂度。

4.Zookeeper的优势
(1)源代码开放
可以免费的获取并使用。

(2)已经被证实是高性能,易用稳定的工业级产品

(3)有着广泛的应用
Zookeeper在Hadoop、HBase、Strom以及Solr中都有应用。

时间: 2024-11-05 12:14:15

【Zookeeper】1.什么是Zookeeper的相关文章

hadoop系列:zookeeper(3)——zookeeper核心原理(事件)

1.概述 上一篇文章,我们对zookeeper中的数据组织结构.Leader选举原理进行了讲述(http://blog.csdn.net/yinwenjie/article/details/47613309).这篇文章我们紧接上文讲解zookeeper中的事件机制.并通过示例代码告诉读者怎么使用zookeeper中的事件通知器:watcher. 2.zookeeper中的监听机制 按照上文中的讲解,我们知道zookeeper主要是为了统一分布式系统中各个节点的工作状态,在资源冲突的情况下协调提供

ZooKeeper学习第二期--ZooKeeper安装配置

一.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式. ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境:■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例:■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个"集合体"(ensemble) Zookeeper通过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,它就能够保证服务继续.为什么一定要超过半数呢?这

ZooKeeper学习第一期---Zookeeper简单介绍

该系列来源 http://www.cnblogs.com/wuxl360/p/5817471.html 一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术--分布式协调技术.那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术 主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成"脏数据"的后果.这时,有人可能会说这个简单,写一个调 度算法就轻松解决了.说这句话的人,可能对分布式系统不是很了解,所以才会出现这种误

ZooKeeper系列之二:Zookeeper常用命令

ZooKeeper系列之二:Zookeeper常用命令 http://blog.csdn.net/xiaolang85/article/details/13021339 ZooKeeper服务命令: 在准备好相应的配置之后,可以直接通过zkServer.sh 这个脚本进行服务的相关操作 1. 启动ZK服务:       sh bin/zkServer.sh start 2. 查看ZK服务状态: sh bin/zkServer.sh status 3. 停止ZK服务:       sh bin/z

ZooKeeper系列3:ZooKeeper命令、命令行工具及简单操作

问题导读1.ZooKeeper包含哪些常用命令?2.通过什么命令可以列出服务器 watch 的详细信息?3.ZooKeeper包含哪些操作?4.ZooKeeper如何创建zookeeper? 常用命令 ZooKeeper 支持某些特定的四字命令字母与其的交互.它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息.用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令. ZooKeeper 常用四字命令见下表 1 所示: 表 1 : ZooKee

ZooKeeper系列1:ZooKeeper的配置

问题导读:1.zookeeper有哪些配置文件?2.zookeeper最低配置需要哪些配置项?3.zookeeper高级配置需要配置哪些项? ZooKeeper 的功能特性通过 ZooKeeper 配置文件来进行控制管理( zoo.cfg 配置文件). ZooKeeper 这样的设计其实是有它自身的原因的.通过前面对 ZooKeeper 的配置可以看出,对 ZooKeeper 集群进行配置的时候,它的配置文档是完全相同的(对于集群伪分布模式来说,只有很少的部分是不同的).这样的配置方使得在部署Z

ZooKeeper系列4:ZooKeeper API简介及编程

问题导读: 1.ZooKeeper API 共包含几个包? 2.如何使用ZooKeeper API 创建zookeeper应用程序? 1)ZooKeeper API 简介 ZooKeeper API 共包含 5 个包,分别为: org.apache.zookeeper , org.apache.zookeeper.data ,org.apache.zookeeper.server , org.apache.zookeeper.server.quorum 和org.apache.zookeeper

zookeeper适用场景:zookeeper解决了哪些问题

问题导读:1.master挂机,传统做法备份必然是以前数据,该如何保证挂机数据与备份数据一致?2.分布式系统如何实现对同一资源的访问,保证数据的强一致性?3.集群中的worker挂了,传统做法是什么?zookeeper又是如何做的? 分布式系统的运行是很复杂的,因为涉及到了网络通信还有节点失效等不可控的情况.下面介绍在最传统的master-workers模型,主要可以会遇到什么问题,传统方法是怎么解决以及怎么用zookeeper解决. Master节点管理集群当中最重要的是Master,所以一般

ZooKeeper学习第三期---Zookeeper命令操作

转:http://www.cnblogs.com/sunddenly/p/4031881.html 一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息.用户在客户端可以通过telnet或nc向Zookeeper提交相应的命令.Zookeeper常用的四字命令见下图所示. 上图,是Zookeeper四字命令的一个简单用例. [[email protected] ~]# echo ruok

zookeeper系列之二—zookeeper历史

Zookeeper是什么? Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby的一个开源版本.它是为分布式应用提供一致性服务的软件,提供的功能包括:配置服务.命名服务.分布式同步.组服务等. Zookeeper目标? Zookeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效.功能稳定的系统提供给用户. Zookeeper原理? Zookeeper是以Fast Paxos算法为基础的,paxos算法存在活锁的问题,即当有多个p