gpt4 book ai didi

shell - 小规模负载均衡

转载 作者:行者123 更新时间:2023-12-01 19:00:27 25 4
gpt4 key购买 nike

我有一系列的工作需要完成;作业之间没有依赖关系。我正在寻找一种工具来帮助我将这些工作分配给机器。唯一的限制是每台机器一次只能运行一项作业。我正在努力最大化吞吐量,因为工作不是很平衡。我当前编写的 shell 脚本效率较低,因为我预先构建了每台机器的作业队列,并且无法将作业从负载较重的机器的队列移动到已经完成所有操作的正在等待的机器。

之前的建议包括 SLURM,这似乎有点过头了,甚至更过头了 LoadLeveller。

GNU Parallel 看起来几乎正是我想要的,但远程机器不支持 SSH;使用了一个自定义作业启动器(没有排队功能)。我想要的是 Gnu Parallel,其中机器可以在调度作业之前动态替换为 shell 脚本。

所以,总结一下:

  • 作业列表 + 可接受的机器列表:最大化吞吐量。尽可能靠近 shell 是首选。

最坏的情况是某些东西可以与 bash 的锁定文件一起被黑客攻击,但我觉得某个地方必须存在更好的解决方案。

最佳答案

假设您的作业位于文本文件 jobs.tab 中,如下所示

/path/to/job1
/path/to/job2
...

创建 dispatcher.sh 类似

mkfifo /tmp/jobs.fifo
while true; do
read JOB
if test -z "$JOB"; then
break
fi
echo -n "Dispatching job $JOB .."
echo $JOB >> /tmp/jobs.fifo
echo ".. taken!"
done
rm /tmp/jobs.fifo

并运行一个实例

dispatcher.sh < jobs.tab

现在创建launcher.sh

while true; do
read JOB < /tmp/jobs.fifo
if test -z "$JOB"; then
break
fi

#launch job $JOB on machine $0 from your custom launcher

done

并在每台目标机器上运行一个 launcher.sh 实例(将机器作为第一个也是唯一的参数)

关于shell - 小规模负载均衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10973521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com