ZK 从入门到放弃 入门篇

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,182元/月
云原生网关 MSE Higress,422元/月
简介: ZK 从入门到放弃 入门篇

写在前面

当公司的技术栈入坑分布式开发之后,必然不可获取的学习,是对ZK(Zookeeper)的学习与研究。ZK作为分布式开发中常用的一个组件,其重要性不言而喻。

在还没出现微服务的时间里,ZK独挑大梁,作为注册中心,实现服务之间的协调调度。随着微服务的兴起,才出现了一些其他的服务注册中心,如eureka、nacos等等。不管出现何种组件,ZK在实际的市场份额中,仍占有很大的比重,因此,学习ZK的必要性,不言而喻。


什么是Zookeeper

image.png

Zookeeper  简称ZK,是一种用于分布式应用程序的高性能协调服务,提供一种集中式信息存储服务,有着典型的特点。

  • 数据存储在内存中,就会有高性能的读取与存储
  • 类型文件系统的树形结构(文件和目录)
  • 高吞吐量
  • 低延迟
  • 集群高可靠

根据以上特点,ZK具有很多实际中使用的工作,常见的作用包括基于Zookeeper实现分布式统一配置中心、服务注册中心、分布式锁等

image.png

ZK,可以通过构建集群,来实现高可用。如上图所示,每一个Server称为Leader,然后每个Client是可以连接任何一个Server。ZK是一个C/S架构的组件。

何为分布式协调服务

谈到这个话题,就不得不去聊一下,技术架构的演进。技术架构,由传统的单体架构,发展到分布式架构。

以一个实例来说,有这样一个功能。一个电商网站,用户在线点击购买,然后系统完成下单,支付,出货逻辑。

在传统的单体架构中,应用独立部署,应用涵盖了前端展示页面、后端整个交互逻辑。整个系统的交互逻辑,都在单独的应用中实现。

image.png

相关的业务逻辑都在单体应用完成。

当架构演变为分布式架构之后,系统变得复杂,单体应用,按照一定规则,拆分成多个应用

image.png

业务逻辑,由多个应用完成。整个系统变得复杂,为了更好地实现业务逻辑,就需要有一个分布式协调员的角色出现。

同时呢,在单体应用架构中,对于多线程资源的竞争可以通过同步关键字或者加锁来实现,但是在分布式架构中,就变得复杂,如果需要实现分布式架构事务,也必然需要一个分布式协调员角色出现。

有了分布式协调这个前提,为了更好地实现这个职责,抽取服务中共性的部分,就形成了分布式协调服务。

Zookeeper的应用案例

说了这么多,那么目前来说Zookeeper都有哪些实际的应用案例呢?其实,是非常多的,我们来依次列举下。

Hbase:

作为一个大数据应用框架,其中使用Zookeeper进行Master选举,完成分布式服务间协调

Solr:

使用Zookeeper进行集群管理、Leader选举、配置管理

Dubbo:

Dubbo可谓是非常火的分布式应用框架,使用Zookeeper进行服务注册

Mycat:

分库分表中间件,使用Zookeeper进行集群管理、配置管理

Sharding-sphere:

分库分表客户端应用,使用Zookeeper进行集群管理、配置管理

Zookeeper的同类产品

Zookeeper有一些相似功能的同类产品,如Consul、Etcd、Doozer

它们有着基本相同的功能,其中Etcd是精简版的Zookeeper

Zookeeper的安装使用

Zookeeper的安装,非常简单,官网,有着很详细的文档。

下载

image.png

官网首页,点击下载页面,选择合适的版本、镜像进行下载,下载完毕,进行解压。

安装目录如下所示:

image.png

配置

进入conf文件夹,完成初始化配置

image.png

复制zoo.sample.cfg,创建新的文件zoo.cfg。如果自定义配置名字,需要在bin目录下环境命令内进行显式设置,如下所示

image.png

zoo.cfg 内配置参数,可以参考官方文档,https://zookeeper.apache.org/doc/r3.6.1/zookeeperAdmin.html#sc_configuration

启动

Zookeeper是C/S架构,因此分为服务端、客户端两部分。

进入bin目录

bin/zkServer.sh start

完成服务端应用启动

bin/zkCli.sh -server 127.0.0.1:2181

完成客户端连接

