2

メッセージがピーク時に毎秒 300,000 のレートでシステムに着信するシナリオがあり、システムは各メッセージを特定のルールと照合することによって、各メッセージの送信先 (クライアント) を決定します。

ここでの課題は、10,000 のクライアントが存在することです (各クライアントには、ユーザーによって定義されたルールが 1 つだけあるとします)。そのため、受信メッセージごとに各ルールと照合され、送信先が決定されます (メッセージは複数の異なるクライアントに送信される可能性があります)。ルールに一致する場合)。

では、より具体的に説明しましょう。

メッセージは、たとえば次のフィールドで構成されます。

メッセージ (タイプ、地域、レベル、...)

ルールは非常に複雑になる可能性がありますが、ここでは単純なものにしましょう

rule1: ((100, 200, 300) を入力 && (A, B ,C) にない領域) || (100) のレベル

現実の世界では、メッセージには約 50 のフィールドがあり、ルールはこれよりもはるかに複雑になる可能性があることに注意してください。

質問は次のとおりです。

  • メッセージの照合に必要な時間を短縮する方法はありますか? また

  • 「すべてのルールを 1 つにまとめる」ことは可能ですか?

気になるのはFSMですが、まったく詳しくないので、どなたか教えていただければ幸いです。

編集:

Drools を試してみたところ、ある程度実現可能であることがわかりましたが、そのパフォーマンスは決して良いものではありません (まあ、他のほとんどのユース ケースでは良い可能性があります)。

私の場合、1 秒あたり約 5,000 件のメッセージしか処理できませんが、300,000 件のメッセージがピークに達しています。そのため、ルール エンジンは私の要件をほとんど満たすことができないのではないかと考えています。

何か案は ?

よろしくお願いします。

ベン

4

1 に答える 1

0

自分で答えさせてください。

実際、私が必要としているのは、大きなルール エンジンではなく、ある種の式エバリュエーターです。そのため、これを知ったとき、GNU JEL (Java Expression Library) が何年も前から存在しないことがわかりました。

JEL は指定された各式をコンパイルし、クライアントはそれを評価するときにランタイム インスタンスのコンテキストを与えることができます。これは非常に高速です。たとえば、与えられた単一の式の場合、JEL は 1 秒間に 1,000,000 回以上評価できます (これは、与えられた式の複雑さと照合するデータによって異なります)。

したがって、JEL は私にとって最も合理的なソリューションです。

この投稿があなたに少し刺激を与えることを願っています。

于 2013-04-10T08:57:41.667 に答える