ZooKeeper概述

zookeeper节点数与watch的性能测试 zookeeper中节点数量理论上仅受限于内存,但一个节点下的子节点数量受限于request/response 1M数据 (size of data / number of znodes) zookeeper的watch机制用于数据变更时zookeeper的主动通知。watch可以被附加到每一个节点上,那么如果一个应用有10W个节点,那zookeeper中就可能有10W个watch(甚至更多 阅读详情

译自http://zookeeper.apache.org/doc/trunk/zookeeperOver.html

ZooKeeper是一个用于分布式应用的开源分布式协调服务。它提供了简单的原语集合,分布式应用可在这些原语之上构建用于同步、配置维护、分组和命名的高层服务。ZooKeeper的设计使得编程容易,并且使用类似于广泛熟知的文件系统目录树结构的数据模型。它运行在Java环境中,但是有Java和C语言绑定。

分布式协调服务是出了名的难得编写正确,很容易出现竞争条件和死锁之类的错误。ZooKeeper的动机是减轻为分布式应用开发协调服务的负担。

1 设计目标

1.1 简单

ZooKeeper让分布式进程可通过共享的、与标准文件系统类似的分层名字空间相互协调。名字空间由数据寄存器(在ZooKeeper世界中称作znode)构成,这与文件和目录类似。与用于存储设备的典型文件系统不同的是,ZooKeeper在内存中保存数据,这让其可以达到高吞吐量和低延迟。

ZooKeeper的实现很重视高性能、高可用性,以及严格的顺序访问。高性能意味着可将ZooKeeper用于大的分布式系统。可靠性使之可避免单点失败。严格的顺序访问使得客户端可以实现复杂的同步原语。

1.2 自我复制

与它所协调的进程一样,ZooKeeper本身也会试图在一组主机间进行复制,这就是集群。

组成ZooKeeper服务的各个服务器必须相互知道对方。它们在内存中维护状态和事务日志,还在永久存储中维护快照。只要大部分服务器可用,ZooKeeper服务就是可用的。

客户端连接到单个ZooKeeper服务器。客户端维持一个TCP连接,通过这个连接发送请求、接收响应、获取观察事件,以及发送心跳。如果到服务器的TCP连接断开,客户端会连接到另一个服务器。

1.3 顺序访问

ZooKeeper为每次更新设置一个反映所有ZooKeeper事务顺序的序号。并发操作可使用序号来实现更高层抽象,如同步原语。

1.4 高速

在读操作为主的负载下特别快。ZooKeeper应用运行在成千上万台机器中,在读操作比写操作频繁,二者比例约为10:1的情况下,性能最好。

2 数据模型和分层的名字空间

ZooKeeper提供的名字空间与标准文件系统非常相似。名字是一个由斜杠/分隔的路径元素序列。ZooKeeper名字空间中的每个节点都由其路径标识。

3 节点和临时节点

与标准文件系统不同,ZooKeeper名字空间中的每个节点都可以有关联的数据以及子节点。这就像一个允许文件也是目录的文件系统。(ZooKeeper设计用于存储协调数据:状态信息、配置、位置信息等,所以通常存储在每个节点中的数据很小,在字节到千字节范围内)讨论ZooKeeper数据节点时,我们用术语znode来明确指示。

Znode会维护一个stat结构体,其中包含数据和ACL的版本号与时间戳,以便于进行缓存验证和协调更新。每次修改znode数据时,版本号会增长。客户端获取数据的时候,也同时获取数据的版本。

对znode数据的读写操作是原子的。读取操作获取节点的所有数据,写入操作替换所有数据。节点的访问控制列表(ACL)控制可以进行操作的用户。

ZooKeeper具有临时节点的概念。只要创建节点的会话是活动的,临时节点就存在。一旦会话终止,临时节点会被删除。临时节点对于实现tbd是很有用的。

4 条件更新和观察

ZooKeeper支持观察的概念。客户端可以在znode上设置观察。观察将在znode修改时被触发和移除。观察被触发时客户端会收到一个数据包,指示znode已经被修改。如果与ZooKeeper服务之间的连接断开,客户端会收到一个本地通知。这可用于tbd。

5 保证

ZooKeeper非常高效和简单。基于其目标:成为构建如同步这样的更复杂服务的基础,ZooKeeper提供下述保证:

l 顺序一致性:客户端的更新将以请求发送的次序被应用。

l 原子性:更新要么成功,要么失败,没有部分更新。

l 单一系统镜像:无论连接到哪个服务器,客户端将看到一样的视图。

l 可靠性:更新操作的结果将是持续的,直到客户端覆盖了更新。

l 及时性:在某个时间范围内,客户端视图确保是最新的。

关于这些保证的详细信息,以及如何使用这些保证,请参看tbd。

6 简单的API

ZooKeeper的设计目标之一是提供非常简单的编程接口。ZooKeeper仅支持这些操作:

l create:在树中某位置创建一个节点。

l delete:删除一个节点。

l exists:测试某位置是否存在某节点。

l get data:读取节点数据。

l set data:向节点写入数据。

l get children:获取子节点列表。

l sync:等待数据传播。

关于这些操作的更深入讨论,以及如何使用它们来实现更高层的操作,请参看tbd。

7 实现

下图显示了ZooKeeper服务的高层组件。除了请求处理器(Request Processor)之外,组成ZooKeeper服务的每个服务器拥有每个组件的自有拷贝。

自我复制数据库(replicated database)是一个包含整个数据树的内存数据库。更新会记录到磁盘中以便可以恢复,并且将写操作应用到内存数据库之前会先写入到磁盘。

每个ZooKeeper服务器都为客户服务。客户端连接到一个服务器,提交请求。读请求由每个服务器数据库的本地拷贝进行服务。改变服务状态的请求和写请求由一致性协议处理。

作为一致性协议的一部分,客户端的所有写请求都被转发到单个服务器,也就是领导者。其他ZooKeeper服务器则是跟随者,它们接收来自领导者的建议,对传递的消息达成一致。消息层考虑了替换失败的领导者和跟随者与领导者同步的问题。

ZooKeeper使用定制的原子消息协议。因为消息层是原子的,ZooKeeper可保证本地拷贝不会发散(diverge)。收到写请求时,领导者计算写入操作后系统的状态,将其转换成一个捕获此状态的事务。

8 使用

ZooKeeper的编程接口非常简单。但是,可将其用于实现高层顺序操作,如同步原语、组成员管理、所有者关系管理等。更多信息请参看tbd。

9 性能

ZooKeeper被设计为高性能的。但它真的是高性能的吗?Yahoo研究中心的ZooKeeper开发团队证实了ZooKeeper的高性能,特别是在读操作比写操作多的应用中(见下图),因为写操作涉及在所有服务器间同步状态。(读操作比写操作多是协调服务的典型情况)

上图是ZooKeeper 3.2在配置有两个2GHz Xeon处理器和两个SATA 15K RPM驱动器的服务器上运行时的吞吐率图形。一个驱动器配置为ZooKeeper日志专用设备。快照写入到操作系统驱动器。读写操作1KB的数据。“服务器数”指的是ZooKeeper集群的大小,即组成服务的服务器个数。大约30个其他服务器用于模拟客户端。ZooKeeper集群配置为不允许客户端连接到领导者。

提示:3.2版的读写性能是3.1版的2倍。

Benchmarks也表明ZooKeeper是可靠的。下图(第10节的图)显示了ZooKeeper在各种失败情况下的反应。图中标记的各个事件是:

1.跟随者失败和恢复

2.另一个跟随者失败和恢复

3.领导者失败

4.两个跟随者失败和恢复

5.另一个领导者失败

10 可靠性

为揭示在有失败注入时系统的行为,我们在一个由7台机器组成的ZooKeeper服务上运行和先前一样的benchmark测试,但是让写操作的百分比固定为30%,这是预期负载比例的保守估计。

此图有几处值得仔细观察。首先,如果跟随者失败后快速恢复,则ZooKeeper可以维持高吞吐率。但更重要的是,领导者选举算法让系统可以足够快地恢复,以阻止吞吐率有实质性的下降。据我们观察,ZooKeeper选举一个新的领导者的时间小于200ms。第三,一旦跟随者恢复并且开始处理请求,ZooKeeper可以恢复高吞吐率。

11 ZooKeeper工程

ZooKeeper已经在很多工业应用中成功使用。Yahoo!在Yahoo! Message Broker中使用ZooKeeper作为协调和故障恢复服务。Yahoo! Message Broker是一个高度扩展的发布-订阅系统,管理着成千上万个需要拷贝和数据传递的话题。Yahoo!的很多广告系统也使用ZooKeeper来实现可靠服务。

我们鼓励用户和开发者加入社区,贡献技能。更多信息请看Apache的ZooKeeper工程。


Zookeeper集群部署以及故障测试 1)当ZKServer-1节点启动后,会比较自身的ServerID,目前集群中没有其他节点,因此该节点就认为自己的ServerID是集群中最大的,给自己投一票,但是Leader的选举条件必须是票数超过集群中半数节点,例如三个节点必须至少有2个同意才可以,两个节点的集群中有2票也才可以选举为Leader,由于票数不够的问题,ZkServer-1节点就会处于Follower节点。4)剩下的其余节点在加入集群后,发现已经有Leader节点了,就不会再选举,而是成为Follower节点。 阅读详情

