资讯详情

drools_Drools DMN最新开源引擎性能改进

drools

drools

我们一直在寻求改进Drools DMN开源引擎的性能。 我们最近进行了审查DMN输入数据节点的实际输入总体不同。 这突出了发动机的次佳性能,我们在最新版本中进行了改进。 我想分享我们的发现!

基准制定

当我们开始为此用例运行支持基准时,特别是在调查具有稀疏填充输入数据节点的大型数据节点时DMN在模型场景中,我们注意到了一些奇怪的结果:当记录消息时,火焰图数据突出显示性能的严重下降,这与应用逻辑本身相比花费了大量时间。

火焰图特别突出,说明堆栈跟踪合成(由测井框架人为诱导)消耗了大部分时间。 在这种情况下,纠正措施是调整日志记录配置,以避免此问题。 具体来说,我们禁止了日志记录框架的功能,在调试活动中非常方便,可以快速定位原来的调用类别和方法:不幸的是,该功能的成本是合成堆栈跟踪,最初污染了基准测试结果。 从这里学到的教训:请始终检查非功能需求是否真的掩盖了真正的问题!

在继续更详细地研究用例之前,这是一个必要和可行的步骤。

改善表现

继续和专注DMN优化,我们专门开发了一个通用性很强的基准,同时也重点介绍了提供给我们的用例。 该基准包含一个DMN该模型包括许多需要评估的决策节点(500个)。 评估输入数据节点的稀疏性; 范围从1(填充所有输入)到2(只填充两个输入中的一个)等。

事实证明,这一特定基准是突出一些潜在改进的非常有用的工具。

将比较基准设置为Drools版本7.23.0。最终,使用DROOLS-4204实现的第一个优化专注于在评估FEEL表达式同时改进上下文处理,证明可以提供3倍左右的改进,使用DROOLS-4266的进一步优化侧重于特定决策表输入子句的用例。DROOLS-附加在4204的基础上2倍改进。

我们还在下图中收集了这些测量。

该图突出了稀疏因子等于1时(填充所有输入时)的复合改进; 这是一个非常重要的结果,因为它实际上代表了原始用例主要快乐路径场景。

换句话说,与在相同的用例上运行相比,我们实现了约6倍的改进

7.23.0.我在这里学到的最后一个教训是,在可能的情况下,我总是努力争取这些复合的改进,因为它们可以相互叠加,以获得更大的效果!

为了完整起见,我们用以下测量反复分析:稀疏因子等于2(实际上每2个输入填充1个)和50个(实际上每50个输入填充1个),并进行以下测量:

结果表明,优化对于等于2的稀疏因素也非常重要,但随着因素的增长,相关的改进并不明显——这是可以预期的,因为决策节点评估对整体执行逻辑的影响现在已经变得不那么重要了。

为了完整起见,还使用了另一个现有的基准来分析包含多个规则的单个决策表:

结果表明,这些代码变更总体上仍能提供相关的改进; 虽然明显不同幅度原使用-情况。 这是另一项重要的检查,以确保这些改进不适合特定用例。

结论

以Drools版本7.23.0.Final以及由为基准DMN由模型和许多参考基准组成的评估决策节点,我们实施了许多优化。一旦这些优化结合在一起,特定项目的总速度可以提高约6倍!

希望这是一篇有趣的文章,强调有趣文章; 让我们知道你的想法和反馈。

今天,你已经能做到了Drools受益于这些最新版本Kie DMN开源引擎的改进!

翻译自: https://www.javacodegeeks.com/2019/08/drools-dmn-performance-improvements.html

drools

标签: 二极管dmn26d0udj

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台