离散小时调度与作业最近依赖调度逻辑
数据开发当前支持两种调度依赖策略:传统周期调度依赖和自然周期调度依赖。
传统周期调度依赖的详细信息请参见传统周期调度。
自然周期调度依赖的详细信息请参见自然周期调度。
随着用户业务的演进,自然周期调度中,增加了许多新的调度规则,如离散小时调度,最近依赖调度等。本章节详细讲解这两个调度规则。
离散小时调度
场景一:离散小时依赖月、周、天 ,或者月、周、天依赖离散小时, 这六种依赖,依赖的时间范围都是依赖自然天内的所有作业实例。
场景 |
依赖处理逻辑 |
---|---|
离散小时依赖月 |
依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。 示例一:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是月调度,每月3号12点调度。A依赖B,假设今天是每月3号, 作业A在2点、5点、15点的实例,都会依赖作业B在12点的实例,等到作业B在12点的实例执行成功后,才会执行作业A的实例。 示例二:作业是A离散小时调度,调度时间分别是2/5/15点;作业B是月调度,每月3号12点调度。A依赖B,假设今天不是每月的3号,即今天没有作业B的实例,则因为依赖的作业B在今天没有实例,作业A在2点、5点、15点的实例会直接运行。 |
月依赖离散小时 |
依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。 示例:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是月调度,每月3号12点调度。B依赖A,当作业B在每月3号调度时,作业B在12点的实例,会等依赖的作业A在2/5/15点的实例,都执行成功后,才会开始调度。 |
离散小时依赖周 |
依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。 示例一:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是周调度,每周星期一12点调度。A依赖B,假设今天是每周星期一,作业A在2点、5点、15点的实例,都会依赖作业B在12点的实例,等到作业B在12点的实例执行成功后, 才会执行作业A的实例。 示例二:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是周调度,每周星期一12点调度。A依赖B,假设今天不是星期一,即今天没有作业B的实例, 则因为依赖的作业B在今天没有实例,作业A在2点、5点、15点的实例会直接运行。 |
周依赖离散小时 |
依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。 示例:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是周调度,每周星期一12点调度。B依赖A,当作业B在星期一调度时,作业B在12点的实例,会等依赖的作业A在2/5/15点的实例,都执行成功后,才会开始调度。 |
离散小时依赖天 |
依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。 示例:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是天调度,每天12点调度。A依赖B,则作业A在2点、5点、15点的实例,都会依赖作业B在12点的实例,等到作业B在12点的实例执行成功后,才会执行作业A的实例。 |
天依赖离散小时 |
依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。 示例:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是天调度,每天12点调度。B依赖A,则作业B在12点的实例,会等依赖的作业A在2/5/15点的实例,都执行成功后,才会开始调度。 |
场景二:离散小时依赖小时、分钟、离散小时, 或者小时、分钟依赖离散小时,依赖都遵循如下规则。
- 规则一:自然天内,依赖关系中的上游、下游任务数量一致,则上游、下游一对一依赖。
解释:例如作业A依赖作业B,作业A是离散小时调度,每天3/6/8点运行,则作业A一天内有3个实例;作业B小时作业,间隔8小时调度一次,每天0点、8点、16点调度,则作业B一天也是3个实例。
上游作业B与下游作业A在一天内,都是3个实例,则作业A与作业B一对一依赖。
所以作业A与作业B的依赖情况为: 作业A在3点的实例,依赖作业B在0点的实例;作业A在6点的实例,依赖作业B在8点的实例;作业A在8点的实例,依赖作业B在 16点的实例。
- 规则二:自然天内,上下游任务数量不一致,下游任务运行当天生成的周期实例,将会根据就近原则挂载依赖,依赖距离自己定时运行时间最近的上游实例。
先向前找上游依赖实例,依赖上游一整个区间内的实例;向前未找到依赖的实例时,需要向后找,向后查找时,只依赖最近的一个实例。
通过图表进一步进行原理解释:
“先向前找上游依赖实例,依赖上游一整个区间内的实例” 解释如下:
图1 先向前找上游依赖实例,依赖上游一整个区间内的实例
“向前未找到依赖的实例时,需要向后找,向后查找时,只依赖最近的一个实例” 解释如下:
图2 向前未找到依赖的实例时,需要向后找,向后查找时,只依赖最近的一个实例
场景 |
依赖处理逻辑 |
---|---|
离散小时依赖小时 |
依赖时间段范围是[当天的零点,下一天的零点) ,离散小时作业A,小时作业B,作业A依赖作业B。 当离散小时作业A、小时作业B在一天内的实例数量一致时,适用规则一,一对一依赖; 当离散小时作业A、小时作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。 |
小时依赖离散小时 |
依赖时间段范围是[当天的零点,下一天的零点) ,小时作业A,离散小时作业B,作业A依赖作业B。 当小时作业A、离散小时作业B在一天内的实例数量一致时,适用规则一,一对一依赖; 当小时作业A、离散小时作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。 |
离散小时依赖分钟 |
依赖时间段范围是[当天的零点,下一天的零点) ,离散小时作业A,分钟作业B,作业A依赖作业B。 当离散小时作业A、分钟作业B在一天内的实例数量一致时,适用规则一,一对一依赖; 当离散小时作业A、分钟作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。 |
分钟依赖离散小时 |
依赖时间段范围是[当天的零点,下一天的零点) ,分钟作业A,离散小时作业B,作业A依赖作业B。 当分钟作业A、离散小时作业B在一天内的实例数量一致时,适用规则一,一对一依赖; 当分钟作业A、离散小时作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。 |
离散小时依赖离散小时 |
依赖时间段范围是[当天的零点, 下一天的零点) ,离散小时作业A,离散小时作业B,作业A依赖作业B。 当离散小时作业A、离散小时作业B在一天内的实例数量一致时,适用规则一,一对一依赖; 当离散小时作业A、离散小时作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。 |
最近依赖调度
最近依赖调度,是在自然周期调度的基础上,对于天依赖小时、天依赖分钟、小时依赖分钟这三种依赖场景,支持选择依赖最近的作业实例。
场景 |
依赖处理逻辑 |
---|---|
天依赖小时(勾选最近依赖) |
依赖时间段范围是[当天的零点,下一天的零点) ,不可跨天。 示例一:天作业A每天8点调度;小时作业B每小时15分钟开始调度。则天作业A依赖最近的小时作业实例,即依赖7点15分的小时作业实例。 示例二:天作业A每天0点30分调度;小时作业B每小时40分钟开始调度。因为天作业前面没有小时任务,则天任务不依赖任何小时任务,直接运行。 |
天依赖分钟(勾选最近依赖) |
依赖时间段范围是[当天的零点, 下一天的零点) ,不可跨天。 |
小时依赖分钟(勾选最近依赖) |
往前找到最近的分钟任务,挂载依赖。 示例:小时作业A每小时15分钟开始调度;分钟作业B从凌晨一点开始每15分钟调度一次。则小时作业A在0点15分的实例,依赖分钟作业B在昨天23点45分的实例;小时作业A在1点15分的实例,依赖分钟作业B在1点15分的实例。 |