相关推荐

zookeeper-benchmarkv2

ZooKeeper 基准 作者:、、 如有任何问题或意见,请联系 。 非常欢迎补丁和附加功能! 介绍 该项目提供了一个工具来衡量的性能。 它旨在测量 ZooKeeper 集合在预定时间长度内的每个请求延迟(例如,持续处理 30 秒的创建请求)。 该工具可用于构建如图 8 论文,不同于,它提交固定数量的操作并记录完成所有操作的时间其中。 该基准测试在处理 znode 读取、对单个 znode 的重复写入、znode 创建、对多个 znode 的重复写入和 znode 删除方面练习集成的性能。 这些测试可以通过同步或异步操作来执行。 基准测试使用每个服务器一个线程连接到 ZooKeeper 集合中的每个服务器。 在同步操作中,每个客户端在收到前一个请求的结果后,会发出一个新的请求。 在异步操作中,每个客户端线程都有一个全局可配置的目标,用于未完成的异步请求的数量。 如果未完成请求的数量低于

ZooKeeper性能测试

参考来源如下。 https://github.com/brownsys/zookeeper-benchmark 打包 使用开源工具进行 ZooKeeper 的性能测试,参考官方文档,通过 mvn -DZooKeeperVersion=<version> package 进行打包。但是为了使用方便,我把所有的依赖包都打成一个大的 jar 包了,所以在 pom.xml 文件加上下面的插件,然后再执行命令 mvn assembly:assembly 即可。 <plugin>

