如何使用ZooKeeper设计任务分发

时间:2011-03-07 09:13:40

标签: distributed-computing distributed-system apache-zookeeper

我打算编写一个具有分布式工作进程的应用程序。其中一个将是Leader,它将任务分配给其他进程。设计领导者选举过程非常简单:每个过程都尝试在同一路径中创建一个短暂的节点。无论谁成功,都会成为领导者。

现在,我的问题是如何设计均匀分配任务的过程?有什么配方吗?

我将详细介绍一下环境设置:

假设有10个工人机器,每个机器运行一个过程,其中一个成为领导者。任务在队列中提交,领导者接收它们并分配给工作人员。每当提交任务时,工作进程都会收到通知。

3 个答案:

答案 0 :(得分:8)

我不确定我是否理解你的领导者选举算法,但推荐的实现方法是使用顺序短暂节点并使用http://zookeeper.apache.org/doc/r3.3.3/recipes.html#sc_leaderElection处的算法来解释如何避免“群体”效应。< / p>

任务的分配可以使用简单的分布式队列完成,并不严格需要领导者。生产者将任务排队并且消费者在任务节点上监视 - 触发的监视将引导消费者执行任务并删除关联的znode。从失败的消费者中重新排列任务需要考虑某些边缘条件。 http://zookeeper.apache.org/doc/r3.3.3/recipes.html#sc_recipes_Queues

答案 1 :(得分:1)

我会推荐本书的Example: Master-Worker Application部分ZooKeeper Distributed Process Coordination http://shop.oreilly.com/product/0636920028901.do

该示例演示了使用znodes和常见的zookeeper命令将任务分发给worker。

答案 2 :(得分:0)

考虑使用actor单例服务模式。例如,在Scala中有Akka,用较少的代码解决了这类问题。