Zookeeper入门

来源:互联网 发布:淘宝怎么开零食店 编辑:程序博客网 时间:2024/06/05 17:45

1.什么是zookeeper?

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

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


它有以下特点:

   顺序一致性:从客户端发起的事务请求,最终将严格的按照其发起的顺序应用到zookeeper中去。

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

   单一视图:无论客户端连接的是哪个zookeeper服务器,其看到的服务端数据模型都是一致的。

   可靠性:一旦服务器成功的应用了某个事务,并完成了对客户端的响应,那么该事务所引起的服务端状态将会一致性的保留下来。除非有另一个事务对其改变。

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


注意:官方推荐部署奇数个节点。


zookeeper设计目标

1.简单的数据结构。zookeeper就是以简单的树形结构来进行相互协调的。

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

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

4.高性能。由于zookeeper将全量数据存储在内存中,并直接服务于所有的非事务请求,因此在读场景的性能特别突出。在JMATER测试下(百分之百读请求场景),其结果大约在12w-13wQPS。


zookeeper的数据结构



zookeeper测数据模型

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

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

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

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

5.znode的目录名可以自动编号,如app1已经存在,再创建的话,将会自动命名app2.

6.znode可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是zookeeper的核心特性,zookeeper的很多功能都是基于这个特性实现的。


zookeeper的组成

ZK server根据其身份特性分为三种leader、Follower、Observer,其中FollowerheObserver又统称为Learner学习者。

Leader:负责客户端的写请求。

Follower;负责客户端的读请求,参与leader选举等。

Observer:特殊的Follower,其可以接受客户端的leader请求,但不参与选举。主要是用来扩容系统支撑力,提高了读取速度。因为它不接受任何同步的写入请求,只负责与leader同步数据。



典型的应用场景

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

具体场景:

配置管理

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

数据量比较小

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

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


集群管理

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

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

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

3.对集群中每台机器进行上下线操作


发布与订阅

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


数据库切换

比如我们初始化zookeeper的时候读取其节点上的数据库配置文件,当配置一旦发生变更时,zookeeper就能帮助我们把变更的通知发送到各个客户端,每个客户端接收到这个变更通知后就可以从zookeeper、获取最新数据。


分布式日志收集

我们可以做一个日志系统收集集群中的所有的日志信息,进行统一管理。


分布式锁、队列管理等等。

zookeeper的特性就是在分布式场景下高可用,但是原生的api实现分布式功能非常困难,团队去实现也太浪费时间,及时实现了也未必稳定。那么采用第三方的客户端可以完美实现,比如Curator框架,它是apache的顶级项目。




0 0
原创粉丝点击