文章目录
1:Zookerper官方网站
2:Zookeeper是什么
ZooKeeper 是分布式应用程序的分布式开源协调服务。它公开了一组简单的原语,分布式应用程序可以基于这些原语实现更高级别的同步、配置维护、组和命名服务。它被设计为易于编程,并使用一种数据模型,该模型以熟悉的文件系统目录树结构为样式。它在 Java 中运行,并具有 Java 和 C 的绑定。
众所周知,协调服务很难做好。它们特别容易出现竞争条件和死锁等错误。ZooKeeper 背后的动机是减轻分布式应用程序从头开始实现协调服务的责任。
3:Zookerper的工作机制
ZooKeeper 允许分布式进程通过共享的分层命名空间相互协调,该命名空间的组织方式类似于标准文件系统。命名空间由数据寄存器组成——在 ZooKeeper 用语中称为 znodes——它们类似于文件和目录。与为存储而设计的典型文件系统不同,ZooKeeper 数据保存在内存中,这意味着 ZooKeeper 可以实现高吞吐量和低延迟数字。
但是为了更高的可用性,建议Zookeeper单节点的数据不超过1M;
4:Zookeeper的特点
1:官网给出的zookeeper的特征/保障
ZooKeeper 非常快速且非常简单。但是,由于它的目标是成为构建更复杂服务(例如同步)的基础,因此它提供了一组保证。这些都是:
- 顺序一致性 - 来自客户端的更新将按照它们发送的顺序应用。
- 原子性 - 更新成功或失败。没有部分结果。
- 单一系统映像 - 客户端将看到相同的服务视图,而不管它连接到的服务器如何。即,即使客户端故障转* 移到具有相同会话的不同服务器,客户端也永远不会看到系统的旧视图。
- 可靠性 - 应用更新后,它将从那时起持续存在,直到客户端覆盖更新。
- 及时性——系统的客户视图保证在一定的时间范围内是最新的。
2:总结zookeeper的特点
分析:
1:如果zk是只有1个leader,那么leader是单节点的。他肯定会挂
2:如果leader挂了,那么zk就是不可靠的集群,但是呢zk是高可用的,所有一定有一个机制会快速推举新的leader
3:zk一共有两种状态,可用和不可用,不可应恢复到可用必须很快,才是高可用的(这个时间能配置,后续说明)
4:只有主节点可以写,其他节点只能读。所以必须保证主节点和跟随者数据一致
总结:
1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。
3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
4)更新请求顺序进行,来自同一个Client的更新请求按其发送顺序依次执行。
5)数据更新原子性,一次数据更新要么成功,要么失败。
6)实时性,在一定时间范围内,Client能读到最新数据。
注:附上一张zk官网给出的当leader挂掉之后选举的时间图,很快。
5:数据结构
ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一
个ZNode。每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。
- 而且zk还有虚拟节点的概念,即此节点跟客户端A的session关联。当客户端A断开时,虚拟节点自动取消
- 因为zk时类似文件系统,所以有父节点和子节点的概念
6:Zookeeper的应用场景
提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下
线、软负载均衡等。
1:统一命名服务
在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。
例如:IP不容易记住,而域名容易记住。