辅助功能——冻结池

1 功能概述

离线开发中每天都有大量的任务会产生实例,实例间按照调度和依赖会自动完成开始执行。当某个有大量下游的实例因某些原因(如源头数据丢失、计算逻辑错误、依赖缺失导致提前执行等等),导致输出的数据产生异常,并且没有配置数据质量监控或未命中监控规则,下游就会自动开始调度。此时问题数据就会向下游扩散,污染更多下游产出数据。

批量冻结及修复功能,可通过三个步骤快速阻断并高效完成数据恢复。

第一步,创建冻结池。 通过新建一个冻结池任务,并将源头的问题任务加入到冻结池中,之后进行冻结池生成,系统会自动将源头任务的所有下游依赖任务都纳入到该冻结池中。被纳入到冻结池中的任务会被冻结,运行中的实例会被终止,未生成的实例会停止生成。至此,完成数据污染扩散的阻断。

第二步,源头任务处理。 处理人员进行分析出现问题的原因,制定解决方案,并解决问题。

第三部,冻结池恢复。 对冻结池执行解冻操作,系统会自动从源头任务开始,开始逐个解冻任务。单个任务的解冻过程为:任务会从冻结状态变为解冻中,之后对应的实例(如有)执行重跑,重跑成功后,任务状态变为已解冻。如果期间出现重跑失败等,则需要人工介入处理,强制置为成功,任务会继续往下解冻,直至所有任务都被解冻。

此外,冻结池还支持暂停、更新、恢复解冻、废弃等功能,应对问题修复过程中出现的多种突发情况。

2 入口及权限

入口在周期实例运维的顶部,目前仅项目负责人和管理员可见和操作。

辅助功能--冻结池 - 图1 2021-07-18-22-40-04.png

3 页面介绍

在该功能的列表页,会展示所有历史的冻结池,以及冻结池的状态、创建人、创建时间、最近操作人、最近操作时间等。

如下图,为冻结池列表页:

辅助功能--冻结池 - 图3 2021-07-18-22-52-06.png

1)创建冻结池

冻结池创建时,首先要确定参照日期和冻结池名称。“参照日期”表示需要选择将冻结哪一天的任务,当前支持昨天、今天和明天,默认是今天。“冻结池名称”目前会自动生成。

注意:目前有一个约束条件,同一个参照日期下,仅允许有一个在生效的冻结池,即除状态为已解冻、已废弃、失败之外的解冻池最多只有一个。

如下图,为创建冻结池的页面:

辅助功能--冻结池 - 图5 2021-07-18-22-42-42.png

接下来,需要在“选择源头任务”中确定需要冻结的源头任务,可通过勾选或者批量导入的方式,添加到右侧“已选任务”,之后可进行冻结预览。

如下图,为批量导入任务的弹框:

辅助功能--冻结池 - 图7 2021-07-18-22-45-21.png

接着,通过“冻结预览”,查看到源头任务和系统计算出的所有下游任务,确定这些任务是否可冻结。

如下图,为“冻结预览”:

辅助功能--冻结池 - 图9 2021-07-18-22-49-07.png

最后,可执行“创建并执行”操作,系统将开始从源头任务,按照任务血源依赖向下游冻结任务,并终止这些任务的实例。

2)解冻冻结池

冻结池冻结后,一般需要项目负责人或管理员,将有问题的任务实例进行处理,修复异常数据,之后就可以进行解冻操作。具体可在列表操作列,点击“解冻”,开始冻结池解冻操作。将会重跑所有已生成实例ID的实例,如果这中间实例重跑失败,需要人工介入及时处理。

如下图,为冻结池详情页的冻结任务页面,会展示任务解冻率、任务总数、已解冻(任务数)、重跑成功率、需重跑实例总数和重跑成功数等指标。

辅助功能--冻结池 - 图11 2021-07-18-22-58-03.png

如下图,为冻结池中任务相关实例的列表,其中会通过“实例重跑标记”来表示实例的重跑情况,包括:待重跑、重跑中、重跑成功、重跑异常、实例的重跑实例。

待重跑:指冻结池任务需要重跑的已生成的线上调度实例;重跑中:指当前线上调度实例已经被冻结池解冻操作生成重跑实例,该重跑实例的生成时间必须在执行冻结池解冻或恢复解冻操作之后;重跑成功:指重跑中的实例之后的结果为成功;重跑异常:指重跑中的实例之后的结果为失败或者终止;实例的重跑实例:指冻结池任务的实例被冻结池解冻操作生成的重跑实例(不含手动重跑)。

辅助功能--冻结池 - 图13 2021-07-18-22-58-50.png

对于冻结池中,已经生成实例ID的线上调度任务的实例,执行解冻,实例重跑时,“实例重跑标记”会变为“重跑中”,同时会产生一条实例状态为“运行中”,“实例重跑标记”为“实例的重跑实例”的记录。“实例的重跑实例”运行成功,则线上调度任务实例的“实例重跑标记”会变为“重跑成功”。该实例对应的任务的冻结状态,也会变为“已解冻”。

当任务解冻率100%时,则说明问题已被修复。但是往往会出现部分实例可能重跑不通过等,此时需要处理人员去单独逐个解决,解决后,可在“相关实例”中,强制解冻任务。

辅助功能--冻结池 - 图15 2021-07-18-23-15-21.png

3)其它操作

目前,冻结池还支持暂停、更新、恢复解冻、废弃等功能,应对问题修复过程中出现的多种突发情况。比如,如果发现在解冻中,发现遗漏了一个有问题的源头任务,则可以先暂停冻结池,然后再在里面增加源头任务,并重新启动。这样就可以按新的源头任务生成新冻结池。之后,再次恢复解冻时,系统会确保新加入任务的所有下游会再次重跑。