与大量规则匹配的实时消息

时间:2013-04-01 00:25:47

标签: java message rules fsm

我有一个场景,消息以300,000 /秒的速率进入我的系统,系统将通过将每个消息与特定规则相匹配来确定每条消息的去向(客户端)。

现在挑战是有10,000个客户端(假设每个客户端只有一个由用户定义的规则),因此对于每个传入消息,它将与每个规则匹配以确定它应该去哪里(消息可以转到多个不同的客户端,如果它符合规则)。

现在,让我们更具体一点。

例如,消息由以下字段组成。

消息(类型,区域,级别,......)

规则可能非常复杂,但现在让它变得简单

规则1 :(键入(100,200,300)&&区域不在(A,B,C)中)||等级(100)

请记住,在现实世界中,消息大约有50个字段左右,规则可能比这复杂得多。

这里的问题是:

  • 有没有办法减少匹配邮件所需的时间?或

  • 是否可以“将所有规则合并为一个”?

我的想法是FSM,但我根本不熟悉它,所以你会得到任何暗示。

编辑:

我尝试了Drools,结果证明它有点可行,但它的性能远远不够好(好吧,对大多数其他用例来说都很好)。

在我的情况下,它每秒只能处理大约5k条消息,但我有300k消息。所以现在我想也许规则引擎很难满足我的要求。

有什么想法吗?

提前多多感谢。

1 个答案:

答案 0 :(得分:0)

让我自己回答。

实际上,我需要的是某种表达式评估器,而不是一个大规则引擎,所以当我开始知道这一点时,我发现GNU JEL(Java表达式库)已经存在多年了。

JEL编译每个指定的表达式,然后客户端在评估它时可以给它一个运行时实例的上下文,这可以非常快。例如,对于给出单个表达式,JEL可以在一秒内评估超过1,000,000次(这取决于给定表达式的复杂性和要匹配的数据)

到目前为止,JEL对我来说是最合理的解决方案。

希望这篇文章能够激发你的灵感。