Skip to content

DAG模式

rencalo770 edited this page Apr 16, 2021 · 6 revisions

说明

为了增加对任意可能执行模式的支持,以及为了让用户可以任意的编排规则的执行顺序, gengine支持DAG(Directed acyclic graph,有向无环图)执行模式. 此模式下,gengine不会考虑规则的具体优先级,而是基于用户构建的规则的有向无环图来并发或顺序地执行规则.

图存储

图存储结构主要有两种,邻接矩阵存储法和邻接链表法,其他存储方法,都是在这两者上优化而来。

邻接矩阵

邻接矩阵是表示顶点之间相邻关系的矩阵,具体如下

邻接链表

图的邻接表存储方法是一种顺序分配与链式分配相结合的存储方法

对图存储的一种改进

如果直接让用户直接构建以上两种DAG存储结构来执行规则,显然有点复杂.因此,为了用户可以更简单的构建自己的规则DAG, 我们在图的邻接矩阵上了做了一点小改进:将有向无环图抽象成"图层","图层"按列排布,从左至右,层内规则并发执行,层间规则顺序执行.

如下一张图有向无环图,总共有4层

用户仅需将同一层级的规则名放置于同一个切片中,然后将这些切片作为元素,依次从左至右,顺序放置于一个切片中,构成了一个基于规则名称的二维切片,然后调用gengine的相关API,gengine即可基于用户构建的DAG图来执行规则. 如上图中所示,规则引擎会先并发执行["rule1","rule2","rule3"],然后再并发执行["rule4","rule5","rule6","rule7"],然后再执行["rule8"],最后再并发执行["rule9","rule10","rule11"].

具体的API

Clone this wiki locally