複数の運用サーバによる処理の負荷分散を行う

 XCuteは運用サーバ機を最大 25台まで増設し処理を分散することができます。
プロジェクトの増加やユーザーの増加により、結果を表示するまでの時間が掛かるなど1台のサーバ機でリソースが枯渇するような場合に運用サーバ機を増設し て対処します。


 上の図はProwebXとProWebSの2台の実行サーバを使い負荷分散を行っている例です。
各実行サーバのXCuteインストールフォルダに存在するproles.iniProWebA2ZXSな ど重複しない値に設定します。
[CGI]セクションの他の値は、2つのコンピュータで同じ値を保持するようにします。
特にCGI_PATH 項が各実行サーバ機共に同一のprocgiフォルダを参照す るようにしてください。また、CGIに対するコンフィグレーションは、各ProWebごとのproles.ini ファ イルで共通化する必要があります。
これは、最後に立ち上がったProWebがCGI用のパラメータを上書きするためです。共通パラメータについては、proles.ini ファイルの設定に、負荷分散時の共通パラメータとして記載があります。
ProWebA2Zの値はリクエストの割り振りに使用され、アルファベットの逆順に優先度が高くなりますので、高スペック のコンピュータをZ側に割り当てると効率的です。

 動作メカニズムは、以下のようになります。まず、ProWeb.exeが起動する際、proles.iniのProWebA2Zを読み取り自分はXマシンと 理解し、Loginプロジェクトを起動すると共にHTTPサーバマシンのC:\InetPub\procgi(バージョン番号) \procgi\alive フォルダーにLogin_x.alv ファイルを作成します。alvファイルはXCuteが起動中であることを意味します。

 HTTPサーバは、ブラウザからのリクエストを受け取ると、procgi.exe を起動しクエ リーストリングを知らせます。起動されたprocgi.exe は、クエリーストリングを解析し P=Loginを見つけ出すとともに、C:\InetPub\procgi(バージョン番号)\procgi\alive フォ ルダーのLogin_x.alv ファイルの存在からXマ シンが生きていることを知り、C:\InetPub\procgi(バージョン番号)\procgi\temp フォ ルダーにこのクエリーストリングでLogin_x1234567890123.srt などのsrtファ イルを作ります。ここで、1234567890123は、13桁の重複しない固有番号です。

 ProWebXマシンは、C:\InetPub\procgi(バージョン番号)\procgi\temp  フォルダーにLogin_X*.srtファイルを見つけると、LoginプロジェクトのProLes.exesrtファ イルがあることを連絡します。LoginプロジェクトのProLes.exeは、srtファイルを読み取って、パラメータ を解析し、データベースにアクセスするなどしてExcelシートを作り、これをHTMLファイルに変換します。具体的には、C:\InetPub \procgi(バージョン番号)\procgi\temp フォルダーに、HTMLファイルLogin_z1234567890123.htmp同 名のendファイルを作成します。

 procgi.exe は、C:\InetPub\procgi(バー ジョン番号)\procgi\temp フォルダーにLogin_z1234567890123.htmpを 見つけると、これを読み取ってHTTPサーバへ返しsrtファイルを削除し、ブラウザからのリクエストに応答した1サイク ルの処理を終えます。endファイルはProWeb.exeにより削除されこの処理が正常終了と見なされます。

 なお、srtファイルが作られ、ProLes.exe側がproles.iniの TimeOut時間内にendファイルを作り損ねると、ProWeb.exeの 実行欄は赤色に変わり「Abnormal End」(異常終了)となり、ProWeb.exeによりalvファ イルは削除されます。
「Abnormal End」が発生しても、ProLes.exe側がendファ イルの作成に成功すると、ProWeb.exeによりalvファイ ルは再び作成され、この「Abnormal End」は自動的に解除されサービスは続行されます。

複数の運用サーバによる処理の負荷分散

 運用サーバを複数使うと、通常版より高度な負荷分散を行うこ とができます。
この時は、proles.iniファイルの[Proweb]セクションのScalableを1にします。

