主-从模式的模型中,主要包括三个角色:
主节点:主要负责监视新的节点和任务,分配任务给可用的从节点;
从节点:通过注册自己,确保主节点看到它们可以执行任务,收到主节点分配的任务后,执行并记录状态;
客户端:创建新的任务并等待系统响应。
1. Zookeeper节点介绍
现通过ZooKeeper的API完成简单的主从协作。在此之前,需了解下ZooKeeper中节点的基本概念。节点的类型分为以下几类:
1. 持久节点:节点创建后就一直存在,直到有删除操作来主动删除该节点
2. 临时节点:临时节点的生命周期和创建该节点的客户端会话绑定,即如果客户端会话失效(客户端宕机或下线),这个节点自动删除
3. 时序节点:创建节点是可以设置这个属性,ZooKeeper会自动为给定的节点加上一个数字后缀,作为新的节点名。数字后缀的范围是整型的最大值
4. 临时性时序节点:同时具备临时节点与时序节点的特性,主要用于分布式锁的实现
2. 各个角色的实现
基于Zookeeper各个类型节点的特点,实现主从模式中的各个角色。在ZooKeeper中创建以下节点用于主从协作:
/master 表示主节点;
/workers/worker-id 表示从节点;
/tasks/task-id 表示任务;
/assign 表示任务分配情况。
2.1 主节点角色
因为只有一个进程会成为主节点,所以进程成为主节点后必须锁定管理权,因此进程需要创建名为/master的临时节点,并写入数据,记录该进程的信息