ZooKeeper介绍
ZooKeeper
是一个为 分布式应用 提供的 分布式 、开源的 协调服务 。
它公开了一组简单的 原语
,分布式应用程序可以根据这些原语来实现用于 同步 、配置维护 以及 命名 的更高级别的服务。
怎么理解协调服务呢?比如我们有很多应用程序,他们之间都需要读写维护一个 id ,那么这些 id 怎么命名呢,程序一多,必然会乱套,ZooKeeper
能协调这些服务,解决命名、配置、同步等问题,而做到这些,只需要一组简单的 原语
即可:
create : 在树中的某个位置创建一个节点
delete : 删除一个节点
exists : 测试节点是否存在于某个位置
get data : 从节点读取数据
set data : 往一个节点里写入数据
get children : 检索节点的子节点列表
sync : 等待数据被传播
复制代码
从这些 ZooKeeper
(以下简称ZK)的 API 可以看到,都是围绕 Node 来操作,下文实操看一下怎么操作 Node 。
ZooKeeper 的特征
- 简单
ZooKeeper
允许分布式进程通过 共享的层级命名空间 相互协调,该命名空间的组织类似于标准文件系统。
命名空间由 数据寄存器
组成,在 ZooKeeper
称为 znodes ,它们类似于文件和目录。
与典型的文件系统不同,它是为 存储 而设计的,ZooKeeper
数据保存在 内存 中,这意味着ZooKeeper
可以实现 高吞吐量 和 低延迟数 。
ZooKeeper
很重视 高性能,高可用性 ,严格有序访问 :性能高意味着它可以在大型分布式系统中使用;而他又具备可靠性,这使它不会成为单点故障;严格的排序意味着可以在客户端上实现复杂的同步原语。
- 可被复制(高可用)
像它协调的分布式进程一样,ZooKeeper
本身也可以在称为集合的一组主机上进行复制。
组成ZooKeeper
服务的服务器都必须彼此了解。它们维护内存中的状态镜像,以及持久存储中的事务日志和快照。只要大多数服务器可用,ZooKeeper
服务将可用。
客户端连接到单个 ZooKeeper
服务器。客户端维护一个 TCP连接
,通过该连接发送请求,获取响应,获取监视事件并发送心跳。如果与服务器的 TCP连接
断开,则客户端将连接到其他服务器。
- 有序的
ZooKeeper
用一个反映所有 ZooKeeper
事务顺序 的数字标记每个更新。后续操作可以使用该命令来实现更高级别的抽象,例如 同步 、 分布式锁 。
- 快
在 读取为主 的工作负载中,它特别快。
ZooKeeper
应用程序可在数千台计算机上运行,并且在读取比写入更常见的情况下,其性能最佳,比率约为10:1。
分层命名空间
ZooKeeper提供的名称空间与标准文件系统的名称空间非常相似。
名称是由 斜杠 (/
)分隔的一系列路径元素。