🐼作者简介:一名大三在校生🎋
空有想法,没有实践,难成大事
专栏前言:探索RPC框架的奥秘
简介:在现代软件开发中,随着微服务架构的普及,远程过程调用(RPC)框架成为了连接服务之间通信的桥梁。我有决定开发了一款高性能的RPC框架,它不仅实现了服务之间的高效调用,还集成了关键的服务治理功能,如负载均衡、熔断机制和限流策略,以确保系统的稳定性和可靠性。
核心技术:本项目采用Netty作为其强大的底层通信组件,确保了网络通信的高效与稳定。同时,通过与ZooKeeper的结合,实现了服务的注册与发现,为服务治理提供了坚实的基础。
下面我将提供一个全面的视角,来理解RPC框架的内部工作原理及其在实际开发中的应用。欢迎大家持续关注订阅专栏!!!
文章目录
- 专栏前言:探索RPC框架的奥秘
- 【手撸RPC框架】zookeeper入门
- 一、概述
- 二、数据模型
- 三、watcher机制
- 四、Zookeeper安装
- 下载Zookeeper
- Zookeeper
- 启动Zookeeper
- 常用命令
- 配置多节点(集群)模式
- 五、Zookeeper基本操作命令
- 欢迎添加微信,加入我的核心小队,请备注来意
【手撸RPC框架】zookeeper入门
一、概述
- 概念:解释ZooKeeper是一个开源的分布式协调服务组件,用于构建可靠的分布式系统。它提供了一个高性能的、有序的、可靠的分布式数据存储和协调服务,简单的理解为一个内存数据库,特殊的数据结构和一些特性,他可以实现一些特殊的功能。
- 应用场景:在分布式系统中我们经常使用ZooKeeper实现服务注册发现、分布式锁、配置管理、命名服务和分布式协调等功能。
- 数据模型:ZooKeeper的数据模型是一个类似于文件系统的层次结构。每个节点称为ZNode,它可以存储数据和子节点。zookeeper中的ZNode可以分为持久节点和临时节点。
- Watcher机制:ZooKeeper允许开发人员在节点上设置监视点,以便在节点发生更改时接收通知。
二、数据模型
ZooKeeper的数据模型是一个类似于文件系统的层次结构,被组织成一个树形结构,每个节点称为ZNode。ZNode是ZooKeeper中的基本数据单元,它可以存储数据和子节点。
以下是ZooKeeper数据模型的详细说明:
- 树形结构:ZooKeeper的数据模型是一个树形结构,类似于文件系统的目录结构。整个树由根节点(称为"/")开始,每个节点可以有多个子节点。每个节点都有一个路径来唯一标识它,路径是由斜杠(/)分隔的一系列名称组成。
- ZNode:ZNode是ZooKeeper的基本数据单元,类似于文件系统中的文件或目录。每个ZNode可以存储一个字节数组作为其数据,可以是任意类型的数据,例如配置信息、状态信息等。每个ZNode还可以有多个子节点,形成层次结构。
- 持久节点(Persistent Node):持久节点在创建后一直存在,直到主动删除。持久节点的数据和子节点都是持久的,即它们在节点创建后仍然存在,直到被显式删除。
- 临时节点(Ephemeral Node):临时节点的生命周期与客户端会话绑定,当会话结束(例如客户端关闭或与ZooKeeper集合的连接断开)时,临时节点将自动被删除。临时节点的数据和子节点也将随之被删除。
- 顺序节点(Sequential Node):顺序节点在创建时会自动分配一个全局唯一且递增的编号。顺序节点的编号由ZooKeeper集合维护,可以用于实现有序性或生成全局唯一的标识符。
三、watcher机制
Watcher机制是ZooKeeper中非常重要的概念,它允许客户端在ZooKeeper上设置监视点,以便在节点发生变化时接收通知。Watcher机制使得开发人员可以及时获取关于数据变化的通知,以便采取相应的操作。
以下是Watcher机制的详细说明:
- 注册Watcher:客户端可以通过在对节点进行操作时注册Watcher来设置监视点。例如,在创建、更新或删除节点时都可以注册Watcher。客户端在注册Watcher时需要指定监视的路径和Watcher对象。当指定路径的节点发生变化时,ZooKeeper会将通知发送给客户端。
- Watcher通知:当一个节点发生变化时,ZooKeeper会将通知发送给注册了Watcher的客户端。Watcher通知是一次性的,也就是说,当客户端接收到Watcher通知后,该Watcher将被移除,需要客户端重新注册Watcher才能再次接收通知。
- Watcher的类型:数据变更触发的Watcher(Data Watcher):当节点的数据发生变化时触发,例如节点的值被修改。子节点变更触发的Watcher(Child Watcher):当节点的子节点发生变化时触发,例如新增或删除子节点。连接状态变更触发的Watcher(Existence Watcher):当客户端与ZooKeeper集合的连接状态发生变化时触发,例如连接断开或重新连接。
- Watcher的触发流程:当一个节点发生变化时,ZooKeeper首先会**将通知发送给与该节点相关的Watcher。**客户端接收到Watcher通知后,需要处理通知并根据需要采取相应的操作,例如重新读取数据或重新注册Watcher。
- Watcher的注意事项:Watcher通知是异步的,客户端需要保证处理Watcher通知的代码是线程安全的。Watcher通知是最终一致性的,即ZooKeeper不能保证Watcher通知的实时性,只能保证最终一致性。Watcher通知是有序的,当多个Watcher同时触发时,ZooKeeper会按照注册顺序依次发送通知。
通过理解Watcher机制,开发人员可以更好地利用ZooKeeper来实现分布式系统中的实时数据变更和协调操作。Watcher机制提供了一种高效且可靠的方式,使得分布式系统能够实时响应节点变化,保持数据的一致性。
安装Zookeeper可以通过以下步骤完成。我们将分为下载、配置和启动三个部分详细说明。
四、Zookeeper安装
下载Zookeeper
-
下载Zookeeper压缩包:
访问Zookeeper官网下载最新版本的Zookeeper。以zookeeper-3.7.0
为例:wget https://downloads.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
-
解压压缩包:
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz
-
移动到适当的目录:
sudo mv apache-zookeeper-3.7.0-bin /usr/local/zookeeper
Zookeeper
-
进入配置目录:
cd /usr/local/zookeeper/conf
-
复制模板配置文件:
cp zoo_sample.cfg zoo.cfg
-
编辑
zoo.cfg
文件:
使用你喜欢的编辑器(如vim
或nano
)打开zoo.cfg
文件进行编辑:vim zoo.cfg
以下是一些关键配置项,你可以根据需要进行调整:
# Zookeeper数据存储的目录 dataDir=/usr/local/zookeeper/data # 客户端连接的端口 clientPort=2181 # 配置最小会话超时时间(以毫秒为单位) tickTime=2000 # 初始和后续同步跟随者与领导者之间的初始化连接超时时间 initLimit=10 syncLimit=5
-
创建数据目录:
确保配置文件中的数据目录存在:mkdir -p /usr/local/zookeeper/data
启动Zookeeper
-
进入Zookeeper根目录:
cd /usr/local/zookeeper
-
启动Zookeeper服务:
bin/zkServer.sh start
-
验证Zookeeper是否启动成功:
查看Zookeeper服务状态:bin/zkServer.sh status
你应该会看到类似以下的输出,表示Zookeeper正在运行:
Mode: standalone
常用命令
-
停止Zookeeper服务:
bin/zkServer.sh stop
-
重启Zookeeper服务:
bin/zkServer.sh restart
-
连接到Zookeeper客户端:
bin/zkCli.sh -server 127.0.0.1:2181
配置多节点(集群)模式
如果你需要配置Zookeeper集群,可以在zoo.cfg
文件中添加以下内容:
server.1=server1:2888:3888
server.2=server2:2888:3888
server.3=server3:2888:3888
每个server.X
代表一个Zookeeper节点,2888
是节点之间通讯的端口,3888
是选举端口。
每个节点的dataDir
目录下需要有一个myid
文件,文件内容为对应的server.X
的X值,例如:
echo "1" > /usr/local/zookeeper/data/myid # 对应server.1
echo "2" > /usr/local/zookeeper/data/myid # 对应server.2
echo "3" > /usr/local/zookeeper/data/myid # 对应server.3
这样,你就可以搭建一个简单的Zookeeper集群了。
五、Zookeeper基本操作命令
ZooKeeper提供了一组命令行工具(CLI)来与ZooKeeper集群进行交互。以下是一些常见的ZooKeeper命令:
- connect:
- 连接到ZooKeeper集群。
- 语法:connect host:port
- ls:
- 列出指定路径下的子节点。
- 语法:ls
- create:
- 创建一个节点。
- 语法:create
- get:
- 获取指定节点的数据。
- 语法:get
- set:
- 设置指定节点的数据。
- 语法:set
- delete:
- 删除指定节点。
- 语法:delete
- stat:
- 获取指定节点的详细信息,包括数据版本、ACL权限等。
- 语法:stat
- getAcl:
- 获取指定节点的ACL(访问控制列表)权限信息。
- 语法:getAcl
- setAcl:
- 设置指定节点的ACL权限信息。
- 语法:setAcl
- quit/exit:
- 退出ZooKeeper命令行工具。
- 语法:quit 或 exit
这些命令可以通过在ZooKeeper命令行工具中输入相应的命令来执行。使用这些命令,可以查看和操作ZooKeeper集群中的节点和数据,管理ACL权限,以及执行其他与ZooKeeper相关的操作。
欢迎添加微信,加入我的核心小队,请备注来意
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