Zookeeper是什么
-
Zookeeper是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于它实现包括发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。
-
Zookeeper可以保证如下分布式一致性:
- 顺序一致性
从同一个客户端发起的事务请求,最终会严格地按照其发起顺序被应用到Zookeeper中去。(主要是写操作的严格顺序性)
- 原子性
所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致地,也就是说,要么整个集群所有机器都成功应用了某一个事务,要么都没有应用。
- 单一视图
无论客户端连接的是哪个Zookeeper服务器,其看到的服务端数据模型都是一致的。
- 可靠性
一旦服务端成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会被一直保留下来,除非有另一个事务又对其进行了变更。
- 实时性
Zookeeper保证一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态。
- Zookeeper的高性能使其能够应用于那些对系统吞吐由明确要求的系统,高可用使得分布式的单点问题得到了解决。
Zookeeper的基本概念
集群角色
-
Leader: 通过Zookeeper集群leader选举被选定的一台机器,Leader服务器为客户端提供读和写服务。
-
Follower: 提供读服务,能够参加Leader选举。
-
Obserber: 提供读服务,不能参加Leader选举。作用是在不影响系统写性能的同时能够增加读性能。
会话 (Session)
- Session指客户端会话。客户端启动时,会与Zookeeper服务器建立一个TCP连接,通过这个连接,客户端能通过心跳检测与服务器保持有效的会话,也能够向服务器发送请求并接受响应,还能通过该连接收到来自服务器的Watch事件通知。
- 当客户端因为各种原因与服务器断开连接时,只要在sessionTimeout事间内重新连接上集群中任意一台服务器,那么之前的session仍有效。
数据节点(ZNode)
-
Zookeeper的数据模型类似于一个文件系统,是一个树型结构,由多个被称为ZNode的数据节点组成。
-
每个ZNode对应一个唯一路径,通过路径来标识节点,如/app1/p_1。每个ZNode上都会保存自己的数据内容,同时保存一系列属性信息。
ZNode path.jpg -
Zookeeper将全量数据存储在内存中,以此来提高服务器吞吐、减少延迟。
-
Znode节点分为持久节点和临时节点:
-
持久节点:ZNode被创建后,除非主动删除ZNOde,否则它一直保存在Zookeeper上
-
临时节点:生命周期与客户端会话绑定,一旦客户端会话失效,这个客户端创建的所有临时节点都会被移除。
- Zookeeper还允许用户为每个节点添加一个Sequential属性。当节点被标记上该属性,在这个节点被创建的时候,Zookeeper会在节点名上追加一个整形数字,这个数字是一个由父节点维护的自增数字。
版本
- Zookeeper会为每个ZNode维护一个叫做Stat的数据结构,它记录了ZNode的version(当前ZNode的版本),cversion(当前ZNode子节点的版本)和aversion(当前ZNode的ACL版本)。
Watcher
- Zookeeper允许用户在指定节点上注册一些Watcher,并在一些特定事件触发的时候,Zookeeper服务端会将事件通知到感兴趣的客户端。
ACL
- Zookeeper采用ACL(Access Control Lists)策略来进行权限控制。定义了如下5种权限:
-
CREATE:创建子节点的权限
-
READ:获取节点数据和子节点列表的权限
-
WRITE:更新节点数据的权限
-
DELETE:删除子节点的权限
5:ADMIN:设置节点ACL的权限
网友评论