我有一个场景,消息以 300,000/秒的速度进入我的系统,系统将通过将每条消息与特定规则进行匹配来确定每条消息的去向(客户端)。
现在的挑战是有 10,000 个客户端(假设每个客户端只有一个由用户定义的规则),因此对于每条传入的消息,它将与每个规则匹配以确定它应该去哪里(一条消息可以去多个不同的客户端如果它符合规则)。
现在,让我们更具体一些。
例如,一条消息由以下字段组成。
消息(类型、区域、级别、...)
一条规则可能很复杂,但现在让我们把它变成一个简单的规则
rule1: (输入 (100, 200, 300) && region not in (A, B , C)) || 水平 (100)
请记住,在现实世界中,一条消息大约有 50 个字段左右,并且规则可能比这复杂得多。
这里的问题是:
有什么方法可以减少匹配消息所需的时间吗?或者
是否可以“将所有规则合并为一个”?
我想到的是 FSM,但我对它一点也不熟悉,所以你的任何提示将不胜感激。
编辑:
我尝试了 Drools,结果证明它是可行的,但它的性能远非好(嗯,它可以适用于大多数其他用例)。
就我而言,它每秒只能处理大约 5k 条消息,但我一眼就能看到 300k 条消息。所以现在我在想也许规则引擎很难满足我的要求。
有任何想法吗 ?
提前非常感谢。
本