5

sa ocket 接続を多重化することはできますか?

yahooメッセンジャーへの複数の接続を確立する必要があり、クライアント接続ごとにソケットを開いたままにすることなく、これを効率的に行う方法を探しています。

これまでのところ、クライアントごとに 1 つのソケットを使用する必要があり、これは 50,000 接続を超えると拡張できません。

ああ、私の解決策は TELCO のためのものなので、少なくとも 250,000 から 500,000 の接続に到達する必要があります

複数の IP アドレスを 1 つの NIC にバインドして、IP アドレスごとに 65k ポートの制限に打ち勝つことを計画しています。

助けてください、私が得ることができる洞察。

**このサイトに関する私の他の質問のほとんどは未回答です:) **

ありがとう

4

5 に答える 5

2

複数の着信接続要求をソケットでリッスンできますが、接続が確立されると、サーバーの一意のポートがクライアントの一意のポートに接続されます。接続を多重化するには、パイプの両端を制御し、ある仮想接続から別の仮想接続にコンテキストを切り替えるか、クライアントの ID を気にしないステートレス プロトコルを使用できるプロトコルを用意する必要があります。前者の場合、既存の接続を再利用できるように、アプリケーション層に実装する必要があります。後者の場合、どのサーバーの応答がどのクライアントに送られるかを追跡するプロキシを使用して取得できます。Yahoo Messenger に接続しているので、接続していないと思います」

于 2009-03-20T10:53:38.503 に答える
2

これは、深刻な状況でのスケーリングに関する興味深い質問です。

あなたは基本的に、「N が >= 250,000 であるインターネット サービスへの N 接続を確立するにはどうすればよいか」と尋ねています。

これを効果的かつ効率的に行う唯一の方法は、クラスター化することです。単一のホストでこれを行うことはできないため、クライアント ベースを断片化し、いくつかの異なるサーバーに分割して、それぞれがサブセットのみを処理できるようにする必要があります。

サーバー間の通信を最小限に抑えることで、ホストしているサービスを実行可能にするのに十分な接続を保持しながら、単一のサーバーが可能な限り少ない接続を保持する (接続を均等に分散させる) という考えです。これは、関連する 2 つの接続 (互いに頻繁にやり取りする 2 つのアカウントなど) が同じホスト上にある必要があることを意味します。

これを処理できるサーバーとネットワーク インフラストラクチャが必要になります。IP アドレスのサブネットが必要です。各サーバーはインターネットとステートレス通信を行う必要があります (つまり、ルーターは 250,000 以上の接続を追跡する必要がないため、NAT を実行しません)。

AOL に相談する必要があります。接続を切断することを考慮せずに、AOL がこのレベルの接続を処理できる方法はありません。この規模のサービスは、AOL と交渉して、あなたと AOL の両方が接続を処理できるようにする必要があります。

調査すべき I/O 多重化テクノロジがあります。Kqueue と epoll が思い浮かびます。

この大規模な同時並行のテレコ グレードのソリューションを作成するには、erlang を調査することをお勧めします。Erlang は、このような状況 (マルチサーバー、大規模マルチクライアント、大規模マルチスレッド通信グレードのソフトウェア) 向けに設計されています。現在、エリクソンの電話交換を実行するために使用されています。

于 2009-03-20T11:30:26.620 に答える
1

私はあなたが考えることができる別のアプローチを投げます(あなたがどれほど絶望的であるかに応じて)。

オペレーティングシステムのTCP/IP実装は汎用である必要がありますが、関心があるのは非常に特殊なユースケースのみであることに注意してください。したがって、TCP / IPの縮小バージョン(ユースケースのみを処理しますが、それは非常にうまく機能します)をアプリケーションコードに実装することは理にかなっているかもしれません。

たとえば、Linuxを使用している場合は、いくつかのIPアドレスをtunインターフェイスにルーティングし、アプリケーションにそのtunインターフェイスのIPパケットを処理させることができます。これにより、TCP / IP(ユースケースに合わせて最適化)をアプリケーションに完全に実装し、開いている接続の数に関するオペレーティングシステムの制限を回避できます。

もちろん、TCP / IPを自分で行うのはかなりの作業ですが、実際には、自分がどれだけ必死であるか、つまり、問題にどれだけのハードウェアを投入できるかによって異なります。

于 2009-03-20T23:23:43.037 に答える
1

相手側がそのような操作をサポートしている場合にのみ、単一のソケットで複数の接続を多重化できます。言い換えれば、これは関数プロトコルです。ソケットにはネイティブ サポートがありません。

yahooメッセンジャープロトコルがそれをサポートしているとは思えません。

(単一の NIC で複数の IP を使用するための) 別の方法は、独自の多重化プロトコルを設計し、多重化プロトコルから yahoo プロトコルに変換するサテライト サーバーを用意することです。

于 2009-03-20T10:51:48.243 に答える
0

500,000の任意のyahooメッセンジャー接続-あなたの電話会社はYahooに代わってこれを行っていますか?長年にわたって実施されてきたソリューションは、ムーアの法則の助けを借りてスケーラブルにする必要があるようです。私が知る限り、すべてのIMクライアントは長い間非常に効果的であり、需要の差し迫った増加はありません。思いつくことができます。

これがハードウェアと従来のソリューションで対処するのに合理的な問題ではないのはなぜですか?

于 2009-03-20T23:42:15.083 に答える