大规模集群环境下的协调者Zookeeper

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
云原生网关 MSE Higress,422元/月
简介: 在大数据和云计算普遍的今天,越来越多的应用使用了Apache下zookeeper这个利器,举几个家喻户小的,像HBase,Kafka,国内阿里巴巴开源的Dubbo等。

在大数据和云计算普遍的今天,越来越多的应用使用了Apache下zookeeper这个利器,举几个家喻户小的,像HBase,Kafka,国内阿里巴巴开源的Dubbo等。

首先来了解下zookeeper,原型是Google的Chubby,数据结构是树,我个人理解其实zookeeper也是nosql的一种,是一个非关系型数据库,里面存储的是树结构的数据,包括结点与关系,还有结点上存储的数据。不过zookeeper的强大之处还不是nosql,他的强大之处在于内部的集群机制与事件机制,我说的集群机制是指zookeeper的集群中的选举算法,涉及FAST PAXOS和两段提交算法,相比我看过的hazelcast这个集群下内存共享的组件的选举算法要复杂。还的一点就是事件的监听与处理机制,我在工作中使用到的包括结点的变化事件和结点的子树变化事件等,前者适用与系统的配置的管理,后者则适用于故障监听和失效转移。

用我之前博客里的图为例:

主要是紫色圈起来的部分,集群中的系统部件以TCP连接到zookeeper上,在一个结点下创建一个临时的子结点,当连接到zookeeper的部件发生故障与zookeeper之间的socket断开后,zookeeper中的父结点会产生一个子树发生变化的事件,这样对于订阅了这个父结点子树变化的系统会收会通知。这个功能特别适用于Service的消费方与提供方之间进行可靠的选择。

还以苹果消息通知推送系统为例,服务消息方先订阅事件,并做事件变化的处理:


		zkClient.subscribeChildChanges(apnsnode, new IZkChildListener() {

			@Override
			public void handleChildChange(String parentPath,
					List<String> currentChilds) throws Exception {
				MQUtil.getInstance().setQueues(currentChilds);
				for (String queue : currentChilds) {
					amqpAdmin.declareQueue(new Queue(PRD_PRIX + queue, true,
							false, false));
					amqpAdmin.declareBinding(new Binding(PRD_PRIX + queue,
							DestinationType.QUEUE, PRD_PRIX + exchange, queue,
							null));
					amqpAdmin.declareQueue(new Queue(DEV_PRIX + queue, true,
							false, false));
					amqpAdmin.declareBinding(new Binding(DEV_PRIX + queue,
							DestinationType.QUEUE, DEV_PRIX + exchange, queue,
							null));
				}
			}
		});

而服务的提供方要做的就是将自己注册到结点上:

	public void init() {
		// 创建连接
		zkClient = new ZkClient(address);
		// 如果根结点不存在则创建根结点
		if (!zkClient.exists(apnsnode)) {
			zkClient.createPersistent(apnsnode);
		}
		String prefix = "";
		try {
			// 以IP地址为前辍
			prefix = Inet4Address.getLocalHost().getHostAddress();
		} catch (UnknownHostException e) {

		}
		// 创建CPU核心个数队列
		int number = Runtime.getRuntime().availableProcessors();
		for (int i = 0; i < number; i++) {
			// 队列名
			String node = prefix + "." + i;
			// 子结点名
			String path = apnsnode + "/" + node;
			if (!zkClient.exists(path)) {
				// 创建临时结点
				zkClient.createEphemeral(path);
			}
			queues.add(node);
		}
	}

这个功能也是zookeeper被广泛应用的主要原理,当然,zookeeper还有很多值得研究和学习的地方,推荐大家好好的研究和使用一下zookeeper,我在工作中已经在很多场景中使用,有一个是用zookeeper做的一个系统功能的开关,也就是用他做配置管理。

相信在大数据和云计算下zookeeper一定会被应用越来越广,性能也会越来越好。


目录
相关文章
|
6月前
|
消息中间件 运维 Java
搭建Zookeeper、Kafka集群
本文详细介绍了Zookeeper和Kafka集群的搭建过程,涵盖系统环境配置、IP设置、主机名设定、防火墙与Selinux关闭、JDK安装等基础步骤。随后深入讲解了Zookeeper集群的安装与配置,包括数据目录创建、节点信息设置、SASL认证配置及服务启动管理。接着描述了Kafka集群的安装,涉及配置文件修改、安全认证设置、生产消费认证以及服务启停操作。最后通过创建Topic、发送与查看消息等测试验证集群功能。全网可搜《小陈运维》获取更多信息。
540 1
|
10月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
215 1
|
分布式计算 监控 Hadoop
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
199 1
|
分布式计算 Hadoop Unix
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
209 1
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
224 1
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
171 0
|
存储 数据库
zookeeper 集群环境搭建及集群选举及数据同步机制
zookeeper 集群环境搭建及集群选举及数据同步机制
375 2
|
开发工具
部署安装zookeeper集群
部署安装zookeeper集群
131 0
|
Java 网络安全
分布式系统详解--框架(Zookeeper-简介和集群搭建)
分布式系统详解--框架(Zookeeper-简介和集群搭建)
214 0