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

上の図はProwebXとProWebSの2台の実行サーバを使い負荷分散を行っている例です。
各実行サーバのXCuteインストールフォルダに存在するproles.iniファイルのProWebA2ZをXやSなど重複しない値に設定します。 ProWebA2Zの値はリクエストの割り振りに使用され、アルファベットの逆順に優先度が高くなりますので、高スペックのコンピュータをZ側に割り当てると効率的です。
[CGI]セクションの他の値は、2つのコンピュータで同じ値を保持するようにします。 特にCGI_PATH 項が各実行サーバ機共に同一のprocgiフォルダを参照するようにしてください。また、CGIに対するコンフィグレーションは、各ProWebごとのproles.iniファイルで共通化する必要があります。
これは、最後に立ち上がったProWebがCGI用のパラメータを上書きするためです。
CGIパラメーターはC:\InetPub\procgi(バージョン番号)\initial\procgi.ini ファイルに設定が書き込まれます。
このファイルに書き込まれるパラメータはproles.iniファイルの説明に「複数の運用サーバによる処理の負荷分散時の共通項目」の記載がありますので参照願います。
C:\InetPub\procgi(バージョン番号)\initial\procgi.ini ファイルを、C:\InetPub\procgi(バージョン番号)\initial\procgi_def.ini ファイルという名前でコピーして作成すると、そのファイルを優先してCGIが読み込むようになります。これにより、CGI用のパラメータの共通化を意識する必要がなくなります。この機能は、XCute Build (12or14).18.1以降より利用できます。
動作メカニズムは、以下のようになります。まず、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(バージョン番号)\alive フォルダーのLogin_x.alvファイルの存在からXマシンが生きていることを知り、C:\InetPub\procgi(バージョン番号)\temp フォルダーにこのクエリーストリングでLogin_x1234567890123.srt などのsrtファイルを作ります。 ファイル名の「1234567890123」は、13桁の重複しない固有番号です。
ProWebXマシンは、C:\InetPub\procgi(バージョン番号)\temp フォルダーにLogin_X*.srtファイルを見つけると、LoginプロジェクトのProLes.exeにsrtファイルがあることを連絡します。
LoginプロジェクトのProLes.exeは、srtファイルを読み取って、パラメータを解析し、データベースにアクセスするなどしてExcelシートを作り、これをHTMLファイルに変換します。 その結果は、C:\InetPub\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.exe はsrtファイルを作成した後に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ファイル