Zookeeper(一)简介说明

1.1 什么是Zookeeper?

Zookeeper是一个高效的分布式协调服务,它暴露了一些公用服务,比如命名/配置管理/同步控制/群组服务等。我们可以使用ZK来实现比如达成共识/集群管理/leader选举等。

Zookeeper是一个高可用的分布式管理与协调框架,基于ZAB算法(原子消息广播协议)的实现。该框架能够很好地保证分布式环境中数据的一致性。也正是基于这样的特效,使得Zookeeper成为了解决分布式一致性问题的利器。

顺序一致性:

从一个客户端发起的事物请求,最终将会严格地按照其发起的顺序被应用到zookeeper中去。

原子性:

所有事物请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群所在的机器都成功应用了某一事务,要么没有应用,一定不会出现部分机器应用了该事务,而另一部分没有应用的情况。

可靠性:

一旦服务器成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态就会被一致保留下来。除非有另外一个事务对其更改。

实时性:

通常所说的实时性就是指一旦事务被成功应用,那么客户端就能立刻从服务器上获取变更后的新数据,zookeeper仅仅能保证在一段时间内,客户端最终一定能从服务器端读取最新的数据状态。

1.2 Zookeeper设计目标

目标1:简单的数据结构。

zookeeper就是以简单的树形结构来进行相互协调的(也叫树形名字空间)。

目标2:可以构建集群。

一般zookeeper集群通常由一组机器构成,一般3-5台机器就可以组成一个zookeeper集群了。只要集群中超过半数以上的机器能够正常工作,那么整个集群就能够正常对外提供服务。

目标3:顺序访问。

对于来自每一个客户端的每一个请求,zookeeper都会分配一个全局唯一的递增编号,这个编号反应了所有事物操作的先后顺序,应用程序可以使用zookeeper的这个特性来实现更高层次的同步。

目标4:高性能。

由于zookeeper将全量数据存储在内存中,并直接服务与所有非事物请求,因此尤其是在毒操作为主的场景下性能非常突出。在JMeter压力测试下(100%读请求场景下),其结果大约在12-13W的QPS。

1.3 Zookeeper的结构

Zookeeper会维护一个具有层次关系的数据结构,它非常类似一个标准的文件系统。

1.4 Zookeeper的数据模型

(一). 每个子目录项如NameService都被称作为znode,这个znode是被它所在的路径唯一标识,如Server1这个znode的标识为/NameService/Server1

(二).znode可以有子节点目录,并且每个znode可以存储数据,注意Ephemeral类型的目录节点不能有子节点。

(三).znode是有版本的,每个znode中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据。

(四).znode可以是临时节点,一旦创建这个znode的客户端与服务器失去联系,这个znode也将自动删除,Zookeeper的客户端和服务器通讯采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态也称为session,如果znode是临时节点,这个session失效,znode也就删除了。

(五).znode的目录名可以自动编号,如App1已经存在,再创建的话,将会自动创建App2。

(六).znode可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是Zookeeper的核心特性。

Zookeeper的很多功能都是基于这个特性来实现,后面在典型的应用场景中会有实例介绍。

1.5 Zookeeper的组成

ZK server根据其身份特性分为三种:Leader,Follower,Observer,其中Follower和Observer又统称为Learner(学习者)。

Leader:负责客户端的writer类型请求

Follower:负责客户端的reader类型请求,参与Leader选举等。

Observer:特殊的“Follower”,其可以接受客户端的reader请求,单不参与选举。

(扩容系统支撑能力,提高了读取速度。因为它不接受任何同步的写入请求,只负责与leader同步数据)

1.6 Zookeeper应用场景

 典型应用场景

Zookeeper从设计模式角度来看,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应,从而实现集群中类似Master/Slave管理模式。

(一) 配置管理

配置的管理在分布式应用环境中很常见,比如我们在平常的应用系统中,经常会碰到这样的需求:如机器的配置列表,运行时的开关配置,数据库配置信息等。这些全局配置信息通常具备以下3个特性:

1 数据量比较小

2 数据内容在运行时动态发生变化

3 集群中各个集群共享信息,配置一致。

(二 )集群管理

Zookeeper 不仅能够帮你维护当前集群中机器的服务状态,而且能够帮你选出一个“总管”,让这个总管来管理集群,这就是Zookeeper的另一个功能Leader,并实现集群容错功能。

1 希望知道当前集群中究竟有多少机器工作。

2 对集群中每天集群的运行时状态进行数据收集。

3 对集群中每台集群进行上下线操作。

(三) 发布与订阅

Zookeeper是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布和订阅。

