cron越来越大:下一个调度程序是什么?[关闭]


30

我一直记得使用cron已有很长时间,因为我记得自己可以处理所有的工作计划需求。从存储克隆/快照到针对数据库的报告,再到每日系统报告,再到监控检查,一切都通过cron计划在数百台服务器上进行。

缺点非常明显:难以管理作业,没有简单的方法来创建依赖关系(尤其是在不同服务器上),当然,不可避免的是有人“暂时”跳过了作业,但后来却忘记了删除注释。

我们尝试了商业发行,但最终它被认为太昂贵了,以至于超出了cron。

我看到了其他选项,例如SLURM,Oracle Grid Engine,Torque / Maui,Quartz,DIET,Condor,它们似乎适用于更大,更同类的集群环境,其作业可以在任意数量的相似节点上运行:网格计算等等。我们的环境是混合的(各种Linux,AIX和FreeBSD),我们需要在不同类型的系统之间创建依赖关系(例如,Linux机器上的作业可能需要确定AIX机器上的作业是否应该运行。)

有没有人有从cron转向更集中管理的产品的经验?选择软件的任何技巧,或者开源或商业化是否更好?

Answers:


11

Condor,OGE和Torque都可以帮助您实现这一目标,但只有Condor的DAGMan工具具有内置的依赖性管理。DAGMan使您可以建立一个有向的无环图来描述您的工作流程,而经理则负责在工作流程中移动作业并评估流程中每个步骤的通过/失败结果。Condor与平台无关,这意味着DAGMan也是如此,并且当父级在Linux或Windows上运行时,您当然可以在AIX上运行一个子步骤。DAGMan并不关心作业在哪里运行,只是退出代码是通过还是失败。

选择软件的任何技巧,或者开源或商业化是否更好?

有一些警告,我认为这个领域的自由社区非常值得研究。

OGE现在处于一个怪异的空间。运行Oracle生产的GE变种不再是免费的,并且Oracle不再提供它将其写回到GE SCC的代码,但是存在着大量的代码分支,它们试图作为免费的开放源代码项目来使用。特别是Univa领导了这项工作,雇用了前Sun GE开发人员继续致力于开源,免费提供的GE变体。Grid Engine有两个作用:易于设置,它可以处理短时间(少于2分钟)的作业,而不会在作业上增加大量的调度开销,从而降低了吞吐量。很大的缺点是对Windows的支持不是很好。我们中的一些人在很多年前就努力将其移植到Cygwin上,但是可以肯定的是它不如原生。

现在,Condor是您提到的三种技术的我的最爱。Condor周围有一个强大的社区,该软件非常成熟(现在已有20多年的历史了)。Windows和POSIX OS的本机支持意味着它可以在整个地方很好地运行。前面提到的DAGMan只是Condor随附的众多出色作品之一。设置起来可能有些复杂,但是一旦启动并运行,它就会变得坚如磐​​石。它具有一种非常灵活的语言,用于进行作业<->机器匹配并为您的资源建立使用规则。它还支持在计算机上进行动态预配置,让作业选择所需的计算机资源量,然后将差异重新广告化为仍然可用。它支持全局资源计数器,因此您可以限制诸如软件许可证之类的事情。而且当然,它具有DAGMan,这是用于工作流管理的功能强大的工具。Condor的缺点是短时间作业的调度开销可能很麻烦。理想情况下,您希望作业的运行时间超过2分钟,否则调度将开始成为系统中作业时间的很大一部分。

扭矩有点小众。我恐怕对此一无所知。与Grid Engine相比,它比Condor更具优势。@warren提到了付费的附加组件,可以扩展基本的免费Torque的功能。

如果您想尝试这三种技术并查看它们如何与您的特定工作负载一起使用,CycleCloud可以启动使用Condor,GridEngine或Torque预先配置的安全,虚拟化池,因此无需花费时间来找出这些东西就你而言。旋转每种技术的小池并在具有代表性的工作负载下进行尝试,将花费数美元。(免责声明:我为Cycle Computing工作,我们制作CycleCloud)


感谢您的信息。Condor似乎真的是针对所有能够运行特定任务的大型机器。我遇到的问题还不止是拥有一堆在非常特定的位置运行的作业,但是我需要将作业链接在一起以按特定的顺序运行。Condor还能做到这一点吗,或者使它以这种方式工作会很痛苦吗?
Cakemox

