极简介绍Zookeeper,我想跟你聊这些!

简介: 从今天开始,我们正式更新【精通Zookeeepr系列】专题内容,首先我们对Zookeeper的基础内容做下简单的回顾和总结。本文的总体内容如下。

大家好,我是冰河~~

从今天开始,我们正式更新【精通Zookeeepr系列】专题内容,首先我们对Zookeeper的基础内容做下简单的回顾和总结。本文的总体内容如下。

微信图片_20211120153424.jpg

什么是Zookeeper?

简单来说,Zookeeper是一个开源的分布式协同服务系统,Zookeeper的设计目标就是把复杂并且容易出错的分布式协同服务进行封装,并抽象出一个高效可靠的原语接口,并对外提供一系列简单的接口为其他服务调用。其他应用只要使用Zookeeper提供的接口,就可以实现各种分布式应用。例如:分布式锁、分布式选举,主从切换等等。这些案例我们在实战内容中会详细说明。

Zookeeper发展史

Zoookeeper最早是雅虎为了解决内部多个系统之间的协同问题而研发的,后来将其开源并捐赠给了Apache组织。后来Zookeeper在开源界被广泛使用。这里,我列举几个使用了Zookeeper的著名的开源项目。

  • Hadoop:使用Zookeeper来提供NameNode的高可用机制。
  • HBase:使用Zookeeper来保证整个集群中只有一个Master节点,保存集群中的RegionServer列表,保存hbase:meta表的位置。
  • Kafka:使用Zookeeper来对进群中的成员进行管理,并使用Zookeeper提供controller节点的选举机制。
  • Dubbo:使用Zookeeper来实现分布式治理服务的注册中心。
  • SpringCloud:使用Zookeeper来实现微服务注册中心。

还有很多使用Zookeeper作为分布式协同的开源项目,由于数量比较多,这里就不一一列举了,小伙伴们可以自行通过网络查阅。

Zookeeper应用场景

简单点说,Zookeeper可以应用于以下场景当中。

  • 配置管理。
  • DNS服务。
  • 组成员管理。
  • 各种分布式锁。
  • 分布式选举。
  • 数据一致性场景。

但是,需要注意的是:Zookeeper只适合于存储和协同相关的关键数据,不适合用来存储大数据量的数据。

Zookeeper服务的使用

一般情况下,我们在使用Zookeeper时,是通过Zookeeper库来连接并使用Zookeeper的,由Zookeeper客户端负责和Zookeeper集群进行交互。

微信图片_20211120153426.jpg

Zookeeper的数据模型

从本质上讲,Zookeeper的数据模型是层次模型,如下所示。微信图片_20211120153427.jpg

这种层次模型常见于文件系统,而这种层次模型和Key-Value模型是两种主流的数据模型。Zookeeper使用文件系统模型主要的考虑点如下。

  • 文件系统的树形结构便于表达数据之间的层次关系。
  • 文件系统的树形结构便于为不同的应用分配独立的命名空间。

在Zookeeper中,层次结构的每个节点叫做znode,它不同于文件系统,每个节点都可以保存数据,而且每个节点都有一个版本号,版本号从0开始递增计数。

接下来,我们再来看一个Zookeeper节点的具体示例。

微信图片_20211120153429.jpg

例如,上图中有三个子树,三个子树分别应用于app1、app2和app3三个应用。其中app1的子树实现了一个简单的组成员协议,也就是每个客户端进行p创建一个znode在/app1节点下,而且每个进程创建的znode是以/app1/p_1,/app1/p_2,...,/app1/p_n 这种结构依次存放。只要 /app1/p_n 节点存在,就说明Pn进程在正常的运行。

Zookeeper的节点分类

总体来说,Znode节点可以分为以下四类。

微信图片_20211120153429.jpg

一个Znode节点可以是持久性的,也可以是临时性的。

  • 持久性的Znode:创建节点后即使Zookeeper集群宕机,或者Zookeeper客户端宕机,节点也不会丢失。
  • 临时性的Znode:Zookeeper客户端宕机或者客户端在指定的超时时间内没有给Zookeeper集群发送消息,那么这个节点就会消失。