(四 数据库切换

(五) 分布式日志的收集

(六) 分布式锁,队列管理等等

1.7 Zookeeper开源框架使用

zookeeper使用场景非常广泛:

如Hadoop,Storm,消息中间件,RPC服务框架,数据库增量订阅与消费组件(Mysql Binlog),分布式数据库同步系统,淘宝的Otter。

所以我们有必要学好zookeeper!

Zookeeper简介说明的更多相关文章

  1. ZooKeeper简介

    本文中,我们将对ZooKeeper进行介绍.简单地说,ZooKeeper是一个用来在构成应用的各个子服务之间进行协调的一个服务. 由于其本身并没有特别复杂的机制,因此我们将会把更多的笔墨集中在如何对Z ...

  2. Zookeeper简介与安装

    Zookeeper:A Distributed Coordination Service for Distributed Applications. 一.Zookeeper简介 众所周知,协同服务是分 ...

  3. Zookeeper简介与集群搭建

    Zookeeper简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少 ...

  4. Zookeeper简介与集群搭建【转】

    Zookeeper简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少 ...

  5. Zookeeper简介及单机、集群模式搭建

    1.zookeeper简介 一个开源的分布式的,为分布式应用提供协调服务的apache项目. 提供一个简单的原语集合,以便于分布式应用可以在它之上构建更高层次的同步服务. 设计非常易于编程,它使用的是 ...

  6. Zookeeper简介及使用

    一.Zookeeper简介 1.zookeeper简介 动物管理员 Apache ZooKeeper致力于开发和维护开源服务器,实现高度可靠的分布式协调. 2.什么是ZooKeeper? ZooKee ...

  7. ZooKeeper学习之路(一)—— ZooKeeper简介及核心概念

    一.Zookeeper简介 Zookeeper是一个开源的分布式协调服务,目前由Apache进行维护.Zookeeper可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调/通知. ...

  8. ZooKeeper系列(一)—— ZooKeeper 简介及核心概念

    一.Zookeeper简介 Zookeeper 是一个开源的分布式协调服务,目前由 Apache 进行维护.Zookeeper 可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调 ...

  9. Zookeeper简介及安装(一)

    1 Zookeeper入门1.1 概述Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. 1.2 特点 1.3 数据结构 1.4 应用场景提供的服务包括:统一命名服务 ...

  10. 第1章 分布式系统概念与ZooKeeper简介

    ZooKeeper分布式专题与Dubbo微服务入门 第1章 分布式系统概念与ZooKeeper简介 1-1 zookeeper简介 1-2 什么是分布式系统 略 1-3 分布式系统的瓶颈以及zk的相关 ...

随机推荐

  1. 解决报错SAXNotRecognizedException: Feature 'http://javax.xml.XMLConstants/feature/secure-processing' not recognized

    今天调试appium脚本,发现运行脚本就报错 SAXNotRecognizedException: Feature 'http://javax.xml.XMLConstants/feature/sec ...

  2. 目标检测--Spatial pyramid pooling in deep convolutional networks for visual recognition(PAMI, 2015)

    Spatial pyramid pooling in deep convolutional networks for visual recognition 作者: Kaiming He, Xiangy ...

  3. java控制语句 if-else while do-while for return break continue goto switch default

    if for //: object/ForEachFloat.java package object; import java.util.Random; public class ForEachFlo ...

  4. Django整合Keras报错:ValueError: Tensor Tensor("Placeholder:0", shape=(3, 3, 1, 32), dtype=float32) is not an element of this graph.解决方法

    本人在写Django RESful API时,碰到一个难题,老出现,整合Keras,报如下错误:很纠结,探索找资料近一个星期,皇天不负有心人,解决了 Internal Server Error: /p ...

  5. Intellij IDEA配置tomcat热部署

    idea2017+tomcat8为本文的实验环境 1.打开tomcat的edit configuration,一定要选择war exploded  在idea tomcat 中server的配置里,有 ...

  6. python 全栈开发,Day88(csrf_exempt,ES6 快速入门,Vue)

    BBS项目内容回顾 1. 登陆页面 1. 验证码 1. PIL(Pillow) 2. io 2. ORM 1. 增删改查 3. AJAX $.ajax({ url: '', type: '', dat ...

  7. python 全栈开发,Day56(jQuery的ajax)

    昨日内容回顾 事件流: 1.事件捕获 从最外层到最内层 2.事件目标阶段 3.事件冒泡 从最内层到最外层 每个事件都会事件对象 event 属性和方法 属性: event.target 目标节点(冒泡 ...

  8. SpringMVC集成springfox-swagger2自动生成接口文档

    本节内容: 什么是Swaggger Springfox与Swagger的关系 SpringMVC集成springfox-swagger2 一.什么是Swaggger Swagger是一个流行的API开 ...

  9. hdu 1072 有炸弹的迷宫 (DFS)

    题意:在n×m的地图上,0表示墙,1表示空地,2表示人,3表示目的地,4表示有定时炸弹重启器.定时炸弹的时间是6,人走一步所需要的时间是1.每次可以上.下.左.右移动一格.当人走到4时如果炸弹的时间不 ...

  10. ELK - MAC环境搭建

    ELK - MAC环境搭建 本文旨在记录elasticsearch.logstash.kibana在mac下的安装与启动. 写在前面 ELK的官方文档对与它们的使用方法已经讲的非常清楚了,这里只对相关 ...