我计划编写一个具有分布式 Worker 进程的应用程序。其中之一将是领导者,它将任务分配给其他进程。领导选举过程的设计非常简单:每个过程都试图在同一路径中创建一个临时节点。谁成功,谁就成为领导者。
现在,我的问题是如何设计均匀分配任务的过程?有什么食谱吗?
我将详细说明环境设置:
假设有 10 个 worker 机器,每一个运行一个进程,其中一个成为领导者。任务在队列中提交,Leader 将它们分配给一个 worker 。每当提交任务时,工作进程都会收到通知。
最佳答案
我不确定我是否理解你的领导者选举算法,但推荐的实现方法是使用顺序临时节点并使用 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
关于distributed-computing - 如何使用 ZooKeeper 设计任务分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5217795/