Scalable=1 の効果
 上図でXマシンが、Httpサーバとのネットワークの通信障害や、XあるいはSマシンのダウンが発生した際、リクエストはダウンしたマシンに送信さ れず、生きているマシンにのみ送信されます。
さらに、ネットワーク通信が回復した時、XCuteも自動復旧します。

 なお、「Scalable=1」でない場合は、Httpサーバとのネットワークの通信障害が発生しても、procgi.exeよりsrtファイルは送られ てしまい、ダウンしているマシンにもリクエストが要求されてしまいます。

通信障害発生時のXCuteの動作の詳細)
 alvファ イルの作成や削除はProWeb.exeの役割です。しかし、通信障害が発生したらProWeb.exeは この役割を行えません。このため、 「Scalable=1」の時に限り、procgi.exesrtファ イルを作成した後にTimeOutが発生したなら、すなわち時間内にhtmlファイルが作られなかったら、alvファ イルを削除することにしています。すなわち、通信障害が発生したことをprocgi.exeが 検知し、障害発生先のサーバにはsrtファイルを送らない仕組みを成り立たせています。

 下記は、通信障害が発生した時の最初のブラウザ画面で、「Scalable=1」が設定されているなら、この画面でprocgi.exeは 障害を検知しalvファイルを削除し、通信が復旧するまで当該マシンへsrtファイルを依頼することはなくなります。な お、「Scalable=1」以外の場合は、障害マシンへsrtファイルを依頼してしまいます。

下記は、この時のProWeb.exeがログで、通信障害(パスがみつからない)の発生と、その後の 通信障害の復旧(Err Recovered) のログです。
-----
20/07/07 16:15:50 [3037] ネットワーク パスが見つかりません。
 Err=57
 Fatal Disk Err Occured.
20/07/07 16:17:02 [3036]  Err=57
 Fatal Disk Err  Recovered.
-----

ProWeb.exeは、「Scalable=1」とは関係なく常に、procgi.exeと の通信を監視して通信障害が復旧すると、alvファイルを再度作成して、XCuteの自動復旧に貢献しています。

ODBC接続障害発生時のXCuteの動作の詳細)
 ODBC接続障害を検出するのは、データベースと接続しているProLes.exe側です。 ODBC接続障害を検知し、且つ「Scalable=1」が設定されているなら、タイマーを掛けてODBC接続障害の復旧を待ちます。ODBC接続障 害が復旧すれば、endファイルを作りProWeb.exeに 「Abnormal End」を解消させ、alvファイルも作成して、サービスは再開されます。

「Scalable=1」のとき、ODBC接続障害発生時のブラウザ画面には、以下のようなメッセージ画表示されます。
-----
エラー: 処理がタイムアウトしました。 経過時間(秒) = 40 Error Code = procgi10
-----

「Scalable=0」、すなわちScalable無効のときは、ODBC接続障害発生時のブラウザ画面には、以下のようなメッセージが表示されま す。
-----
[6044] 3146ODBC;DSN=aaaa;UID=bbbb;PWD=cccc;Err Read Table= ERR=接続が無効にされています。
-----

下記は、「Scalable=1」のProLes.exe側のエラーログで、「[6044] 3146ODBC」でエラーが発生し、その後、何らかの手段でODBCエラーを復旧し、自動でODBC Recover「 [2093] Err DB接続に失敗後回復(Recover:)」 された様子を示します。
-----
20/07/07 14:52:48 tests!aaa [6044] 3146ODBC;DSN=aaaa;UID=bbbb;PWD=cccc;Err Read Table=ERR=接続が無効にされています。 CGIPara=...
20/07/07 14:53:20 tests!aaa [2093] Err DB接続に失敗後回復(Recover:)[6044] 3146ODBC;DSN=aaaa;UID=bbbb;PWD=cccc;Err Read Table=ERR=接続が無効にされています。 CGIPara=...
-----

※ODBC Recoverをご利用の際は、実際に動作させる環境で動作を検証したのちご利用ください。

利用用可能バージョン(Scalable)
XCute Ver11.6.1以降

参照
 ○
運 用サーバについて
 ○proles.ini ファイル