12

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

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

我将详细说明环境设置:

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

4

3 回答 3

8

我不确定我是否了解您的领导者选举算法,但推荐的实现方式是使用顺序临时节点并使用http://zookeeper.apache.org/doc/r3.3.3/recipes.html#中的算法sc_leaderElection解释了如何避免“羊群”效应。

任务的分发可以通过一个简单的分布式队列来完成,并不严格需要一个 Leader。生产者将任务排入队列,消费者在任务节点上保持监视 - 触发的监视将引导消费者接受任务并删除关联的 znode。从失败的消费者重新排队任务时需要考虑某些边缘条件。http://zookeeper.apache.org/doc/r3.3.3/recipes.html#sc_recipes_Queues

于 2011-06-17T15:00:51.233 回答
1

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

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

于 2015-05-14T08:13:43.590 回答
0

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

于 2012-05-23T12:35:44.367 回答