zookeeper
https://www.cnblogs.com/felixzh/p/5869212.html
https://www.w3cschool.cn/zookeeper/zookeeper_overview.html
一、zookeeper定义
zookeeper是一个针对大型分布式系统的可靠协调系统。
1.1 它的功能包括:配置维护,名字服务,分布式同步、组服务等。
1.2 它的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
二、zookeeper的特点
1、 最终一致性:为客户端展示同一视图。
2、可靠性:如果一条消息被一台服务器接受,那么它将被所有服务器接受。
3、实时性:zookeeper不能保证两个客户端同事得到刚刚更新的数据,如果需要更新数据,应该在读数据之前调用sync()接口。
4、等待无关(wait-free):慢的或者失效的client不干预快速的client的请求。
5、原子性:更新操作要么成功,要么失败,没有中间状态。
6、顺序性:对于所有server,同一消息发布顺序一致。
三、zookeeper角色
四、leader选举
1、leader选举采用paxos协议
2、paxos核心思想是:当多数server写成功,那么数据则写入成功。
如果有3个服务器,那么有两个写入成功,则数据写入成功。
如果有4个或者5个服务器,有3个写成功,则数据写成功。
3、server数量一般为奇数,如3、5、7等。
如果有3个服务器,最多允许1个挂掉。
如果有4个服务器,最多同样允许3个挂掉。
4、zookeeper 的写入操作。
五、zookeeper数据模型。
1、zookeeper 提供一个层次化目录结构,命名规范符合常规linux文件目录命名规范。
2、每个节点在zookeeper中叫做znode,并且有一个唯一的路径标识。
3、znode有两种数据结构,短暂的(ephemeral)和持久的(persistent),节点包含数据和子节点。
4、znode数据包含多个版本。
5、客户端可以在节点上设置监视器(watch)。
6、znode不支持部分读写,需要一次性全部执行完成。
7、znode类型在创建时确定,并不能修改。
8、znode有四种类型目录节点,persistent, persistent_sequential, ephemeal, ephemeal_sequential
六、zookeeper统一命名服务。
1、在分布式环境下,经常需要对应用/服务统一命名,便于识别不通服务。
1.1 类似于ip和域名的关系。
1.2 通过名称来获取资源或者服务的地址信息。
2 按照层次组织服务/应用名称。
2.1 它可以将服务名称以及地址名称写到zookeeper中,客户端通过服务名称获取服务列表。、
七、zookeeper--配置管理。
1、 分布式环境下,需要经常配置文件管理和同步。
1.1 y一个集群中,所有的节点配置和信息是一致的。
1.2 我们对配置文件修改后,需要尽快同步到各个节点中。
2 配置管理可以交给zookeeper实现。
2.1 可将配置文件写入到一个znode中。
2.2 各个节点监听这个znode。
2.3 一旦znode的配置文件被修改,zookeeper将通知到其它各个znode
八、zookeeper集群管理。
1、分布式环境中,我们需要实时掌握每个节点的状态。
1.1 可根据节点状态实时做出一些调整。
2、k可交由zookeeper实现。
2.1 可将zookeeper节点信息写入到一个znode中。
2.2 监听这个节点的实时变化。
九、 zookeeper分布式通知与协调。
1、分布式环境中,一个服务经常需要知道他的子服务状态,
1.1 namenode需知道各个DataNode的状态。
1.2 resource manager需要知道nodemanager状态
2、zookeeper实现心跳监测机制,实时信息推送,相当于一个发布/订阅系统。
十、zookeeper分布式锁。
1、zookeeper是强一致性的
2、实现锁的独占性。
3、控制锁的时序。
十一、分布式队列
分布式队列有两种
1、当一个队列全部都聚齐时,这个队列才可以用,否则这个队列会一直等所有成员到达,这种成为同步队列。
1.1 当一个job由所有的task组成时,所有的任务完成后,job才运行。
1.2可为job创建一个/job,然后在该目录下,为每个完成task创建一个临时的znode,当临时节点的目录数达到task总数时,则job表示完成。
2、队列实现FIFO模式,实现生产者和消费者模型。