规则配置抽象化
决策树同决策矩阵部分?
首先确定规则集,然后再确定决策树
pipeline模型,用链式串联不同节点组件,组成直线工作流
Rete模型,构建成网络,区分alpha网络和beta网络
实现决策树和决策矩阵是把每个可选的条件都置为单独规则处理,而rule_1和rule_2存在互斥关系,如果一个为true,另一个则无需计算,rule_3和rule_4也是如此。如果决策树更加复杂,一个选择即一个分支,将存在更多无需计算的规则。为了提高决策效率,一个简单的实现方案:可将互斥的规则增加个属性标签“规则组”,将决策上下文缓存,已获得true结果的规则组下规则不再参与重复匹配计算。
实际上,是一个模式匹配的问题,如何更高效地匹配和轮转
rete模型
构建rete网络流程:
- 网络的构建始于根节点Root Node(黑色)
- 构建Alpha网络,根据rule_1获取执行条件(module模式)中参数类型,添加Type Node节点(Object Type Node),并将module作为AlphaNode加入网络(已添加忽略),重复执行所有rule下的module,构建Alpha内存表 (Alpha Memory 黄色节点)。
- 构建Beta网络,Beta Node节点,Beta(i)左输入节点为Beta(i-1),右输入节点为Alpha(i),连接节点Join Node(绿色节点)
- 规则执行部分封装成Terminal Node(灰色节点)
有向图结构(如有向无环图DAG),图的解析主要是进行深度或广度遍历,可以执行每条分支流程,因此图的遍历更适合做并行网关,而决策流是排它网关语义,同时有且只有一个分支满足执行条件,使用图结构并不合适,一次决策的执行流程,更像一个链式流程,更适合单向链表结构。
关于flink的原子粒度的问题,采用滑动窗口的问题
如果要看 10 分钟、15 分钟数据,只要把结果数据再做一次聚合即可。这样可以避免因调整聚合窗口时间,导致监控服务重启不可用。