2020暑假第4周
这周开始学习Zookeeper。
一个开源的分布式协调服务框架,主要用来解决分布式集群中应用系统的一致性问题和数据管理问题。
Zookeeper本质上是一个分布式文件系统,适合存放小文件,也可以理解为一个数据库。Znode是有路径的,也可以携带数据,所以Zookeeper可以对外提供出一个类似于文件系统的视图,可以通过操作文件系统的方法操作Zookeeper,使用路径获取Znode、获取Znode携带的数据、修改Znode携带的数据、删除Znode、添加Znode……
Zookeeper集群是一个基于主从架构的高可用集群。每个服务器承担一种角色:Leader或Follower或Obsever。
Zookeeper应用场景:数据发布和订阅、命名服务、分布式协调和通知(心跳检测、工作进度汇报、系统调度)、分布式锁(排它锁即写锁即独占锁、共享锁即读锁)、分布式队列。
选举机制(Leader选举):服务器启动时:每个sever发出一个投票、接受来自各个服务器的投票、处理投票、统计投票、改变服务器状态。服务器运行时选举Leader。
Zookeeper环境搭建。
Zookeeper的数据模型,在结构上和标准文件系统的非常相似,拥有一个层次的命名空间,都是采用树形层次结构。Zookeeper树中的每个节点就是一个znode,并且每个节点可以拥有子节点。Znode存储数据大小有限制、Znode通过路径引用(绝对路径)、一个Znode由stat、data、childen组成。
Znode有临时节点和永久节点两种,Znode还有一个序列化的特征。故Znode节点共有四种:临时节点、永久节点、临时节点序列化、永久节点序列化。
登录Zookeeper客户端:# cd /安装目录/.../
# bin/zkCli.sh -server node01:2181
quit (退出)
创建永久节点:create /hello
创建临时节点:create -e /abc 123
创建永久序列化节点:create -s /zhangsan boy
创建临时序列化节点:create -e -s /lisi boy
修改节点数据:set /hello zookeeper
删除节点,如果要删除的节点有子Znode则无法删除:delete /hello
删除节点,如果有子Znode则递归删除:rmr /abc
列出历史记录:histroy
znode有属性:dataVersion、cversion、aclVersion、cZxid、mZxid、ctime、mtime、ephemeralOwner等。
Zookeeper的watch机制:通过类似于数据库中的触发器,对某个Znode设置watcher,当Znode发生变化的时候,watermanager会调用对应的watcher。当Znode发生删除、修改、创建、子节点修改的时候,对应的watcher会得到通知。watcher有一次性触发(一个watcher只会被触发一次)和事件封装(得到的事件是被封装过的,包括keeperState、eventType、path)的特点。
Zookeeper的JavaAPI操作:使用的是一套Zookeeper客户端框架Curator,解决了很多Zookeeper客户端非常底层的细节开发工作。Curator包含了几个包:curator-framework(对Zookeeper的底层api的一些封装)、curator-recipes(封装一些高级特性,如:Cache事件监听、选举、分布式锁、分布式计数器等)。
54 default:
55 break;
56}
57}
58}
59 });
60 treeCache.start();
61 Thread.sleep(l:100000000);
62 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律