ネットワークトラフィックの動的なリダイレクト

この記事では、ネットワークインターフェイスを動的に切り替える機能を整理する方法に焦点を当てます。







この問題の原因は、ソーシャルネットワークから大量の情報を収集する必要があった以前のsocmetr.ruプロジェクトから拡大し始めたため、インターネットで唯一のチャネルが詰まりました。 分析では、圧縮しても受信情報の量が非常に多いためブロックされ、CPUとメモリの容量は20%使用されず、ディスクサブシステムはほとんど常にアイドル状態になります。つまり、チャネル幅によって制限されます。プロバイダーが提供します。







最初に考えたのは、少し冷静に考えながら、広範な方法で機能を単純に向上させることでした。私たちは問題を未来にシフトしていることに気付きました。 もちろん、「私たちは同志をどこへ行こうか」という疑問が生じました。 その結果、次のアイデアを実現しました。







画像






サーバーのセットアップ



構成は均一に見えるため、記号表記を導入することは理にかなっています。







A 1は最初のネットワークインターフェース、A 2は2番目の... A Nは最後のネットワークインターフェースです。

IP 1はネットワークインターフェイスA 1に関連付けられたIPアドレス、IP 2はA 2に関連付けられたアドレスです... IP NはA Nに関連付けられたアドレスです

GW 1はプロバイダーゲートウェイP 1 (プロバイダー1)のIPアドレス、GW 2はプロバイダーP 2のゲートウェイアドレスです... GW NはゲートウェイアドレスP Nです

GW 1 _NETはプロバイダーのネットワークP 1のIPアドレス、GW 2 _NETはプロバイダーのネットワークP 2のIPアドレスです... GW N _NETはプロバイダーのネットワークP NのIPアドレスです







その後、次のように設定を行うことができます。







 N-  ( N -      ) ip route add {GW1_NET} dev {A1} src {IP1} table T1 ip route add default via {GW1} table T1 ... ip route add {GWn_NET} dev {An} src {IPn} table Tn ip route add default via {GWn} table Tn      : ip route add {GW1_NET} dev {A1} src {IP1} ... ip route add {GWn_NET} dev {An} src {IPn} ip route add default via {GW1}  : ip rule add from {IP1} table T1 ... ip rule add from {IPn} table Tn
      
      





そして問題は、特定のインターフェイスへのすべてのリクエストがそれから応答を受信することを保証する設定を取得することです。







使用する



異なるネットワークアダプターを使用するには、特定のプログラミング言語の設計を使用するか、サードパーティのライブラリを使用する必要があります。 Javaでは、これはソケットを介して行うことができます。例:







 socket.bind(new InetSocketAddress(InetAddress.getByName("network-adapter"), port));
      
      





このスキームを実装することにより、情報システムのライフサイクルのさまざまな段階で、サーバーで発生するビジネスプロセスとロジックに応じて、インターネットチャネルの帯域幅を制御することができました。







長所:









短所:









おそらく誰かが同様の問題に既に直面していて、私たちは自転車を作ったので、解決策に対する批判は大歓迎です。








All Articles