网站优化的推广,高效省心的app定制开发平台,wordpress企业商城模板,湛江宇锋网站建设1、说说 Zookeeper 是什么#xff1f;
有些软件你想做成集群或者分布式#xff0c;你可以用 ZooKeeper 帮你来辅助实现。特点#xff1a;ZooKeeper 的特点#xff1a;维护、协调、管理、监控
最终一致性#xff1a;客户端看到的数据最终是一致的。可靠性#xff1a;服务…1、说说 Zookeeper 是什么
有些软件你想做成集群或者分布式你可以用 ZooKeeper 帮你来辅助实现。特点ZooKeeper 的特点维护、协调、管理、监控
最终一致性客户端看到的数据最终是一致的。可靠性服务器保存了消息那么它就一直都存在。实时性ZooKeeper 不能保证两个客户端同时得到刚更新的数据。独立性等待无关不同客户端直接互不影响。原子性更新要不成功要不失败没有第三个状态。
2、ZooKeeper 有哪些应用场景
A、数据发布与订阅
数据发布/订阅的一个常见的场景是配置中心发布者把数据发布到 ZooKeeper 的一个或一系列的
节点上供订阅者进行数据订阅达到动态获取数据的目的。
配置信息一般有几个特点:
1. 数据量小的KV 2. 数据内容在运行时会发生动态变化3. 集群机器共享配置一致
ZooKeeper 采用的是推拉结合的方式。
1. 推: 服务端会推给注册了监控节点的客户端 Wathcer 事件通知
2. 拉: 客户端获得通知后然后主动到服务端拉取最新的数据
B、命名服务 作为分布式命名服务命名服务是指通过指定的名字来获取资源或者服务的地址利用ZooKeeper创建一个全局的路径这个路径就可以作为一个名字指向集群中的集群提供的服务的地址或者一个远程的对象等等。统一命名服务的命名结构图如下所示
1、在分布式环境下经常需要对应用/服务进行统一命名便于识别不同服务。类似于域名与IP之间对应关系IP不容易记住而域名容易记住。通过名称来获取资源或服务的地址提供者等信息。
2、按照层次结构组织服务/应用名称。可将服务名称以及地址信息写到ZooKeeper上客户端通过ZooKeeper获取可用服务列表类。
C、集群管理
所谓集群管理就是是否有机器退出和加入、选举master。
集群管理主要指集群监控和集群控制两个方面。前者侧重于集群运行时的状态的收集后者则是对
集群进行操作与控制。开发和运维中面对集群经常有如下需求:
1. 希望知道集群中究竟有多少机器在工作
2. 对集群中的每台机器的运行时状态进行数据收集
3. 对集群中机器进行上下线的操作
3、说说Zookeeper的工作原理
Zookeeper的核心是原子广播这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式它们分别是恢复模式选主和广播模式同步。Zab协议 的全称是 Zookeeper Atomic Broadcast** Zookeeper原子广播。Zookeeper 是通过Zab 协议来保证分布式事务的最终一致性。Zab协议要求每个 Leader 都要经历三个阶段发现同步广播。
当服务启动或者在领导者崩溃后Zab就进入了恢复模式当领导者被选举出来且大多数Server完成了和 leader的状态同步以后恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。为了保证事务的顺序一致性zookeeper采用了递增的事务id号zxid来标识事务。所有的提议proposal都在被提出的时候加 上了zxid。实现中zxid是一个64位的数字它高32位是epoch用来标识leader关系是否改变每次一个leader被选出来它都会有一 个新的epoch标识当前属于那个leader的统治时期。低32位用于递增计数。
epoch可以理解为皇帝的年号当新的皇帝leader产生后将有一个新的epoch年号。
每个Server在工作过程中有四种状态LOOKING当前Server不知道leader是谁正在搜寻。
LEADING当前Server即为选举出来的leader。FOLLOWINGleader已经选举出来当前Server与之同步。OBSERVING观察者状态表明当前服务器角色是 Observer
4、请描述一下 Zookeeper 的通知机制是什么
Zookeeper 允许客户端向服务端的某个 znode 注册一个 Watcher 监听当服务端的一些指定事件触发了这个 Watcher 服务端会向指定客户端发送一个事件通知来实现分布式的通知功能然后客户端根据 Watcher 通知状态和事件类型做出业务上的改变
客户端注册 Watcher
1、调用 getData、getChildren、exist 三个 API 传入Watcher 对象。
2、标记请求request 封装 Watcher 到 WatchRegistration 。
3、封装成 Packet 对象发服务端发送request 。
4、收到服务端响应后将 Watcher 注册到 ZKWatcherManager 中进行管理。
5、请求返回完成注册。
服务端处理 Watcher
1、服务端接收 Watcher 并存储。
2、Watcher 触发
3、调用 process 方法来触发 Watcher 。
客户端回调 Watcher
1客户端 SendThread 线程接收事件通知交由 EventThread 线程回调Watcher 。
2客户端的 Watcher 机制同样是一次性的一旦被触发后该 Watcher 就失效了。
5、Zookeeper 对节点的 watch 监听通知是永久的吗
不是一次性的
6、 Zookeeper 集群中有哪些角色
一个集群中最少需要 3 台。
Leader事务请求的唯一调度和处理者保证集群事务处理的I序性。集群内部各服务的调度者。
Follower处理客户端的非事务请求转发事务请求给 Leader 服务器。参与 Leader 选举投票
Observer处理客户端的非事务请求转发事务请求给 Leader 服务器不参与任何形式的投票。Observer 不需要将事务持久化到磁盘一旦 Observer 被重启需要从 Leader 重新同步整个名字空间.
7、 Zookeeper 是如何保证事务的顺序一致性的呢
Zookeeper 采用了递增的事务 id 来识别所有的 proposal 提议都在被提出的时候加上了zxid 。 zxid 实际上是一个 64 位数字。高 32 位是 epoch 用来标识 Leader 是否发生了改变如果有新的Leader 产生出来 epoch 会自增。 低 32 位用来递增计数。 当新产生的 proposal 的时候会依据数据库的两阶段过程首先会向其他的 Server 发出事务执行请求如果超过半数的机器都能执行并且能够成功那么就会开始执行。
8、 ZooKeeper 集群中个服务器之间是怎样通信的
Leader 服务器会和每一个 Follower/Observer 服务器都建立 TCP 连接同时为每个Follower/Observer 都创建一个叫做 LearnerHandler 的实体。LearnerHandler 主要负责 Leader 和Follower/Observer 之间的网络通讯包括数据同步请求转发和 proposal 提议的投票等。Leader 服务器保存了所有 Follower/Observer 的 LearnerHandler
9、ZooKeeper 分布式锁怎么实现的
如果有客户端1、客户端2等N个客户端争抢一个 Zookeeper 分布式锁。大致如下
1. 大家都是上来直接创建一个锁节点下的一个接一个的临时有序节点
2. 如果自己不是第一个节点就对自己上一个节点加监听器
3. 只要上一个节点释放锁自己就排到前面去了相当于是一个排队机制。而且用临时顺序节的 另外一个用意就是如果某个客户端创建临时顺序节点之后不小心自己宕机了也没关系Zookeeper 感知到那个客户端宕机会自动删除对应的临时顺序节点相当于自动释放锁或者是自动取消自己的排队。本地锁可以用 JDK 实现但是分布式锁就必须要用到分布式的组件。比如 ZooKeeper、Redis。
死锁问题锁不能因为意外就变成死锁所以要用 ZK 的临时节点客户端连接失效了锁就自动释放了。锁等待问题锁有排队的需求所以要 ZK 的顺序节点。
锁管理问题一个使用释放了锁需要通知其他使用者所以需要用到监听。
监听的羊群效应比如有 1000 个锁竞争者锁释放了1000 个竞争者就得到了通知然后判断最终序号最小的那个拿到了锁。其它 999 个竞争者重新注册监听。这就是羊群效应出点事就会惊动整个羊群。应该每个竞争者只监听自己前面的那个节点。比如 2 号释放了锁那么只有 3 号得到了通知。
10、了解Zookeeper的系统架构吗
a) 集群中将选举出一个leader其他的机器则称为follower所有的写操作都被传送给leader并通过brodcast将所有的更新告诉给follower。
b) 当leader崩溃或者leader失去大多数的follower时需要重新选举出一个新的leader让所有的服务器都恢复到一个正确的状态。
c) 当leader被选举出来且大多数服务器完成了 和leader的状态同步后leadder election 的过程就结束了就将会进入到Atomic brodcast的过程。
d) Atomic Brodcast同步leader和follower之间的信息保证leader和follower具有形同的系统状态。
11、你熟悉Zookeeper节点ZNode和相关属性吗
Znode两种类型
持久的persistent客户端和服务器端断开连接后创建的节点不删除默认。
短暂的ephemeral客户端和服务器端断开连接后创建的节点自己删除。
Znode有四种形式
1、持久化目录节点PERSISTENT客户端与Zookeeper断开连接后该节点依旧存在
2、持久化顺序编号目录节点PERSISTENT_SEQUENTIAL客户端与Zookeeper断开连接后该节点依旧存在只是Zookeeper给该节点名称进行顺序编号
3、临时目录节点EPHEMERAL客户端与Zookeeper断开连接后该节点被删除
4、临时顺序编号目录节点EPHEMERAL_SEQUENTIAL客户端与Zookeeper断开连接后该节点被删除只是Zookeeper给该节点名称进行顺序编号
12、Zookeeper选举中投票信息的五元组是什么
Leader被选举的 Leader 的 SIDZxid被选举的 Leader 的事务 ID
Sid当前服务器的 SIDelectionEpoch当前投票的轮次peerEpoch当前服务器的 Epoch
Epoch Zxid SidEpochZxid 都可能一致但是 Sid 一定不一样这样两张选票一定会 PK 出结果。
13、ZooKeeper 的持久化
数据存到磁盘或者文件当中。机器重启后数据不会丢失。内存 - 磁盘的映射和序列化有些像。
napShot 快照记录内存中的全量数据TxnLog 增量事务日志记录每一条增删改记录查不是事务日志不会引起数据变化