Why ZK

本文涉及的产品
云原生网关 MSE Higress,422元/月
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: ZooKeeper是一个开放源代码的分布式协调服务,由知名互联网公司雅虎创建,是Google Chubby的开源实现。ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

ZooKeeper是一个开放源代码的分布式协调服务,由知名互联网公司雅虎创建,是Google Chubby的开源实现。ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

ZooKeeper是什么

ZooKeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅,负载均衡,命名服务,分布式协调/通知,集群管理,Master选举,分布式锁和分布式队列等功能。ZooKeeper可以保证如下分布式一致性特征。
- 顺序一致性:从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到ZooKeeper中去。
- 原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群所有机器都成功应用了某一个事务,要么都没有应用,一定不会出现集群中部分机器应用了该事务,而另外一部分没有应用的情况。
- 单一视图(Single System Image):无论客户端连接的是哪个ZooKeeper服务器,其看到的服务端数据模型都是一致的。
- 可靠性:一旦服务端成功地应用了事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会一直保留下来,除非有另一个事务又对其进行了变更。
- 实时性:通常人们看到实时性的第一反应是,一旦一个事务被成功应用,那么客户端能够立即从服务端上读取到这个事务变更后的最新数据状态。这里需要注意的是,ZooKeeper仅仅保证了在一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态。

ZooKeeper的设计目标

ZooKeeper致力于提供一个高性能,高可用,具有严格的顺序访问控制能力的分布式协调服务。高性能似的ZooKeeper能够应用于那些对系统吞吐量有明确要求的大型分布式系统中,高可用似的分布式的单点问题得到了很好的解决,而严格的顺序访问控制使得客户端能够基于ZooKeeper实现一些复杂的同步原语。

目标一:简单的数据模型

ZooKeeper似的分布式程序能够通过一个共享的,树形结构的名字空间来进行相互协调。这里所说的树形结构的名字空间,是指ZooKeeper服务器内存中的一个数据模型,其由一系列被称为ZNode的数据节点组成,总的来说,其数据模型类似于一个文件系统,而ZNode之间的层级关系,就像文件系统的目录解耦一样。不过和传统的磁盘文件系统不同的是,ZooKeeper将全量数据存储在内存中,以此来提高服务器吞吐,减少延迟的目的。

目标二:可以构建集群

组成ZK集群的每台机器都会在内存中维护当前的服务器状态,并且每台机器之间都互相保持着通信。值得一提的是,只要集群中存在超过一半的机器能够正常工作,那么整个集群就能够正常对外服务。
ZK的客户端程序会选择和集群中任意一台机器共同来创建一个TCP连接,而一旦客户端和某台ZK服务器之间的连接断开后,客户端会自动连接到集群中的其他机器。

目标三:顺序访问

对于客户端的每个更新请求,ZK都会分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序,应用程序可以使用ZK的这个特性来实现更高层次的同步原语。

目标四:高性能

由于ZK将全量数据存储在内存中,并直接服务于客户端的所有非事务请求,因此它尤其适合以读操作为主的应用场景。

目录
相关文章
|
Go 数据库
Golang 语言编写 gRPC 实战项目
Golang 语言编写 gRPC 实战项目
291 0
|
机器学习/深度学习 人工智能 自然语言处理
提升软件测试效率与质量:AI驱动的自动化测试策略
【2月更文挑战第19天】 在快速迭代的软件发展环境中,传统的手动测试方法已无法满足高效率和高质量的要求。本文探讨了人工智能(AI)技术如何革新现有的软件测试流程,通过引入AI驱动的自动化测试策略,旨在提高测试覆盖率,减少人为错误,优化资源分配,并缩短产品上市时间。我们将分析AI在识别潜在缺陷、生成测试用例、执行测试以及结果分析中的应用,并讨论实施这些策略时可能遇到的挑战和限制。
1164 3
|
IDE 开发工具 图形学
Visual Basic游戏开发:进入娱乐世界的编程
【4月更文挑战第27天】本文引导初学者使用Visual Basic进行游戏开发,强调其易学性、图形支持和Windows兼容性。通过搭建开发环境、学习基础语法,从“猜数字”到“贪吃蛇”游戏实例,逐步进阶。此外,探讨了性能优化、引入游戏引擎和多媒体音效等高级技巧,鼓励开发者用VB开启游戏编程之旅,创造自己的娱乐世界。
377 0
Saga模式在处理长事务时有哪些优势和潜在的缺陷
Saga模式在处理长事务时有哪些优势和潜在的缺陷
AC/DC电源模块的工作原理基于一系列的电子组件和电路
AC/DC电源模块的工作原理基于一系列的电子组件和电路
AC/DC电源模块的工作原理基于一系列的电子组件和电路
|
机器学习/深度学习 人工智能 安全
Gandalf AI 通关详解(大模型安全)
Gandalf AI 通关详解(大模型安全)
|
存储 监控 安全
如何在iPhone设备中查看崩溃日志
如何在iPhone设备中查看崩溃日志
373 1
|
存储 NoSQL 关系型数据库
Redis持久化策略AOF、RDB详解及源码分析
Redis持久化策略AOF、RDB详解及源码分析
|
消息中间件 设计模式 缓存
API网关到底是什么?和BFF有什么关系?为什么前后端都需要关注?
API网关到底是什么?和BFF有什么关系?为什么前后端都需要关注?
Three.js系列: 游戏中的第一/三人称视角
Three.js系列: 游戏中的第一/三人称视角
Three.js系列: 游戏中的第一/三人称视角