図1は、本発明の第1実施例のアプリケーションサーバ2と、該アプリケーションサーバ2にアクセスする外部システム6との間を接続するネットワークの概要を説明する図である。
まず、図1を用いて、本実施例のアプリケーションサーバ2(分散ノード)について、端末−サーバ間における通信のネットワークの概要、及びアプリケーションサーバ2とノードとの間のネットワークの概要を説明する。アプリケーションサーバ2−1からアプリケーションサーバn(2−n)は、同一のネットワークセグメント7内のIPアドレスを持ち、ルータ4の配下の一つのセグメント内で接続している。また、アプリケーションサーバ2−1〜2−nを収容するネットワークセグメント内には、状態通知ノード1が設けられる。複数の外部システム6−1〜6−nは、ネットワーク5及びルータ4を経由して、各アプリケーションサーバ2−1〜2−nに処理要求を送信する。
ネットワーク5は、TCP/IPプロトコルを用いた、IPネットワークでよいが、他の形式のネットワークでもよい。
図2は、第1実施例のアプリケーションサーバ2及び外部システム6の物理的な構成を示すブロック図であり、図3、図4にて後述するアプリケーションサーバ2及び外部システム6の機能ブロックを実現するためのハードウェアを示す。
アプリケーションサーバ2及び外部システム6は、CPU12、メモリ13、ストレージ16、インタフェース20、21を有する計算機である。
CPU12は、メモリ13に格納されたアプリケーションプログラム15から、その動作手順を読み出して、図3、図4に示した種々の処理モジュールの動作を実行する。メモリ13は、ストレージ16に格納されたプログラム及びプログラムの実行時に使用されるデータを一時的に格納する。ストレージ16は、例えば、磁気記憶装置、フラッシュメモリ等の大容量かつ不揮発性の記憶装置であり、CPU12によって実行されるプログラム及びプログラムの実行時に使用されるデータを格納する。すなわち、アプリケーションプログラム15は、プログラムを起動する際に、ストレージ16に格納されたアプリケーションプログラムファイル18がコピーされることによって生成される。
CPU12が実行するプログラムは、リムーバブルメディア(CD−ROM、フラッシュメモリなど)又はネットワークを介して計算機に提供され、非一時的記憶媒体であるストレージ16に格納される。このため、計算機は、リムーバブルメディアからデータを読み込むインタフェースを有するとよい。
データベース22及びメモリ13上のアプリケーション情報一時格納領域26は、各処理モジュールが動作する際に必要な情報を格納しており、CPU12は、この情報を必要に応じて読み出し及び書き込む。具体的には、CPU12は、インタフェース21を経由して、データベース22に格納されたデータを読み出し及び書き込む。
データベース22は、例えば、磁気記憶装置、フラッシュメモリ等の大容量かつ不揮発性の記憶装置及び該記憶装置のデータの入出力を制御する制御システム(例えば、DBMS)によって構成される。データベース22とアプリケーションサーバ2は物理的に異なる装置で構成しても、一つの装置内に構成してもよい。また、アプリケーションサーバ2及び外部システム6の各処理モジュールの一部をソフトウェアではなく、ハードウェアで構成してもよい。さらに、外部システム6は、必要に応じてデータベース22を持ってもよいし、持たなくてもよい。
インタフェース20は、所定のプロトコルに従って、他の装置との通信を制御するネットワークインタフェース装置である。また、アプリケーションサーバ2及び外部システム6は、インタフェース20を経由して、物理的に異なる位置に配置された装置と通信する。
本実施例のアプリケーションサーバ2及び外部システム6の各々は、物理的に一つの計算機上で、又は、論理的又は物理的に構成された複数の計算機上で構成される計算機システムであり、同一の計算機上で別個のスレッドで動作してもよく、複数の物理的計算機資源上に構築された仮想計算機上で動作してもよい。
次に、図3、図4の機能ブロック図、図15、図16のシーケンス図、図17の外部システム6の処理のフローチャート、及び図18、図19のアプリケーションサーバ2の処理のフローチャートを用いて、外部システム6がアプリケーションサーバ2に処理を要求するまでの動作を説明する。
図3は、第1実施例の外部システム6の機能ブロック図である。
外部システム6は、処理要求送信先アプリケーションサーバ管理機能31、ブロードキャスト送受信機能34、ユーザプログラム保持・実行機能37及び処理要求送受信機能39を有する。
処理要求送信先アプリケーションサーバ管理機能31は、外部システム6が処理要求を送信するアプリケーションサーバ2の送信元情報(IPアドレス、送信先ポート番号など)、及びアプリケーションサーバ2を特定するためのブロードキャスト送信の情報(IPアドレス、ポート番号など)を管理する機能ブロックである。
処理要求送信先アプリケーションサーバ管理機能31は、送信先ノード管理モジュール32を有する。送信先ノード管理モジュール32は、アプリケーションサーバ2の間の通信状況に合せでデータを登録及び削除する。具体的には、ブロードキャスト送信やブロードキャスト応答を受信した時、アプリケーションサーバ2のIPアドレスやポート番号を記録する。また、アプリケーションサーバ2に処理要求が到達しなかった時、記録したIPアドレスやポート番号を削除する。
ブロードキャスト送受信機能34は、アプリケーションサーバ2を特定するためのブロードキャストの送受信を行う機能ブロックであり、ブロードキャスト情報生成・結果解析モジュール35及びブロードキャスト送受信モジュール36を有する。ブロードキャスト情報生成・結果解析モジュール35は、送信するブロードキャストのデータを生成し、受信したブロードキャスト応答のデータを解析する。ブロードキャスト送受信モジュール36は、ブロードキャストパケットを送信し、応答を待ち受ける。
ユーザプログラム保持・実行機能37は、外部システム6が実行するプログラムを保持し、実行する機能ブロックであり、保持されたユーザプログラム38を適時実行する。
処理要求送受信機能39は、外部システム6からアプリケーションサーバ2への処理要求を送受信する機能ブロックである。処理要求送受信機能39は、処理要求先判定モジュール40、処理要求生成・処理結果解析モジュール41及び処理要求送受信モジュール42を有する。
処理要求先判定モジュール40は、ユーザプログラム38からアプリケーションサーバ2へ送信する処理要求を受けた時、処理要求の宛先となるアプリケーションサーバ2のIPアドレス及びポート番号を、送信先ノード管理モジュール32から取得する。処理要求生成・処理結果解析モジュール41は、送信する処理要求のデータ作成及び受信した処理結果応答のデータを解析する。処理要求送受信モジュール42は、処理要求パケットを送信し、応答を待ち受ける。
図4は、第1実施例のアプリケーションサーバ2の機能ブロック図である。
アプリケーションサーバ2は、ブロードキャスト管理機能51、ブロードキャスト送受信機能55、アプリケーションサーバ状態管理機能58、分散状態送受信機能63、要求処理実行機能66及び処理要求送受信機能71を有する。
ブロードキャスト管理機能51は、外部システム6から受信したブロードキャストに応答を返信するか判定する機能ブロックであり、受付設定管理テーブル52、受付設定管理部53及びブロードキャスト応答可否判定部54を有する。受付設定管理テーブル52は、ブロードキャストパケットを待ち受けるポート番号を管理するためのテーブルである(図20参照)。受付設定管理部53は、受付設定管理テーブル52からデータを取得する。ブロードキャスト応答可否判定部54は、自ノード及び他ノードの状態に基づいて、外部システム6から受信したブロードキャストに応答するかを判定する。
ブロードキャスト送受信機能55は、外部システム6からブロードキャストを受信し、受信したブロードキャストに対する応答を返信する機能ブロックであり、受信ブロードキャスト分析・応答生成モジュール56及びブロードキャスト受信・応答返信モジュール57を有する。受信ブロードキャスト分析・応答生成モジュール56は、受信したブロードキャストパケットのデータを解析し、受信したブロードキャストパケットに返信する応答のデータを生成する。ブロードキャスト受信・応答返信モジュール57は、ブロードキャストパケットを待ち受け、ブロードキャストパケットへの応答パケットを送信する。
アプリケーションサーバ状態管理機能58は、他ノードの状態を保持し、自ノードの状態を計算及び保持する機能ブロックであり、他ノード管理テーブル59、他ノード状態管理部61、自ノード管理テーブル60及び自ノード状態管理部62を有する。他ノード管理テーブル59は、他ノードの状態を保持するテーブルである(図14A参照)。また、他ノード管理テーブル59は、図示を省略する処理カウント管理テーブル131(図8参照)及び受付重み統計値管理テーブル371(図9A参照)を含む。他ノード状態管理部61は、他ノード管理テーブル59のデータを入出力する。自ノード管理テーブル60は、自ノードの状態を保持するテーブルである(図7A参照)。自ノード状態管理部62は、自ノードの処理状況に応じて自ノードの状態を算出し、算出した自ノードの状態を保持する。また、自ノード状態管理部62は、自ノードの状態が変化した場合、自ノードの状態を他ノードへ通知する。
分散状態送受信機能63は、他ノードの状態を受信し、自ノードの状態が変化した場合に他ノードへ通知する機能ブロックであり、状態解析・生成モジュール64及び他ノード状態送受信モジュール65を有する。状態解析・生成モジュール64は、受信した他ノードの状態のデータを解析し、送信する自ノードの状態のデータを生成する。他ノード状態送受信モジュール65は、他ノードからの状態通知を待ち受け、自ノードの状態の通知パケットを送信する。
要求処理実行機能66は、アプリケーションサーバ2内で実行する処理モジュールを保持し、外部システム6からの要求に応じて処理を実行する機能ブロックであり、実行処理管理テーブル67、実行処理管理部68及び要求処理実行部70を有する。実行処理管理テーブル67は、実行する処理を保持するテーブルである(図10参照)。実行処理管理部68は、実行処理管理テーブル67で管理される処理に関する情報を入出力する。要求処理実行部70は、外部システム6から受けた処理要求に対応する処理のモジュールを取得して、実行する。
処理要求送受信機能71は、外部システム6から処理要求を受信し、処理結果を応答する機能ブロックであり、処理要求管理キュー72、処理要求解析・処理結果返信モジュール73及び処理要求送受信モジュール74を有する。処理要求管理キュー72は、外部システム6から受信した複数の処理要求の状態を管理する(図12参照)。具体的には、外部システム6から受信した処理要求はキュー72にキューイングされ、処理応答を返信すると対応する処理要求をキュー72から削除する。処理要求解析・処理結果返信モジュール73は、受信した処理要求のデータを解析し、返信する応答のデータを生成する。処理要求送受信モジュール74は、外部システム6からの処理要求パケットを待ち受け、処理結果応答を送信する。
次に、外部システム6がアプリケーションサーバ2に処理を要求する動作を説明する。
まず、図15のステップ255で、外部システム6がアプリケーションサーバ2へ処理要求を送信したい旨の要求が、ユーザプログラム38(図3参照)内で発生する。これは、例えば、Javaプログラム(Javaは登録商標、以下同じ。)の場合、図3に示す処理要求送信先アプリケーションサーバ管理機能31、ブロードキャスト送受信機能34、処理要求送受信機能39を包含したプログラムライブラリをユーザプログラム38にインポートして、ユーザプログラム38からこれらのライブラリを参照可能にする。そして、ユーザプログラム38内で、インポートしたライブラリのメソッドを呼び出すことによって要求を発生することができる。
図17は、発生した処理要求を受け付けた後に、処理要求送受信機能39が実行する処理を示すフローチャートである。
まず、ステップ281で、処理要求送受信機能39が処理要求を受け付けると、処理要求生成・処理結果解析モジュール41はアプリケーションサーバ2へブロードキャスト送信をする処理要求のメッセージを生成する(ステップ282)。次に、処理要求送受信モジュール42は、処理要求先判定モジュール40を経由して、送信先ノード管理モジュール32に処理要求先を取得する(ステップ283)。送信先ノード管理モジュール32は、受け付けた処理要求を送信するアプリケーションサーバ2の情報(例えば、IPアドレス)を保持しているかを判定する(ステップ284)。送信先のアプリケーションサーバ2の情報を保持している場合、ステップ290へ進み、処理要求先を決定し、決定された処理要求先を処理要求先判定モジュール40を経由して、処理要求送受信モジュール42へ返信する。
一方、ステップ284で、送信先のアプリケーションサーバ2の情報を保持していない場合、アプリケーションサーバ2が存在するネットワークセグメントのブロードキャストIPアドレス及びネットワークポートにブロードキャストパケットを送信する(ステップ285)。このアプリケーションサーバ2が存在するネットワークセグメントのブロードキャストIPアドレス及びネットワークポートは、予め外部システム6に設定ファイルとして保持される。例えば、図1に示す様に、アプリケーションサーバ2のネットワークセグメントが192.168.0.0/24である場合、ブロードキャストアドレスは192.168.0.255となる。
図15のSeq1:初回処理要求255のシーケンスを用いて、外部システム6が処理要求をアプリケーションサーバ2に送信する正常系の動作(ブロードキャストの送信、処理要求の送信、結果を正常に受信)を説明する。
前述したステップ284の処理は、図15のステップ232の要求先判定に対応する。外部システム6が送信したブロードキャストパケット233−1は、一旦ルータ4で受信した後、ルータ4がネットワークセグメント配下の全てのIPアドレス(アプリケーションサーバ2)にブロードキャストパケット233−2を送信する。
各アプリケーションサーバ2では、ブロードキャスト受信・応答返信モジュール57が、受付設定管理テーブル52に予め設定されているIPアドレス及び受付ポート番号で待ち受けをしている。
図20は、受付設定管理テーブル52の構成例を示す図である。
受付設定管理テーブル52は、設定項目に対応する値を保持するテーブルであり、受付設定管理部53によってアクセスされる。例えば、レコード342にはIPアドレスが設定され、レコード343には受付ポート番号が設定される。
外部システム6が送信するブロードキャストパケットのポート番号は、アプリケーションサーバ2が待ち受けているポート番号(レコード343の値)と一致しているので、アプリケーションサーバ2は送信されたブロードキャストパケットを受信する。
次に、アプリケーションサーバ2は、受信可否を判定する(ステップ234)。この受信可否判定の詳細を図18を用いて説明する。
図18は、受信可否判定処理のフローチャートである。
まず、アプリケーションサーバ2では、ブロードキャスト受信・応答返信モジュール57がブロードキャストパケットを受信する(ステップ301)。
次に、受信ブロードキャスト分析・応答生成モジュール56が、ブロードキャストパケットの内容を解析し、受信したブロードキャストパケットのIPアドレスから、ブロードキャストパケットを送信した外部システム6を判定し、当該ブロードキャストパケットに応答すべきかの判定をブロードキャスト応答可否判定部54に依頼する(ステップ302)。
ブロードキャスト応答可否判定部54は、判定の依頼を受けると、アプリケーションサーバ状態管理機能58にアクセスして、アプリケーションサーバ状態管理機能58内の処理カウント管理テーブル131(図8参照)及び受付重み統計値管理テーブル371(図9A参照)を参照する(ステップ303)。
図8は、処理カウント管理テーブル131の構成例を示す図である。
処理カウント管理テーブル131は、処理要求を受け付けたプロセスの数を保持するテーブルであり、他ノード状態管理部61によってアクセスされる。処理カウント管理テーブル131は、外部システムのIPアドレス132、処理133〜135及び重み合計値136のカラムを有する。すなわち、処理カウント管理テーブル131は、全ての外部システム6のIPアドレスをカラム132に記録したレコードを保持している。つまり、処理カウント管理テーブル131は、集計期間において処理要求を受け付けた外部システム6の数のレコードを保持する。
図9A、図9Bは、受付重み統計値管理テーブル371の構成例を示す図である。
受付重み統計値管理テーブル371は、外部システム6毎の受付重み統計値を管理するテーブルであり、他ノード状態管理部61によってアクセスされる。受付重み統計値管理テーブル371は、外部システムのIPアドレス372に対応して受付重み統計値373を保持する。受付重み統計値管理テーブル371は、処理カウント管理テーブル131と同様に、全ての外部システム6のIPアドレスをカラム372に記録したレコードを保持している。つまり、受付重み統計値管理テーブル371は、集計期間において処理要求を受け付けた外部システム6の数のレコードを保持する。
図18に戻って説明を続ける。受信したブロードキャストパケットを送信した外部システム6のIPアドレスと、処理カウント管理テーブル131に記録されたIPアドレス132と、受付重み統計値管理テーブル371に記録されたIPアドレス372とを比較することによって、ブロードキャストパケットを送信した外部システム6のIPアドレスに対応するレコードが各テーブルに存在するかを判定する(ステップ304)。
いずれかのテーブルにレコードが存在する場合、各テーブルから該当レコードを削除して(ステップ305)、ステップ306に進む。一方、いずれのテーブルにもレコードが存在しない場合、ステップ306に進む。
ステップ306では、ブロードキャスト応答可否判定部54は、自ノード状態管理部62を経由して自ノード管理テーブル60を参照することによって、自ノードの負荷状態を取得する。
図7Aは、自ノード管理テーブル60の構成例を示す図である。
自ノード管理テーブル60は、設定項目121と値122とを組み合わせたレコードによって自ノードの状態を管理するテーブルであり、自ノード状態管理部62によってアクセスされる。例えば、レコード123にはノード名が設定され、レコード124にはIPアドレスが設定され、レコード125には処理要求受け付けポート番号が設定され、レコード126には受付重み統計値が設定され、レコード127には受付重み現在値が設定され、レコード128には現在の受付可否状態が設定され、レコード129には状態通知ノード1のIPアドレスが設定される。
例えば、レコード128の現在の受付可否状態の値によって、ノードの負荷状態を知ることができる。レコード128の値が「受付可」である場合、プロセスの受け付けが可能な低い負荷状態である。また、レコード128の値が「受付不可」である場合、プロセスの受け付けが不可能な高い不可状態である。
図18に戻って説明を続ける。ステップ307では、ステップ306で取得した負荷状態(レコード128の現在の受付可否状態)の値が「受付不可」である場合、ステップ314に進み、ブロードキャストパケットに対して応答せずに、受信可否判定処理を終了する。
一方、ステップ306で取得した負荷状態の値が「受付可」である場合、ステップ308へ進み、他ノード状態管理部61を経由して他ノード管理テーブル59を参照して、自ノードの受付重み統計値と他ノードの受付重み統計値とを比較する。
図14Aは、他ノード管理テーブル59の構成例を示す図である。
他ノード管理テーブル59は、他ノードの状態を管理するためのテーブルであり、他ノード状態管理部61によってアクセスされる。他ノード管理テーブル59は、ノード名212、IPアドレス213、状態214、受付重み統計値215、受付可否状態216及び処理要求ポート番号217のカラムを有する。
ノード名212は他ノードの名称であり、IPアドレス213は他ノードのIPアドレスである。状態214は、他ノードが現在稼働中であるかを示し、「稼働中」又は「未稼働」のいずれかが記録される。受付重み統計値215は、他ノードの受付重み統計値である。受付可否状態216は、他ノードの現在の状態を示し、「受付可」又は「受付不可」のいずれかが記録される。
図18に戻って説明を続ける。ステップ308では、他ノード管理テーブル59のレコードのうち、状態214が「稼働中」であり且つ受付可否状態216が「受付可」であるノードを選択し、選択されたノードの受付重み統計値215の値を取得する。そして、ステップ306で取得した自ノード管理テーブル60から取得した自ノードの受付重み統計値126の値と、取得した他ノードの受付重み統計値とを比較する。例えば、自ノードの受け付け重み統計値の合計値を示すレコード127の値は「782」である。また、他ノード管理テーブル59からは、レコード218の受付重み統計値は「2200」であり、レコード221の受付重み統計値の合計値は「1022」である。
なお、対象ノードについて、図9Aに示す外部システム単位での受付重み統計値を比較してもよい。また、図21に示す処理毎の受付重み統計値を比較してもよい。
次に、ステップ309では、自ノードの受付重み統計値と他ノードの受付重み統計値とを比較した結果、自ノードが要求を受け付けるかを判定する。具体的には、自ノードの受付重み統計値が最小値であるかを判定する。自ノードの受付重み統計値が最小値ではない場合、ステップ314へ進み、ブロードキャストパケットに対して応答せずに、受信可否判定処理を終了する。一方、自ノードの受付重み統計値が最小値である場合、ステップ310へ進む。前述した例では、自サーバの受付重み統計値は「782」であり、他ノードの受付重み統計値が「2200」、「1022」であるため、自ノードが最小値があると判定され、ステップ310へ進む。
なお、ステップ308、309では、図14に示す他ノード管理テーブル59の受付重み統計値215の値を比較しているが、よりきめ細やかな比較を行うために、各ノードが共有する受付重み統計値管理テーブル(図9A)で管理される外部システム毎の受付重み統計値や、受付重み統計値管理テーブル(図21A、図21B)で管理される処理毎の受付重み統計値を用いて比較してもよい。
例えば、図23に示す外部システム毎の受付重み統計値をノード間で共有している場合、最も処理負荷が大きい外部システム6の重み統計値を各ノードの外部システム毎の受付重み統計値管理テーブルから選択する。そして、ステップ309で、選択された重み統計値が最小のノードが要求を受けると判定してもよい。図23に示す例では、アプリケーションサーバ2−1についてのテーブル401のレコード411と、アプリケーションサーバ2についてのテーブル402のレコード412と、アプリケーションサーバnについてのテーブル403のレコード413とを比較する。その結果、アプリケーションサーバ2−1の重み統計値「489」が最小であるため、アプリケーションサーバ2−1が要求を受けると判定する。また、アプリケーションサーバ2〜nは、重み統計値が最小ではないため、要求を受けないと判定する。
図23に示す受付重み統計値管理テーブルでは、各アプリケーションサーバの受付重み統計値の合計値414〜416は「1124」、「779」、「719」であるため、合計値で判定すればアプリケーションサーバnが要求を受けると判定できる。しかし、特定の外部システム6からの負荷の集中度を重視した場合、アプリケーションサーバnはIPアドレスが43.57.193.238の外部システム6から高い頻度で処理要求を受けており、一つの外部システム6からのアクセスの集中度は、アプリケーションサーバ2−1より高い。
また、例えば、図24に示す処理毎の受付重み統計値をノード間で共有している場合、ステップ309で、処理「p1」の要求数が最小のノードが処理を受けると判定してもよい。図24に示す例では、アプリケーションサーバ2−1についてのテーブル421のレコード431と、アプリケーションサーバ2についてのテーブル422のレコード432と、アプリケーションサーバnについてのテーブル423のレコード433とを比較する。その結果、アプリケーションサーバ2−1の要求数「15」が最小であるため、アプリケーションサーバ2−1が要求を受けると判定する。また、アプリケーションサーバ2〜nは、要求数が最小値ではないため、要求を受けないと判定をする。
このように重みの比較方法や、比較する値を変えることによって、処理要求を受けるアプリケーションサーバ2の全体の負荷だけでなく、様々な要素を用いて判定することができる。
図18に戻って説明を続ける。ステップ310では、ブロードキャスト応答可否判定部54が、ブロードキャストパケットに返信するために、自ノード状態管理部62を経由して自ノード管理テーブル60から応答情報を取得する。具体的には、ノード名123、IPアドレス124及び処理要求受付ポート番号125を自ノード管理テーブル60(図7A)から取得する。ブロードキャスト応答可否判定部54は、取得した情報を受信ブロードキャスト分析・応答生成モジュール56へ送信する。
次に、受信ブロードキャスト分析・応答生成モジュール56は、受信した情報に基づいてブロードキャストパケットへの応答メッセージを生成する(ステップ311)。そして、ブロードキャスト受信・応答返信モジュール57は、送信元の外部システム6のIPアドレス及びポート番号に応答を返信し(ステップ312)、受信可否判定処理を終了する(ステップ313)。
ステップ312で返信されたブロードキャスト応答パケットは、ルータ4を経由して外部システム6に到達する(図15のステップ235)。
外部システム6は、図17のステップ285でブロードキャストパケットを送信した後、ブロードキャスト送受信モジュール36にて、アプリケーションサーバ2からの応答を待ち受ける(ステップ286)。ブロードキャスト応答を受信していない場合、ステップ287に進み、タイマがタイムアウトしたかを判定する。タイムアウトまでの時間は外部システム6に予め設定されている。また、外部システム6はステップ285でブロードキャスト情報を送信してからの経過時刻をカウントする。そして、カウントされた経過時間が予め設定されたタイムアウト時間を超過した場合、処理要求送信処理は異常終了する(ステップ288)。
具体的には、ブロードキャスト送受信モジュール36は、タイムアウトを検知すると、タイムアウトをブロードキャスト情報生成・結果解析モジュール35に送信する。ブロードキャスト情報生成・結果解析モジュール35は、タイムアウトをユーザプログラム38に送信する。例えば、Javaプログラムの場合、ブロードキャスト情報生成・結果解析モジュール35は、タイムアウトの状態を例外としてユーザプログラム38にスローする。ユーザプログラム38は例外をキャッチするプログラムを作成することで、スローされたタイムアウトを検知することができる。
カウントされた経過時刻が予め設定されたタイムアウト時刻を超過していない場合、ステップ286に戻り、ブロードキャスト応答の受信を繰り返し判定する。
一方、ステップ286で、ブロードキャスト応答の受信を判定した場合、ステップ289へ進む。ステップ289では、送信先ノード管理モジュール32は、受信したブロードキャスト応答の内容をメモリに格納することによって、処理要求先を登録する(図15のステップ236)。そして、受信したブロードキャスト応答の情報を処理要求先判定モジュール40へ送信する。処理要求先判定モジュール40は、処理要求先を決定し(ステップ290)、処理要求送受信モジュール42は、決定された処理要求先に処理要求を送信する(ステップ291)。
外部システム6が送信した処理要求は、ルータ4を経由して、ブロードキャストパケットに応答したアプリケーションサーバ2へ到達する(図15のステップ237)。
そして、処理要求を受信したアプリケーションサーバ2は、処理要求を受けるかを判定し(ステップ238)、処理を実行する(ステップ239)。以下、処理要求受付判定から実行された処理結果の返信について説明する。
図19は、ステップ238及び239の処理(処理要求受信処理)の詳細を示すフローチャートである。
アプリケーションサーバ2の処理要求送受信モジュール74が処理要求を受けると(ステップ321)、処理要求解析・処理結果返信モジュール73は、受信した処理要求の内容を解析する。具体的には、処理要求解析・処理結果返信モジュール73は、実行処理管理部68を経由して実行処理管理テーブル67を参照して、受信した処理要求の種類を判定し、メッセージに対応する処理を特定する(ステップ322)。
図10は、実行処理管理テーブル67の構成例を示す図である。
実行処理管理テーブル67は、処理142、メッセージ143及び各処理の重み係数144のカラムを有するテーブルで、実行処理管理部68によってアクセスされる。アプリケーションサーバ2では、起動前に実行処理管理テーブル67が設定され、処理モジュールが実行可能なようにデプロイされる。
例えば、外部システム6からメッセージ「msgP1」が付与された処理要求を受けた場合、ステップ322でメッセージの内容を解析し、実行処理管理テーブル67の処理142が「msgP1」であるレコードを選択する。本例では、レコード145が選択され、メッセージ「msgP1」はアプリケーションサーバ2で管理するメッセージであり、対象プロセスが「p1」であるため、処理を実行する。一方、実行処理管理テーブル67にレコードが存在しないメッセージを受信した場合、当該アプリケーションサーバ2で処理が実行できないので、エラー応答を外部システム6へ返信する。
図19に戻って説明を続ける。ステップ322で処理要求内容の解析が正常に終了すると、処理要求解析・処理結果返信モジュール73は、自ノード状態管理部62を経由して自ノード管理テーブル60(図7A)の受付可否状態128の値を参照し、自ノードの現在の受付可否を判定する(ステップ323)。
次に、ステップ324で、自ノードの受付可否状態の値が「受付可」であるかを判定する。自ノードの受付可否状態の値が「受付可」である場合、ステップ327に進み、処理要求を処理要求管理キュー72へ格納する。その後、処理要求受信処理を終了する(ステップ328)。
要求処理実行部70は、キュー72へ格納された処理要求を、順次、取得して処理する。要求処理実行部70は、キュー72から取得した処理要求の処理結果を処理要求管理キュー72を経由して処理要求解析・処理結果返信モジュール73に送る。処理要求解析・処理結果返信モジュール73は、処理結果に基づいて返信情報を生成し、処理要求送受信モジュール74が外部システム6へ応答を返信する。
アプリケーションサーバ2から返信された処理結果応答メッセージは、ルータ4を経由して外部システム6へ転送される(図15のステップ240)。
一方、ステップ324で、自ノードの受付可否状態の値が「受付不可」である場合の処理は、図16のSeq3:アプリケーションサーバ要求受信拒否(代替要求先ノード付与)275のシーケンスを用いて後述する。
外部システム6は、図17のステップ291で処理要求を送信すると、処理要求の応答を待ち受け、処理要求の応答を受信したかを判定する(ステップ292)。そして、外部システム6は、処理要求の応答を受信しない場合、ステップ294に進み、タイマがタイムアウトしたかを判定する。タイムアウトまでの時間は外部システム6に予め設定されている。また、外部システム6はステップ291で処理要求を送信してからの経過時刻をカウントする。そして、カウントされた経過時刻が予め設定されたタイムアウト時刻を超過していない場合、ステップ292に戻り、処理要求の応答の受信を繰り返し判定する。
一方、カウントされた経過時間が予め設定されたタイムアウト時間を超過した場合、ステップ295に進み、処理要求先としてメモリに記録している情報は無効であるため、処理要求先の情報を削除する。この具体的なシーケンスは、図15のSeq2:アプリケーションサーバダウン時256のシーケンスを用いて後述する。
ステップ292で処理結果を受信したと判定された場合、受信した応答が正常かを判定する(ステップ296)。正常な応答を受信した場合、受信した応答(すなわち、処理の結果)を処理要求生成・処理結果解析モジュール41を経由してユーザプログラム38へ返信し、処理要求送信処理を終了する(ステップ293)。
一方、ステップ296にて、拒否応答を受信したと判定された場合、代替となるアプリケーションサーバ2の情報を取得し(ステップ297)、ステップ289へ戻る。この処理の詳細は、図16のSeq3:アプリケーションサーバ要求受信拒否(代替要求先ノード付与)275のシーケンスを用いて後述する。
次に、図15のSeq2:アプリケーションサーバダウン時256のシーケンスを参照して、外部システム6がアプリケーションサーバ2宛に処理要求を送信したが、アプリケーションサーバ2に処理要求が到達しないので、再度ブロードキャストして、処理を行うアプリケーションサーバ2を特定する動作を説明する。Seq2の処理要求受付(ステップ241)から要求先判定(ステップ242)、処理要求送信(ステップ243−1)までの処理は、前述のSeq1の処理要求受付(ステップ231)から処理要求送信(ステップ237)と同じであるため、説明は省略する。
例えば、外部システム6が処理要求先として特定しているアプリケーションサーバ2−nがダウンした場合(ステップ244)、外部システム6が送信した処理要求は宛先のアプリケーションサーバ2−nに届かない(ステップ243)。このため、前述した図17のステップ294でタイムアウトと判定される。この場合、メモリに登録している処理要求先の情報は無効であるため、外部システム6は処理要求先の情報を削除する(図17のステップ295、図15のステップ245)。
その後、図17においてステップ283へ戻り再度処理要求先の存在を判定するが、ステップ295で、先に決定された処理要求先のアプリケーションサーバ2の情報を既に削除しているため、ステップ284の判定はNとなり、ブロードキャスト情報を再度送信する(ステップ285)。すなわち、図15のステップ246で要求先を判定し、ブロードキャストパケットを送信する(ステップ247−1)。その後のシーケンスは、ステップ233−1でブロードキャストパケットを送信した後のシーケンスと同じである。
しかし、アプリケーションサーバ2−nはダウンしているため、ステップ247−2のブロードキャストは受信できない。一方、ブロードキャストパケットを受信した各アプリケーションサーバ2は、ステップ234と同様に受信可否を判定する(ステップ248)。判定処理の詳細は前述と同じである。この受信可否判定248で、アプリケーションサーバ2−1が受信すると判定した場合、ブロードキャスト応答が外部システム6に転送される(ステップ249)。外部システム6は新たな処理要求先としてアプリケーションサーバ2−1の情報を登録し(ステップ250)、アプリケーションサーバ2−1に処理要求を送信する(ステップ251)。アプリケーションサーバ2−1は、処理要求を受信すると、処理要求を受けるかを判定し(ステップ252)、処理を実行し(ステップ253)、処理結果応答メッセージを送信する。アプリケーションサーバ2−1から返信された処理結果応答メッセージは、ルータ4を経由して外部システム6へ転送される(ステップ254)。
以上に説明した処理によって、処理要求から処理結果返信までのシーケンスが終了する。
次に、図16のSeq3:アプリケーションサーバ要求受信拒否(代替要求先ノード付与)275のシーケンスを参照して、外部システム6が拒否応答を受信して、代替の処理要求先に対して処理要求を送信する動作を説明する。図16の処理要求受付(ステップ261)から要求先判定(ステップ262)、処理要求送信(ステップ263)までの処理は、前述のSeq1の処理要求受付(ステップ231)から処理要求送信(ステップ237)と同じであるため、説明は省略する。
アプリケーションサーバ2−nが処理要求を受けると判定すると、図19に示すフローチャートの処理を実行する。そして、ステップ324で「受付不可」と判定された場合(ステップ264)、Seq3のシーケンスを実行する可能性がある。
図19のフローチャートを参照して、アプリケーションサーバ2の動作を説明する。
アプリケーションサーバ2は、ステップ324で値が「受付不可」であった場合、ステップ325に進む。
ステップ325では、図18のステップ308と同様に、他ノード状態管理部61を経由して他ノード管理テーブル59のレコードを取得し、取得したレコードを比較する。なお、ステップ325では、比較対象に自ノードは含めない。これは、ステップ324で自ノードは現在の受付可否状態が「受付不可」となっていることを確認しているためである。
次に、ステップ325での比較結果に基づいて、対象となる他ノードが存在するかを判定する(ステップ326)。処理を実行可能なノードが存在する場合、代替サーバの情報を外部システム6に送信する前に、受付重み統計値を代替先のアプリケーションサーバ2−1に送信する(ステップ332)。これは、代替先のアプリケーションサーバ2が外部システム6から処理要求を受ける際に、代替前のアプリケーションサーバ2が管理していた受付重み統計値を引き継ぎ、ブロードキャストパケットへの応答可否判定で活用するためである。
具体的には、まず、他ノード状態管理部61を経由して他ノード管理テーブル59を参照し、ステップ322で解析した外部システム6のIPアドレスと、処理カウント管理テーブル131の外部システム132と、受付重み統計値管理テーブル371の外部システム372とが一致するレコードを抽出する。例えば、処理要求に含まれる外部システム6のIPアドレスが「192.168.1.21」である場合、処理カウント管理テーブル131(図8)のレコード137及び受付重み統計値管理テーブル371(図9A)のレコード374が該当する。
次に、状態解析・生成モジュール64が、これらのレコードに基づいて、代替先のアプリケーションサーバ2へ送信する受付重み統計値を生成する。他ノード状態送受信モジュール65は、生成した受付重み統計値を代替先のアプリケーションサーバ2に送信する。例えば、図16に示す場合、アプリケーションサーバ2−nがアプリケーションサーバ2−1を代替サーバとして選択しており、アプリケーションサーバ2−1へ受付重み統計情報を送信して、処理を要求した外部システム6の情報を通知する(ステップ265)。状態解析・生成モジュール64は、他ノード状態管理部61を経由して他ノード管理テーブル59へアクセスし、他ノード管理テーブル59(図14)のIPアドレス213から、送信先のアプリケーションサーバ2−1のIPアドレスを取得する。
アプリケーションサーバ2−1では、他ノード状態送受信モジュール65が、受付重み統計値を受信し、受信した受付重み統計値は状態解析・生成モジュール64を経由して、他ノード状態管理部61が他ノード管理テーブル59内の処理カウント管理テーブル131(図8)及び受付重み統計値管理テーブル371(図9A)にレコードを追加する(ステップ266)。
図19に戻って、アプリケーションサーバ2−nが実行する処理の説明を続ける。アプリケーションサーバnでは、ステップ332で受付重み統計値を送信した後、処理要求解析・処理結果返信モジュール73が受付を拒否する応答を生成する(ステップ329)。生成される応答は、代替ノードとしてステップ325で比較して特定したノードのノード名、IPアドレス及び処理要求受付ポート番号を含む。具体的には、処理要求解析・処理結果返信モジュール73は、他ノード管理テーブル59(図14)からノード名212、IPアドレス213及び処理要求ポート番号217の値を取得し、要求受付拒否応答に含める。この処理は、図16の代替要求受付ノード情報付与267に該当する。処理要求送受信モジュール74は、生成した応答メッセージを外部システム6へ送信する(ステップ330)。その後、処理要求受信処理を終了する(ステップ331)。
ステップ330で外部システム6へ送信された要求受付拒否応答は、図16のステップ268にて、ルータ4を経由して外部システム6へ到達する。
外部システム6は、図17に示すステップ292で、処理要求の応答を待ち受けている。外部システム6は、ステップ268で応答が到達すると、受信した応答が正常かを判定する(ステップ296)。しかし、この応答は拒否応答であるため、ステップ296ではNと判定され、代替となるアプリケーションサーバ2の情報を拒否応答メッセージから取得する(ステップ297)。そして、メモリに登録している処理要求先の情報は不要であるため、外部システム6は処理要求先の情報を削除する(ステップ298)。その後、ステップ289へ戻り、代替の処理要求先を登録する。ステップ297で取得した代替要求先の情報とステップ286で受信したブロードキャスト応答の情報は同じ情報である。具体的には、他ノード管理テーブル59(図14)のノード名212、IPアドレス213及び処理要求ポート番号217を登録する。この処理は、図16の要求先削除269、要求先登録270に該当する。
その後のシーケンス(ステップ271〜274)は、Seq1:初回処理要求255のシーケンス(ステップ237〜240)と同じである。すなわち、外部システム6は、代替要求先に処理要求を送信する(ステップ271)。代替先のアプリケーションサーバ2−1は、処理要求受付可否を判定し(ステップ272)、要求された処理を実行し(ステップ273)、処理結果(正常応答)を外部システム6へ応答する(ステップ274)。
次に、受付重み統計値、受付重み現在値をアプリケーションサーバ2が算出する処理を説明する。
図12は、処理要求管理キュー72の構成例を示す図である。
キュー72は、送信元となる外部システムのIPアドレス172、受信メッセージ173、処理174、状態175のカラムを有する。状態175は、「処理待ち」「処理中」「処理完了」の何れかの値となる。キュー72の構造は、テーブル形式でもよいし、別の形式でもよい。また、キュー72は、メモリ13に保持されてもよいし、データベース22に保持されてもよい。
処理要求管理キュー72の動作を説明する。新たな処理要求がキュー72へ入力されると、テーブル72の最下行に新たなレコードが追加される。また、要求処理実行部70が処理を実行する場合、テーブル72の最上行のレコードを取得して、当該レコードの状態175を「処理待ち」から「処理中」へと更新する。キュー72は、最上行のレコードの処理が完了すると、処理の完了を処理要求解析・処理結果返信モジュール73へ通知し、状態175を「処理完了」へ更新する。そして、処理要求解析・処理結果返信モジュール73は、処理要求送受信モジュール74を経由して、外部システム6へ処理結果応答を送信する。キュー72は、処理結果応答の送信が完了すると、当該処理のレコードをキュー72から削除する。
キュー72へのレコードの追加及び削除時に、要求された処理の実行と共に、受付重み統計値のカウントアップ処理、及び受付重み現在値の更新処理が実行される。
図5は、受付重み統計値で利用する処理カウント数を更新する処理のフローチャートである。
まず、キュー72からレコードの削除を検知すると(ステップ81)、自ノード状態管理部62は、処理要求管理キュー72の送信元172から、処理要求元の外部システム6のIPアドレスを取得する(ステップ82)。
次に、取得したIPアドレスが処理カウント管理テーブル131(図8参照)に記録されているかを判定する(ステップ83)。取得したIPアドレスが処理カウント管理テーブル131に記録されていない場合、新たな処理要求元の外部システム6を登録するため、外部システムのIPアドレス132が処理要求元の外部システム6のIPアドレスであるレコードを処理カウント管理テーブル131に追加する(ステップ84)。この時、レコードを処理カウント管理テーブル131の他のカラム133〜136には0を記録する。
一方、ステップ83で、取得したIPアドレスが処理カウント管理テーブル131に記録されている場合は、ステップ85に進み、削除したキュー72のレコードから、要求された処理を完了した処理名を取得する(ステップ85)。例えば、図12に示すキュー72においてレコード176が削除された場合、完了した処理が「p1」であることが処理174から取得できる。
次に、処理カウント管理テーブル131において、処理要求元に対応するレコードの完了した処理133〜135の値を1増加する(ステップ86)。例えば、図12に示すキュー72においてレコード176が削除された場合、送信元の外部システム6のIPアドレスが「192.168.2.21」であり、要求された処理が「p1」であるため、処理カウント管理テーブル131のレコード137の「p1」133の値を1増加する。
その後、処理カウント管理テーブル131のレコード137の重み合計値136を更新する(ステップ87)。具体的には、実行処理管理テーブル67(図10)の重み係数144から対応する処理の重み係数を取得し、処理カウント管理テーブル131のレコード137の重み合計値136に加算する。その後、処理カウント数更新処理を終了する(ステップ88)。
このようにして、アプリケーションサーバ2は、要求を受けた処理が完了すると、処理カウント数更新処理を実行し、処理カウント管理テーブル131を更新する。
次に、前述した受信可否判定処理(図18)のステップ303やステップ308などで参照される受付重み統計値を、各アプリケーションサーバが算出する動作を説明する。
図6は、受付重み統計値算出処理のフローチャートである。
アプリケーションサーバ2は、統計値算出処理を繰り返し(例えば所定の時間毎に)実行する(ステップ101)。統計値の算出時間を制御するためのパラメータは、予めメモリに記録される。例えば、統計値算出間隔は3600秒(1時間ごと)と設定してもよい。アプリケーションサーバ2は、この算出で統計値を算出する。また、1回の統計値の算出に用いるサンプリング回数を記録するとよい。さらに、統計値を最後に算出した時刻を記録するとよい。アプリケーションサーバ2は、統計値最終算出時刻に統計値算出間隔を加算した時刻に次の受付重み統計値を算出する。例えば、統計値最終算出時刻が「2014/06/24 13:31:15」である場合、次回の算出処理開始時刻は、その1時間後の「2014/06/24 14:31:15」となる。
次に、処理カウント管理テーブル131(図8)から、処理対象とする外部システム6のレコードを選択する(ステップ102)。統計値算出処理のループによって1レコードずつ処理し、最終的には全レコードについて統計値を算出する。
次に、選択したレコードの外部システムのIPアドレス132が、受付重み統計値管理テーブル371(図9A)の外部システム372に登録されているかを判定する(ステップ103)。
選択したレコードの外部システム6が受付重み統計値管理テーブル371に登録されていない場合、この外部システム6の統計値は初めて算出するので、受付重み統計値管理テーブル371にレコードを追加する(ステップ104)。その時、処理カウント管理テーブル131(図8)の重み合計値136の値を、受付重み統計値373の値に登録する。この重み統計値の値が、最初に算出する統計値となる。
次に、ステップ105〜108で統計値を算出する。まず、現在の重み統計値と(統計サンプリング回数−1)とを乗算した値を求める(ステップ105)。例えば、受付重み統計値管理テーブル371(図9A)のレコード374の値から統計値を算出する場合、レコード374の受付重み統計値373は「233」であり、統計サンプリング回数は「3」であるため、計算結果は233×(3−1)=466となる。
次に、ステップ105で算出された乗算値に、処理カウント管理テーブル131の重み合計値136を加算する(ステップ106)。例えば、処理カウント管理テーブル131のレコード137の重み合計値136が「302」であるため、計算結果は466+302=768となる。
次に、ステップ106で算出された加算値を、統計サンプリング回数で除した値を算出する(ステップ107)。例えば、統計サンプリング回数は「3」であるため、計算結果は768÷3=256となる。なお、この値が新たな重み統計値となる。
最後に、ステップ107の計算結果を受付重み統計値373に記録する(ステップ108)。更新前の受付重み統計値管理テーブル371(図9A)と、更新後の受付重み統計値管理テーブル371−2(図9B)を比較すると、IPアドレスが192.168.1.21の外部システム6の重み統計値は、「233」から「256」へ変化した。
選択された一つの外部システム6についてステップ108までの処理が終了すると、全ての外部システム6についての重み統計値の算出が終了したかを判定する(ステップ109)。一部の外部システム6についての重み統計値が算出されていない場合、ステップ102へ戻り、次に統計値を算出する外部システム6のレコードを選択する。一方、全ての外部システム6についての重み統計値の算出が終了している場合、全ての外部システム6の算出後の受付重み統計値を合計し、その合計値で自ノード管理テーブル60(図7A)の受付重み統計値126の値を更新する(ステップ110)。例えば、受付重み統計値管理テーブル371−2(図9B)の各レコードの受付重み統計値373の合計値が、全ての外部システム6の統計値を算出後の受付重み統計値であり、256+45+445=746となる。
最後にステップ111で、メモリに記録された統計値最終算出時刻を現在時刻に更新し、受付重み統計値算出処理を終了する(ステップ112)。
次に、処理要求管理キュー72レコードを追加又は削除する時の受付重み現在値及びアプリケーションサーバ2の受付可否状態を更新する処理を説明する。
図11Aは、キューレコード追加時の更新処理のフローチャートである。
処理要求管理キュー72(図12)にレコードが追加されると(ステップ151)、自ノード状態管理部62は、追加された処理要求の対象である処理の重み係数を、自ノード管理テーブル60(図7A)の受付重み現在値へ加算する(ステップ152)。具体的には、自ノード状態管理部62は、追加された処理要求の対象である処理の重み係数を、実行処理管理テーブル67(図10)の重み係数14から取得する。また、自ノード状態管理部62は、処理要求管理キュー72から受けた追加レコードの処理174と一致するレコードを実行処理管理テーブル67から検索する。例えば、キュー72にレコード177が追加された場合、処理174は「p3」であり、実行処理管理テーブル67のレコード146が該当し、当該処理p3の重み係数は「1」である。その結果、自ノード状態管理部62は、自ノード管理テーブル60の受付重み現在値127に1を加算する。
次に、受付重み現在値が閾値を超えているかを判定する(ステップ153)。閾値は予めアプリケーションサーバ2に設定されている値であり、例えば30を定義する。受付重み現在値が閾値を超えると受け付けが不可能となる。受付重み現在値が閾値を超えていない場合、ステップ154をスキップして、更新処理を終了する(ステップ155)。
一方、受付重み現在値が閾値を超えている場合、自ノード管理テーブル60の現在の受付可否状態128を「受付不可」へ更新する(ステップ154)。その結果、受信可否判定処理(図18)のステップ307でブロードキャストに応答しないと判定し、処理要求受信処理(図19)のステップ324で処理要求を拒否する。
図11Bは、キューレコード削除時の更新処理のフローチャートである。
処理要求管理キュー72からレコードが削除されると(ステップ161)、自ノード状態管理部62は、削除された処理要求の対象である処理の重み係数を、実行処理管理テーブル67(図10)の重み係数14から取得し、自ノード管理テーブル60(図7A)の受付重み現在値から減算する(ステップ162)。
次に、受付重み現在値が閾値以下となったかを判定する(ステップ163)。閾値は予めアプリケーションサーバ2に設定されている値であり、例えば30を定義する。受付重み現在値が閾値以下でない場合、ステップ164をスキップして、更新処理を終了する(ステップ165)。
一方、受付重み現在値が閾値以下である場合、自ノード管理テーブル60の現在の受付可否状態128を「受付可」へ更新する(ステップ164)。その結果、受信可否判定処理(図18)のステップ307でブロードキャストに応答すると判定し、処理要求受信処理(図19)のステップ324で処理要求を受け付ける。
次に、アプリケーションサーバ2の状態が変化した場合(サーバ起動時、サーバ状態変化時、サーバダウン時)のサーバ間での情報を共有を説明する。本実施例では、アプリケーションサーバ2は、他ノード管理テーブル59(図14)を共有しているが、他の情報を共有してもよい。
図13は、アプリケーションサーバ2の状態が変化した場合にアプリケーションサーバ間で情報を共有するシーケンス図である。
まず、Seq1:サーバ起動時203のシーケンスを用いて、各アプリケーションサーバが起動したときの情報の共有の動作を説明する。
例えば、アプリケーションサーバ2−1が起動する(ステップ181)。起動直後のアプリケーションサーバ2−1の自ノード管理テーブル60−1は、図7Bに示す様に、受付重み統計値126は「0」であり、受付重み現在値127は「0」であり、現在の受付可否状態128は「受付可」である。アプリケーションサーバ2−1は、起動後、起動したことと現在の自ノード状態を、状態通知ノード1へ送信する(ステップ182)。状態通知ノード1のIPアドレスは、アプリケーションサーバ2−1の起動前に、自ノード管理テーブル60−1のレコード129に事前に設定しておく。
状態通知ノード1は、起動通知182を受けると、アプリケーションサーバ2−1が稼働状態であること及び送信された情報を内部の記憶装置に保持する。また、状態通知ノード1は、情報が保持されている他のアプリケーションサーバにアプリケーションサーバ2−1の情報の追加・変更を通知する。図示する例では、アプリケーションサーバ2−1からの起動通知182のタイミングでは、他のアプリケーションサーバは起動しておらず、状態通知ノード1も起動しているアプリケーションサーバ2の情報を保持していないため、他のアプリケーションサーバ2へ通知されない。
その後、アプリケーションサーバ2−2が起動する(ステップ183)。アプリケーションサーバ2−2は、アプリケーションサーバ2−1と同様に、起動後、起動したことと現在の自ノードの情報を、状態通知ノード1へ送信する(ステップ184)。状態通知ノード1は、起動通知184を受けると、このタイミングでアプリケーションサーバ2−1の情報を保持しているため、アプリケーションサーバ2−2が追加されたこと、及びアプリケーションサーバ2−2の状態情報をアプリケーションサーバ2−1に通知する(ステップ185)。
また、現在稼動しているアプリケーションサーバの情報を、新たに起動したアプリケーションサーバ2−2に通知する(ステップ186)。アプリケーションサーバ2−2では、他ノード状態送受信モジュール65が稼動中のアプリケーションサーバの情報を受信し、状態解析・生成モジュール64が通知を受けた他のアプリケーションサーバ2の情報を他ノード状態管理部61を経由して他ノード管理テーブル59に登録する。既に同じアプリケーションサーバが登録されている場合は、既に登録されている情報を更新する。
その後、アプリケーションサーバ2−3が起動すると(ステップ187)、前述と同様に、アプリケーションサーバ2−3は、状態通知ノード1へ起動通知を送信する(ステップ188)。状態通知ノード1は、稼働中サーバ変更通知をアプリケーションサーバ2−1、2−2に通知し(ステップ189、190)。現在稼動しているアプリケーションサーバの情報を、新たに起動したアプリケーションサーバ2−3に通知する(ステップ191)。
その結果、各アプリケーションサーバの現在の状態をアプリケーションサーバ間で共有することができる。例えば、Seq1:サーバ起動時203のシーケンスの後のアプリケーションサーバ2−1の他ノード管理テーブル59−1は、図14Bに示す形態となる。
次に、Seq2:サーバ状態変化時204のシーケンスを用いて、アプリケーションサーバ2の自ノード管理テーブル60の値が変化したときの情報の共有の動作を説明する。
例えば、アプリケーションサーバ2−1が大量の処理要求を受けた(ステップ192)。アプリケーションサーバ2−1は、処理要求受信処理(図19)のステップ327で、受信した処理要求を処理要求管理キュー72に登録し(ステップ193)、更新処理(図11A)のステップ152で受付重み現在値を更新する。しかし、所定量のキューが格納されると、受付重み現在値が閾値を超えるため、更新処理(図11A)のステップ154の処理が実行され、現在の受付可否状態を「受付不可」へ更新する(ステップ194)。
その後、アプリケーションサーバ2−1は、状態の変化を状態通知ノード1へ通知する(ステップ195)。状態通知ノード1は、状態変化通知195を受けると、アプリケーションサーバ2−1の新しい状態を内部の記憶装置に保持する。また、状態通知ノード1は、情報が保持されている他のアプリケーションサーバに、アプリケーションサーバ2−1の情報の変更を通知する(ステップ196、197)。図示する例では、アプリケーションサーバ2−1からの状態変化通知195のタイミングで、他のアプリケーションサーバ2−2、2−nが稼働しており、状態通知ノード1がこれらのアプリケーションサーバの情報を保持している。このため、状態通知ノード1は、アプリケーションサーバ2−1の状態変化を、他のアプリケーションサーバ2−2、2−nに通知する。
アプリケーションサーバ2−2、2−nでは、他ノード状態送受信モジュール65が稼動中アプリケーションサーバの情報を受信し、状態解析・生成モジュール64が通知を受けた他のアプリケーションサーバ2の情報を他ノード状態管理部61を経由して他ノード管理テーブル59の他アプリケーションサーバの情報を更新する。
次に、Seq3:サーバダウン時205のシーケンスを用いて、アプリケーションサーバがダウンしたときの情報の共有の動作を説明する。
アプリケーションサーバ2−1及び状態通知ノード1は、アプリケーションサーバ2−1の起動通知時からコネクションを張っている。状態通知ノード1は、このコネクションを定期的に監視している。例えば、アプリケーションサーバ2−1がダウンした場合(ステップ198)、アプリケーションサーバ2−1と状態通知ノード1の間のコネクションは切断される(ステップ199)。このため、アプリケーションサーバ2−1がダウンして一定期間が経過すると、状態通知ノード1は、定期監視により、アプリケーションサーバ2−1とのコネクションが切れたことを検知する(ステップ200)。
状態通知ノード1は、ステップ200でコネクション切断を検知すると、アプリケーションサーバ2−1の新しい状態を内部の記憶装置に保持する。また、状態通知ノード1は、情報が保持されている他のアプリケーションサーバに、アプリケーションサーバ2−1のダウンを通知する(ステップ201、202)。図示する例では、アプリケーションサーバ2−1のダウンを検出したタイミングで、他のアプリケーションサーバ2−2、2−nが稼働しており、状態通知ノード1がこれらのアプリケーションサーバの情報を保持している。このため、状態通知ノード1は、アプリケーションサーバ2−1のダウンを、他のアプリケーションサーバ2−2、2−nに通知する。
アプリケーションサーバ2−2、2−nでは、他ノード状態送受信モジュール65が稼動中アプリケーションサーバの情報を受信し、状態解析・生成モジュール64が通知を受けた他のアプリケーションサーバ2の情報を他ノード状態管理部61を経由して他ノード管理テーブル59の状態214を「未稼働」へ更新する。
このように、各アプリケーションサーバは状態通知ノード1を経由して、互いの情報を共有する。なお、情報の共有方法は例示した以外の方法でもよい。
図21A、図21B、図22には、前述した受付重み統計値算出処理(図6、図9A)の別な例を示す。
図6では外部システム毎に受付重み統計値を算出する処理を説明し、図9Aでは算出された受付重み統計値を外部システム毎に管理する受付重み統計値管理テーブルを説明した。一方、図22では処理毎に受付重み統計値を算出する処理を説明し、図21A、図21Bでは算出された受付重み統計値を管理する処理毎に統計値管理テーブルを説明する。
図22に示す受付重み統計値算出処理では、図6と同様に、アプリケーションサーバは、繰り返し(例えば所定の時間毎に)処理を実行する(ステップ391)。
ステップ392から395で、処理毎に統計値を算出する。例えば、処理p1について、ステップ392では、図21Aに示す受付重み統計値管理テーブル381の処理382が「p1」のレコード384の要求数383の「15」を用いる。ステップ393では、処理カウント管理テーブル131(図8)の全外部システムのカラム133の合計値を加算する。ステップ394では、算出された加算値を、統計サンプリング回数「3」で除する。ステップ395では、受付重み統計値管理テーブル381(図21A)の要求数383及び重み385を更新する。
その後、選択された一つの外部システム6についてステップ108までの処理が終了すると、全ての外部システム6についての重み統計値の算出が終了したかを判定する(ステップ396)。
ステップ397、398の処理は、図6のステップ110、111の処理と同じである。
更新前の受付重み統計値管理テーブル381(図21A)と、更新後の受付重み統計値管理テーブル381−2(図21B)を比較すると、処理p1の重み統計値は、「30」から「42」へ変化した。
このようにして、図24に示す処理毎の受付重み統計値をノード間で共有することができる。
なお、図6に示すシーケンスと図22に示すシーケンスとは、両方を実行しても、いずれか一方のみを実行してもよい。なお、情報を共有するアプリケーションサーバ2は、互いに同じ種類の情報を共有するために、同じ処理を行い、各アプリケーションサーバ2は同じ情報を算出する必要がある。
以上に説明したように、本発明の第1実施例によれば、負荷分散装置やネームサーバ等の特別な装置を導入することなく、L2SW、L3SW等の汎用的なネットワーク装置によって、アプリケーションサーバを分散配置環境を実現することができ、負荷分散や冗長性を確保することができる。
また、システム拡張のボトルネックを解消することができる。さらに、システム内の管理装置が減ることによって、管理の手間やコストを軽減することができる。
さらに、各ノードへの処理要求と受付重み統計値を参照して振分先を決定するので、ノードクラスタ全体の負荷分散の効率をより高めることができる。
また、受付重み統計値を参照して代替先のアプリケーションサーバを選択するので、自ノードが処理を実行できない場合でも、適切なアプリケーションサーバを選択することができる。また、選択された代替先のアプリケーションサーバの情報を処理要求を送信した外部システムに通知し、処理要求を送信した外部システムの情報を選択された代替先のアプリケーションサーバに通知するので、代替先のアプリケーションサーバに確実に処理を引き継ぐことができる。
また、受付重み統計値が最低のアプリケーションサーバを代替先のアプリケーションサーバとして選択するので、負荷が低いアプリケーションサーバを的確に選択することができる。
また、受付重み統計値は、外部システム毎に要求された処理の種別毎の回数と、処理の種別の重み係数とを乗じて、前記外部システム毎に算出される負荷情報としたので、集中的に処理を依頼している外部システムを特定できる。このため、特定の外部システムからの負荷が集中しているアプリケーションサーバではなく、複数の外部システムからの平均的な負荷がかかっているアプリケーションサーバを選択することができる。
また、受付重み統計値は、外部システム毎に要求された処理の種別毎の回数と、処理の種別の重み係数とを乗じて、処理の種別毎に算出される負荷情報としたので、処理毎に負荷を平準化することができる。
また、受付重み統計値が最低である場合に、ブロードキャストに応答すると判定するので、負荷が低いアプリケーションサーバを選択することができる。
また、現在処理要求を受付可能なアプリケーションサーバの中で受付重み統計値を比較するので、突発的な負荷変動によって、現在処理要求を受け付けていない計算機を除外して、的確に振り分け先を決定できる。
また、現在稼働中である計算機の中で受付重み統計値を比較するのでメンテナンスなどで停止中の計算機を除外して、的確に振り分け先を決定できる。
なお、本発明は前述した実施例に限定されるものではなく、添付した特許請求の範囲の趣旨内における様々な変形例及び同等の構成が含まれる。例えば、前述した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を有するものに本発明は限定されない。また、ある実施例の構成の一部を他の実施例の構成に置き換えてもよい。また、ある実施例の構成に他の実施例の構成を加えてもよい。また、各実施例の構成の一部について、他の構成の追加・削除・置換をしてもよい。
また、前述した各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等により、ハードウェアで実現してもよく、プロセッサがそれぞれの機能を実現するプログラムを解釈し実行することにより、ソフトウェアで実現してもよい。
各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、SSD(Solid State Drive)等の記憶装置、又は、ICカード、SDカード、DVD等の記録媒体に格納することができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、実装上必要な全ての制御線や情報線を示しているとは限らない。実際には、ほとんど全ての構成が相互に接続されていると考えてよい。