【中间件】zookeeper的实现原理

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【中间件】zookeeper的实现原理

项目中用dubbo的时候一般会选用zookeeper做为注册中心,那么什么是zookeeper呢?又能做什么呢?

架构

Zookeeper在官方架构图中就是集群,Zookeeper建议集群部署,另外因为Zookeeper是过半策略,就是说有一半以上节点存活才可以正常工作,也就是说,3台机器只能挂一台,4台也只能挂一台,就没有必要多增加那一台了。

什么是zookeeper

zookeeper是一个分布式协调框架,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等

zookeeper对外暴露简单的API,用于支持分布式应用开发

zookeeper的特点

顺序一致性:从同一客户端发起的事务请求,最终将严格按照顺序被应用到Zookeeper中去。

原子性:所有事务请求的处理结果在整个集群中所有机器的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某个事务,要么都没有应用

单一系统映像:无论客户端连接到哪个Zookeeper服务器上,其看到的服务端数据模型都是一致的。

可靠性:一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖。

zookeeper的数据模型

zookeeper数据模型采用层次化的多叉树形结构,每个节点上都可以存储数据,这些数据可以使数字、字符串或者二进制序列,并且,每个节点还可以拥有N个子节点,最上层是根节点以“/”来代表,每个数据节点在Zookeeper中被称为znode,它是Zookeeper中数据的最小单元,并且每个znode都有一个唯一的路径标识。

一共有4中znode

  • 持久节点(PERSISTENT):一旦创建就一直存在即使Zookeeper集群宕机,知道将其删除
  • 临时节点(EPHEMERAL):临时节点的生命周期是客户端会话绑定的,会话消失则节点消失,并且临时节点只能做叶子节点,不能创建子节点
  • 持久顺序节点(PERSIST比如 /node1/app0000000001 、/node1/app0000000002ENT_SEQUENTIAL):出了具有持久节点的特性外还具有顺序性
  • 临时顺序(EPHEMERAL_SEQUENTIAL)节点:出了具备临时(EPHEMERAL)节点的特性之外,子节点的名称还具有顺序性

ACL权限控制

ZooKeeper 采用 ACL(AccessControlLists)策略来进行权限控制,类似于 UNIX 文件系统的权限控制。

对于znode节点操作的权限,Zookeeper提供了以下5种:

  • CREATE:能创建子节点
  • READ:能获取节点数据和列出其子节点
  • WRITE:能设置/更新节点数据
  • DELETE:能删除子节点
  • ADMIN:能设置节点ACL得到权限

Watcher(事件监听器)

Watcher(事件监听器),是 ZooKeeper 中的一个很重要的特性ZooKeeper 允许用户在指定节点上注册一些 Watcher,并且在一些特定事件触发的时候,ZooKeeper 服务端会将事件通知到感兴趣的客户端上去,该机制是 ZooKeeper 实现分布式协调服务的重要特性。

ZAB协议

ZAB(ZooKeeper Atomic Broadcast 原子广播) 协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议。 在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性,基于该协议,ZooKeeper 实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性

两种基本模式

崩溃恢复

当整个服务框架在启动的过程中或者当Leader服务器出现网络中断,崩溃退出与重启等异常情况时,ZAB协议就会进入恢复模式并选举产生新的Leader服务器,当选举产生了新的Leader服务器,同时集群中有过半的机器与该Leader服务器完成状态同步之后,ZAB协议就会推出恢复模式,其中所谓的状态同步是指数据同步,用来保证急群众存在过半的机器能够和Leader服务器的数据状态保持一致

消息广播

当集群中已经有一般的Follower服务器完成了和Leader服务器的状态同步,那么整个服务框架就可以进入消息广播模式了,当一台同样遵守ZAB协议的服务器启动后加入到集群中时,如果此时集群中已经存在一个Leader服务器在负责进行消息广播,那么新加入的服务器就会自觉进入数据恢复模式,找到Leader所在服务器,并与其进行数据同步,然后一起参与到消息广播的流程中去

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
1月前
|
消息中间件 分布式计算 算法
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析(上)
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析
95 0
|
7月前
|
消息中间件 数据可视化 Kafka
消息中间件系列教程(21) -Kafka- 集群搭建(自带Zookeeper)
消息中间件系列教程(21) -Kafka- 集群搭建(自带Zookeeper)
77 0
|
1月前
|
监控 算法 网络协议
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析(下)
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析
44 1
|
8月前
|
存储 缓存 Java
详解Zookeeper(铲屎官)在众多中间件的应用和在Spring Boot业务系统中实现分布式锁和注册中心解决方案
`ZooKeeper `是一个**开放源码的分布式协调服务**,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 分布式应用程序可以基于` Zookeeper` 实现诸如**数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列**等功能。
22590 11
详解Zookeeper(铲屎官)在众多中间件的应用和在Spring Boot业务系统中实现分布式锁和注册中心解决方案
|
7月前
|
NoSQL 算法 Java
万字 + 20张图 Zookeeper分布式锁实现原理
前面我们通过Redis分布式锁实现Redisson 15问文章剖析了Redisson的源码,理清了Redisson是如何实现的分布式锁和一些其它的特性。这篇文章就来接着剖析Zookeeper分布式锁的实现框架Curator的源码,看看Curator是如何实现Zookeeper分布式锁的,以及它提供的哪些其它的特性。
万字 + 20张图 Zookeeper分布式锁实现原理
|
消息中间件 负载均衡 中间件
【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起探索一下DefaultMQPullConsumer的实现原理及源码分析
【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起探索一下DefaultMQPullConsumer的实现原理及源码分析
146 0
【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起探索一下DefaultMQPullConsumer的实现原理及源码分析
|
10月前
|
监控 JavaScript 前端开发
说说你对redux中间件的理解?常用的中间件有哪些?实现原理?
说说你对redux中间件的理解?常用的中间件有哪些?实现原理?
|
10月前
|
JavaScript 前端开发 中间件
对Redux中间件的理解?常用的中间件有哪些?实现原理?
对Redux中间件的理解?常用的中间件有哪些?实现原理?
70 0
|
Java 中间件 API
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
255 1
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
|
缓存 监控 中间件
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(组件篇)
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(组件篇)
257 0