Cosminexus 機能解説

[目次][用語][索引][前へ][次へ]

4.23.4 POSTデータサイズでのリクエストの振り分け

Webコンテナがクラスタ構成で配置されている場合,リダイレクタを使用して,POSTデータサイズごとにそれぞれのWebコンテナにリクエストを振り分けられます。この機能を使用すると,処理に時間が掛かる長大なPOSTデータのリクエストを,特定のWebコンテナに転送できます。これによって,長大なPOSTデータ以外のリクエストのスループットの低下や,レスポンス時間の低下を防ぐことができます。この方式でリクエストを振り分ける場合は,振り分け処理をする各Webコンテナに,それぞれWebアプリケーションがデプロイされていることが前提になります。ただし,各J2EEサーバにデプロイするWebアプリケーションが同一である必要はありません。

クラスタ構成でのPOSTデータサイズによるリクエストの振り分けには,POSTリクエスト振り分けワーカというワーカ定義を使用します。POSTリクエスト振り分けワーカには,振り分け先となるワーカプロセスのリストが定義されています。この定義を基に,ワーカプロセスに対するPOSTデータサイズの振り分けが実行されます。POSTリクエスト振り分けワーカの振り分け先となるワーカプロセスをPOSTリクエスト転送先ワーカといいます。

POSTリクエスト転送先ワーカへの振り分けは,HTTPリクエスト単位で実行されます。

注意
HTTP CookieまたはURL書き換えによる制御でセッションが管理されている場合でも,POSTデータサイズによる振り分けを設定しているときは,POSTデータサイズによって,リクエストの振り分け先が決定されます。このため,同一クライアントからのリクエストの場合でも,HttpSessionのセッションIDは引き継がれません。
例えば,J2EEサーバ1でHttpSessionのセッションIDを生成したあと,J2EEサーバ2へリクエストが転送された場合,J2EEサーバ2で新たにHttpSessionのセッションIDが生成されます。この場合,再度J2EEサーバ1にアクセスすると,クライアントではJ2EEサーバ2で生成されたHttpSessionのセッションIDを使用しているため,J2EEサーバ1で新たにHttpSessionのセッションIDが生成されます。このため,HttpSessionのセッションは引き継がれません。
なお,J2EEサーバ1でHttpSessionのセッションIDを生成したあと,J2EEサーバ2へリクエストが転送されても,J2EEサーバ2でHttpSessionのセッションIDが生成されない場合,再度J2EEサーバ1にアクセスすると,J2EEサーバ1で生成済みのHttpSessionのセッションIDがそのまま使用されます。
<この項の構成>
(1) POSTデータサイズによるリクエストの振り分けの例
(2) リクエストの振り分け条件
(3) POSTデータサイズによるリクエストの振り分けの定義

(1) POSTデータサイズによるリクエストの振り分けの例

POSTデータサイズでリクエストを振り分ける場合,POSTリクエスト振り分けワーカに転送されるリクエストが限定できるかどうかによって,POSTデータサイズの上限値に設定する値が異なります。

POSTデータサイズでリクエストを振り分ける場合,リクエストの振り分け条件に満たないリクエストがPOSTリクエスト振り分けワーカに転送されると,リダイレクタによってエラーステータスコード400が返されてエラーとなります。リクエストの振り分け条件については,「(2) リクエストの振り分け条件」を参照してください。

リクエストの振り分け条件に満たないリクエストも処理したい場合は,そのリクエストを転送するワーカプロセスを設定する必要があります。リクエストの振り分け条件に満たないリクエストを転送するワーカプロセスをデフォルトワーカといいます。なお,デフォルトワーカの設定は任意です。

リクエストが限定できない場合に,リクエストの振り分け条件に満たないリクエストをデフォルトワーカに転送する例を次の図に示します。

図4-43 POSTデータサイズによるリクエストの振り分けの例(デフォルトワーカを設定した場合)

[図データ]

この図では,リクエストの振り分け条件に満たないリクエストを,デフォルトワーカのワーカプロセスAに転送するように設定しています。

(2) リクエストの振り分け条件

POSTリクエスト転送先ワーカに振り分けられるリクエストは,次の条件を満たしている必要があります。

POSTリクエスト転送先ワーカに振り分けられるリクエストの条件
  • リクエストのメソッドがPOSTであること。
  • リクエストにContent-Lengthヘッダがある(ボディデータがチャンク形式でない)こと。
  • リクエストのContent-Lengthヘッダの値が,ワーカに設定しているPOSTデータサイズ未満であること。

どれか一つでも条件を満たさないリクエストは,デフォルトワーカに振り分けられます。デフォルトワーカが設定されていない場合は,エラーとなり,エラーステータスコード400のエラーが返されます。

(3) POSTデータサイズによるリクエストの振り分けの定義

標準で提供されるworkers.propertiesには,あらかじめ次に示すPOSTリクエスト割り分けワーカが定義されています。

#worker.list=postsizelb1
#worker.postsizelb1.type=post_size_lb
#worker.postsizelb1.post_size_workers=worker1,worker2
#worker.postsizelb1.default_worker=worker1

worker.postsizelb1.typeでは,ワーカのタイプを設定します。worker.postsizelb1.post_size_workersでは,振り分け対象となるPOSTリクエスト転送先ワーカのワーカプロセス名を設定します。worker.postsizelb1.default_workerでは,デフォルトワーカを設定します。workers.propertiesには,postsizelb1として,ワーカのタイプに「post_size_lb」,POSTリクエスト転送先ワーカに「worker1,worker2」,デフォルトワーカに「worker1」が定義されています。

ただし,この定義はコメントとして記述されています。このため,この定義のPOSTリクエスト割り分けワーカを利用する場合は,workers.propertiesの該当する行の先頭の「#」を削除してください。

リクエストを振り分けるPOSTデータサイズは,workers.propertiesのワーカ定義のpost_dataパラメタで設定します。

例えば,標準提供のpostsizelb1の定義を利用して,worker1とworker2という二つのPOSTリクエスト転送先ワーカに,それぞれ次のようにPOSTデータサイズを定義しているとします。

この場合,worker1には100メガバイト未満のリクエストが,worker2には100メガバイト以上200メガバイト未満のリクエストが振り分けられます。リクエスト振り分けワーカが,200メガバイト以上のリクエストを振り分けた場合,そのリクエストはデフォルトワーカに設定されているworker1に転送されます。

POSTデータサイズでのリクエスト振り分けの設定については,マニュアル「Cosminexus システム構築ガイド」を参照してください。