将负载分布到在集群的每个节点上运行的perl脚本实例

将负载分布到在集群的每个节点上运行的perl脚本实例,perl,ipc,scalability,distribution,high-availability,Perl,Ipc,Scalability,Distribution,High Availability,我在集群(每个运行RHEL)的每个节点/机器(总共4台)上安装了一个perl脚本(称为worker)。脚本本身被配置为服务(这意味着只要集群中至少有一个节点处于运行状态,RH集群管理器就会确保该脚本的一个实例正在运行) 我每天要做X个数量的工作,一天一次,这个脚本就是这么做的。到目前为止,X足够小,并且只有这个脚本的一个实例足以完成它。但是现在负载将增加,随着高可用性(即已经使用实现),我还需要负载分配 问题是我如何做到这一点 当然,我有办法将工作分成n个部分,每个部分的大小为X/n。我心目中的

我在集群(每个运行RHEL)的每个节点/机器(总共4台)上安装了一个perl脚本(称为worker)。脚本本身被配置为服务(这意味着只要集群中至少有一个节点处于运行状态,RH集群管理器就会确保该脚本的一个实例正在运行)

我每天要做X个数量的工作,一天一次,这个脚本就是这么做的。到目前为止,X足够小,并且只有这个脚本的一个实例足以完成它。但是现在负载将增加,随着高可用性(即已经使用实现),我还需要负载分配

问题是我如何做到这一点

当然,我有办法将工作分成n个部分,每个部分的大小为X/n。我心目中的选择:

创建一个新的负载分配器,将工作拆分为X/n的作业。以及下列其中一项:

  • 在上创建命名管道(在所有节点上安装并可见),将所有作业发布到管道。使每个节点上的每个辅助脚本从管道中读取(原子)并执行工作。或
  • 让每个节点上的每个工作脚本侦听TCP套接字,负载分发服务器以循环(或其他某种algo)方式将作业发送到此套接字
  • #1的理论问题是,我们观察到NFS存在一些严重的延迟问题。我在机器上

    #2的理论问题是,我必须实现一些监视器,以确保每个工作人员都在运行和侦听,这是Perl的一个障碍,我不确定这是否足够简单

    我个人更喜欢load distributor创建一个池,然后工人从中拉出,而不是load distributor跟踪每个工人并将工作推给每个工人。还有其他选择吗

    我也乐于接受新想法。:)

    谢谢

    --编辑--


    准确地说,使用Perl 5.8.8:这是为x86_64-linux-thread-multi构建的Perl,v5.8.8。如果您想保持简单,请使用数据库存储作业,然后让每个工作人员锁定表并获得所需的作业,然后解锁,让下一个工作人员完成自己的工作。这并不是最具可扩展性的解决方案,因为您将遇到锁争用,但只要4个节点就可以了

    但是,如果你开始沿着这条路走下去,看看像这样的专用工作队列系统可能是有意义的。

    我希望避免这种情况(DB)。。但现在你这么说,实际上听起来好多了……:)谢谢