大规模矢量DAG图模型与DAG控制

摘要

本章提出一种通用的大规模矢量DAG(Vector DAG)图模型,用于支撑高性能调度、编排与控制任务,适配亿级以上节点规模的实际应用场景。通过拓扑拆分、矢量化子图划分及多种并发图算法,实现了大规模调度控制能力。算法支持关键路径计算、节点可达性判断、剪枝优化、最小生成子图合并及最短路径计算等核心图处理能力。
模型在保持图一致性与拓扑不可变性的同时,支持中央与分级集群的分治执行,并通过图句柄、入口点、阶层等机制控制上下游依赖关系。为避免环、自依赖等非DAG化问题,系统引入路径计数、安全声明与被动校验机制,保障图调度的稳定性与可控性。该模型广泛适用于任务调度、服务编排、语义分析等大规模图控制场景。

核心算法

本系统基于邻接表(Adjacency List)结构构建通用的大规模矢量DAG(Vector DAG)图模型,结合分治思想与并行调度机制,支持10⁸级别以上节点规模的图任务处理。整体设计借鉴Map-Reduce理论,实现图结构的并发分治与高效归并,保障在极大规模下依旧具备高可用性与高速处理能力。

核心算法模块包括:

  1. 通用大规模矢量DAG图模型:采用容器化结构组织节点及其依赖关系,支持子图的独立计算与统一调度,具备良好的横向扩展能力。
  2. 拓扑排序(Topological Sorting):针对大规模DAG图实现并发拓扑排序算法,可在秒级时间内完成百万级以上节点的排序任务。
  3. 节点可达性判断(Reachability Query):提供高效算法用于判断任意两节点之间的可达性,适用于路径分析与依赖检查等场景。
  4. 关键路径识别(Critical Path Analysis):用于识别图中影响整体执行时间的最长依赖路径,是任务调度优化与性能瓶颈分析的重要基础。
  5. 图剪枝与最小联通子图提取:对叶子节点(出度为零)追溯其依赖路径,提取形成最小依赖闭包子图,支持任务裁剪与依赖最简化。
  6. 最小生成树与子图合并:支持在大规模图结构中构造最小生成树(MST),并提供子图合并、节点聚合与依赖关系归约等能力。
  7. 最短路径计算(Shortest Path):实现高性能的两点间最短路径查询算法,适用于路径优化、资源调度与链路风险分析等应用。

草稿:大致算法有以下几个(邻接表法)
支持大规模调度 (分治法)1e8以上规模,设计理论参考Map-Reduce,实现图调度并发分治和归并
0.通用大规模矢量DAG图模型(容器化设计)
1.有向图 拓扑排序(大规模排序,并发下秒级完成)
2.节点可达性判断(传入两个节点判断是否可达)
3.关键路径
4.剪枝(最小联通图)//叶子(无children节点)到达的最小依赖图
5.最小生成树(大规模支持)、子图合并(节点合并、汇总)
6.两点间最短路径

拓扑架构,矢量拆分、拓扑不可变

技术争议说明:不使用图数据库继续使用传统行记录OLTP RDB(如MySQL),因为1).确保存储架构一致性和系统统一;2).缓存和算法优化可以解决大部分场景;3).运维成本指数增长,相比统一架构得小利而失大义,划不来;

模型基本架构

注意:本图包含核心的名词字典,开发时中英文对照时务必保持一致性。

Vector DAG(矢量DAG)V0
Vector DAG(矢量DAG)V0
子图(矢量可分)V1 [NLP ML]
子图(矢量可分)V1 [NLP ML]
子图(矢量可分)V2  [数据处理]
子图(矢量可分)V2  [数据处理]
入口点(Inlet)
图句柄(Handle)
入口点(Inlet)...
叶子节点Leaf
出度为0(无下游)
叶子节点(Leaf)...
Stage \ Executio Group 执行组
Stage \ Executio Group 执行组
入口点(Inlet)
图句柄(Handle)

入度为0的点(含拓扑拆分后的图),用于确定一个图
*避免争议,这里严格定义为等效入口点,不同于编译原理中的句柄*
入口点(Inlet)...
拓扑拆分

将图分治拆分,但是确保整图一致性
对应入口点入度置0
拓扑拆分将图分治拆分,但是确保整图一致性对应入口点入度置0...
拆分应用场景

如V0 为中央统一调度任务
V1为NLP机器学习任务
V2为数据加工任务

拓扑拆分后由对应集群分治执行,但是保证归并后调度结果一致性
拆分应用场景如V0 为中央统一调度任务...
下游(Downstream):
某一节点的孩子节点集合
上游(Upstream):
某一节点的父节点集合
度(Degree):具体来说,与该节点相连的边的数量相关
下游(Downstream):...
Vector DAG 业务场景

主要应用于各类大规模调度、编排、控制、关键路径分析、任务系统、语法分析场景
如:任务调度、服务编排、计划执行图、语义解析等
Vector DAG 业务场景...
Vector DAG 业务使命