目录
相关文章
|
存储 关系型数据库 MySQL
mysql安装教程mac
【4月更文挑战第21天】
680 1
|
4月前
|
存储 消息中间件 canal
zk基础—2.架构原理和使用场景
ZooKeeper(ZK)是一个分布式协调服务,广泛应用于分布式系统中。它提供了分布式锁、元数据管理、Master选举及分布式协调等功能,适用于如Kafka、HDFS、Canal等开源分布式系统。ZK集群采用主从架构,具有顺序一致性、高性能、高可用和高并发等特点。其核心机制包括ZAB协议(保证数据一致性)、Watcher监听回调机制(实现通知功能)、以及基于临时顺序节点的分布式锁实现。ZK适合小规模集群部署,主要用于读多写少的场景。
|
11月前
|
数据采集 自然语言处理 开发工具
通义灵码在 PyCharm 中的强大助力(下)
通义灵码在PyCharm中的优势包括提高开发效率、提升代码质量和易用性,并且能够不断学习和改进。然而,它也存在依赖网络、准确性有待提高和局限性等问题。未来,通义灵码有望支持更多编程语言,提高准确性和可靠性,与其他工具集成,并提升智能化程度。总体而言,通义灵码为Python开发者带来了显著的便利和潜力。
通义灵码在 PyCharm 中的强大助力(下)
|
4月前
|
前端开发 Java 数据库连接
一个完整 Java 项目常包含的各层次详解与全面解析
本内容介绍了Java项目的典型分层架构,涵盖开放接口层、终端显示层、Web层、Service层、Manager层、Mapper层及常用辅助层次,如实体层、DTO层、VO层等。通过合理划分各层职责,结合Spring Boot等框架,实现系统的高内聚、低耦合,提升可维护性与扩展性,适用于微服务与MVC架构设计。
410 0
|
8月前
|
人工智能 自然语言处理 Linux
NobodyWho:每个NPC都有独立灵魂!Godot插件实现本地LLM对话,离线生成多线剧情
NobodyWho 是一款为 Godot 游戏引擎设计的插件,支持在本地运行 LLM,实现互动小说创作,无需联网,确保隐私和高性能。
414 14
NobodyWho:每个NPC都有独立灵魂!Godot插件实现本地LLM对话,离线生成多线剧情
|
机器学习/深度学习 TensorFlow API
TensorFlow与Keras实战:构建深度学习模型
本文探讨了TensorFlow和其高级API Keras在深度学习中的应用。TensorFlow是Google开发的高性能开源框架,支持分布式计算,而Keras以其用户友好和模块化设计简化了神经网络构建。通过一个手写数字识别的实战案例,展示了如何使用Keras加载MNIST数据集、构建CNN模型、训练及评估模型,并进行预测。案例详述了数据预处理、模型构建、训练过程和预测新图像的步骤,为读者提供TensorFlow和Keras的基础实践指导。
795 59
|
12月前
|
消息中间件 Java 大数据
Kafka ISR机制详解!
本文详细解析了Kafka的ISR(In-Sync Replicas)机制,阐述其工作原理及如何确保消息的高可靠性和高可用性。ISR动态维护与Leader同步的副本集,通过不同ACK确认机制(如acks=0、acks=1、acks=all),平衡可靠性和性能。此外,ISR机制支持故障转移,当Leader失效时,可从ISR中选取新的Leader。文章还包括实例分析,展示了ISR在不同场景下的变化,并讨论了其优缺点,帮助读者更好地理解和应用ISR机制。
764 0
Kafka ISR机制详解!
|
移动开发 前端开发 安全
iframe实现跨域通信的方法
iframe实现跨域通信的方法
539 6
|
机器学习/深度学习 数据采集 存储
在机器学习和数据科学中,数据预处理是一个至关重要的步骤。数据规范化(或称为特征缩放)是预处理的一种常见技术,它可以帮助我们改进模型的性能。`sklearn.preprocessing`模块提供了多种数据规范化的方法,其中`StandardScaler`和`MinMaxScaler`是最常用的两种。
在机器学习和数据科学中,数据预处理是一个至关重要的步骤。数据规范化(或称为特征缩放)是预处理的一种常见技术,它可以帮助我们改进模型的性能。`sklearn.preprocessing`模块提供了多种数据规范化的方法,其中`StandardScaler`和`MinMaxScaler`是最常用的两种。
|
Java 数据库连接 数据库
Mybatis-Pagehelper详细解析及优化插件开发
项目数据库数据量较大,分页查询要很久,所以要对分页优化,项目使用的分页是mybatis的Pagehelper,于是在Pagehelper的基础上进行了本次分页查询的优化