Zookeeper的功能
1、Zookeeper是什么
Zookeeper是一个分布式,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态,根据节点提交的反馈进行下一步的合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。
Zookeeper提供了什么
- 文件系统
- 通知机制
文件系统
每个子目录项如 NameService 都被称作为znode,和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。
- PERSISTENT-持久化目录节点,客户端与Zookeeper断开连接后,该节点依然存在。
- PERSISTENT_SEQUENTIAL持久化顺序编号目录节点,断开连接后,节点依旧存在,只是Zookeeper给该节点进行顺序编号。
- EPHEMERAL-临时目录节点,断开连接后,该节点被删除。
- EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点,断开连接后,只是Zookeeper给该节点进行顺序编号。
Zookeeper的通知机制
客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,Zookeeper会通知客户端。
Zookeeper做了什么
- 命名服务(创建目录,唯一的path)
- 配置管理
- 集群管理
- 分布式锁
- 队列管理
配置管理
程序总是需要配置的,如果程序分散部署在多台机器上,要逐个改变配置就变得困难。现在把这些配置全部放到zookeeper上去,保存在 Zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中。
集群管理
- 是否有机器退出和加入、选举master。
设计目的
1.最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。
2.可靠性:具有简单、健壮、良好的性能,如果消息被到一台服务器接受,那么它将被所有的服务器接受。
3.实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。
4.等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。
5.原子性:更新只能成功或者失败,没有中间状态。
6.顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。