3

大量のリクエスト/秒を処​​理する必要があるJavaでWebサービスを作成しています。一般的なフローは次のようになります。

  • Webサービスがクライアントからリクエストを受信する
  • クライアントに「ポーリングを続ける」応答を返します
  • 別のWebサービス(または複数のサービス)を呼び出し、それらが応答するのを待ちます(タイムアウト付き)
  • クライアントは、応答を受信するまで(タイムアウト付き)、Webサービスをポーリングします

インターネットで調べてみると、Webサービスを作成するための2つの一般的なアプローチが見つかりました。

  • リクエストごとにスレッドを生成します
  • Reactorパターンを使用します(中央ディスパッチャースレッドはIOイベントに応答します)

どのアプローチが一般的に優れているかについての推奨事項はありますか?また、各アプローチの長所/短所は何ですか?例へのポインタもいただければ幸いです。

4

3 に答える 3

2

マルチスレッドとは思わないでください。非同期的に考えます。たまたま、IISで10スレッド未満で2,000RPSを実行する非同期ハンドラーをコーディングしました。私は.netの人なので、Javaがどのように機能するかはわかりませんが、同様のBeginXXX/EndXXXメソッドがあると信じなければなりません。スレッドを生成したことがある場合は、コードがブロックできるすべての場所(データベースIO、ファイルI / O、Webサービスなど)を考慮していません。これらは、パフォーマンスによってサイトの速度が低下する場所です。

非同期、非同期、非同期。

詠唱して繰り返します。

于 2010-01-27T04:45:23.853 に答える
0

非同期は確かに正しいアプローチですが、これを自分で管理するのではなく、JAX-WS 2.0(のFutureインターフェイスやExecutorフレームワークを使用するjava.util.concurrent)などの非同期Webサービス呼び出しをサポートするものを使用してください。JAX-WS2.0を使用した非同期Webサービスの呼び出しを参照してください。

于 2010-01-27T07:21:00.190 に答える
0

「返金なし、返品なし」の応答に加えて、コンテナがデプロイしたWebサービスのマルチスレッド/スケーラビリティと高可用性の問題を管理できるようにする必要があるため、「非同期で考える」と言います。これにより、アプリケーションコンテナを使用して、クラスタリングなどを設定します。

編集:結論として、そのようなパターンはありません。おそらく、アプリケーションコンテナのスケーラビリティ/可用性機能を調査する必要があります...

于 2010-01-27T06:17:16.690 に答える