gpt4 book ai didi

database - 如何使用数据库服务器进行分布式作业调度?

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:43 24 4
gpt4 key购买 nike

我有大约 100 台电脑,每台电脑上的工作人员很少。已经连接到中央数据库以查询作业参数。

现在我必须为他们安排工作。一个 worker 完成一项工作只需几分钟,不需要网络连接(处理工作和报告除外)并且可以在任何时间以任何顺序完成。

约束:

  • 任何工作都不会被拿走/完成两次
  • 如果工作人员死亡,将会超时。

我想我可以在数据库中使用一个单独的表来安排作业。如何创建和访问作业调度表?

最佳答案

将其分解成多个部分:

您有一份工作描述 - 它可能对其执行位置有一些限制 - 并且您有一个要执行的工作队列,从广义上讲,如果没有其他限制,您希望这些工作按顺序完成,即您从队列的前面取出它们并将它们添加到末尾。

如果我们将队列作为单个表运行,那么作业将有 3 种状态:

  • 未开始
  • 进行中
  • 完成

因此,寻找待办工作只是找到第一个尚未开始的工作(如果要批量分配工作,则为前 n 个工作),然后将其标记为已开始。如果约束比简单的前 n 个可用作业更复杂,那么它将成为满足约束的前 n 个可用作业,但它仍然应该相当简单。

这意味着队列表中有以下字段:

  • 状态
  • DateQueued(日期和时间)进行排序
  • DateStarted(日期和时间)用于超时
  • 分配给

一个人可能应该添加一个 DateCompleted - 但如果工作是批处理的,那么它就不会严格准确(它将是 报告 完成的时间)。

因此对于一个工作人员(工作人员“app”)来说,这个过程变成了:

  1. 连接到服务器
  2. 报告完成的工作 - 设置状态和完成时间
  3. 请求新工作
    1. 为 worker 寻找新工作( worker 可以做的前 n 个未开始的工作)
    2. 将新工作分配给工作人员(设置状态、开始日期和分配给)- 作为事务进行搜索和分配。
  4. 列出工作并断开连接

另外,您需要进程对工作进行排队,查找“超时”的作业以便重置状态并存档或以其他方式从队列中清除已完成的作业。

完整表格将包含以下内容以及所需的任何审计字段。

  • 身份证
  • JobID -- 假设工作是在别处定义的
  • 状态ID
  • 排队日期
  • 开始日期
  • 分配给 ID
  • 完成日期

希望对您有所帮助...

关于database - 如何使用数据库服务器进行分布式作业调度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1734022/

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