ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。ZooKeeper其他的使用方法:配置维护、组服务、分布式消息队列、分布式通知/协调等。
在我们的项目中Zookeeper作为服务注册中心,他的主要任务是负责地址的注册以及查找,相当于一个服务目录,服务的提供者与服务的消费者只在启动时与注册中心进行交互,注册中心也不会转发请求,所以相对而言压力较小。
- Znode结构
Znode结构兼具了文件和目录两种特点,既可以保存数据、维护数据,又可以向目录一样作为路径表示的一部分。Znode主要是由3个部分组成:
- Stat:这个表示状态信息,用于描述这个Znode的版本、权限等信息
- Data:这个表示与当前Znode相关联的数据
- Children:这个表示当前Znode下的子节点
ZooKeeper中的节点有两种,分别为临时节点和永久节点。节点的类型在创建时即被确定,并且不能改变。
- 临时节点:临时节点的生命周期依赖于创建它们的会话。一旦会话(Session)结束,临时节点将被自动删除,当然可以也可以手动删除。虽然每个临时的Znode都会绑定到一个客户端会话,但他们对所有的客户端还是可见的。另外,ZooKeeper的临时节点不允许拥有子节点。
- 永久节点:永久节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,他们才能被删除。
ZooKeeper虽然可以关联一些数据,但并没有被设计为常规的数据库或者大数据存储,相反的是,它用来管理调度数据,比如分布式应用中的配置文件信息、状态信息、汇集位置等等。这些数据的共同特性就是它们都是很小的数据,通常以KB为大小单位。ZooKeeper的服务器和客户端都被设计为严格检查并限制每个Znode的数据大小至多1M,但常规使用中应该远小于此值。