1. 实现一致性拆分确保拆分不变性
2. 实现变化不变性,如调整节点位置确保等效性或不可调
3. 实现图优化,自动完成最优路径、剪枝、规约、风险控制等
4. 服务于大规模控制,确保统筹规划
5. 服务于统一调度,中央分级统筹
Vector DAG 业务使命...
阶层(Stratum

从入度为 0 的节点出发,按照路径长度(或依赖深度)进行划分的各级节点集合
即层序遍历的集合
阶层(Stratum)...
序列执行序(Sequential)
序列执行序(Sequential)
并行执行序(Parallel)
并行执行序(Parallel)
并行计算架构

与其他常见的并发控制引擎类似(TensorFlow、Spark等)
实际执行会按序列执行序(与组)(Sequential)、并行执行序(Parallel)继续编排并得到执行图
并行计算架构与其他常见的并发控制引擎类似(TensorFlow、Spark等)...
一个子图可能是一个执行组,两者是不同的子系统
实践中:子图通常是业务线、任务线级别,而执行组是内核调度的编排
一个子图可能是一个执行组,两者是不同的子系统 实践中:子图通常是业务线、任务线级别,而执行组是内核调度的编排
子图(Subgraph)

可递归和级联的图,即是原子也是组织的概念,其首先是一个由若干子图构成的组织,然后可以递归向下拓扑拆分。

如图所示,V0、V1、V2都是子图。
子图(Subgraph)...
Text is not SVG - cannot display

子图(Subgraph):可递归和级联的图,即是原子也是组织的概念,其首先是一个由若干子图构成的组织,然后可以递归向下拓扑拆分。如图所示,V0、V1、V2都是子图。开发时不要命名成Subgraph就叫VectorDAG。

环与自依赖处理

成环控制
成环控制
自依赖
Self-dependency
自依赖 Self-dependency
Cycle
环 Cycle
以上行为已破坏DAG控制
非DAG化
需要特殊处理避免不可控和非计划的死循环

需要应用层做执行计数、安全声明等特殊处理
以上行为已破坏DAG控制...
入口点处理

对于以上特殊情况,在计算入度时会造成困难,对于这一类边必须显式声明
实践中,该类情况有特殊意义,不能一刀切。可以采用如应用层处理:声明自依赖场景此时不计数

被动兜底检查:环校验算法兜底,但是不能主动审查,大型图数据库检索非常慢
被动优化算法:路径记录,执行时记录前驱,记忆表法
入口点处理对于以上特殊情况,在计算入度时会造成困难,对于这一类边必须显式声明实践中,该类情况有特殊意义,不能一刀切。可以采用如应用层处理:声明自依赖场景此时不计数被动兜底检查:环校验算法兜底,但是不能主动审查,大型图数据库检索非常慢被动优化算法:路径记录,执行时记录前驱,记忆表法...
Text is not SVG - cannot display

执行图与阶段

定义

阶段(Stage):在本文也称执行组(Execution Group)为指的是一组可以编组执行(序列或并行)的任务,这些任务之间没有相互依赖。阶段的划分通常由内核分析(内核执行计划)或用户自定义的规则进行分区和分发,目标是将任务分配到不同的执行节点(或工作节点)上执行。
执行图(Execution Graph):执行图(也称为执行计划)是一个有向无环图(DAG),用于表示执行计算任务时的操作顺序、依赖关系以及资源需求。执行图展示了任务的执行步骤、依赖链条及其调度方案,与其他执行引擎类似通常由查询优化器或计算引擎(例如 SQL 的 EXPLAIN 输出、分布式框架如 Spark)生成,本系统由内核编排或用户自定义。执行图围绕任务如何执行、何时执行及执行顺序的详细信息,并且有助于优化计算过程中的并行性和资源分配,和关注任务实际执行情况。

通用大规模矢量DAG图模型实体建模

  1. RDB阵列法,支持图集群,理论上任务数量无上限,原则上支持全局图拓扑一致
  2. 可以配置RDB集群扩展图规模,原则上单表支持上限(1e8,亿级图节点)
  3. 拓扑可微,支持分布式弹性拆分,即图切分不影响DAG拓扑完整性

矢量图表设计:
矢量图关系表(hydra_${业务线}_vgraph_adjacent):

主键Id 节点GUID 连接类型 父节点GUID
id guid linked_type parent_guid

说明:此连接类型为weak目前做预留处理默认为weak

矢量图节点表(hydra_${业务线}_vgraph_nodes):

主键Id 节点GUID 节点名称 节点描述 其他元信息
id guid node_name node_description ….

矢量图路径缓存表(hydra_${业务线}_vgraph_cache_path):

主键Id 节点GUID 节点路径 节点长路径
id guid path long_path
Author:undefined  Create time:2024-10-11 12:32
Last editor:zwk  Update time:2025-04-05 17:36