为什么不使用规则引擎?或者说规则引擎的开销问题

5
我已阅读多篇关于使用规则引擎的用例的文章。其中许多文章都表明,你不应该将其用于工作流管理。
我参考的文章如下:
  1. 规则引擎的优缺点
  2. 何时不应使用规则引擎
  3. 使用规则引擎的指南
但是,我仍然没有得到什么简单的解释,规则引擎在系统中使用会增加哪些开销?
如果我将它用于工作流管理,它会对内存造成负担吗?
有人能够重点介绍一下吗?
我还将提供我们将使用规则引擎的场景:
我们有一个竞价引擎,其输入基于业务分析师的预测经常发生变化。因此,简而言之,我们将根据规则针对某些值执行操作。例如:如果业务分析师将价值设置为2美元,则规则引擎将决定要向客户发送的竞标价值。

第二个链接与你的“为什么不使用”的问题非常相似。显而易见的答案是:如果对于你的特定情况来说它不好,那就不要使用它,因为这会让你自食其果。请更正你的问题标题以匹配你似乎更关心的“开销”,也许这会停止“不具建设性”的投票。但即便如此,“假设”也会引发辩论。 - quetzalcoatl
@quetzalcoatl 我认为添加“开销”会有意义。 - Sam
3个回答

2
简而言之,规则引擎用于做决策;工作流程用于运行流程。
您需要一个规则引擎来替换编译代码中的一些或所有“IF”和“ELSE”,以便使用可以更改的“软”逻辑而无需更改/重新编译主代码。您提供一个规则和数据(称为“事实对象”或“源对象”),引擎评估该数据针对该规则。这是规则引擎的唯一目的。大多数引擎可以返回针对您的数据进行规则评估的输出为True或False,或调用“操作”(代码中的方法)进一步处理您的数据。
您使用工作流程来运行工厂、仓库或军事设施。工作流允许您停止传送带并等待事件发生,或者如果老板签字,则继续批准过程。等等。通常,工作流程在其核心部分内部使用规则引擎来决定下一步该做什么。
希望这能稍微澄清一些事情 :)

你并没有确切地回答问题“使用规则引擎还是不使用” :) - user766279
1
@MTG 是的,我的错。如果您知道您需要规则引擎而不是工作流,则是否使用引擎的决定取决于您的业务逻辑有多复杂以及更改频率如何。仅因为有几个开关语句或几个可能每年更改一次的IF语句而增加处理新技术的额外开销是不值得的。对于任何更严重的情况,我会考虑使用规则引擎。另一个考虑因素是业务人员是否希望自己管理规则。一些引擎配备了出色的UI,可以实现这一点。 - Kizz

1
由于没有标准的规则引擎,实现和实现结果可能会高度变化,这取决于您使用的语言和平台,因此无法直接回答您的问题。尽管如此,我将努力为您提供一些帮助。
规则引擎提供了一种在代码中实现一组条件的方法,更重要的是,让条件设置在代码之外,并由其解释,以便其他利益相关者可以根据需要修改规则。
您需要考虑您正在尝试解决的确切问题、您正在尝试解决它的平台,并决定在该特定情况下是否规则引擎是最佳解决方案。链接的问题在这方面提供了一些良好的指导。
请注意,如果您有一个可以通过此方式或其他方式解决的问题,每个解决方案都会有一些开销-有些可能会影响性能,有些可能会影响开发时间或可维护性。您需要确定您系统用户所关心的重点,并使其指导您走向解决方案。

我们使用Java作为编程语言。我们确实有使用它的有效理由。您的回答并没有回答我的关于开销的问题。 - Sam
@Sam:请告诉我,我想我应该使用java.lang.String类。这会给我的商业智能系统增加额外负担吗?希望你明白我的意思...每个工具在开始使用时都可能会增加负担,包括普通的String甚至是Java中的String,如果使用不当,它们都可能会导致应用程序崩溃。对于更复杂的工具,误用它们更容易发生。这一切并不取决于工具本身,而是取决于你最终使用它的方式。你问关于负担的问题,但你没有说明你想如何使用它。所以我认为你的问题仍然太模糊了。 - quetzalcoatl
1
那为什么不在问题中包含这些细节呢?你提供的细节越多,得到的回答就会越详细。我的回答已经尽可能地根据你提供的信息进行了解答。如果你问的问题含糊不清,那么你应该预计得到含糊不清的回答。 - glenatron
1
@quetzalcoatl 好的。我这样说吧。我们有一个竞标引擎,其输入根据业务分析师的预测经常变化。因此,简单来说,我们将根据规则对提供的某些值采取行动。如果这有帮助,或者我可以尝试更详细地解释一下。 - Sam
1
@Sam,将所有内容放入你的问题中,你会得到更好的答案! - glenatron

0

为了充分披露,我在InRule Technology工作,这是一家业务规则管理系统供应商。

在其中一个链接帖子中提到了一个观点,即使用任何第三方解决方案都会产生开销。规则引擎也不例外。然而,关键在于通过仔细规划和建模(1)将传递到规则引擎中的对象和数据以及(2)规则本身的复杂性来最大化规则引擎执行的效率。

如果您在代码中执行此操作而不是在规则引擎中执行,则开销并没有什么不同。在较低端,当对象/数据和规则具有适度的复杂性时,我们将其归类为短期决策,并且开销最小。随着数据和/或规则的复杂性增加,执行时间将增加。但是,我们看到的指标在性能方面没有引起任何问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接