0

サーバーのロジックにより、サーバー上でより多くの仮想メモリを占有するサーブレットがあります。このため、このサーバーへの同時リクエストを制限したいと思います。たとえば、10の同時リクエストのみを処理する必要があります。他のリクエストはキューで待機する必要があります。

カスタムスレッドプールを作成して、このシナリオを処理するためにこのサーブレットに割り当てることはできますか?WebLogicサーバー9.2を使用しています。または、これを行うための他のより良いアプローチはありますか?どんな考えにも感謝します。

4

6 に答える 6

2

このシナリオを処理するために、カスタム スレッド プールを作成して、このサーブレットに割り当てることはできますか? WebLogic サーバー 9.2 を使用しています。または、これを行うための他のより良い方法はありますか? どんな考えでも感謝します。

はい、可能です。デフォルトの自己調整ワーク マネージャ(Weblogic 9.x 以降では、実行キューはスレッド プールのワーク マネージャに置き換えられています1 )を使用する代わりに、や場合によってはなどの特定の制約を持つワーク マネージャを作成できます。次に、デプロイメント記述子ファイルのwl-dispatch-policyを使用して、サーブレットを特定のワーク マネージャーに割り当てることができます。max-threads-constraintcapacityweblogic.xml


1 WebLogic 8.1 スレッド プール モデルを有効にして、実行キューを使用することは引き続き可能です。

于 2009-10-28T18:48:46.990 に答える
1

リクエストがマシンにヒットしたとき、それはやや手遅れであるため、前に何かまたはサーブレットをホストしているマシンが必要です。リソースはすでに使用されています。需要側を制御することはできません。それに反応して計画することしかできません。

ターゲットの要件に応じて、ソフトウェアまたはハードウェアのいずれかのロードバランサーが必要になる可能性があります。ソフトウェアロードバランサーは、セッション制御を備えた単純な「ディスパッチャーサーブレット」にすることができます(たとえば、サーブレットXと同時に10個)。

別の可能性があります。適切なHTTPコードを発行して、リクエスターを「スロットル」します。もちろん、これはリクエスター側で追加のロジックを意味します...そしてそれでもサーバー側でいくつかのリソースを消費します。

于 2009-10-27T16:24:30.190 に答える
0

高価なサーブレットに対するすべての要求を処理するセカンダリサーバーが存在するように、負荷分散を行うことができます。

于 2009-10-27T16:21:44.520 に答える
0

静的カウンターと、高価なメソッド呼び出しへのゲートウェイとして機能するサーブレットを使用できます。この静的カウンターで発生する可能性のある競合状態に対処する必要があるだけです。

したがって、現在のサーブレットをメソッド呼び出しに変更します。

次に、ゲートウェイ サーブレットがリクエストを受け取り、カウンターが十分に低いかどうかを確認してから、インクリメントします。10 を超える場合は、何らかのエラー メッセージを返します。

これは理想的な状況ではありませんが、物事をキューに入れると、しばらくするとブラウザーがタイムアウトし始めたり、時間がかかりすぎるためにユーザーが焦って送信ボタンを何度もクリックしたりします。

JavaScript を使用してリクエストを送信できる場合は、役立つ可能性のあるより良い解決策がいくつかあります。

于 2009-10-27T16:28:30.743 に答える
0

ロードバランサーなどを使用せずに、リクエストを処理から切り離したいようです。

例えば

  1. ブラウザがリクエストを送信します。サーブレットはそれを受け取ってキューに入れ、チケットを返します。
  2. サーブレットは、リソースが許す限り、この作業要求を処理します (別のスレッド プールを使用してキューから作業項目をプルします)。
  3. ブラウザはそのチケットを使用して更新 (再 GET) でき、サーブレットは適切な結果 (処理しない、処理する、処理するなど) を返します。

これはかなり一般的なパターンです。ブラウザーはブロックされませんが、単に要求をディスパッチし、定期的にチェックを実行して、作業項目が完了しているかどうかを確認することに注意してください。私はこれを (たとえば) 処理に 5 分以上かかるチャートを求めるユーザーがいて、スレッドセーフではないネイティブ ライブラリを使用している状況で、これをうまく使用しました。そのシナリオで、同時リクエストの数に関係なく、処理を 1 つのスレッドに制限する必要がありました。

于 2009-10-27T16:28:55.640 に答える
0

静的カウンターを使用し、カウンターが制限を超えたときにエラー メッセージを表示するようにリダイレクトするというアイデアが気に入っています。

別のサーブレットを構成し、X 個の同時要求のみを許可するようにスレッド プールを構成すると、他のすべての要求はキューに入れられ、次に利用可能なサーブレットが使用されます。このアプローチはタイムアウト エラーをスローしますか? このあたりの詳細を教えてください。ありがとう

http://download.oracle.com/docs/cd/E13222_01/wls/docs92/perform/appb_queues.html

于 2009-10-27T18:21:52.310 に答える