Znode节点也可以是顺序性的,所谓的顺序性,就是指每个节点会关联一个唯一的单调递增整数,这个单调递增的整数就是Znode节点名称的后缀,比如:/app1/p_1,/app1/p_2等,由此,Znode又有如下两种分类:

  • 持久顺序性的Znode:除了具备持久性的Znode的特性之外,Znode的名称还具备顺序性。
  • 临时顺序性的Znode:除了具备临时性的Znode的特性之外,Znode的名称还具备顺序性。


相关文章
|
1月前
|
存储 弹性计算 应用服务中间件
2026年阿里云服务器配置选型指南:个人与企业用户适配方案
在阿里云服务器选型中,核心是根据用户类型(个人 / 企业)、业务场景(网站搭建、开发测试、生产应用)及性能需求,匹配 CPU、内存、带宽、存储的最优组合。不同用户对成本、稳定性、扩展性的诉求差异显著,个人开发者侧重性价比与易用性,企业用户则需保障性能稳定与业务连续性。本文结合实例规格特性与场景需求,提供从入门到企业级的完整选型参考。
|
11月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
443 0
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
|
SQL 运维 算法
链路诊断最佳实践:1 分钟定位错慢根因
目前阿里云 ARMS 已经基于 LLM 大模型实现了单链路智能诊断,综合调用链、方法栈、异常堆栈、SQL、指标等多模态数据,结合链路诊断领域专家经验,有效识别单次请求的错慢根因,并给出相应的优化建议。
697 97
|
6月前
|
存储 物联网 关系型数据库
基于STM32和ESP8266的智慧考勤系统设计与实现【免费开源】
本文介绍了一个基于 STM32F103ZET6 + ESP8266 Mesh 的智慧考勤系统,涵盖了硬件架构、软件设计、网络组网、服务器端实现与数据导出。该系统不仅实现了考勤自动化,还支持多点分布式部署,具有良好的扩展性与应用价值。
|
人工智能
写歌词的技巧和方法全解析:开启你的音乐创作之旅,妙笔生词智能写歌词软件
怀揣音乐梦想,渴望用歌词抒发情感?掌握关键技巧,你也能踏上创作之旅。灵感来自生活点滴,主题明确,语言简洁,韵律和谐。借助“妙笔生词智能写歌词软件”,AI辅助创作,轻松写出动人歌词,实现音乐梦想。
鸿蒙开发:实现popup弹窗
目前提供了两种方式实现popup弹窗,主推系统实现的方式,几乎能满足我们常见的所有场景,当然了,文章毕竟有限,尽量还是以官网为主。
358 2
鸿蒙开发:实现popup弹窗
|
前端开发 JavaScript Java
谷粒商城笔记+踩坑(3)——商品服务-三级分类、网关跨域
商品服务-三级分类增删改查、跨域问题、逻辑删除
|
机器学习/深度学习 人工智能 算法
【人工智能】人工智能与传统美工结合,AI美工的详细解析
AI美工是一个结合了人工智能技术与美工设计的岗位,它利用AI工具和技术来辅助或完成美工设计的各项工作。以下是对AI美工的详细解析
1121 2
|
安全 大数据 云计算
如何快速高效全面的学习云计算和虚拟化技术
如何快速高效全面的学习云计算和虚拟化技术
524 0
|
前端开发 Java 中间件
Sentinel Dashboard支持规则配置持久化至Nacos
目录 前言 一、Push模式原理 二、Sentinel控制台改造支持配置持久化至Nacos 1、拉取最新代码 2、开始搬运代码 (1) 调整点之修改NacosConfig类 (2) 调整点之新增NacosConfigProperties类 (3) 调整点之修改NacosConfigUtil类 (4) DynamicRuleProvider和DynamicRulePublisher实现优化 1) AbstractNacosProvider类 2) AbstractNacosPublisher类 3) FlowRuleNacosProvider类 4) FlowRuleNacosPublisher
Sentinel Dashboard支持规则配置持久化至Nacos