runzhliu大数据/容器日记 3044

benchmark:测试基准网络性能的工具

网络基准 快速开始 要在本地运行: # Install packages npm install # Run the server npm start 该应用程序将在可用。

Zookeeper分布式高性能协调服务-what、why、how

目录 zookeeper的由来 zookeeper是什么?设计目的? zookeeper带来的问题 zookeeper有什么? zk特性 ZK主从集群 ZAB协议 zookeeper的由来 说到这里,zookeeper是为了解决分布式集群带来的问题,就得说说什么是分布式?分布式集群带来了哪些问题?zookeeper解决了什么问题? 1.什么是分布式?分布式两...

向阳而生 353

优快云积分获取与管理全攻略

技术社区积分系统是知识共享生态的核心激励机制,通过量化用户贡献实现资源交换。其底层逻辑遵循Web2.0时代的UGC经济模型,用户通过内容创作、社区互动等行为积累虚拟资产。在开发者社区场景中,积分体系能有效促进技术文档、工具源码等资源的流通,优快云作为国内头部平台,其积分规则具有典型参考价值。掌握签到策略、内容互动技巧和资源上传规范等实操方法,可系统性提升积分获取效率。2023年新规强化了连续签到奖励和互动质量检测机制,结合GitHub等开源平台资源互补,能构建更高效的技术资源获取路径。

weixin_34233974的博客 217

HMC5883L磁力计驱动开发:I²C通信、校准与FreeRTOS集成

磁力计是惯性导航与电子罗盘系统的核心传感器,其输出原始磁场数据需经精确采集、单位换算与误差补偿才能用于姿态解算。基于各向异性磁阻(AMR)原理的三轴磁力计,如HMC5883L,依赖稳定I²C通信获取12位有符号磁场采样值,并通过增益配置、硬软铁校准及温度补偿提升物理量精度。在嵌入式实时系统中,驱动层须保障数据的时间一致性与抗干扰鲁棒性,避免总线挂死、字节错位或量程误配等典型问题。本文围绕HMC5883L这一广泛使用的停产但仍在产线服役的磁传感器,详解寄存器配置、定点单位转换、八方位校准算法及FreeRTOS

