データのストリームを解析しているシステムがあり、多くのユーザーのサブスクリプションに基づいて、それをフィルタリングする必要があります。ただし、これらのフィルターには正規表現を含めることができるため、悪意のあるユーザーがサービスを破壊するために意図的に CPU を消費する正規表現を挿入できないように、十分に安全にする必要があります。
どうするのが一番いいのか悩んでいますが、
私が作成した別のプログラムでは、正規表現検索を実行する新しいスレッドを生成することでこれを処理していました。このスレッドが制限を超えて実行されている場合、スレッドは強制終了され、エントリがブロックされました。
ただし、このシステムは毎分数千のレコードを処理している可能性があり、すべてのレコードに対して新しいスレッドを生成することは想像できません (実際、エントリごとにすべてのサブスクリプションをループする必要があるため、毎分数十万のスレッドになる可能性があります)。 .
これを処理するためのより良いアプローチはありますか? サブスクリプションが作成されたら、いくつかのテスト データを使用して正規表現をテストする必要がありますか? それとも、別のスレッドで解析されるユーザーごとに別のキューを使用するのでしょうか?
また、私の頭に浮かぶ別のアプローチは、各フィルターがかかる CPU 時間に関する統計を収集し、過度に消費するこれらを無効にすることですが、CPU の数分を必要とする可能性のある「非常に悪い」正規表現を実際には処理しません。終了時間
誰かが興味を持っていれば、私はC#で書いていますが、この質問はかなり一般的で、どの言語にも当てはまる可能性があります