我有一个场景,消息以300,000 /秒的速率进入我的系统,系统将通过将每个消息与特定规则相匹配来确定每条消息的去向(客户端)。
现在挑战是有10,000个客户端(假设每个客户端只有一个由用户定义的规则),因此对于每个传入消息,它将与每个规则匹配以确定它应该去哪里(消息可以转到多个不同的客户端,如果它符合规则)。
现在,让我们更具体一点。
例如,消息由以下字段组成。
消息(类型,区域,级别,......)
规则可能非常复杂,但现在让它变得简单
规则1 :(键入(100,200,300)&&区域不在(A,B,C)中)||等级(100)
请记住,在现实世界中,消息大约有50个字段左右,规则可能比这复杂得多。
这里的问题是:
有没有办法减少匹配邮件所需的时间?或
是否可以“将所有规则合并为一个”?
我的想法是FSM,但我根本不熟悉它,所以你会得到任何暗示。
编辑:
我尝试了Drools,结果证明它有点可行,但它的性能远远不够好(好吧,对大多数其他用例来说都很好)。
在我的情况下,它每秒只能处理大约5k条消息,但我有300k消息。所以现在我想也许规则引擎很难满足我的要求。
有什么想法吗?
提前多多感谢。
本
答案 0 :(得分:0)
让我自己回答。
实际上,我需要的是某种表达式评估器,而不是一个大规则引擎,所以当我开始知道这一点时,我发现GNU JEL(Java表达式库)已经存在多年了。
JEL编译每个指定的表达式,然后客户端在评估它时可以给它一个运行时实例的上下文,这可以非常快。例如,对于给出单个表达式,JEL可以在一秒内评估超过1,000,000次(这取决于给定表达式的复杂性和要匹配的数据)
到目前为止,JEL对我来说是最合理的解决方案。
希望这篇文章能够激发你的灵感。