1

この種の推奨事項は、次のような複数の場所で見ました。

複数のファクトリ: 同じファクトリによって作成されたすべてのクライアント (受信者に加えて送信者) は、1 つの TCP 接続を共有します。最大メッセージ スループットは、この TCP 接続を通過できる操作の数によって制限されます。1 つのファクトリで得られるスループットは、TCP の往復時間とメッセージ サイズによって大きく異なります。より高いスループット レートを得るには、複数のメッセージング ファクトリを使用する必要があります。

Redis、RabbitMQ などについても同様の推奨事項を見つけることができます。私の質問は、1 つの TCP チャネルがどのように使い果たされるのでしょうか? 単一の TCP チャネルに帯域幅の制限はないと思います。

では、なぜ人々は高スループットのために複数のチャネルを持つことを提案するのでしょうか? それは次の理由によるものですか。

  1. クライアント アプリケーションが多数の小さなメッセージを 1 つの tcp チャネルに送信する場合、各操作は tcp ソケットをロックしてからメッセージを送信します。ロック競合が発生する可能性があります。そして、複数の tcp チャネルを使用する場合、この競合はある程度解決される可能性があります。

  2. 大きなメッセージが tcp チャネルで送信される場合、シリアライズ/デシリアライズしてチャネルにプッシュするのに時間がかかることがあります。他の小さなメッセージをブロックできます。

これらは実際の理由ですか (または、これらの仮定が間違っている場合、本当の理由は何ですか)?

4

1 に答える 1

1

基本的に、あなたは正しいです。クライアント 1 --> TCP/IP ---> サーバー (何らかの処理を行う) さて、クライアント 2 はサーバーにリクエストを送信しますか? クライアント 2 は、クライアント 1 の終了を待つ必要があります (ここでのコンテキストは、I/O のブロックに関するものだと思います)。したがって、複数の TPC 接続がある場合、クライアント 2 はクライアント 1 と同時にリクエストを送信できます ==> スループットが向上します。ただし、よりアクティブな接続を維持するにはコストがかかります。リクエストを処理するのに「十分な」接続があることを確認し、「アイドル」接続の数を最小限に抑える必要があります。

于 2016-08-31T10:46:18.993 に答える