weixin_42594427的博客 145

Zookeeper概述

目录 Zookeeper概述 Zookeeper特点 Zookeeper数据结构 Zookeeper应用场景 统一命名服务 统一配置管理 统一集群管理 服务器节点动态上下线 软负载均衡 Zookeeper安装 软件准备 ZK本地模式安装部署 ZK操作 ZK配置参数分析 Zookeeper概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的A...

StephenYou的自习室 345

Llama模型结构拆解:为什么MLP模块要这样设计?从参数配置到计算流程全解析

本文深入解析了Llama模型MLP模块的设计精髓。通过拆解其三线性层结构、门控机制与SwiGLU激活函数,揭示了并行计算如何提升效率,并详细阐述了intermediate_size参数配置背后的经验权衡与计算考量,帮助读者透彻理解这一核心组件的设计逻辑与工程实现。

mac99的博客 528

zookeeper概述

xianrenqiu1234的博客 145

告别手写代码!用Simulink给TI F28335 DSP自动生成C代码(保姆级环境配置)

本文详细介绍了如何利用Simulink为TI F28335 DSP自动生成C代码,告别传统手写代码的低效与错误。通过保姆级环境配置指南和实战案例,帮助开发者快速掌握模型驱动开发方法,大幅提升嵌入式开发效率,特别适合需要频繁修改算法参数或团队协作的工程师。

weixin_30388677的博客 416

CST仿真微带贴片天线学习笔记

谐振频率为3.48GHz,基板采用Rogers RT5880板材,介电常数2.2,损耗角正切0.0009,厚度1.57mm,馈电方式为同轴馈电。

qq_36521926的博客 9431

Zookeeper 概述

Apache Zookeeper是一个开源的分布式协调服务,它为分布式应用提供一致性服务,包括配置维护、域名服务、分布式同步和组服务等。Zookeeper最初是Hadoop的一个子项目,但现在已成为许多分布式系统的核心组件。

心有—林夕的博客 1657

基于three.js的室内全景3D展馆案例分享

3D场景展厅

acheng 3558

【zookeeper】zookeeper概述

一、是什么? 二、基本概念 三、数据模型 四、特性-过半存活 五、选举机制

遇见未知的自己 644

使用 MATLAB/Simulink 对基于同步发电机的双机系统进行建模

双机系统(Two-Machine System)是电力系统中用于研究动态稳定性和控制策略的一个典型模型。它由两台同步发电机通过输电网络相互连接,模拟实际电网中的互联操作。当发生短路故障时,系统的暂态稳定性会受到挑战,可能导致发电机失步或电压崩溃。本教程将带你使用 MATLAB/Simulink 对基于同步发电机的双机系统进行建模,并对其在短路故障条件下的暂态稳定性进行仿真和分析。

amy_mhd的博客 216

成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred

成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred. 目录 解决问题 解决思路 解决方法 解决问题 安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred. 解决思路 发生未知错误。 解决方法 很可能是因为当前电脑下载的cuda版本不适合当前电脑GPU支持的cuda版本! 推荐文章:CV:Win1..

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 7523

zookeeper 概述

zookeeper概述 *********************************** 基本特性: 所有的操作都是基于内存操作,具有较高的读写性能; 保证分布式数据一致性,同一客户端的事务请求可按顺序应用到zookeper中; 所有的事务请求由leader zookeeper处理,非事务请求可由任意的zookeeper处理; *******************...

weixin_43931625的博客 692

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ZooKeeper源码解析(一):ZooKeeper概述

zk主要的架构图 zk主要的包结构 如上图所示,zk大概涵盖了以下的包以及功能: Admin包: 它里面只有一个继承了ZooKeeper类的ZooKeeperAdmin类,用以承担管理zk集群的任 务,例如重新注册集群 Cli包:接收并执行用户输入的各种命令 Client包: 主要是客户端连接的一些辅助类 Common包:公共工具类 jmx包:提供jmx

flashflight的专栏 3473

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: ZooKeeper Leader选举
下一篇: 部署与管理ZooKeeper
架构师的清醒
博客等级 码龄14年 291粉丝 397原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值