为啥这么多公司用 ZooKeeper?它到底解决了什么问题?

news2025/1/19 23:11:26

ZooKeeper 介绍

ZooKeeper 很流行,有个基本的疑问:

  • ZooKeeper 是用来做什么的?

  • 之前没有ZK,为什么会诞生 ZK?

OK,解答一下上面的疑问:(下面是凭直觉说的)

  • ZooKeeper 是用于简化分布式应用开发的,对开发者屏蔽一些分布式应用开发过程中的底层细节

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

  • ZooKeeper 在提供上述功能的同时,其还是一个 高性能、高可用、高可靠的分布式集群

上面说这么多,总结一下,ZK 能解决分布式应用开发的问题,ZK 能很好的解决问题。到这一步,疑问就更多了:

  • 分布式应用开发,有哪些常见问题?ZK 是如何屏蔽这些底层细节的?

  • ZooKeeper 对外暴露了那些 API?这些 API 如何支持分布式应用开发的?这些 API 还-能简化吗?API 的语义性怎么样?

  • ZooKeeper 自身是一个高性能、高可用、高可靠的分布式集群,那有个简单的问题:

  • 高性能是指什么?ZooKeeper 为了达到高性能,做了哪些工作?

  • 高可用同上

  • 高可靠同上

为什么有ZooKeeper

一个应用程序,涉及多个进程协作时,业务逻辑代码中混杂有大量复杂的进程协作逻辑。

在这里插入图片描述
上述多进程协作逻辑,有 2 个特点:

  • 处理复杂

  • 处理逻辑可重用

因此,考虑将多进程协作的共性问题拎出,作为基础设施,让 RD 更加专注业务逻辑开发,即:

在这里插入图片描述

ZooKeeper 就是上述多进程协作基础服务的一种。

ZooKeeper的特点

ZooKeeper 有几个简单特点:
  • ZooKeeper 的 API:从 文件系统 API 得到的启发,提供简单的 API

  • ZooKeeper 运行在专用服务器上,跟业务逻辑分离,保证了高容错性和可扩展性

ZooKeeper 是存储设施,但特别注意

  • ZK上存储的数据聚焦为:协作数据(元数据),而不是应用数据,应用数据有自己的存储方案,例如 HDFS 等

  • ZK 本质上,可以看作一种特殊的 FS

特别说明:应用数据和元数据,由于使用场景不同,对一致性和持久性的要求有差异, 因此,架构设计、数据治理过程中,应将 2 类数据独立看待、独立存储。

ZooKeeper的使命

ZK 要解决的核心问题:

ZK 目标:简化分布式应用开发中,多进程协作问题。为分布式应用,提供高效、可靠的分布式协调服务(基础服务),例如:

  • 统一的命名服务

  • 分布式锁

  • 进程崩溃检测

  • Leader 选举

配置管理:配置变更时,及时下发到各个 Client。

一个简单的问题:多进程的协作是什么?尼玛呀,有完没完,啥问题你都有,面对这个掉咋天的脑壳,还是回答一下。

多进程协作,整体分为 2 类:

  • 协作:多进程需要一同处理某些事情,一些进程采取行动是的其他进程能够正常工作,例如:主从结构,M 向 S 分配任务,S 才会执行,否则 S 就保持空闲状态

  • 竞争:两个进程不能同时工作,一个进程必须等待另个进程执行完毕,例如:主从结构,M 节点失效后,很多 S 都想成为 M,这时,就需要互斥锁,只有第一个获得锁的 S 成为 M

特别说明:

  • 不跨网络协作:多进程,可以在同一台物理主机上,同步原语很方便(比如?管道、共享内存、消息队列、信号量)

  • 跨网络协作:多进程,分布在不同的物理主机上,ZK 关注这一类

跨网络多进程协作,进程通信,基本思路有 2 个:

  • 消息机制:通过网络,直接信息交换,多消息传递算法,实现同步原语

  • 共享存储:利用外部共享存储,实现多进程协作,要求共享存储提供有序访问,ZK 采用这种方式

真实系统中,跨网络通信,有几个共性问题:

  • 消息延迟:由于网络原因,后发送先到达

  • 处理器性能:由于系统调度原因,消息到达后,延迟处理

  • 时钟偏移:不同物理主机,时钟发生偏移

ZK 精心设计用于屏蔽上述 3 个共性问题,使得这些问题在应用服务层面完全透明化。

ZooKeeper 特性

ZooKeeper 解决的本质问题

分布式系统的一致性问题:

  • 消息传递:延迟性,先发送的消息,不一定先到达;

  • 消息传递:丢失性,发送的消息,可能丢失;

  • 节点崩溃:分布式系统内,任何一个节点都可能崩溃;

在这种情况下,如何保证数据的一致性?

  • 提案投票:基于投票策略,2PC

  • 选举投票:基于投票策略,投出优先级最高的节点(包含最新数据的节点)

Paxos 目标:解决分布式一致性问题,提高分布式系统容错性的一致性算法。

