更新时间:2024-05-09 GMT+08:00

自然周期调度之上一周期依赖原理

自然周期调度的概念

自然周期调度作业的调度周期包括分钟、小时、天、周、月这五种周期,不同调度周期的作业,其允许配置的依赖作业调度周期总结如图1所示。

图1 上一周期作业依赖关系全景图

即作业A的调度依赖于作业B的上一调度周期,包含以下场景:

分钟依赖分钟

规则:分钟是最小调度粒度,没有自然分钟周期的概念,依赖策略是根据调度周期长的作业,往前推一个调度周期找依赖实例。

例如:A依赖B,A和B都是从每小时的0分开始,A每隔10分钟运行一次,B每隔15分钟运行一次,A的实际运行实际是上一小时的45分B作业运行完成之后。

分钟依赖小时

规则:分钟级作业依赖上一个自然小时周期的作业执行完成后,再执行。

例如:A依赖B,A分钟级作业依赖B小时级作业,A每10分钟触发,B是每小时第18分钟执行,那么作业A实例会在该周期的第10分钟运行。

分钟依赖天

规则:分钟作业依赖自然天作业的前一个周期,需等上一个天周期作业执行完成后再执行。

例如:A依赖B,A分钟作业依赖B天作业,A每5分钟执行,B是2:30执行,那么A需要依赖前一天2:30之后B作业的实例。

小时依赖分钟

规则: 小时作业依赖分钟作业,往前推到上一个自然小时范围内的所有分钟级实例。区间是前开后闭。

举例1:A依赖B,A为小时作业,每个小时0分执行,B为15m作业;A会依赖上一小时B在45分钟时的作业实例。

举例2:A依赖B,A为小时作业,启动时间3:20, B为15m作业,A会依赖B在3点15时生成的作业实例。

小时依赖小时

规则:每个自然小时周期内的实例产生依赖,区间边界是自然小时[00:00, 00:59],依赖策略是调度周期长的作业,往前推一个调度周期找依赖实例。

A依赖B,在同自然小时内,无论A、B设置在什么时间点执行,A永远在B的前一周期完成后执行。

举例:A在每小时5分0秒执行,B在12分执行,A会在每小时5分时依赖B上一小时生成的实例。

离散小时依赖离散小时 :

  • 自然天内,依赖关系中的上游、下游任务数量一致,上下游周期数一致。
  • 自然天内,上下游任务数量不一致,下游任务运行当天生成的周期实例,将根据就近原则挂载依赖,依赖距离自己定时运行时间最近的上游实例。从index向前找上游依赖实例,依赖上游一整个区间内的实例;向前未找到依赖的实例时,需要向后找,向后查找时,只依赖最近的一个实例。

小时依赖天

规则:小时作业依赖自然天的作业,需等天作业的前一周期执行完成后再执行。

举例:A依赖B,A小时作业依赖B天作业,A每小时整点指定,B是2:30指定,那么A作业执行会依赖前一天2点30分B作业的运行实例。

天依赖分钟

规则:按自然天,天周期作业实例依赖前一天内所有分钟级作业的实例。

举例:A依赖B,A为天作业,依赖B分钟作业, A依赖B在当天内的最后一个实例, A会在最后一个B作业实例执行完成后执行。

天依赖小时

规则:按自然天,天周期作业实例依赖前一天内最后一周期小时作业的实例。

举例:A依赖B,A为天作业,依赖B小时作业,A依赖B在前一天最后一个周期的小时作业实例执。

天依赖天

规则:按自然天的上一个周期实例进行依赖。 在同自然天内A依赖B ,无论A、B设置在什么时间点执行,A永远依赖B的前一周期实例执行。 天区间为[00:00:00, 23:59:59]

举例:A在2:00执行,B在3:00执行,A会依赖B在前一个周期3:00执行的实例,在当前周期2点执行。

天依赖周

规则:依赖自然天。

举例1:A依赖B,A作业每天执行,B作业每周三执行。在A作业执行时,前一天非周三,B作业未执行,A作业则直接执行。

举例2:A依赖B,A作业每天执行,B作业每周三执行。在A作业执行时,前一天是周三,B作业会执行,则A作业等待B作业执行完成后,开始执行。

天依赖月

规则:天作业依赖自然月的作业,需等月作业执行完成上一周期后再执行。

例如:A依赖B,A为天作业每天执行一次,B为月作业每月15号执行一次。A作业的执行依赖B作业上个月15号的运行实例。

周依赖小时

规则:依赖自然天,范围是[前一天的零点,当天的零点),查找当天的小时任务作业B是否全部执行完成,然后执行周任务作业A。

举例:A依赖B,A作业每周一调度,B作业每小时第50分钟执行。则A作业会一直等待B作业执行,一直到B作业上周日最后一个任务23:50分的任务执行完成后,开始执行A作业。

周依赖天

规则:周作业依赖前一天的天作业,需等前一天作业完成后再执行。

例如:A依赖B,B为天作业每天执行一次,A为周作业每周一执行一次。A作业的执行依赖B作业前一天的运行实例。

周依赖周

规则:周作业依赖前一天的周作业,需等前一天周作业完成后再执行,如果前一天没有实例,则不需要依赖。

例如:A依赖B,B为周作业每周一执行一次,A为周作业每周二执行一次。A作业的执行依赖B作业周一的运行实例。

周依赖月

规则:依赖自然天

举例1:A依赖B,A作业每周三执行,B作业每月10号执行。在A作业执行时,如果前一天正好是10号,A作业会等待B作业执行完成后执行。

举例2:A依赖B,A作业每周三执行,B作业每月10号执行。在A作业执行时,如果前一天不是10号,则A作业直接执行。

月依赖天

规则:月作业依赖前一天的天作业,需等前一天作业完成后再执行。

例如:A依赖B,B为天作业每天执行一次,A为月作业每月一执行一次。A作业的执行依赖B作业前一天的运行实例。

月依赖周

规则:依赖自然天

举例1:A依赖B,A作业每月10号执行,B作业每周三执行。在A作业执行时,前一天非周三,B作业未执行,A作业则直接执行。

举例2:A依赖B,A作业每月10号执行,B作业每周三执行。在A作业执行时,前一天正好是周三,B作业会执行,则A作业等待B作业执行完成后开始执行。

月依赖月

规则:依赖自然天

举例1:A依赖B,A作业每月1号执行,B作业每月2号执行,A作业1号正常执行,B作业不阻塞A作业执行。

举例2:A依赖B,A作业每月3号执行,B作业每月2号执行,A作业需要等待2号的B作业运行完成后开始执行。

举例3:A依赖B,A作业每月3号执行,B作业每月2号执行,3号A作业依赖2号B作业。