3

複数のクライアントを同時に処理する Java サーバーを構築する際にアドバイスが必要です。クライアントは、かなり長い時間接続を維持する必要があります。私は現在、ブロッキング IO を使用し、サーバーに接続する各クライアントから読み取るスレッドを生成していますが、これは明らかにスケーラブルではありません。

固定サイズのスレッド プールで Selector または Executor を使用するなど、いくつかのオプションを見つけました。私はどちらにもあまり詳しくないので、ここではどちらが最善の解決策でしょうか? ありがとう!

4

4 に答える 4

1

スケーラブルの定義によって異なります。接続ごとに単一のスレッドで説明したシステムは、数百まで拡張可能で、同時接続が数千の場合もありますが、ある時点で壁にぶつかります。

あなたの質問は、クライアントが接続して長時間接続を維持することを示しています。単一の IO スレッドで読み取りと書き込みを処理することは可能ですが、リクエストの処理は Executor を使用して別のスレッドにディスパッチされます。

この種のイベント駆動型設計を処理するために既に作成されたフレームワーク/サーバーがあります。見て:

世界には、本当にスケーラブルなアーキテクチャを備えた失敗したスタートアップやソフトウェア製品がたくさんあることに注意してください。スケーリングは、あるとよい問題です。問題がないのに顧客がいないよりは、問題があるほうがよいでしょう。

于 2011-04-10T21:24:16.470 に答える
0

複数のスレッドの使用はスケーラブルです。たとえば、Apache はこれを行い、それを使用している一部のサイトには多くの訪問者がいます。ただし、セレクターを使用した経験はありませんが、実際にはセレクターを使用する別のアプローチがあります。

結局のところ、これはどの宗教が最高かという問題のように思えます。

于 2011-04-10T21:19:52.910 に答える
0

この種の仕事にはたくさんのフレームワークがあります、例

  1. ネティ
  2. アパッチミナ
于 2011-04-10T21:30:40.383 に答える
0

スケーラビリティとは別に、すべてのサーバー アプリケーションには限界があります。ブロッキング IO を使用すると、VM が生成できるスレッドの数が制限の 1 つになります。これは、アプローチが「クライアントごとに 1 つのスレッド」であるためです。NIO (そのうちセレクターはクラスの 1 つです) では、アプローチは「リクエストごとに 1 スレッド」であり、かなり後でスレッドが不足します。

アプリの水平スケーラビリティ ( http://en.wikipedia.org/wiki/Scalability#Scale_horizo​​ntally_vs._vertically ) は、これらの選択のいずれにも依存しません。

于 2011-04-10T21:33:49.733 に答える