Paxos 本质:基于消息传递的高度容错的一致性算法

ZooKeeper 定位

ZooKeeper 是:
  • 分布式协调服务

  • 高效、可靠

  • 方便应用程序,聚焦业务逻辑开发,而不需要过多关注分布式进程间协作细节

ZooKeeper 不直接暴露原语,而是,暴露一部分调用方法组成的 API,类似文件系统的 API,支持应用程序实现自己的原语。

ZooKeeper 特性

ZooKeeper 可以保证如下分布式一致性特性:

  • 顺序一致性:同一个 Client 发起的事务请求,严格按照发起顺序执行

  • 原子性:事务请求,要么应用到所有节点,要么一个节点都没有应用

  • 单一视图:Client 无论连接到哪个节点,看到的服务端数据都是一致的(Note:不准确,其实是最终一致性)

  • 可靠性:事务一旦执行成功,状态永久保留

  • 实时性:事务一旦执行成功,Client 并不能立即看到最新数据,但 ZooKeeper 保证最终一致性

ZooKeeper 设计目标

ZooKeeper 致力于提供高性能、高可用、顺序一致性的分布式协调服务,保证数据最终一致性。

目标一:高性能(简单的数据模型)

  • 采用树形结构组织数据节点;

  • 全量数据节点,都存储在内存中;

  • Follower 和 Observer 直接处理非事务请求;

目标二:高可用(构建集群)

  • 半数以上机器存活,服务就能正常运行

  • 自动进行 Leader 选举

目标三:顺序一致性(事务操作的顺序)

  • 每个事务请求,都会转发给 Leader 处理

  • 每个事务,会分配全局唯一的递增id(zxid,64位:epoch + 自增 id)

目标四:最终一致性

  • 通过提议投票方式,保证事务提交的可靠性

  • 提议投票方式,只能保证 Client 收到事务提交成功后,半数以上节点能够看到最新数据

ZooKeeper 出现之前

ZK 出现之前,分布式系统常用两种方式,实现多进程协作:

  • 分布式锁管理器

  • 分布式数据库

ZK 更专注于进程协作,而不提供任何锁接口和通用的存储数据接口。(疑问:ZK 也可以提供啊,我们不使用就行了)

应用服务器,常见的 2 种需求:

  • Master-Slave Leader 选举:要求提供Master节点选举功能

  • 进程响应跟踪崩溃检测:要求提供进程存活状态的跟踪

  • 分布式锁:互斥排它锁

ZK 为上述 2 种策略提供了基础 API。

ZooKeeper 不适用的场景:

海量数据存储:ZK 本质是特殊的 FS,但 ZK 用于存储元数据,需要单独存储应用数据

专业术语介绍

术语解释
分布式系统跨多个物理主机,由多个独立运行的节点组成的系统
原语业务上不可分割的元素/过程,举例:分布式锁原语,可以暴露创建、查询、释放几个方法







民工哥

为啥这么多公司用 ZooKeeper?它到底解决了什么问题?

NingG+

ZooKeeper 定位:能解决什么问题?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/943598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端项目部署,阿里云服务器部署前端项目,超详细

需求背景:作为一个前端,特别身处于中小公司时,对于部署也需要有所了解。本次就介绍前端基础的项目部署。本次使用的是阿里云服务器进行的部署 部署核心步骤 1.准备打包好的前端代码(dist包)或者是一个html文件 2.购买…

Day49|动态规划part10:188.买卖股票的最佳时机IV、121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

188. 买卖股票的最佳时机IV leetcode链接:188 题「买卖股票的最佳时机 IVopen in new window」 视频链接:动态规划来决定最佳时机,至多可以买卖K次!| LeetCode:188.买卖股票最佳时机4 给你一个整数数组 prices 和一…

【考研数学】概率论与数理统计 —— 第二章 | 一维随机变量及其分布(2,常见随机变量及其分布 | 随机变量函数的分布)

