DAG 介绍
DataLeap 是火山引擎自研的一站式大数据中台解决方案,集数据集成、开发、运维、治理、资产治理能力于一身的大数据研发治理套件。在平台中,一个外围的性能为工作的调度,会依据工作设置的调度频率(月级,日级,小时级等)运行工作,从而生成对应的实例。
在数仓研发中,不同的表之间会存在依赖关系,而产生表数据的工作实例,也会因而存在依赖关系。只有在上游实例运行胜利、上游实例达到设定的运行工夫且资源短缺的状况下,上游实例才会开始执行。所以,在日常的工作运维中,经常须要剖析实例上下游的运行状况,依据具体的状况对实例进行置胜利、重跑等操作。
而如何清晰地展现实例之间的关系,帮忙用户疾速地剖析整个链路的运行状况,并实现问题定位和运维操作,则是实例 DAG 须要解决的问题。上面比照下优化前后的成果。
优化前:
能够看到在简单链路中,将所有节点的关系全副展现进去,导致连线凌乱,须要通过不停的拖拽、缩放,能力找到没有执行的上游节点。
优化后:
通过采纳了将节点聚合的模式,简洁地展现上下游关系。同时,采纳了将实例状态进行分类的模式,提供快捷操作的按钮,让用户能够只关注特定状态的实例,缩小了无用信息对用户运维操作的烦扰。上面将具体介绍优化的整体过程。
概念
1. 工作:在 DataLeap 数据研发平台中,对数据执行一系列操作的定义。
2. 实例:通过工作配置的执行频率(月级、天级等)而创立的一个工作的快照。
3.DAG:全称为 Directed Acyclic Graph,指有向无环图,具备紧密的拓扑性质,有很强的流程表达能力。
4.DAG 布局:指依据有向无环图中边的方向,主动计算节点层级和地位的布局算法。
业务场景
以其中一个场景为例:
对于工作 test_3 在 2022-09-29 的实例进行剖析可知。以后实例没有运行,是因为上游工作 test_2 在 2022-09-29 的实例运行失败导致的,那么此时可分割上游实例对应的工作的负责人,对实例进行解决(包含但不限于重跑,置胜利等操作)。
问题
在以后的实例 DAG 图中,用户在理论应用中会碰到如下问题:
1. 简单的实例 DAG 图无奈渲染。
在一些业务方向中,会呈现 DAG 图中有几千节点。因为数据处理的简单和采纳了 svg 的渲染计划,经常会导致前端浏览器的解体。
2. 同层级节点过多,操作艰难。
以下图为例,在剖析上游实例中,是哪个实例没有运行,导致以后实例没有执行时,须要通过间断拖拽,能力定位到关注的上游实例。
3. 查看节点依赖时,只能一直开展,在对不同的上游依赖进行开展时,会导致图展现凌乱。
需要剖析
在通过用户调研及应用过程中发现,应用 DAG 进行剖析时次要有以下场景:
1. 以后实例曾经达到指定运行工夫,然而没有运行。
在这种状况下,用户关注的是上游没有运行的实例 / 运行失败的实例,分割上游实例的责任人进行问题定位。
2. 当实例曾经运行胜利,然而实现工夫比失常状况下有提早。
在这种状况下,用户关注的是上游实例中,最晚实现的实例。从而判断是否对链路进行治理优化。
3. 当实例运行失败,导致上游没有运行。
在这种状况下,用户关注的是依赖以后实例的所有上游实例,同时须要对上游实例进行聚合筛选,比方工作的优先级(代表工作的外围水平),以告诉上游实例进行重跑等操作。
联合下面存在的问题可失去,次要起因是因为在简单链路状况下,上述需要比拟难满足。而在旧版的 DAG 中,针对简略链路和简单链路的解决是统一的,为此,咱们须要设计解决简单链路场景下的计划。
功能设计
针对下面存在的问题以及对需要的剖析,咱们能够进行如下的性能实现与设计:
渲染计划替换
将 svg 的渲染计划替换成 canvas 渲染,通过缩小页面中 DOM 的数量,进步前端渲染性能。
不同场景的功能设计
通过下面的需要剖析,咱们设计了不同的性能模式以满足不同的需要。
通用模式
在通用模式中,用户关注的是节点上下游的关系,在简单链路中疾速找到阻塞节点,同时关注阻塞节点的信息。
针对简单链路,咱们设计了多种优化模式:
首先,在同一层的节点超过肯定的数量(可自定义)后,所有节点将聚合在一起,咱们称之为聚合节点。这种优化下,能够解决下面提到的因为同一层级节点过多,查找特定状态节点不便的问题。也反对点击聚合详情,通过列表的模式,查看所有被聚合的节点。并反对筛选,疾速查找到关注的节点并通过开展,复原与以后节点的依赖关系。
其次,以用户最关注的实例状态,对被聚合的节点进行分类,同时新增快捷开展操作。以下图为例,以后实例处于期待上游依赖实现状态,在这种状况下,用户关注的,则是上游没有开始执行的节点。在聚合节点中,能够清晰地看到存在一个实例,是在期待执行的,点击数字 1,即可疾速开展实例。
在这个例子中,就将不须要关注的上游胜利节点暗藏在列表中,突出图所须要关注的重点信息。
同时,为了升高节点展现过多导致图显示芜杂的状况,新增了收起性能及跳转性能。
收起性能是指在通过在聚合节点开展的节点的状况,或是在间接开展上 / 上游的状况下,都反对对某个上游 / 上游节点的整条链路收起,不便用户在浏览完一条链路后,复原图之前的状态,持续浏览下一条链路,缩小对后续剖析的烦扰。
跳转性能是在查看以后节点的上游的其余上游,或是上游的其余上游,此时,用户关注的节点曾经转化为其余的上游 / 上游节点。所以,通过跳转新页面的模式,将须要关注的不同节点的上 / 上游信息辨别开,缩小在一张图中展现所有信息。
并且因为图中的节点承载信息的能力无限,在通过点击节点时,会在下方呈现与选中实例相干信息,包含属性,日志等,帮助用户运维工作。
- 统计模式 在统计模式中,用户关注的是依赖以后节点的上游节点,上游节点则能够分成间接上游和所有上游。所以设计了分层模式和合并模式,在这两种模式下,能够依照工作的属性(工作类型 / 实例状态 / 责任人等)作为分组维度。
- 分层模式:
- 合并模式:
- 链路模式 指定上游节点,一键展现指定节点与以后节点的链路信息,从而进行精准链路剖析。
技术实现
数据处理
- 在原始数据中,是以一个数组的模式返回节点信息及依赖关系。所以,须要对数据进行解决造成图所须要的数据,同时,利用多个 map 对数据进行存储,不便后续对数据进行检索,缩小工夫复杂度。
自定义节点注册
实例节点的款式须要通过根底图形 Text(文本)、Rect(矩形)、Icon(图标)进行组合,以达到咱们的设计要求。
图预处理
在后面提到,咱们须要在简单的图场景中,将超过肯定数量的同层节点聚合起来,以达到清晰直观地传播图所要表白的信息的目标,所以须要对图的层级及节点进行解决,从而生成聚合节点和去掉多余的节点。
DAG 图布局
通常来说,DAG 的布局能够依照以下步骤实现。
1. 去环:包含自环和非自环,为节点分层做筹备。
2. 节点分层:给所有节点安顿适合的层级。
3. 节点排序:同层级内节点排序,缩小相邻层级中节点间断的交叉点数量。
4. 节点坐标调配:依据分层和同层节点的排序计算节点地位。
而在咱们的场景中,节点的层级是有明确含意的,比方在节点 A 处于节点 B 的上方一层,且 A, B 之间有连线连贯,则可认为 A 是 B 的上游一层节点。因而与传统 DAG 布局产生了以下不同点,咱们须要依据场景做定制。
1. 节点所在层级固定:DAG 布局既能反对主动计算层级,也能承受间接指定节点分层。
2. 可能产生同层级连线:将同一层级里有连线的节点进行分组,进行外部排序后,视为整体再参加以后层级的排序,以缩小交叉点的数量。
总结
从功能设计上,咱们须要从用户的应用场景登程,辨别不同的性能满足用户的诉求。同时,在前端畛域中,针对大数据量的场景,须要判断这些大数据量的展现对用户是否存在价值,从大数据量中挖掘出用户的关注点并突出重点,不便用户疾速地进行查看剖析。
从技术实现上,咱们须要联合业务,依据业务的特色去批改已有的 DAG 布局实现,以满足在不同的业务场景下,更好地将信息出现给用户。
当然,以后的功能设计也存在不足之处,在以后的上游查看剖析性能上,因为数据库查问存在瓶颈,只能剖析一层的上游,在后续优化查问性能后,能够通过一键剖析,间接查找到呈现问题的根节点,能够帮忙用户缩小操作老本以进步剖析效率。
参考
- Dag 布局流程参考:Sugiyama, Tagawa, Toda, et al., “Methods for Visual Understanding of Hierarchical System Structures”
- DAG 算法主体:Gansner, et al., “A Technique for Drawing Directed Graphs”
对于咱们
火山引擎大数据研发治理套件 DataLeap: 一站式数据中台套件,帮忙用户疾速实现数据集成、开发、运维、治理、资产、平安等全套数据中台建设,帮忙数据团队无效的升高工作老本和数据保护老本、开掘数据价值、为企业决策提供数据撑持。
欢送退出字节跳动数据平台官网群,进行数据技术交换、获取更多内容干货
火山引擎 DataLeap 数据调度实例的 DAG 优化计划作者:字节跳动数据平台 2023-01-06 浙江本文字数:3523 字浏览完需:约 12 分钟
更多技术交换、求职机会,欢送关注字节跳动数据平台微信公众号,并进入官网交换群实例 DAG 介绍 DataLeap 是火山引擎自研的一站式大数据中台解决方案,集数据集成、开发、运维、治理、资产治理能力于一身的大数据研发治理套件。在平台中,一个外围的性能为工作的调度,会依据工作设置的调度频率(月级,日级,小时级等)运行工作,从而生成对应的实例在数仓研发中,不同的表之间会存在依赖关系,而产生表数据的工作实例,也会因而存在依赖关系。只有在上游实例运行胜利、上游实例达到设定的运行工夫且资源短缺的状况下,上游实例才会开始执行。所以,在日常的工作运维中,经常须要剖析实例上下游的运行状况,依据具体的状况对实例进行置胜利、重跑等操作。而如何清晰地展现实例之间的关系,帮忙用户疾速地剖析整个链路的运行状况,并实现问题定位和运维操作,则是实例 DAG 须要解决的问题。上面比照下优化前后的成果。优化前:
能够看到在简单链路中,将所有节点的关系全副展现进去,导致连线凌乱,须要通过不停的拖拽、缩放,能力找到没有执行的上游节点。优化后:
通过采纳了将节点聚合的模式,简洁地展现上下游关系。同时,采纳了将实例状态进行分类的模式,提供快捷操作的按钮,让用户能够只关注特定状态的实例,缩小了无用信息对用户运维操作的烦扰。上面将具体介绍优化的整体过程。概念工作:在 DataLeap 数据研发平台中,对数据执行一系列操作的定义。实例:通过工作配置的执行频率(月级、天级等)而创立的一个工作的快照。DAG:全称为 Directed Acyclic Graph,指有向无环图,具备紧密的拓扑性质,有很强的流程表达能力。DAG 布局:指依据有向无环图中边的方向,主动计算节点层级和地位的布局算法。业务场景以其中一个场景为例:对于工作 test_3 在 2022-09-29 的实例进行剖析可知。以后实例没有运行,是因为上游工作 test_2 在 2022-09-29 的实例运行失败导致的,那么此时可分割上游实例对应的工作的负责人,对实例进行解决(包含但不限于重跑,置胜利等操作)。
问题在以后的实例 DAG 图中,用户在理论应用中会碰到如下问题:简单的实例 DAG 图无奈渲染。在一些业务方向中,会呈现 DAG 图中有几千节点。因为数据处理的简单和采纳了 svg 的渲染计划,经常会导致前端浏览器的解体。同层级节点过多,操作艰难。以下图为例,在剖析上游实例中,是哪个实例没有运行,导致以后实例没有执行时,须要通过间断拖拽,能力定位到关注的上游实例。
查看节点依赖时,只能一直开展,在对不同的上游依赖进行开展时,会导致图展现凌乱。
需要剖析在通过用户调研及应用过程中发现,应用 DAG 进行剖析时次要有以下场景:以后实例曾经达到指定运行工夫,然而没有运行。在这种状况下,用户关注的是上游没有运行的实例 / 运行失败的实例,分割上游实例的责任人进行问题定位。当实例曾经运行胜利,然而实现工夫比失常状况下有提早。在这种状况下,用户关注的是上游实例中,最晚实现的实例。从而判断是否对链路进行治理优化。当实例运行失败,导致上游没有运行。在这种状况下,用户关注的是依赖以后实例的所有上游实例,同时须要对上游实例进行聚合筛选,比方工作的优先级(代表工作的外围水平),以告诉上游实例进行重跑等操作。联合下面存在的问题可失去,次要起因是因为在简单链路状况下,上述需要比拟难满足。而在旧版的 DAG 中,针对简略链路和简单链路的解决是统一的,为此,咱们须要设计解决简单链路场景下的计划。功能设计针对下面存在的问题以及对需要的剖析,咱们能够进行如下的性能实现与设计:渲染计划替换将 svg 的渲染计划替换成 canvas 渲染,通过缩小页面中 DOM 的数量,进步前端渲染性能。不同场景的功能设计通过下面的需要剖析,咱们设计了不同的性能模式以满足不同的需要。
通用模式在通用模式中,用户关注的是节点上下游的关系,在简单链路中疾速找到阻塞节点,同时关注阻塞节点的信息。针对简单链路,咱们设计了多种优化模式:首先,在同一层的节点超过肯定的数量(可自定义)后,所有节点将聚合在一起,咱们称之为聚合节点。这种优化下,能够解决下面提到的因为同一层级节点过多,查找特定状态节点不便的问题。也反对点击聚合详情,通过列表的模式,查看所有被聚合的节点。并反对筛选,疾速查找到关注的节点并通过开展,复原与以后节点的依赖关系。
其次,以用户最关注的实例状态,对被聚合的节点进行分类,同时新增快捷开展操作。以下图为例,以后实例处于期待上游依赖实现状态,在这种状况下,用户关注的,则是上游没有开始执行的节点。在聚合节点中,能够清晰地看到存在一个实例,是在期待执行的,点击数字 1,即可疾速开展实例。在这个例子中,就将不须要关注的上游胜利节点暗藏在列表中,突出图所须要关注的重点信息。
同时,为了升高节点展现过多导致图显示芜杂的状况,新增了收起性能及跳转性能。收起性能是指在通过在聚合节点开展的节点的状况,或是在间接开展上 / 上游的状况下,都反对对某个上游 / 上游节点的整条链路收起,不便用户在浏览完一条链路后,复原图之前的状态,持续浏览下一条链路,缩小对后续剖析的烦扰。
跳转性能是在查看以后节点的上游的其余上游,或是上游的其余上游,此时,用户关注的节点曾经转化为其余的上游 / 上游节点。所以,通过跳转新页面的模式,将须要关注的不同节点的上 / 上游信息辨别开,缩小在一张图中展现所有信息。并且因为图中的节点承载信息的能力无限,在通过点击节点时,会在下方呈现与选中实例相干信息,包含属性,日志等,帮助用户运维工作。
统计模式 在统计模式中,用户关注的是依赖以后节点的上游节点,上游节点则能够分成间接上游和所有上游。所以设计了分层模式和合并模式,在这两种模式下,能够依照工作的属性(工作类型 / 实例状态 / 责任人等)作为分组维度。分层模式:
合并模式:
链路模式 指定上游节点,一键展现指定节点与以后节点的链路信息,从而进行精准链路剖析。
技术实现数据处理在原始数据中,是以一个数组的模式返回节点信息及依赖关系。所以,须要对数据进行解决造成图所须要的数据,同时,利用多个 map 对数据进行存储,不便后续对数据进行检索,缩小工夫复杂度。
自定义节点注册实例节点的款式须要通过根底图形 Text(文本)、Rect(矩形)、Icon(图标)进行组合,以达到咱们的设计要求。图预处理在后面提到,咱们须要在简单的图场景中,将超过肯定数量的同层节点聚合起来,以达到清晰直观地传播图所要表白的信息的目标,所以须要对图的层级及节点进行解决,从而生成聚合节点和去掉多余的节点。
DAG 图布局通常来说,DAG 的布局能够依照以下步骤实现。去环:包含自环和非自环,为节点分层做筹备。节点分层:给所有节点安顿适合的层级。节点排序:同层级内节点排序,缩小相邻层级中节点间断的交叉点数量。节点坐标调配:依据分层和同层节点的排序计算节点地位。而在咱们的场景中,节点的层级是有明确含意的,比方在节点 A 处于节点 B 的上方一层,且 A, B 之间有连线连贯,则可认为 A 是 B 的上游一层节点。因而与传统 DAG 布局产生了以下不同点,咱们须要依据场景做定制。节点所在层级固定:DAG 布局既能反对主动计算层级,也能承受间接指定节点分层。可能产生同层级连线:将同一层级里有连线的节点进行分组,进行外部排序后,视为整体再参加以后层级的排序,以缩小交叉点的数量。
总结从功能设计上,咱们须要从用户的应用场景登程,辨别不同的性能满足用户的诉求。同时,在前端畛域中,针对大数据量的场景,须要判断这些大数据量的展现对用户是否存在价值,从大数据量中挖掘出用户的关注点并突出重点,不便用户疾速地进行查看剖析。从技术实现上,咱们须要联合业务,依据业务的特色去批改已有的 DAG 布局实现,以满足在不同的业务场景下,更好地将信息出现给用户。当然,以后的功能设计也存在不足之处,在以后的上游查看剖析性能上,因为数据库查问存在瓶颈,只能剖析一层的上游,在后续优化查问性能后,能够通过一键剖析,间接查找到呈现问题的根节点,能够帮忙用户缩小操作老本以进步剖析效率。参考 Dag 布局流程参考:Sugiyama, Tagawa, Toda, et al., “Methods for Visual Understanding of Hierarchical System Structures”DAG 算法主体:Gansner, et al., “A Technique for Drawing Directed Graphs” 对于咱们火山引擎大数据研发治理套件 DataLeap 一站式数据中台套件,帮忙用户疾速实现数据集成、开发、运维、治理、资产、平安等全套数据中台建设,帮忙数据团队无效的升高工作老本和数据保护老本、开掘数据价值、为企业决策提供数据撑持。点击浏览原文立刻体验产品!欢送退出字节跳动数据平台官网群,进行数据技术交换、获取更多内容干货
点击跳转 大数据研发治理套件 DataLeap 理解更多