1
神鹰可以处理您的情况。您可以通过各种方式限制DAG中的作业,以使它们针对池中非常特定的计算机或硬件。
伊恩·C,

6

Chronos看起来非常有前途。

Chronos是Airbnb替代cron的工具。它是在Apache Mesos之上运行的分布式且容错的调度程序。您可以使用它来安排工作。它支持自定义Mesos执行程序以及默认命令执行程序。因此,默认情况下,Chronos执行sh(在大多数系统bash上)脚本。即使未在其上执行执行的Mesos从属服务器安装了Hadoop,Chronos也可用于与诸如Hadoop(包括EMR)之类的系统进行交互。包含的包装器脚本允许传输文件并在后台的远程计算机上执行它们,并使用异步回调将作业完成或失败通知Chronos。

使用詹金斯(Jenkins)替代cron,我也取得了巨大的个人成功。它可以很好地处理远程服务器上的执行作业。这是上面的文章:http ://www.22ideastreet.com/blog/2014/05/02/replace-local-cron-with-jenkins/


4

在过去的4.5年中,我一直在使用HP的(nee Opsware)服务器自动化平台以及其余的业务技术优化套件(网络自动化,操作流程等)。

对于足够大的环境,通过SA进行作业管理是一种高度可行(且理想的工具)。与OO结合,可以通过变更控制管理,票证等控制作业。

这是不太有趣的部分:价格昂贵(非常昂贵)。您可能会在我不久前问过的类似问题中检查一些建议:FLOSS服务器管理和审核工具

我还要说的是(来自Adaptive Computing的)Torque / Maui / Moab 非常酷:价格不确定,但它们也是高度灵活的工具。


免责声明-我为HP BTO和Adaptive的合作伙伴工作


2

注意对这个问题有完全不同的看法!

在某些方面,cron 旧又笨拙。

如果您确实在寻找进行调度的新方法,则可以尝试使用消息传递中间件进行某些事件。将RabbitMQ与每个服务器上的客户端一起考虑。

主机间的依赖性可以通过“通知队列”解决。

基于“实时”的事件有点棘手,这实际上是cron的目的(并且至少在小型环境方面非常擅长)。牢牢把握这个想法的棘手之处在于防止出现问题。就像这样:每天晚上0100h做一个快照。此时,您可能会在整个基础架构上看到一些负载高峰或许多失败的登录。如果您有基于队列的方法,则至少会免费获得一些偏差(尽管不能保证,除非某些逻辑实现了该偏差)。

要解决的问题是,没有基于实时的作业,您将不能依赖于以下内容:是的,我的备份将在0200h开始,如果它们仍在0400h上运行,则出了点问题。更容易做到的是确保没有两个干扰的作业同时运行。只需制作一次只会消耗一份工作的阻塞代理即可。

管理部分将是一个不错的Web界面,可以按需提交作业,或者-现在返回“ cron”或您最喜欢的实现,java crystal Scheduler的粒度为AFAIK秒。基于时间的部分只使用良好的旧cron :)

请不要因为我是老手而对我不满意-这是一个很粗糙的概念,但是由于这个问题并不排除金钱,因此人们最好花一些钱而不是花费一些钱来解决确切的内部需求,通过购买卖方认为可以满足某些要求的东西来赚钱:)


这对于分配大型工作很有趣,但是我的工作比较临时。我确实有一些可以像这样排队的工作,因此我会牢记这些。
Cakemox 2011年

1

我已经使用了来自CA的Espresso(Cyber​​mation)。不知道他们现在在叫什么。我也用过UC4。它们都起作用,花费很多钱(据我的理解),并且可以承受,但是他们按照锡盒上的说明去做。/编辑-错过了您说商业应用程序过于昂贵的机会。我绝对可以同意,但是对于某些公司而言,这是值得的,尤其是在用于赚钱的商业应用程序时。


1

我曾与开放源作业计划程序一起工作,以选择在生产环境中替换2000多行的中央crontab。cron使事情变得如此复杂,以至于我们无法确定什么是停机时间窗口或如何处理服务器间的依赖关系。该产品有所帮助,但设置有点复杂。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.