【深入浅出zookeeper】——认识Zookeeper

    本文主要介绍zookeeper中涉及到一些简单概念和zookeeper用到ZAB算法。

Zookeeper是什么

     Zookeeper是一个开源的分布式协调服务,为分布式应用提供了高效且可靠的分布式协调服务,提供了统一命名服务,配置管理和分布式锁等分布式的基础概念。

Zookeeper设计目标

    Zookeeper致力于提供一个高可靠,高性能,并且具有严格的顺序访问控制能力(写操作)的分布式协调服务。这些都得利于Zookeeper设计目标

1、简单的数据模型

 zookeeper使得分布式程序通过共享一个树形结构的命名空间来相互协调。zookeeper中数据节点被称为ZNode。

2、可以构建集群

    集群最少3(2N+1)台,保证奇数,这样主要是为了选举算法

    集群搭建流程详见【Linux环境搭建】——zookeeper集群

    组成集群的每台机器都会在内存中维护当前的服务器状态,并且每台机器之间都互相保持着通信,而且只要集群中超过一半的机器能够正常工作,那么整个集群就能够正常对外服务(过半原则)

3、顺序访问

    对于客户端的每一个更新请求,Zookeeper都会分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序。

4、高性能

    Zookeeper将全量数据存储在内存中,直接服务客户端的所有非事务请求,以此来提供服务器吞吐,减少延迟的目标,因此尤为适合以读操作为主的应用场景。

Zookeeper作用

1、数据发布/订阅

2、负载均衡

3、命名服务

4、分布式协调/通知

5、集群管理

6、Master选举

7、分布式锁

8、分布式队列

为何用Zookeeper

Zookeeper是典型的分布式数据一致性解决方案,它能保证一致性的原因是因为它有以下特性

1、顺序一致性

同一个客户端发出的事务请求,最终会严格按照其发起顺序被应用到Zookeeper中。

2、原子性

    所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,即不会出现集中一部分的机器应用了事务,另一部分没有应用的情况

3、单一视图

    集群中任意一个zookeeper服务器,看到的服务端数据模型都是一致的

4、可靠性

    服务器端应用了一个事务,并且完成对客户端的响应,那么该事务引起的服务端状态会被永久保留,除非被其他的事务修改

5、实时性

    一旦一个事务被成功应用,zookeeper能保证在一定的时间段内,客户端最终一定能从服务器端读到最新的数据状态

Zookeeper中基本概念

集群角色

    Zookeeper中提供Leader,Follower,Observer三种角色。集群中所有机器通过一个Leader选举选定一个台作为Leader机器,Leader服务器为客户端提供读和写服务。Follower和Observer都能提供读服务,唯一区别,Observer机器不参与Leader选举操作,以及写操作的过半成功策略,因此Observer可以在不影响写性能的情况下提升集群的读性能。

会话(Session客户端会话)

    Zookeeper中客户端连接指:客户端和服务器之间的一个TCP长连接。zk对外的服务器端口默认为2181,当客户端启动的时候,会和服务建立一个TCP连接,此时Session会话生命周期开始,客户端能够通过心跳检测与服务器保持有效会话,也能够向zookeeper服务器发送请求并接受响应,同时还能通过该连接接收来自服务器的Watch事件通知。为了避免服务器压力过大,网络故障,或者客户端主动端口连接等各种原因导致客户端连接断开时,Session提供sessionTimeout值用来设置客户端会话超时时间,只要在sessionTimeout规定的时间内能够重新连接上集群中任意一台服务器,那么之前创建的会话仍然有效。

ps:利用会话和临时节点可以达到分布式锁的目的

数据节点(ZNode)

Zookeeper中节点分为两类,一类是指构成集群的机器,称为机器节点。另一类指数据模型中的数据单元,即数据节点ZNode。ZNode分为持久节点和临时节点。持久节点指一旦ZNode被创建了,除非主动进行ZNode的移除操作,否则这个ZNode将一直保存在Zookeeper中。临时节点的生命周期和客户端会话绑定,一旦客户端会话失效,那么这个客户端创建的临时节点都会被移除。

版本

   对于每个ZNode,zookeeper都会为其维护一个Stat的数据结构,Stat中记录了ZNode的三个数据版本,分别为version(当前ZNode的版本),cversion(当前ZNode子节点的版本)和aversion(当前ZNode的ACL版本)

Watcher(事件监听器)

    Zookeeper允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,Zookeeper服务端会将事件通知到感兴趣的客户端上,该机制是Zookeeper实现分布式协调服务的重要特性。

ACL

zookeeper采用ACL策略来进行权限控制,一般生产环境都会用ACL策略来控制

CREATE                 创建字节点的权限
READ 获取节点数据和子节点列表的权限
WRITE 更新节点数据的权限
DELETE 删除子节点的权限
ADMIN 设置节点ACL的权限

总结

    主要是介绍Zookeeper特性以及基础概念,目的为之后的深入做铺垫!

猜你喜欢

转载自blog.csdn.net/jiadajing267/article/details/81051621