Eureka的表兄弟Zookeeper理论基础

Eureka的表兄弟Zookeeper

简单介绍

Zookeeper是一个开源的分布式应用程序协调服务器,主要功能包括配置维护,域名服务,分布式同步,集群管理等node

主要功能简介

1、配置维护

  分布式系统中,不少服务都是部署在集群中的,就是多态服务器中部署着彻底相同的应用,他们的配置文件也是必须相同的,下面有一个场景,就是当咱们想要修改一个配置文件时,若是咱们经过手动修改参与集群的全部机器上的应用配置文件时不只麻烦并且极其容易出错,Zookeeper对配置文件的维护采用的事"发布 / 订阅模型",发布者将修改号的集群的配置文件发送到Zookeeper服务器的文件系统中,那么订阅者立刻就会收到通知,并主动去同步Zookeeper里的配置文件,Zookeeper具备同步操做的原值性,确保参与集群的机器说读取的配置文件都能被正确的更新算法

2、域名服务

  如今的项目都是包含多个工程这种款式的,而有些工程就是专门为其余工程提供服务的,一个项目中就会存在不少这种想其余工程提供服务的工程,而一个服务又可能存在多个提供者,服务的消费者消费起来就比较复杂,Zookeeper为每个服务起了一个名称,将这些名称和对应提供服务的主机地址注册到Zookeeper中,造成一个服务映射表,服务消费者经过服务名称便可消费服务,服务的减小,添加,变动,只需修改Zookeeper中的服务映射表便可安全

  阿里的Dubbo就是使用的Zookeeper做为服务域名服务器的服务器

3、分布式同步

  在分布式系统中,不少运算过程都是有分布式集群中若干服务器共同计算完成的,而且他们之间的运算还具备逻辑上的前后顺序,Zookeeper就能够协调这些服务间运算的过程,让这些服务都同时监听Zookeeper上的同一个znode,一旦起重工一个服务器的znode发生了改变,另外一个相应服务器就可以收到通知,并做出相应处理网络

  好比上面这张逻辑图,zookeeper能够协调他们三个的前后顺序分布式

4、集群管理

  集群中最麻烦即便节点故障管理,Zookeeper会让集群选出一个节点做为Master,监控全部的节点的健康情况,一个有节点故障,就会通知其余的节点,使集群中的其余节点对于任务的分配做出相应的调整,Zookeeper除了发现故障外,还具备对故障进行甄别的功能,若是故障节点是能够修复的,Zookeeper能够修复它,若是不能修复则会告诉系统管理元错误的缘由让管理员定位故障点,spa

  至于Master故障的话,Zookeeper内有选举算法,选取新的节点担任Master的职责对集群进行管理对象

Zookeeper的一致性要求

顺序一致性:blog

  • 从同一个客户端发起的n多个事务请求,最终将会严格按照其发起请求的顺序被应用到Zookeeper中继承

原子性:

  • 全部事务请求的结果在集群中全部的机器上的应用状况是同样的,也就是说要么整个集群中全部主机都成功应用某一个事务,要么就没有应用,不会出现集群中个别主机应用了该事物,个别主机没有应用的状况

单一视图:

  • 不管客户端链接的是那一个Zookeeper服务器,其看到的服务端数据模型都是一致的

可靠性:

  • 一旦一个服务端成功的应用了一个事务,并完成对客户端的响应,那么该事务所引发的服务端状态变动将会被一直保留下来,除非有另外一个事务又对其作了变动

实时性:

  • 这个实时性,指的是Zookeeper只能保证在必定的时间段内,客服端最终必定可以从服务器端读取到最新的数据状态,而不是一旦被应用,客服端就可以当即从服务端读取到这个事务变动后的最新数据状态

Zookeeper中的几个重要概念

Session

  Session是指客户端会话,Zookeeper对外的服务端口默认为2181,客户端启动时,首先会与zk服务器创建一个TCP长链接,从第一次链接创建开始,客户端会话的生命周期也开始了,经过这个长链接,客户端可以经过心跳检测保持与服务器的有效回话,也可以想zk服务器发起请求并接受响应,同时还能经过该链接接受来自服务器的Watcher时间通知

  Session的SessionTimeout值用来设置一个客户端会话的超时时间,当因为服务器压力过大、网络延迟、客户端主动断开链接等各类缘由致使的福护短链接断开时,只要在SessionTimeout规定的有效时间内从新链接上集群中的任意一个服务器,那么以前建立的会话仍然有效

Znode

  zk的文件系统采用属性层次化的目录结构,每一个目录都在zk中都叫作一个znode,每一个znode都拥有一个惟一的路径标识,Znode能够包含数据和子Znode(零时节点不能有子Znode),Znode中的数据能够有多个版本,因此查询某路径下的数据须要带上版本号,客户端应用能够在Znode上设置监视器(Watcher)

Watcher机制

  zk经过Watcher机制实现发布订阅模式,zk提供了分布式数据的发布订阅功能,一个发布者可以让多个订阅者同时监听某一个主题对象,当这个主题对象状态发生改变是,会通知全部订阅者,是他们可以做出相应的处理,ZK容许哭护短想服务器注册一个Watcher监听,当服务端的一些指定事件触发这个Watcher时,那么就会向指定的客户端发送一个事件通知,而这个事件通知则是经过TCP长链接的Session完成的

ACL:访问控制列表

  ACL全称为Access Control List,用于控制资源的访问权限,是ZK数据安全的保障,ZK利用ACL策略控制Znode节点的访问权限,若是节点建立,节点数据读写,节点删除,读取子节点列表,设置节点权限等

  在传统的文件系统中,ACL分为两个维度,组与权限,一个组能够包含多个权限,一个文件或者目录拥有了某个租的权限即又有了组里全部的权限,文件或子目录默认会继承父目录的ACL

  在ZK中,Znode的ACL是没有继承关系的,每个Znode的权限都是独立控制的,只有哭护短知足Znode设置的权限要求时,才能完成相应的操做,ZK的ACL分为三个维度,分别为: 受权策略scheme、用户id、用户权限permission。

相关文章
相关标签/搜索