有人知道为任务创建最佳时间表的工具吗?我有许多服务器,运行多个数据库,以及从每个数据库导入和转换数据的各种脚本。
我目前正在手动安排各种 cronjobs,但这很容易出错并且难以解释异常情况,例如由于异常大的数据负载而需要异常长时间运行的作业。我正在考虑对每个任务之间的资源和依赖关系进行编码,并创建一个规划器来搜索任务执行的最佳顺序,以便每个任务在最不可能干扰任何其他任务的时间运行。
我见过Drools Planner,但它不合适,因为它具有巨大的复杂性和开销。
有人知道为任务创建最佳时间表的工具吗?我有许多服务器,运行多个数据库,以及从每个数据库导入和转换数据的各种脚本。
我目前正在手动安排各种 cronjobs,但这很容易出错并且难以解释异常情况,例如由于异常大的数据负载而需要异常长时间运行的作业。我正在考虑对每个任务之间的资源和依赖关系进行编码,并创建一个规划器来搜索任务执行的最佳顺序,以便每个任务在最不可能干扰任何其他任务的时间运行。
我见过Drools Planner,但它不合适,因为它具有巨大的复杂性和开销。
它是NP complete,所以如果你想要任何接近最优的东西,你就无法避免一定程度的复杂性和 CPU 开销。
如我所见,您有两个选择:
寻求快速构建启发式算法,例如First Fit Decreasing:按难度递减的任务(=它们碰撞的任务数,...)对任务进行排序,然后按此顺序将它们分配到剩余的最佳位置。这不会接近最佳,但会快速、简单且开销低。
进行实时规划。
出于兴趣,Planner 中的哪些复杂性让您望而却步?
任务调度问题属于 NP 完全集。因此,没有一种算法可以为您提供最佳答案。
但有近乎最佳的答案。
技术:1) 基于启发式算法 - HEFT、MinMin、MaxMin 等... 2) 基于元启发式算法 - 遗传算法、粒子群优化等...
或者你可以发明新的算法。
如果您愿意,我可以分享简单的代码,这些代码将生成接近最佳的时间表。