Zookeeper学习笔记七之主从节点任务分配

主从节点任务分配

     通过前面的学习持久节点和临时节点,我们知道可以通过建立持久节点和临时节点配合进行主从任务的分配,下面实现一个小小的例子

     前提,已经安装好了Zookeeper服务端,运行zkServer脚本启动服务端,打开zkCli客户端连接到服务端进行操作。

一 创建三个重要的父znode: /workers          /tasks          /assign

Zookeeper学习笔记七之主从节点任务分配_第1张图片

    新创建的三个节点为持久性节点,且不包含数据,本例中,可以通过这三个节点知道哪些从节点当前有效,哪些任务需要分配,并向从节点分配任务。在真实的应用中,这些znode可能由主进程在分配任务前创建,也可能由一个引导程序创建,一旦节点存在了,主节点就需要监视/workers 和/tasks的子节点变化情况

二 对/wokers    /tasks进行节点监控

使用 ls /woker true   ls /tasks true 对/workers  /tasks 节点进行监控

三 从节点角色

     从节点首先要通知主节点,告知从节点可以执行任务。从节点通过再/workers子节点下创建临时性的znode来进行通知

首先再次打开一个zkCli客户端,进行临时znode的创建 ,命令:create -e /workers/myworker1 "myworker1"

创建完成后切换到之前设置监视点的zkCli,会发现主节点观察到了从节点创建的信息

Zookeeper学习笔记七之主从节点任务分配_第2张图片

下一步,从节点需要创建一个父 znode/assign/myworker1 来接收任务分配,并通过第二个参数为true的ls命令来监视这个节点的变化,以便等待新的任务

Zookeeper学习笔记七之主从节点任务分配_第3张图片

从节点已经准备就绪,可以接受任务分配,接下来通过讨论客户端角色看一下任务分配的问题

四 客户端角色

客户端向系统中添加任务,假设客户端请求主从系统来运行cmd命令,为了向系统添加一个任务,客户端执行以下操作

前提:再次打开一个新的zkCli客户端

我们需要按照任务添加的顺序来添加znode,本质上为一个队列。客户端必须等待任务执行完毕。执行任务的从节点将任务执行完毕后,会创建一个znode来表示任务状态。客户端通过查看任务状态的znode是否创建来确定任务是否执行完毕,因此客户端需要监视状态znode的创建事件,执行任务的从节点会在/tasks/task-0000000000节点下创建状态znode节点,因此我们执行命令   ls /task/task-0000000000 true进行监控

之前我们对/tasks节点进行了监控,现在切换到监控/tasks的zkCli,会发现添加任务触发了监控

Zookeeper学习笔记七之主从节点任务分配_第4张图片

主节点之后会检查这个新的任务,获得可用的从节点列表,之后分配这个任务给myworker1

Zookeeper学习笔记七之主从节点任务分配_第5张图片

从节点收到新任务分配的通知

Zookeeper学习笔记七之主从节点任务分配_第6张图片

从节点检查新任务,确认任务是否分配给自己

一旦从节点完成任务的执行,它就会在/tasks中添加一个状态的znode,同时,之前设置的监控点将会进行通知,并检查执行结果

Zookeeper学习笔记七之主从节点任务分配_第7张图片

检查执行结果

Zookeeper学习笔记七之主从节点任务分配_第8张图片

客户端检查状态znode的信息,并确认执行结果。本例中,我们看到任务成功执行,其状态为"done" 。实际中任务可能非常复杂,并且涉及分布式系统。最终不管是什么样的任务,执行任务的机制与通过zookeeper来传递结果,本质上是一样的。

------有些worker单词少拼了s,请谅解,照着截图操作,不影响

 

2018/9/22  中秋节快乐 by minyi 

你可能感兴趣的:(zookeeper)