2017-07-06 7 views
2

私たちは異なるプロジェクトを持っており、そのうちの1つはwhite label DSP solutionです。 クライアントは、すべての着信トラフィックをIPでフィルタリングするように要求しました。 彼らは私たちに205億レコードを含むアドレスのリストを与えました。それはリアルタイムで動作するはずです。20億のIPアドレスにIPフィルタを実装する方法は?

これらのアドレスは、600万の範囲に圧縮できます。このチェックを行うには10ミリ秒しかありません。

このタスクは、NodeJSを使用して実装する必要があります。

このタスクを実行する方法や、このタスクに適したメカニズムはありますか?

+0

これらのアドレスはヒットしそうですか?どのように最終的にそれらを見ても、[ブルームフィルタ](https://en.wikipedia.org/wiki/Bloom_filter)は検索の要求を減らすのに役立ちます。 –

+0

IPV4アドレスの場合は、合計アドレス空間の半分以上を除外します。したがって、アドレスをブラックリストに載せるのではなく、リストにないアドレスをホワイトリストに登録するほうが簡単かもしれません。 _unblocked_のアドレスをいくつ圧縮できますか? –

答えて

0

すでにソートされたIPをその種の構造にロードするのは簡単です。

{ 
    100: { 
     150: { 
      200: [250, 251], 
      205: [250] 
     } 
    }, 
    105: { 
     110: { 
      115: [120] 
     }, 
     115: { 
      150: [200] 
     } 
    } 
} 

フィルタリングする必要があるIPの各オクテットのキーの有無を確認してください。
JavaScriptは整数辞書を最適化し、バイナリ検索を使用します。
NodeJSに符号なしバイトがあるか、または何十ギガバイトのRAMが必要かわかりません。

+0

良いアイデア、非常に悪い説明。詳細をいくつか追加してください –

0

「すべての着信トラフィック」とはどういう意味ですか? IPパケットをフィルタリングしており、スケーラブルなソリューションが必要な場合は、強くお勧めします。彼らが望むことをするために使用できるいくつかのSDNハードウェアがありますが、それはプロジェクトの範囲外です。

とにかく、あなたの質問に(少なくとも部分的に)答えて、あなたにいくつかの一般的なヒントを与えます(node.js特有ではありません)。まず、明確にすべき事項がいくつかあります。

  1. IPv4についてのみ話していますか?
  2. にかかわらず、あなたは彼らがルートルックアップをやっている時にルータが行うことに似て適用することができ

(彼らはリストからIPアドレスを追加/削除 ます)リストダイナミックです。あなたはpatricia trie(Radix tree)を作り、それを検索することができます(それについて真剣に考えているのであれば、thisの記事を見てください)。ルーティングの世界では、10msは生涯と見なされるため、速度の遅いCPU(1GHz未満)のソフトウェアベースのルータでも、10msの時間内に数百のIPv4ルックアップを実行する可能性があることに注意してください。 hedgar2017にも同様の例があります。リソースの量(トラフィック量)によっては、パフォーマンスについて心配する必要はありません(ユーザーセッションを確立するときだけIPをチェックしている場合)。

IPv6をやっている場合(少なくとも計画しておく必要があります)、そのアプローチは似ています。私が言及することは、IPv6が128ビットを持っていても、ISPは各ユーザーに/ 48(または最悪のシナリオ/ 64)プレフィックスを割り当てることです。ツリーを/ 48までビルドして、より高速なルックアップを得ることができます。

関連する問題