文章目录 引言三、常见的随机变量及其分布3.1 常见的离散型随机变量及其分布律(一)(0-1)分布(二)二项分布(三)泊松分布(四)几何分布(五&#xff0…

利用R作圆环条形图

从理念上看,本质就是增加了圆环弧度的条形图。如上图2。 需要以下步骤: 数据处理,将EXCEL中的数据做成3*N的表格导入系统,代码如下:library(tidyverse) library(stringr)library(ggplot2)library(viridis) stuper &…

电脑连不上网?学会这5个方法,不用愁!

“怎么回事呢?我的电脑一直连不上网。尝试了好多个方法都还是不行。大家遇到这种情况的时候都是怎么处理的呀?” 在现代生活中,电脑连接到网络已经成为必不可少的一部分。如果电脑无法联网,可能会影响我们的工作和娱乐。那么&…

Scrum敏捷研发迭代式开发

Scrum是一个迭代式增量软件开发过程,是敏捷方法论中的重要框架之一。它通常用于敏捷软件开发,包括了一系列实践和预定义角色的过程骨架。Scrum中的主要角色包括Scrum主管(Scrum Master)、产品负责人(Product Owner&…

【已解决】ZooKeeper配置中出现Error contacting service. It is probably not running

ZooKeeper配置中出现Error contacting service. It is probably not running 问题 安装zookeeper,启动报错了 Error contacting service. It is probably not running 思路 tail -100f logs/zookeeper-root-server-node1.itcast.cn.out 查看日志报错 zoo.cfg没…

LinuxShell变量

变量: 命名规则: 在Shell中,变量名可以由字母、数字或者下划线组成,并且只能以字母或者下划线开头。对于变量名的长度,Shell并没有做出明确的规定。因此,用户可以使用任意长度的字符串来作为变量名。但是…

算法:模拟思想算法

文章目录 实现原理算法思路典型例题替换所有问号提莫攻击N字型变换外观序列 总结 本篇总结的是模拟算法 实现原理 模拟算法的实现原理很简单,就是依据题意实现题意的目的即可,考察的是你能不能实现题目题意的代码能力 算法思路 没有很明显的算法思路…

模拟集成电路设计:Bandgap电路设计及版图实现

模拟集成电路设计 Bandgap电路设计及版图实现 一、目的: 1、熟悉模拟集成电路设计的基本流程,实现Bandgap电路设计; 2、熟悉Linux系统及Cadence Virtuoso icfb设计、仿真软件的使用方法。 二、原理: 1、设计目标:…

【HSPCIE仿真】输入网表文件(2)电路拓扑描述

电路拓扑描述 1.元器件描述语句(Elements)电阻(Resistor)电容(Capacitors)电感(Inductors)二极管(Diode)MOSFET 2. 模型(.MODEL)2.1 基本概念2.2 模型的使用.model 描述语句MOSFET的 .model 语句 3. 电源和激励描述语句3.1 独立源直流源梯形脉冲源Pattern Source 4. 库文件的调…

SpringBoot初级开发--加入Swagger展现接口文档(5)

Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。作为web开发,它已经成了接口文档服务的代名词了。现在很多协作型项目,都用它生成api文档,让大家能够很好的协作开发。紧接上一章&#xf…

液冷技术之液冷连接器快速接头

文章目录 系列文章目录前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 热能在液冷技术的研发不断加大,特别是在水冷产品生产工艺上不断革新,在铜管自动折弯、挤型模、压管、粘连焊接等技术工艺获得了多个技术专利&#xff0…

php环境搭建步骤(与资源配套使用版)

1.将phpEnv.zip下载到D盘下 2.解压到当前文件夹 3.找到Apache24下的bin目录,执行cmd操作,回车。 4.在cmd中执行代码 Httpd -k install -n “Apache24” 4.使用winR键打开运行,输入services.msc ,回车,进入服务 …

Java运行时jar时终端输出的中文日志是乱码

运行Jar时在控制台输出的中文日志全是乱码,这是因为cmd/bash默认的编码是GBK,只要把cmd的编码改成UTF-8即可 两种方式修改:临时修改和注册表永久修改 临时修改 只对当前的cmd页面有效,关闭后重新打开都会恢复成GBK, 打开cmd&am…

“私车公用”如何便捷又合规?百望云解决方案来支招!

“昨天有几家门店反映工作中遇到难题了,领导交代我赶紧去解答一下”。中午11点半,某大型连锁门店的督导李某顾不上吃午饭,开着自己的私家车赶往辖区门店。 去干公事怎么开私家车?面对同行人员的疑问,李某拿出了自己的…

Total Uninstall - 如何将程序从一台计算机传输到另一台计算机

Total Uninstall 可以帮助传输或部署程序 将程序传输到新计算机。将难以找到的程序及其设置移动到新 PC。它可以在多台计算机上安装预先配置了相同设置的程序。使用一组基本的必备程序制作备份副本。重新安装 Windows 时,节省安装和配置应用程序的时间。只需还原备…

超详细FPGA新手小白入门点亮LED灯

Vivado软件的基本操作(以控制LED灯闪烁为例) 其实之前早已用过Vivado进行FPGA的开发学习,但由于每次都是浅尝辄止地学了一些时间,加上Vivado软件和FPGA开发流程的复杂性,长时间不用就会遗忘。因此今天还是简单地写个笔…

空气净化器十大排名哪个除甲醛强 空气净化器品牌评测

空气净化器十大排名哪个除甲醛强 空气净化器品牌评测 十大空气净化器品牌评测,寻找最强除甲醛功效 房源里无时无刻不承载着我们的生活,我们的家庭在这个小小的空间里扎根,亲人的温暖也凝结其中。然而,室内空气污染却可能悄然渗透&…

Django基础7——用户认证系统、Session管理、CSRF安全防护机制

文章目录 一、用户认证系统二、案例:登陆认证2.1 平台登入2.2 平台登出2.3 login_required装饰器 三、Django Session管理3.1 Django使用Session3.1.1 Cookie用法3.1.2 Session用法 3.2 案例:用户登录认证 四、Django CSRF安全防护机制 一、用户认证系统…