使用zookeeper逐个执行

时间:2015-07-15 06:30:40

标签: apache-zookeeper

在分布式系统中,有5个进程,使用zookeeper进行协调。 我需要这些过程在每一轮中逐个运行。 运行顺序是动态的,但每轮都知道。

任何动物园管理员食谱都能做到吗?感谢

例如: 第1轮:1 2 3 4 5 第2轮:3 2 4 1 5

1 个答案:

答案 0 :(得分:0)

您的问题尚未完全定义:

  1. 在给定进程无法启动的情况下,我们是否有任何超时或系统是否暂停?

  2. 进程是否在轮次之间终止,以便每轮都由一些外部机制启动?

  3. 我们关心流程终止状态吗?如果一个过程开始但在执行过程中失败,那么下一个过程应该开始吗?

  4. 在最简单的情况下,当我们

    • 接受停止
    • 不要区分成功终止和失败
    • 假设每一个过程都以某种方式开始每一轮并且知道它在当前回合中的位置

    我们可以使用以下方法(可能可以简化):

    1. 对于给定的回合,要么预先设置要么在回合中进行第一个过程,请创建路径/round
    2. 第一个过程
      • 检查getChildren('/round')是否返回空列表
      • 创建一个短暂的znode /round/exec_1
      • 创建永久znode /round/start_1
    3. 每个其他进程号N
      • 获取/round的孩子列表
      • 检查/round/start_{N-1}是否存在
      • 如果是,则检查/round/exec_{N-1}并等待删除(使用观察者)
      • 如果没有,等待它出现(使用观察者),然后就好像节点已经存在一样。
    4. 如果上述问题的答案不同,则可以调整此协议。

      但这里的一般想法是定义我们如何表明流程是好的:我们注册先前流程已经开始然后等待它终止的事实。