zookeeper
# 是什么
zookeeper是由雅虎创建的一个开源的分布式协调服务, 它是一个典型的分布式数据一致性解决方案, 分布式程序可以基于它实现入数据发布/订阅、负载均衡、命名服务、集群管理、master选举、分布式锁/列队等功能
# 特性
# 保证分布式的一致性
- 顺序一致性
- 从同一个客户端发起的事物请求,最终会严格的按照其发起顺序被应用到zookeeper中
- 原子性
- zookeeper中所有的事物请求具有原子性
- 单一视图
- 客户端无论链接哪个zookeeper服务,看到的数据都是一致的
- 可靠性
- 实时性
- zookeeper仅仅能在一定的时间内客户端最终一定能够从服务器上读取到最新的数据
# 可以构建集群
一般3-5台机器就可以组成一个可用zookeeper集群,每台机器都会维护当前的服务状态, 并且每台机器之间都互相保持着通信, 只要集群中超过一般的机器能够正常工作, 那么整个集群就能正常对外服务
# 顺序访问
对于客户端的每个更新请求, zookeeper都会分配全局唯一的递增编号, 这个编号反映了所有实务操作的先后顺序
# 高性能
由于zookeeper将全量数据存储在内存中, 并直接服务于客户端的所有非事物请求, 因此它尤其适用于以读操作为主的应用场景
# 基本概念
在在分布式系统中, 构成集群的每一台机器都有自己的角色. zookeeper引入了 leader
(领导)、follower
(跟随者) 和 observer
(观察者)三种角色. zookeeper集群中的所有机器通过一个leader选举过程来选定一台leader机器, leader服务器为客户端提供读和写服务. 除leader外, 其他机器也可以额为客户端提供读和写服务.唯一的区别在于:observer机器不能参与leader选举的过程, 也不参与写操作的过半写成功
策略, 因此observer可以在不影响写性能的情况下提升集群的读性能
数据节点(znode)
zookeeper中的节点分为两类, 第一类指的是构成集群的机器, 我们称之为机器节点;第二类则是指数据莫O型中的数据单元, 我们诚挚为数据节点(znode)/ zookeeper将所有数据存储在内存中, 数据模型是一棵树(zNode tree), 由斜杠/隽星分隔的路径就是一个znode.每个znode上都会保存自己的数据内容,同事还会保存一系列属性信息
znode分为持久节点和临时节点两类.
- 持久节点: 一旦这个znode被创建了, 除非主动进行znode移除操作, 否则这个znode将会一直保存在zookeeper上
- 临时节点: 声明周期和客户端会话绑定, 一旦客户端会话失效,那么这个客户端创建的所有临时节点都会被移除.
事件监听器(watcher)
watcher是zookeeper中的一个很重要的特性. zookeeper允许用户在指定节点上注册一些watcher, 并且在一些特定的事件触发的时候,zookeeper服务端会将时间通知到感兴趣的客户端
acl
zookeeper采用acl(access control lists)策略来进行权限控制, 类似于unix的权限控制