(57)【要約】【課題】処理の要求を複数の処理システムに振り分ける場合において、何れかの処理システムのスローダウン時又は何れかの処理システムの障害の発生から検知までの間にストームドレインが起こる可能性を低下させる。【解決手段】ゲートウェイ２０において、接続オブジェクト管理部２３が、伝送先のサーバ３０が固定された接続オブジェクト６１を接続オブジェクトプール６３に格納しておく。この状態で、端末装置１０から処理要求を受信した処理スレッド２１から接続オブジェクト６１の貸し出しが要求されると、接続オブジェクト６１を貸し出して、固定された伝送先のサーバ３０へ処理要求を送信させる。また、サーバ３０から応答を受信した処理スレッド２１から接続オブジェクト６１が返却されると、その接続オブジェクト６１の返却を受け付けて、処理スレッド２１に再び貸し出し可能に格納する。【選択図】図４
2014211744.tif 000002
【特許請求の範囲】
【請求項１】
処理の要求を行う要求装置からの当該要求を、当該処理が可能な複数の処理システムの何れかに振り分ける装置であって、
前記複数の処理システムの各処理システムに対して、当該各処理システムに接続するための少なくとも１つの接続情報を記憶する記憶部と、
前記要求装置から前記要求を受信する要求受信部と、
前記要求受信部による前記要求の受信に応じて、前記記憶部に記憶された、前記複数の処理システムのうちの一の処理システムに接続するための少なくとも１つの接続情報のうちの一の接続情報に関する状態であって、当該一の接続情報が当該要求のために使用され、かつ、当該要求以外の他の要求のために使用されない状態を設定する設定部と、
前記要求受信部により受信した前記要求を、前記一の接続情報を使用して、前記一の処理システムに送信する要求送信部と、
前記一の処理システムから前記処理の結果を示す応答を受信する応答受信部と、
前記応答受信部が前記応答を受信した場合に、前記一の接続情報に関する状態であって、当該一の接続情報が前記要求のために使用され、かつ、当該要求以外の他の要求のために使用されない状態を解除する解除部と、
前記応答受信部が前記応答を受信した場合に、当該応答を前記要求装置に送信する応答送信部と
を含む、装置。
【請求項２】
処理の要求を行う要求装置からの当該要求を、当該処理が可能な複数の処理システムの何れかに振り分ける振り分け装置における、振り分けを制御する装置であって、
前記複数の処理システムの各処理システムに対して、当該各処理システムに接続するための少なくとも１つの接続情報を記憶する記憶部と、
前記要求装置から前記要求を受信し、前記記憶部に記憶された前記少なくとも１つの接続情報を使用して当該要求を前記複数の処理システムの各処理システムに送信し、当該各処理システムから前記処理の結果を示す応答を受信し、当該応答を当該要求装置に送信する処理を、各々が行う複数の処理部のうちの一の処理部による当該要求の受信に応じて、前記記憶部に記憶された、前記複数の処理システムのうちの一の処理システムに接続するための少なくとも１つの接続情報のうちの一の接続情報に関する状態であって、当該一の接続情報が当該一の処理部により使用され、かつ、当該複数の処理部のうちの当該一の処理部以外の他の処理部により使用されない状態を設定する設定部と、
前記一の処理部が前記応答を受信した場合に、前記一の接続情報に関する情報であって、当該一の接続情報が当該一の処理部により使用され、かつ、前記複数の処理部のうちの当該一の処理部以外の他の処理部により使用されない状態を解除する解除部と
を含む、装置。
【請求項３】
前記設定部は、前記複数の処理システムのうちの何れかの処理システムによる前記処理の実行に関して支障があることが検知された場合に、前記記憶部に記憶された、当該処理システムに接続するための少なくとも１つの接続情報の全ての接続情報に関する状態であって、当該全ての接続情報が前記複数の処理部の何れによっても使用されない状態を設定し、
前記解除部は、前記処理システムによる前記処理の実行に関して前記支障がなくなったこと又は軽減されたことが検知された場合に、前記少なくとも１つの接続情報の全ての接続情報に関する状態であって、当該全ての接続情報が前記複数の処理部の何れによっても使用されない状態を解除する、請求項２の装置。
【請求項４】
前記設定部は、前記複数の処理部のうちの何れかの処理部が前記複数の処理システムのうちの何れかの処理システムから前記応答を一定時間内に受信しなかった場合に、前記記憶部に記憶された、当該処理システムに接続するための少なくとも１つの接続情報の全ての接続情報に関する状態であって、当該全ての接続情報が当該複数の処理部の何れによっても使用されない状態を設定する、請求項２又は請求項３の装置。
【請求項５】
前記記憶部に記憶された前記複数の処理システムの各処理システムに接続するための少なくとも１つの接続情報の全てが、前記複数の処理部の何れかにより使用されている場合に、前記一の処理部による前記要求の受信に応じて、前記一の処理システムに接続するための少なくとも１つの接続情報を前記記憶部に追加する追加部を更に含む、請求項２乃至請求項４の何れかの装置。
【請求項６】
処理の要求を行う要求装置からの当該要求を、当該処理が可能な複数の処理システムの何れかに振り分ける方法であって、
前記複数の処理システムの各処理システムに対して、当該各処理システムに接続するための少なくとも１つの接続情報を記憶部に記憶するステップと、
前記要求装置から前記要求を受信するステップと、
前記要求の受信に応じて、前記記憶部に記憶された、前記複数の処理システムのうちの一の処理システムに接続するための少なくとも１つの接続情報のうちの一の接続情報に関する状態であって、当該一の接続情報が当該要求のために使用され、かつ、当該要求以外の他の要求のために使用されない状態を設定するステップと、
受信した前記要求を、前記一の接続情報を使用して、前記一の処理システムに送信するステップと、
前記一の処理システムから前記処理の結果を示す応答を受信した場合に、前記一の接続情報に関する状態であって、当該一の接続情報が前記要求のために使用され、かつ、当該要求以外の他の要求のために使用されない状態を解除するステップと、
前記一の処理システムから前記応答を受信した場合に、当該応答を前記要求装置に送信するステップと
を含む、方法。
【請求項７】
処理の要求を行う要求装置からの当該要求を、当該処理が可能な複数の処理システムの何れかに振り分ける振り分け装置における、振り分けを制御する装置として、コンピュータを機能させるプログラムであって、
前記コンピュータを、
前記複数の処理システムの各処理システムに対して、当該各処理システムに接続するための少なくとも１つの接続情報を記憶する記憶部と、
前記要求装置から前記要求を受信し、前記記憶部に記憶された前記少なくとも１つの接続情報を使用して当該要求を前記複数の処理システムの各処理システムに送信し、当該各処理システムから前記処理の結果を示す応答を受信し、当該応答を当該要求装置に送信する処理を、各々が行う複数の処理部のうちの一の処理部による当該要求の受信に応じて、前記記憶部に記憶された、前記複数の処理システムのうちの一の処理システムに接続するための少なくとも１つの接続情報のうちの一の接続情報に関する状態であって、当該一の接続情報が当該一の処理部により使用され、かつ、当該複数の処理部のうちの当該一の処理部以外の他の処理部により使用されない状態を設定する設定部と、
前記一の処理部が前記応答を受信した場合に、前記一の接続情報に関する情報であって、当該一の接続情報が当該一の処理部により使用され、かつ、前記複数の処理部のうちの当該一の処理部以外の他の処理部により使用されない状態を解除する解除部と
して機能させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理の要求を振り分ける装置及び方法に関する。特に、本発明は、要求装置からの処理の要求を、その処理が可能な複数の処理システムの何れかに振り分ける装置及び方法に関する。
【背景技術】
【０００２】
トランザクション処理を行う処理システムがクラスタ化された環境で要求応答型の処理を行う場合には、ゲートウェイ等の振り分け装置でスレッドが処理システムに対する要求を振り分ける方法が一般に用いられている。例えば、ある製品では、接続プールがゲートウェイ上でメッセージを伝送する機能（キューマネージャ）に対する複数の接続を格納しておき、メッセージ伝送時にスレッドが接続プールから接続を獲得してラウンドロビンで伝送先を決めている。
【０００３】
ここで、接続プールを通じてデータベースインスタンスへの接続を選択して設定する技術は、従来から知られていた（例えば、特許文献１参照）。
また、ラウンドロビンを用いて、複数のチャネルの優先度を決定する技術も、従来から知られていた（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２００８−５２５９１６号公報
【特許文献２】特開平８−２４９２６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、上記のように処理システムがクラスタ化されている場合に、クラスタに含まれる１つの処理システムがスローダウンすると、ゲートウェイでは、スローダウンした処理システムからの応答待ちのために、スレッドが使い尽くされることが起こり得る。その結果、正常に稼動している処理システムに要求を振り分けることができなくなり、見かけ上システムが全面停止に陥ってしまうことがある。以下では、このようなシステムの全面停止を、ストームドレインと呼ぶ。例えば、上述した製品でも、ラウンドロビンでスローダウンしている伝送先にメッセージが送られてしまい、ストームドレインが発生する。
【０００６】
尚、特許文献１、２の技術は、このようなストームドレインが起こる可能性を低下させるための解決手段を何ら提示するものではない。
【０００７】
本発明の目的は、処理の要求を複数の処理システムに振り分ける場合において、何れかの処理システムのスローダウン時又は何れかの処理システムの障害の発生から検知までの間にストームドレインが起こる可能性を低下させることにある。
【課題を解決するための手段】
【０００８】
かかる目的のもと、本発明は、処理の要求を行う要求装置からの要求を、処理が可能な複数の処理システムの何れかに振り分ける装置であって、複数の処理システムの各処理システムに対して、各処理システムに接続するための少なくとも１つの接続情報を記憶する記憶部と、要求装置から要求を受信する要求受信部と、要求受信部による要求の受信に応じて、記憶部に記憶された、複数の処理システムのうちの一の処理システムに接続するための少なくとも１つの接続情報のうちの一の接続情報に関する状態であって、一の接続情報が要求のために使用され、かつ、要求以外の他の要求のために使用されない状態を設定する設定部と、要求受信部により受信した要求を、一の接続情報を使用して、一の処理システムに送信する要求送信部と、一の処理システムから処理の結果を示す応答を受信する応答受信部と、応答受信部が応答を受信した場合に、一の接続情報に関する状態であって、一の接続情報が要求のために使用され、かつ、要求以外の他の要求のために使用されない状態を解除する解除部と、応答受信部が応答を受信した場合に、応答を要求装置に送信する応答送信部とを含む、装置を提供する。
【０００９】
また、本発明は、処理の要求を行う要求装置からの要求を、処理が可能な複数の処理システムの何れかに振り分ける振り分け装置における、振り分けを制御する装置であって、複数の処理システムの各処理システムに対して、各処理システムに接続するための少なくとも１つの接続情報を記憶する記憶部と、要求装置から要求を受信し、記憶部に記憶された少なくとも１つの接続情報を使用して要求を複数の処理システムの各処理システムに送信し、各処理システムから処理の結果を示す応答を受信し、応答を要求装置に送信する処理を、各々が行う複数の処理部のうちの一の処理部による要求の受信に応じて、記憶部に記憶された、複数の処理システムのうちの一の処理システムに接続するための少なくとも１つの接続情報のうちの一の接続情報に関する状態であって、一の接続情報が一の処理部により使用され、かつ、複数の処理部のうちの一の処理部以外の他の処理部により使用されない状態を設定する設定部と、一の処理部が応答を受信した場合に、一の接続情報に関する情報であって、一の接続情報が一の処理部により使用され、かつ、複数の処理部のうちの一の処理部以外の他の処理部により使用されない状態を解除する解除部とを含む、装置も提供する。
【００１０】
ここで、設定部は、複数の処理システムのうちの何れかの処理システムによる処理の実行に関して支障があることが検知された場合に、記憶部に記憶された、処理システムに接続するための少なくとも１つの接続情報の全ての接続情報に関する状態であって、全ての接続情報が複数の処理部の何れによっても使用されない状態を設定し、解除部は、処理システムによる処理の実行に関して支障がなくなったこと又は軽減されたことが検知された場合に、少なくとも１つの接続情報の全ての接続情報に関する状態であって、全ての接続情報が複数の処理部の何れによっても使用されない状態を解除する、ものであってよい。
また、設定部は、複数の処理部のうちの何れかの処理部が複数の処理システムのうちの何れかの処理システムから応答を一定時間内に受信しなかった場合に、記憶部に記憶された、処理システムに接続するための少なくとも１つの接続情報の全ての接続情報に関する状態であって、全ての接続情報が複数の処理部の何れによっても使用されない状態を設定する、ものであってもよい。
更に、この装置は、記憶部に記憶された複数の処理システムの各処理システムに接続するための少なくとも１つの接続情報の全てが、複数の処理部の何れかにより使用されている場合に、一の処理部による要求の受信に応じて、一の処理システムに接続するための少なくとも１つの接続情報を記憶部に追加する追加部を更に含む、ものであってよい。
【００１１】
また、本発明は、処理の要求を行う要求装置からの要求を、処理が可能な複数の処理システムの何れかに振り分ける方法であって、複数の処理システムの各処理システムに対して、各処理システムに接続するための少なくとも１つの接続情報を記憶部に記憶するステップと、要求装置から要求を受信するステップと、要求の受信に応じて、記憶部に記憶された、複数の処理システムのうちの一の処理システムに接続するための少なくとも１つの接続情報のうちの一の接続情報に関する状態であって、一の接続情報が要求のために使用され、かつ、要求以外の他の要求のために使用されない状態を設定するステップと、受信した要求を、一の接続情報を使用して、一の処理システムに送信するステップと、一の処理システムから処理の結果を示す応答を受信した場合に、一の接続情報に関する状態であって、一の接続情報が要求のために使用され、かつ、要求以外の他の要求のために使用されない状態を解除するステップと、一の処理システムから応答を受信した場合に、応答を要求装置に送信するステップとを含む、方法も提供する。
【００１２】
更に、本発明は、処理の要求を行う要求装置からの要求を、処理が可能な複数の処理システムの何れかに振り分ける振り分け装置における、振り分けを制御する装置として、コンピュータを機能させるプログラムであって、コンピュータを、複数の処理システムの各処理システムに対して、各処理システムに接続するための少なくとも１つの接続情報を記憶する記憶部と、要求装置から要求を受信し、記憶部に記憶された少なくとも１つの接続情報を使用して要求を複数の処理システムの各処理システムに送信し、各処理システムから処理の結果を示す応答を受信し、応答を要求装置に送信する処理を、各々が行う複数の処理部のうちの一の処理部による要求の受信に応じて、記憶部に記憶された、複数の処理システムのうちの一の処理システムに接続するための少なくとも１つの接続情報のうちの一の接続情報に関する状態であって、一の接続情報が一の処理部により使用され、かつ、複数の処理部のうちの一の処理部以外の他の処理部により使用されない状態を設定する設定部と、一の処理部が応答を受信した場合に、一の接続情報に関する情報であって、一の接続情報が一の処理部により使用され、かつ、複数の処理部のうちの一の処理部以外の他の処理部により使用されない状態を解除する解除部として機能させる、プログラムも提供する。
【発明の効果】
【００１３】
本発明によれば、処理の要求を複数の処理システムに振り分ける場合において、何れかの処理システムのスローダウン時又は何れかの処理システムの障害の発生から検知までの間にストームドレインが起こる可能性を低下させることができる。
【図面の簡単な説明】
【００１４】
【図１】本実施の形態の前提となるコンピュータシステムの構成を示した図である。
【図２】本実施の形態のコンピュータシステムにおける正常時の処理を示した図である。
【図３】本実施の形態のコンピュータシステムにおいてサーバがスローダウンしてストームドレインが発生するときの様子を示した図である。
【図４】本発明の実施の形態におけるゲートウェイの構成例を示したブロック図である。
【図５】本発明の実施の形態における資源／接続先テーブル内の情報の一例を示した図である。
【図６】本発明の実施の形態における接続オブジェクト管理テーブル内の情報の一例を示した図である。
【図７】本実施の形態のコンピュータシステムにおいてサーバがスローダウンしたときの動作及び利用フラグの遷移を示した図である。
【図８】本実施の形態のコンピュータシステムにおいてサーバがスローダウンしたときの動作及び利用フラグの遷移を示した図である。
【図９】本実施の形態のコンピュータシステムにおいてサーバがスローダウンしたときの動作及び利用フラグの遷移を示した図である。
【図１０】本実施の形態におけるチャネルの切断を検知した場合のチャネル障害時接続排除機能について示した図である。
【図１１】本実施の形態におけるサーバの計画停止を行う場合のチャネル障害時接続排除機能について示した図である。
【図１２】本実施の形態におけるタイムアウト時接続排除機能及びサスペンドフラグについて示した図である。
【図１３】本実施の形態におけるゲートウェイが接続オブジェクトプールを初期化する際の動作を示したフローチャートである。
【図１４】本実施の形態におけるゲートウェイが接続オブジェクトを貸し出す際の動作を示したフローチャートである。
【図１５】本実施の形態におけるゲートウェイが接続オブジェクトの返却を受け付ける際の動作を示したフローチャートである。
【図１６】本発明の実施の形態を適用可能なコンピュータのハードウェア構成例を示した図である。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
［前提となるシステム構成］
図１は、本実施の形態の前提となるコンピュータシステムの構成を示した図である。
図示するように、このコンピュータシステムは、端末装置１０１，…，１０Ｋと、ゲートウェイ２０と、サーバ３０１，３０２，３０３とを含む。
端末装置１０１，…，１０Ｋは、サーバ３０１，３０２，３０３でのトランザクション処理を要求するコンピュータ装置である。本実施の形態では、処理の要求を行う要求装置の一例として、端末装置１０を設けている。
ゲートウェイ２０は、サーバ３０１，３０２，３０３でのトランザクション処理を端末装置１０１，…，１０Ｋから各種プロトコルで利用できるように、端末装置１０１，…，１０Ｋからのトランザクション処理の要求をサーバ３０１，３０２，３０３に振り分けるようにしたコンピュータ装置であり、端末装置１０１，…，１０Ｋからのトランザクション処理の要求を処理する処理スレッド２１１，…，２１６が動作する。本実施の形態では、処理の要求を振り分ける振り分け装置の一例として、ゲートウェイ２０を設けている。
サーバ３０１，３０２，３０３は、これらが協働して１つのサーバを実現するクラスタ環境でトランザクション処理を行うコンピュータ装置であり、それぞれ、トランザクション処理を行うトランザクション処理部３１１，３１２，３１３を含む。本実施の形態では、複数の処理システムの一例として、サーバ３０１，３０２，３０３を設けている。
【００１６】
また、ゲートウェイ２０と、サーバ３０１，３０２，３０３とが、メッセージキューイングモデルを用いた非同期通信によりメッセージを転送するメッセージングミドルウェアで結合されるように、ゲートウェイ２０は、メッセージングミドルウェアのシステムプロセス群であるキューマネージャ２２を含み、サーバ３０１，３０２，３０３は、それぞれ、メッセージングミドルウェアのシステムプロセス群であるキューマネージャ３２１，３２２，３２３を含む。ここで、このようなメッセージングミドルウェアとしては、ＩＢＭ社製の「ＷｅｂＳｐｈｅｒｅ  ＭＱ」が例示される（「ＷｅｂＳｐｈｅｒｅ」は、インターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である）。
【００１７】
尚、図では、端末装置１０１，…，１０Ｋを示したが、これらを区別する必要がない場合は、端末装置１０と称する。端末装置１０はＫ個設けたが、何個設けてもよい。また、図では、処理スレッド２１１，…，２１６を示したが、これらを区別する必要がない場合は、処理スレッド２１と称する。処理スレッド２１は６個動作するようにしたが、何個動作するようにしてもよい。更に、図では、サーバ３０１，３０２，３０３、トランザクション処理部３１１，３１２，３１３、キューマネージャ３２１，３２２，３２３を示したが、これらを区別する必要がない場合は、サーバ３０、トランザクション処理部３１、キューマネージャ３２と称する。サーバ３０、トランザクション処理部３１、キューマネージャ３２は３個設けたが、何個設けてもよい。
【００１８】
例えば、銀行のシステムで、端末装置１０をＡＴＭ（Automated Teller Machine）とし、ゲートウェイ２０をハブとし、ＡＴＭとハブとをＳＯＡＰ（Simple Object Access Protocol）で接続し、ハブとトランザクション処理部３１とをメッセージングミドルウェアで結合したものは、このシステム構成の一例である。
【００１９】
［正常時の処理］
図２は、図１のシステム構成における正常時の処理を示した図である。
図示するように、端末装置１０がトランザクション処理要求をゲートウェイ２０に送信し、ゲートウェイ２０がこの要求をメッセージングミドルウェアのメッセージとしてサーバ３０に送信する段階で、ラウンドロビンで要求を振り分ける方法が一般的である。ＳＯＡＰ通信とメッセージングミドルウェアによる非同期通信とを組み合わせて要求応答型の処理を行う場合、ゲートウェイ２０では、端末装置１０からＳＯＡＰによる要求を受け取った処理スレッド２１が、キューマネージャ２２を介してサーバ３０に要求を送信し、サーバ３０からキューマネージャ２２を介して応答を受け取った処理スレッド２１が、端末装置１０にＳＯＡＰによる応答を返す、という流れになる。
【００２０】
［スローダウン時のストームドレイン発生］
図３は、図１のシステム構成においてサーバ３０がスローダウンしてストームドレインが発生するときの様子を示した図である。
図示するように、クラスタを構成するサーバ３０１，３０２，３０３のうち、サーバ３０１がスローダウンしたとする。すると、サーバ３０１に振り分けられた要求に対する応答が遅延するため、ゲートウェイ２０上でサーバ３０１と通信している処理スレッド２１１，２１４が占有されたままになる。この状態で、端末装置１０が新規の要求を送り続けると、ラウンドロビンでスローダウンしているサーバ３０１に要求が振り分けられるたびに、１つの処理スレッド２１が占有されたままになる。例えば、図では、処理スレッド２１２，２１３は、それぞれ、健全なサーバ３０２，３０３と通信しているので、応答が返って来ることにより占有は解放される。ところが、処理スレッド２１２が一旦サーバ３０１と通信したとすると、応答が返って来ないので、処理スレッド２１２も占有されたままになってしまう。そして、やがて、ゲートウェイ２０の全ての処理スレッド２１が占有されることになる。その結果、健全な状態のサーバ３０があるにも関わらず、新規の要求を受け付けられずにシステムが全面停止する現象、つまり、ストームドレイン（雨どいが詰まって溢れる意）が発生する。
【００２１】
［ストームドレインを起こす条件］
ここで、ストームドレインが起きる条件について考える。
ストームドレインは、複数のサーバ３０をクラスタメンバーとするクラスタ環境で大量のトランザクション処理を行っている場合において、１つのサーバ３０がスローダウンした時又は１つのサーバ３０に障害が発生した時に起きる。
例えば、銀行システムで毎秒６００件のＡＴＭ処理を行っており、正常時には１件の処理がゲートウェイ２０からみて０．２秒程度で完了するとする。この場合、ゲートウェイ２０上で必要な平均の処理スレッド２１の数は、１２０（＝６００×０．２）であり、十分に余裕を見ても、１２００程度の処理スレッド２１をゲートウェイ２０に用意すればよいはずである。
この条件で、ゲートウェイ２０に１２００の処理スレッド２１を用意し、３つのサーバ３０を含むクラスタ環境で処理する場合、１つのサーバ３０がスローダウンすると、毎秒６００件のうち、１／３の毎秒２００件はスローダウンしたサーバ３０に割り当てられ続ける。このため、スローダウンが６秒継続しただけで、１２００（＝２００×６）の処理スレッド２１が占有されて、ＡＴＭからの新規の要求を受け付けられる処理スレッド２１がなくなり、ストームドレインが起こる。
つまり、ＳＯＡＰによる同期通信と、ラウンドロビンでメッセージを振り分けるメッセージングミドルウェアによる非同期通信とを接続した場合、「トランザクションレート／ クラスタメンバー数×スローダウン時間＞ゲートウェイの処理スレッド数」という条件が成り立てば、ストームドレインは発生する。これは、大量のトランザクション処理では、容易に成り立ち得る条件である。
【００２２】
更に、サーバ３０が障害を起こして停止しつつある場合において、障害を検知してクラスタからサーバ３０を切り離すのには、通常、一定時間を要する。６秒で障害を検知するのは極めて難しいので、１つのサーバ３０に障害が発生すると、そのサーバ３０が切り離されるまでの間にストームドレインの条件が成立してしまい、システムが全面停止となる可能性がある。
ストームドレインは、大量のトランザクション処理を行うシステムで、同期処理とメッセージングミドルウェアによる非同期処理とを結合した場合に、容易に起こりうる問題であり、銀行システム等の高信頼性を要求されるシステムでは致命的な欠陥となる。
【００２３】
［本実施の形態によるストームドレインの防止］
そこで、本実施の形態では、伝送先固定接続プール機能と、この機能を補うためのチャネル障害時接続排除機能及びタイムアウト時接続排除機能とにより、この問題を解決する。
まず、伝送先固定接続プール機能について説明する。伝送先固定接続プール機能では、伝送先のサーバ３０を固定した接続をプールに格納してこれを使い回すことにより、伝送先のサーバ３０がスローダウンした場合にそのサーバ３０への接続がプールに戻されなくなることを利用して、効果的にストームドレインを防止する。
具体的には、ゲートウェイ２０上で接続をプールに格納する段階で接続ごとに伝送先のサーバ３０を決めておく。これにより、プールには、伝送先がそれぞれ異なるサーバ３０に固定された複数の接続が格納されることになる。この状態で、ゲートウェイ２０は、サーバ３０に要求を伝送する時点で、プールから接続を獲得し、固定された伝送先のサーバ３０に要求を送信し、応答を待つ。
その際、１つのサーバ３０がスローダウンすると、スローダウンしたサーバ３０に振り分けられた要求に対する応答が遅延し、接続が使用されたままの状態になり、接続はプールに戻されない。この場合、接続は再使用されない。一方、プールには、スローダウンしていないサーバ３０に対する接続のみが戻される。そして、この接続は再使用される。これにより、新規の要求はスローダウンしていないサーバ３０に伝送されることになり、ストームドレインを回避することができる。
【００２４】
上述した、銀行システムにおいて、３つのサーバ３０を含むクラスタ環境で毎秒６００件のＡＴＭ処理を行っており、正常時には１件の処理にゲートウェイ２０からみて０．２秒程度要するとした例では、正常時には平均して１２０（＝６００×０．２）の接続が使用される。
そこで、５０％の余裕を見て１８０の接続をプールに格納することにする。すると、１つのサーバ３０については、６０の接続がプールに格納されている状態になる。
この状態で、１つのサーバ３０のスローダウンが発生すると、このサーバ３０を伝送先とした６０の接続は使用中のままとなり、プールに返されなくなるが、残りの１２０の接続は正常なサーバ３０を伝送先とするので、プールを経由して繰り返し使用される。これにより、正常なサーバ３０だけを使用した処理を継続できる。
尚、この場合も、スローダウン発生時は６０のトランザクションが障害となるが、上述したように、６秒のうちに１２００のトランザクションが障害となり、更にシステムが全面停止になることに比べると、優れたストームドレイン防止策と言える。
また、サーバ３０のスローダウン以外に、サーバ３０が障害発生を直ちに通知できない状態でダウンした場合にも、ストームドレインは起こる。本実施の形態では、このような場合も同様に最小限の影響でダウンしたシステムを切り離すことを可能とする。
【００２５】
［本実施の形態におけるゲートウェイの構成］
図４は、本実施の形態におけるゲートウェイ２０の詳細な構成を示したブロック図である。
図示するように、ゲートウェイ２０は、処理スレッド２１１，…，２１Ｙと、キューマネージャ２２と、接続オブジェクト管理部２３とを含む。
処理スレッド２１１，…，２１Ｙは、上述した通り、図示しない端末装置１０からの処理要求に基づく処理を行う処理部の一例としてのスレッドである。
【００２６】
具体的には、処理スレッド２１１は、端末装置１０からの処理要求を受信する要求受信部４１１と、要求受信部４１１が要求を受信すると接続オブジェクト管理部２３に対して接続オブジェクト６１の貸し出しを要求する接続オブジェクト貸し出し要求部４２１と、接続オブジェクト管理部２３から貸し出された接続オブジェクト６１に基づきキューマネージャ２２を介して処理要求を図示しないサーバ３０１，…，３０Ｎの何れかに送信する要求送信部４３１とを含む。
また、処理スレッド２１１は、図示しないサーバ３０１，…，３０Ｎの何れかからキューマネージャ２２を介して処理要求に対する応答を受信する応答受信部４４１と、応答受信部４４１が応答を受信すると接続オブジェクト管理部２３に対して接続オブジェクト６１を返却する接続オブジェクト返却部４５１と、端末装置１０に応答を送信する応答送信部４６１とを含む。
【００２７】
尚、処理スレッド２１２，…，２１Ｙも同様の構成を有しているが、図では省略している。
また、上記では、処理スレッド２１１が動作することにより実現される処理部として、要求受信部４１１、接続オブジェクト貸し出し要求部４２１、要求送信部４３１、応答受信部４４１、接続オブジェクト返却部４５１、応答送信部４６１を示したが、どの処理スレッド２１が動作することにより実現される処理であるかを明示しない場合には、要求受信部４１、接続オブジェクト貸し出し要求部４２、要求送信部４３、接続オブジェクト返却部４５、応答送信部４６と表記するものとする。
【００２８】
尚、これらの機能部は、ソフトウェアとハードウェア資源とが協働することにより実現される。具体的には、ＣＰＵ９０ａ（図１６参照）が、処理スレッド２１を動作させるためのプログラムを例えば磁気ディスク装置９０ｇ（図１６参照）からメインメモリ９０ｃ（図１６参照）に読み込んで実行することにより、要求受信部４１、接続オブジェクト貸し出し要求部４２、要求送信部４３、応答受信部４４、接続オブジェクト返却部４５、応答送信部４６は実現される。
【００２９】
キューマネージャ２２は、上述した通り、メッセージングミドルウェアのシステムプロセス群であり、主として、サーバ３０１，…，３０Ｎの間でラウンドロビンにより負荷分散を行う機能と、資源を管理する機能とを提供する。具体的には、キューマネージャ２２は、前者の機能のために、図示しないが、転送するメッセージを一時的に保持するための転送キューを含む。また、後者の機能のために、資源と接続先との対応を管理する資源／接続先テーブルを記憶する資源／接続先テーブル記憶部５１を含む。この資源／接続先テーブルの内容については後述する。
【００３０】
接続オブジェクト管理部２３は、キューマネージャ２２による接続の負荷を軽減するために、事前に設定した接続先の情報を同一プロセス内のスレッドで共用する機能を提供する。この場合、接続先としては、ローカルの接続先及びリモートの接続先の何れも選択可能であり共存可能である。また、接続先はキューマネージャ３２を単位として設定される。
【００３１】
具体的には、接続オブジェクト管理部２３は、キューマネージャ３２１，…，３２Ｎの何れかに接続する際に使用する接続オブジェクト６１１，…，６１Ｘ、及び、接続オブジェクト６１１，…，６１Ｘを管理するための接続オブジェクト管理テーブル６２を格納する接続オブジェクトプール６３を含む。このうち、接続オブジェクト管理テーブル６２の内容については後述する。ここで、接続オブジェクト６１１，…，６１Ｘは、各処理システムに接続するための少なくとも１つの接続情報の一例であり、接続オブジェクトプール６３は、少なくとも１つの接続情報を記憶する記憶部の一例である。
また、接続オブジェクト管理部２３は、接続オブジェクトプール６３に最大限記憶可能な接続オブジェクト６１の数である最大オブジェクト数、及び、接続オブジェクトプール６３に最低限記憶すべき接続オブジェクト６１の数である最小オブジェクト数を記憶する接続オブジェクト数記憶部６４を含む。
更に、接続オブジェクト管理部２３は、キューマネージャ２２が保持する資源／接続先テーブルを参照して、まずは、接続オブジェクト数記憶部６４が記憶する最小オブジェクト数の接続オブジェクト６１を生成し、必要があれば、接続オブジェクト数記憶部６４が記憶する最大オブジェクト数を限度として接続オブジェクト６１を追加で生成する接続オブジェクト生成部６５を含む。ここで、接続オブジェクト生成部６５の接続オブジェクト６１を追加で生成する機能は、少なくとも１つの接続情報を記憶部に追加する追加部の一例である。
尚、接続オブジェクト生成部６５は、接続オブジェクト６１に対する接続先を決定するが、その方法には、クラスタキューのオープン時に決定する方法と、クラスタキューへの書き込み時に決定する方法とがある。前者は、クラスタキューのオープン時に接続先を固定し、クラスタキューにメッセージを書き込むことにより毎回同じ接続先へメッセージを送信した後、クラスタキューをクローズする、という方法である。後者は、クラスタキューのオープン時には接続先は未定にしておき、クラスタキューにメッセージを書き込む際に毎回異なる接続先を決定してその接続先へメッセージを送信した後、クラスタキューをクローズする、という方法である。接続オブジェクト生成部６５は、このうち、前者の方法を用いて、接続オブジェクト６１に対する接続先を決定する。
【００３２】
更に、接続オブジェクト管理部２３は、接続オブジェクト貸し出し要求部４２の要求に応じて接続オブジェクト６１を貸し出す接続オブジェクト貸し出し部６６と、接続オブジェクト返却部４５による接続オブジェクト６１の返却を受け付ける接続オブジェクト返却受付部６７とを含む。ここで、接続オブジェクト貸し出し部６６は、接続オブジェクト６１を貸し出す際に、その接続オブジェクト６１を貸し出した旨の情報を接続オブジェクト管理テーブル６２に書き込む（後述する利用フラグを「ＯＮ」に設定する）。この意味で、接続オブジェクト貸し出し部６６は、一の接続情報が一の処理部により使用されかつ他の処理部により使用されない状態を設定する設定部の一例である。また、接続オブジェクト返却受付部６７は、接続オブジェクト６１の返却を受け付けた際に、その接続オブジェクト６１が返却された旨の情報を接続オブジェクト管理テーブル６２に書き込む（後述する利用フラグを「ＯＦＦ」に設定する）。この意味で、接続オブジェクト返却受付部６７は、一の接続情報が一の処理部により使用されかつ他の処理部により使用されない状態を解除する解除部の一例である。
【００３３】
更にまた、接続オブジェクト管理部２３は、キューマネージャ２２とキューマネージャ３２１，…，３２Ｎとの間のチャネルの障害を検知するチャネル障害検知部６８と、このチャネルの障害からの復帰を検知するチャネル復帰検知部６９とを含む。ここで、チャネル障害検知部６８は、チャネルの障害を検知した際に、そのチャネルに対応する接続オブジェクト６１が使用できない旨の情報を接続オブジェクト管理テーブル６２に書き込む（後述するサスペンドフラグを「ＯＮ」に設定する）。この意味で、チャネル障害検知部６８は、全ての接続情報が複数の処理部の何れによっても使用されない状態を設定する設定部の一例である。また、チャネル復帰検知部６９は、チャネルの障害からの復帰を検知した際に、そのチャネルに対応する接続オブジェクト６１が使用できる旨の情報を接続オブジェクト管理テーブル６２に書き込む（後述するサスペンドフラグを「ＯＦＦ」に設定する）。この意味で、チャネル復帰検知部６９は、全ての接続情報が複数の処理部の何れによっても使用されない状態を解除する解除部の一例である。
【００３４】
尚、これらの機能部は、ソフトウェアとハードウェア資源とが協働することにより実現される。具体的には、ＣＰＵ９０ａ（図１６参照）が、接続オブジェクト生成部６５、接続オブジェクト貸し出し部６６、接続オブジェクト返却受付部６７、チャネル障害検知部６８、チャネル復帰検知部６９を実現するプログラムを例えば磁気ディスク装置９０ｇ（図１６参照）からメインメモリ９０ｃ（図１６参照）に読み込んで実行することにより、これらの機能部は実現される。また、接続オブジェクトプール６３、接続オブジェクト数記憶部６４は、例えば磁気ディスク装置９０ｇ（図１６参照）により実現される。
【００３５】
ここで、資源／接続先テーブル記憶部５１に記憶された資源／接続先テーブルの内容について具体的に説明する。
図５は、資源／接続先テーブル内の情報の一例を示した図である。
図示するように、資源／接続先テーブルでは資源名と接続先名とが対応付けられている。
資源名は、キューマネージャ２２が管理する資源の名称である。ここでは、資源をクラスタキューとし、全てのエントリに同じ資源名、つまり、クラスタキュー名「ＣＬＱ１」を登録している。尚、ここで、クラスタキューとは、キューマネージャ３２に含まれ、キューマネージャ２２の転送キューから転送されたメッセージを一時的に保持するキューである。
接続先名は、キューマネージャ２２が管理する接続先の名称である。ここでは、接続先をキューマネージャ３２とし、同じキューマネージャ名「ＣＬＱ１」に対して、エントリごとに異なる接続先名、つまり、キューマネージャ名「Ｍ１」、「Ｍ２」、「Ｍ３」を登録している。
【００３６】
本実施の形態では、メッセージングミドルウェアが、同じクラスタキュー名に対応付けられた複数のキューマネージャ３２を論理的なグループとみなし、ラウンドロビンによる負荷分散を行う対象とする機能を有するので、キューマネージャ名「Ｍ１」、「Ｍ２」、「Ｍ３」のキューマネージャ３２がラウンドロビンによる負荷分散の対象になるように、このような登録を行っている。
【００３７】
次に、接続オブジェクトプール６３に記憶された接続オブジェクト管理テーブル６２の内容について具体的に説明する。
図６は、接続オブジェクト管理テーブル６２内の情報の一例を示した図である。
図示するように、接続オブジェクト管理テーブル６２では、接続オブジェクト番号と、利用フラグと、サスペンドフラグと、チャネル名とが対応付けられている。
接続オブジェクト番号は、接続オブジェクト６１１，…，６１Ｘを識別する番号である。
利用フラグは、接続オブジェクト６１１，…，６１Ｘが何れかの処理スレッド２１によって利用中であるかどうかを示すフラグである。何れかの処理スレッド２１によって利用中であれば「ＯＮ」が設定され、何れかの処理スレッド２１によって利用中でなければ「ＯＦＦ」が設定される。
サスペンドフラグは、接続オブジェクト６１１，…，６１Ｘが何らかの理由により利用できない状態になっているかどうかを示すフラグである。何らかの理由により利用できない状態になっていれば「ＯＮ」が設定され、何らかの理由により利用できない状態になっていなければ「ＯＦＦ」が設定される。
チャネル名は、キューマネージャ２２と接続オブジェクト６１１，…，６１Ｘの接続先であるキューマネージャ３２１，…，３２Ｎとの間のチャネルの名称である。
【００３８】
［伝送先固定接続プール機能の詳細］
図７〜図９を参照して、伝送先固定接続プール機能の詳細な動作について説明する。尚、ここでは、ゲートウェイ２０上で処理スレッド２１１，…，２１６が動作し、これらの処理スレッド２１は、１回のラウンドで、図示しない端末装置１０から３つの処理要求を受け付けるものとする。また、処理スレッド２１１，…，２１６が使用する接続オブジェクト６１としては、キューマネージャ３２１を接続先とする接続オブジェクト６１１，６１４、キューマネージャ３２２を接続先とする接続オブジェクト６１２，６１５、キューマネージャ３２３を接続先とする接続オブジェクト６１３，６１６が用意されているものとし、接続オブジェクト６１１，６１２、６１３，６１４，６１５，６１６の番号は、それぞれ、１，２，３，４，５，６であるとする。
【００３９】
図７は、サーバ３０３がスローダウンしたときの１ラウンド目における動作及び利用フラグの遷移を示した図である。
（ａ）では、処理スレッド２１１，２１２，２１３が、処理要求を受け付け、それぞれ、接続オブジェクト６１１，６１２，６１３を使用し、キューマネージャ３２１，３２２，３２３を介してトランザクション処理部３１１，３１２，３１３に処理要求を送信している。
（ｂ）に、このときの利用フラグの内容を示す。新規の処理要求に対して、未使用の接続オブジェクト６１が貸し出されるので、接続オブジェクト６１１，６１２，６１３に対する利用フラグが「ＯＮ」となっている。
【００４０】
また、（ａ）では、トランザクション処理部３１１が処理を完了し、キューマネージャ３２１を介して応答を処理スレッド２１１に返信し、トランザクション処理部３１２が処理を完了し、キューマネージャ３２２を介して応答を処理スレッド２１２に返信している。一方で、トランザクション処理部３１３はスローダウンしているので応答を処理スレッド２１３に返信できないでいる。
（ｃ）に、このときの利用フラグの内容を示す。キューマネージャ３２１，３２２から応答が返され、接続オブジェクト６１１，６１２は返却されるので、接続オブジェクト６１１，６１２に対する利用フラグは「ＯＦＦ」に戻されている。一方で、キューマネージャ３２３から応答が返されず、接続オブジェクト６１３は返却できないので、接続オブジェクト６１３に対する利用フラグは「ＯＦＦ」に戻されずに「ＯＮ」のままになっている。
【００４１】
図８は、サーバ３０３がスローダウンしたときの２ラウンド目における動作及び利用フラグの遷移を示した図である。
（ａ）では、処理スレッド２１４，２１５，２１６が、処理要求を受け付け、それぞれ、接続オブジェクト６１４，６１５，６１６を使用し、キューマネージャ３２１，３２２，３２３を介してトランザクション処理部３１１，３１２，３１３に処理要求を送信している。
（ｂ）に、このときの利用フラグの内容を示す。新規の処理要求に対して、未使用の接続オブジェクト６１が貸し出されるので、接続オブジェクト６１４，６１５，６１６に対する利用フラグが「ＯＮ」となっている。
【００４２】
また、（ａ）では、トランザクション処理部３１１が処理を完了し、キューマネージャ３２１を介して応答を処理スレッド２１４に返信し、トランザクション処理部３１２が処理を完了し、キューマネージャ３２２を介して応答を処理スレッド２１５に返信している。一方で、トランザクション処理部３１３はスローダウンしているので応答を処理スレッド２１６に返信できないでいる。
（ｃ）に、このときの利用フラグの内容を示す。キューマネージャ３２１，３２２から応答が返され、接続オブジェクト６１４，６１５は返却されるので、接続オブジェクト６１４，６１５に対する利用フラグは「ＯＦＦ」に戻されている。一方で、キューマネージャ３２３から応答が返されず、接続オブジェクト６１６は返却できないので、接続オブジェクト６１６に対する利用フラグは「ＯＦＦ」に戻されずに「ＯＮ」のままになっている。
【００４３】
図９は、サーバ３０３がスローダウンしたときの３ラウンド目における動作及び利用フラグの遷移を示した図である。
（ａ）では、処理スレッド２１３が応答待ち状態のため、処理スレッド２１１，２１２，２１４が、処理要求を受け付けている。そして、接続オブジェクト６１３，６１６に対する利用フラグが「ＯＮ」のままになっているため、処理スレッド２１１，２１２，２１４は、それぞれ、接続オブジェクト６１１，６１２，６１４を使用し、キューマネージャ３２１，３２２，３２１を介してトランザクション処理部３１１，３１２，３１１に処理要求を送信している。
（ｂ）に、このときの利用フラグの内容を示す。スローダウンしたサーバ３０３を接続先とする接続オブジェクト６１３，６１６以外の接続オブジェクト６１１，６１２，６１４が貸し出されるので、接続オブジェクト６１１，６１２，６１４に対する利用フラグが「ＯＮ」となる。
これにより、処理スレッド２１１，…，２１６の全面停止が回避できる。
【００４４】
［チャネル障害時接続排除機能］
この機能は、クラスタ環境で、チャネルの障害（接続先のサーバ３０のダウンを含む）を検知すると、このチャネルに接続されたサーバ３０を振り分けの対象から外す機能である。例えば、チャネルの切断を検知すると、そのチャネルに対応する接続オブジェクト６１の貸し出しを停止することで、スレッドの停止を最小化する。
図１０は、この場合のチャネル障害時接続排除機能について模式的に示した図である。
まず、ネットワークやサーバ３０に障害が発生すると、転送キュー２４とクラスタキュー３４とを接続するチャネルが切断される。
すると、ゲートウェイ２０では、プール管理スレッド２５（図４のチャネル障害検知部６８に対応）が、チャネルの切断を検知した旨の通知を受け、接続オブジェクト管理テーブル６２におけるそのチャネルのチャネル名に対応するサスペンドフラグを「ＯＮ」に設定する。
これにより、接続オブジェクト６１の貸し出しは、サスペンドフラグが「ＯＮ」になっていない接続オブジェクト６１のみを対象として行われるようになる。
【００４５】
その後、チャネルの障害からの復帰（接続先のサーバ３０の復帰を含む）が行われたとする。
すると、ゲートウェイ２０では、プール管理スレッド２５（図４のチャネル復帰検知部６９に対応）が、チャネルの障害からの復帰を検知した旨の通知を受け、接続オブジェクト管理テーブル６２におけるそのチャネルのチャネル名に対応するサスペンドフラグを「ＯＦＦ」に設定する。
これにより、サスペンドフラグが「ＯＦＦ」になった接続オブジェクト６１が再び貸し出し対象となる。
【００４６】
また、この機能は、クラスタ環境で、サーバ３０の計画停止（閉塞）を行う際にも利用可能である。
図１１は、この場合のチャネル障害時接続排除機能について模式的に示した図である。
まず、サーバ３０側で、閉塞を行う際、コマンド３３により、クラスタキュー３４へのメッセージの書き込みに関する属性が「無効」に変更される。この属性の変更は、クラスタキュー３４からゲートウェイ２０へ通知される。
すると、ゲートウェイ２０では、プール管理スレッド２５（図４のチャネル障害検知部６８に対応）が、クラスタキュー３４へのメッセージの書き込みが無効化された旨の通知を受け、接続オブジェクト管理テーブル６２におけるそのサーバ３０を接続先とする接続オブジェクト６１に対応するサスペンドフラグを「ＯＮ」に設定する。
これにより、接続オブジェクト６１の貸し出しは、サスペンドフラグが「ＯＮ」になっていない接続オブジェクト６１のみを対象として行われるようになる。
【００４７】
その後、サーバ３０の閉塞が終了すると、クラスタキュー３４へのメッセージの書き込みに関する属性が「有効」に変更される。この属性の変更は、クラスタキュー３４からゲートウェイ２０へ通知される。
すると、ゲートウェイ２０では、プール管理スレッド２５（図４のチャネル復帰検知部６９に対応）が、クラスタキュー３４へのメッセージの書き込みが有効化された旨の通知を受け、接続オブジェクト管理テーブル６２におけるそのサーバ３０を接続先とする接続オブジェクト６１に対応するサスペンドフラグを「ＯＦＦ」に設定する。
これにより、サスペンドフラグが「ＯＦＦ」になった接続オブジェクト６１が再び貸し出し対象となる。
【００４８】
［タイムアウト時接続排除機能］
この機能は、処理スレッド２１でタイムアウトが発生すると、この処理スレッド２１の接続先であったサーバ３０を振り分けの対象から外す機能である。
図１２は、タイムアウト時接続排除機能及びサスペンドフラグについて示した図である。
（ａ）に示すように、処理スレッド２１３，２１６が接続オブジェクト６１３，６１６を使用してサーバ３０３に接続している際に、サーバ３０３がスローダウンし、処理スレッド２１３，２１６でタイムアウトが発生したとする。すると、処理スレッド２１３，２１６は、接続オブジェクト６１３，６１６を返却する際に、タイムアウトが発生したことを示す情報も伝える。
これにより、（ｂ）に示すように、タイムアウトが発生したことを示す情報が伝えられた接続オブジェクト６１３，６１６に対応するサスペンドフラグは「ＯＮ」に設定され、サスペンドフラグが「ＯＮ」になった接続オブジェクト６１３，６１６は貸し出し対象から外される。このようにタイムアウトを発生させるようなサーバ３０を接続先とする接続オブジェクト６１を貸し出し対象から外すことで、スローダウンの影響を次の処理から排除可能になる。
【００４９】
［本実施の形態におけるゲートウェイの動作］
図１３は、本実施の形態におけるゲートウェイ２０が接続オブジェクトプール６３を初期化する際の動作を示したフローチャートである。
接続オブジェクトプール６３の初期化が指示されると、ゲートウェイ２０では、まず、接続オブジェクト生成部６５が、着目している接続オブジェクト６１を表す変数ｉに１を代入する（ステップ２０１）。
次に、接続オブジェクト生成部６５は、変数ｉに格納された値が、接続オブジェクト数記憶部６４に記憶された最小オブジェクト数以下であるかどうか判定する（ステップ２０２）。
【００５０】
その結果、変数ｉに格納された値が最小オブジェクト数以下であると判定すれば、接続オブジェクト生成部６５は、キューマネージャ２２から接続先に関する情報を取得する（ステップ２０３）。具体的には、接続オブジェクト生成部６５は、クラスタキュー名を指定し、上述したクラスタキューのオープン時に接続先を決定する方法を指定して、接続先に関する情報の取得をキューマネージャ２２に指示する。これにより、キューマネージャ２２は、資源／接続先テーブル記憶部５１に記憶された資源／接続先テーブルを参照し、指定されたクラスタキュー名に対応付けられた接続先を、ラウンドロビンで１つ選択し、この接続先に関する情報を接続オブジェクト生成部６５に伝える。
次いで、接続オブジェクト生成部６５は、ここで選択された接続先に関する情報が設定された接続オブジェクト６１を生成する（ステップ２０４）。そして、生成した接続オブジェクト６１に関する情報を接続オブジェクト管理テーブル６２に登録する（ステップ２０５）。具体的には、接続オブジェクト番号として、１つ前のエントリのオブジェクト番号の次の番号を登録する。また、利用フラグとして、接続オブジェクト６１が処理スレッド２１によって利用されていないことを示す「ＯＦＦ」を登録し、サスペンドフラグとして、接続オブジェクト６１が利用できない状態になっていないことを示す「ＯＦＦ」を登録する。更に、キューマネージャ２２から得られるチャネル名も登録する。これにより、接続オブジェクト生成部６５は、接続オブジェクト６１の総数を示す変数ｓに１を加算する（ステップ２０６）。
【００５１】
その後、接続オブジェクト生成部６５は、変数ｉに１を加算し（ステップ２０７）、ステップ２０２以降の処理を繰り返す。
一方、ステップ２０２で変数ｉに格納された値が最小オブジェクト数を超えたと判定すれば、接続オブジェクト生成部６５は、処理を終了する。
【００５２】
図１４は、本実施の形態におけるゲートウェイ２０が接続オブジェクト６１を貸し出す際の動作を示したフローチャートである。尚、この動作の開始に先立ち、着目している接続オブジェクト６１を表す変数ｉには、接続オブジェクトプール６３を初期化した直後は０が格納されているが、それ以外は接続オブジェクト６１の前回の貸し出し時に格納されていた値がそのまま格納されているものとする。また、接続オブジェクト６１の総数を表す変数ｓには、図１３の処理の終了時に格納されていた値、又は、後述するステップ２３５でその値が変更された場合は変更後の値が格納されているものとする。
接続オブジェクト貸し出し要求部４２から接続オブジェクト６１の貸し出しが要求されると、まず、接続オブジェクト貸し出し部６６は、試行回数を表す変数ｔに０を代入する（ステップ２２１）。
また、接続オブジェクト貸し出し部６６は、変数ｔに１を加算し（ステップ２２２）、変数ｉに１を加算する（ステップ２２３）。
次に、接続オブジェクト貸し出し部６６は、変数ｔに格納された値が、変数ｓに格納されている接続オブジェクト６１の総数以下であるかどうかを判定する（ステップ２２４）。
【００５３】
ここで、変数ｔに格納された値が接続オブジェクト６１の総数以下であると判定された場合について説明する。
この場合、接続オブジェクト貸し出し部６６は、まず、変数ｉに格納された値が、変数ｓに格納されている接続オブジェクト６１の総数以下であるかどうかを判定する（ステップ２２５）。そして、変数ｉに格納された値が、変数ｓに格納されている接続オブジェクト６１の総数を超えていれば、変数ｉに１を代入し（ステップ２２６）、ステップ２２７へ進む。また、変数ｉに格納された値が、変数ｓに格納されている接続オブジェクト６１以下であれば、そのままステップ２２７へ進む。
【００５４】
次いで、接続オブジェクト貸し出し部６６は、変数ｉで表される接続オブジェクト６１に対する利用フラグが「ＯＦＦ」に設定されているかどうかを判定する（ステップ２２７）。
その結果、利用フラグが「ＯＦＦ」に設定されていなければ、つまり、「ＯＮ」に設定されていれば、その接続オブジェクト６１は貸し出し済みであり、新たに貸し出せないので、接続オブジェクト貸し出し部６６は、ステップ２２２以降の処理を繰り返す。
一方、利用フラグが「ＯＦＦ」に設定されていれば、その接続オブジェクト６１は貸し出し済みでないので、接続オブジェクト貸し出し部６６は、変数ｉで表される接続オブジェクト６１に対するサスペンドフラグが「ＯＦＦ」に設定されているかどうかを判定する（ステップ２２８）。
【００５５】
その結果、サスペンドフラグが「ＯＦＦ」に設定されていなければ、つまり、「ＯＮ」に設定されていれば、その接続オブジェクト６１は何らかの理由により貸し出しできない状態になっているので、接続オブジェクト貸し出し部６６は、ステップ２２２以降の処理を繰り返す。
【００５６】
一方、サスペンドフラグが「ＯＦＦ」に設定されていれば、その接続オブジェクト６１は貸し出しできない状態になっていないので、接続オブジェクト貸し出し部６６は、利用フラグを「ＯＮ」に設定し（ステップ２２９）、接続オブジェクト貸し出し要求部４２に対して、その接続オブジェクト６１の番号を戻り値として含む肯定的な応答「ＯＫ」を返す（ステップ２３０）。これにより、接続オブジェクト貸し出し要求部４２は、接続オブジェクト６１のコピーを接続オブジェクトプール６３から取り出すことができる。
【００５７】
また、変数ｔに格納された値が接続オブジェクト６１の総数を超えたと判定された場合について説明する。これは、その時点で用意されている接続オブジェクト６１を一通り探索しても利用可能な接続オブジェクト６１が見つからなかった場合であり、この場合は、最大オブジェクト数を限度として接続オブジェクト６１を追加することが考えられる。
即ち、接続オブジェクト貸し出し部６６は、まず、変数ｔに格納された値が、接続オブジェクト数記憶部６４に記憶された最大オブジェクト数より小さいかどうかを判定する（ステップ２３１）。
【００５８】
その結果、変数ｔに格納された値が最大オブジェクト数より小さいと判定されれば、接続オブジェクト生成部６５が、キューマネージャ２２から接続先に関する情報を取得する（ステップ２３２）。具体的には、接続オブジェクト生成部６５は、クラスタキュー名を指定し、上述したクラスタキューのオープン時に接続先を決定する方法を指定して、接続先に関する情報の取得をキューマネージャ２２に指示する。これにより、キューマネージャ２２は、資源／接続先テーブル記憶部５１に記憶された資源／接続先テーブルを参照し、指定されたクラスタキュー名に対応付けられた接続先を、ラウンドロビンで１つ選択し、この接続先に関する情報を接続オブジェクト生成部６５に伝える。
次いで、接続オブジェクト生成部６５は、ここで選択された接続先の情報が設定された接続オブジェクト６１を生成する（ステップ２３３）。そして、生成した接続オブジェクト６１に関する情報を接続オブジェクト管理テーブル６２に登録する（ステップ２３４）。具体的には、接続オブジェクト番号として、１つ前のエントリのオブジェクト番号の次の番号を登録する。また、利用フラグとして、接続オブジェクト６１を処理スレッド２１に貸し出すために「ＯＮ」を登録し、サスペンドフラグとして、接続オブジェクト６１が利用できない状態になっていないことを示す「ＯＦＦ」を登録する。更に、キューマネージャ２２から得られるチャネル名も登録する。これにより、接続オブジェクト生成部６５は、接続オブジェクト６１の総数を示す変数ｓに１を加算する（ステップ２３５）。
【００５９】
その後、接続オブジェクト生成部６５は、接続オブジェクト貸し出し要求部４２に対して、ここで追加した接続オブジェクト６１の番号を戻り値として含む肯定的な応答「ＯＫ」を返す（ステップ２３６）。これにより、接続オブジェクト貸し出し要求部４２は、接続オブジェクト６１のコピーを接続オブジェクトプール６３から取り出すことができる。
【００６０】
一方、ステップ２３１で変数ｔに格納された値が最大オブジェクト数以上であると判定すれば、接続オブジェクト生成部６５は、接続オブジェクト貸し出し要求部４２に対して、否定的な応答「ＮＧ」を返す（ステップ２３７）。
【００６１】
図１５は、本実施の形態におけるゲートウェイ２０が接続オブジェクト６１の返却を受け付ける際の動作を示したフローチャートである。
接続オブジェクト返却部４５から接続オブジェクト６１が返却されると、まず、接続オブジェクト返却受付部６７は、接続オブジェクト返却部４５から接続オブジェクト６１と共に受け取った情報に基づいて、処理スレッド２１における処理状況が正常であったかどうかを判定する（ステップ２４１）。ここで、処理状況が正常であるとは、処理スレッド２１における処理がタイムアウトにならずに終了したことを意味し、処理状況が異常であるとは、処理スレッド２１における処理がタイムアウトになったことを意味するものとする。
【００６２】
その結果、処理状況が正常であったと判定されれば、接続オブジェクト返却受付部６７は、接続オブジェクトプール６３に記憶された接続オブジェクト管理テーブル６２において、返却された接続オブジェクト６１に対するサスペンドフラグを「ＯＦＦ」に設定する（ステップ２４２）。
一方、処理状況が正常でなかった、つまり、処理状況が異常であったと判定されれば、接続オブジェクト返却受付部６７は、接続オブジェクトプール６３に記憶された接続オブジェクト管理テーブル６２において、返却された接続オブジェクト６１に対するサスペンドフラグを「ＯＮ」に設定する（ステップ２４３）。
【００６３】
その後、接続オブジェクト返却受付部６７は、接続オブジェクトプール６３に記憶された接続オブジェクト管理テーブル６２において、返却された接続オブジェクト６１に対する利用フラグを「ＯＦＦ」に戻し（ステップ２４４）、処理を終了する。
【００６４】
尚、本実施の形態では、接続オブジェクトプール６３に格納された接続オブジェクト６１を処理スレッド２１に貸し出す際には、接続オブジェクト６１をコピーして渡すようにし、接続オブジェクト６１が処理スレッド２１に貸し出されているかどうかは、接続オブジェクト管理テーブル６２の利用フラグに基づいて判断するようにした。しかしながら、接続オブジェクトプール６３に格納された接続オブジェクト６１を処理スレッド２１に貸し出す際には、接続オブジェクト６１を接続オブジェクトプール６３から切り取って渡すようにし、接続オブジェクト６１が処理スレッド２１に貸し出されているかどうかは、接続オブジェクト６１が接続オブジェクトプール６３に存在するかどうかに基づいて判断するようにしてもよい。但し、この場合は、処理スレッド２１が接続オブジェクト６１を返却する際には、切り取られた接続オブジェクト６１を接続オブジェクトプール６３に戻すことが必要となる。ここで、接続オブジェクト６１を接続オブジェクトプール６３から切り取って渡すことは、一の接続情報が一の処理部により使用されかつ他の処理部により使用されない状態を設定する設定部の一例であり、切り取られた接続オブジェクト６１を接続オブジェクトプール６３に戻すことは、一の接続情報が一の処理部により使用されかつ他の処理部により使用されない状態を解除する解除部の一例である。
【００６５】
このように、本実施の形態では、伝送先のサーバ３０を固定した接続オブジェクト６１を接続オブジェクトプール６３に用意しておき、接続オブジェクトプール６３から貸し出された接続オブジェクト６１に固定された伝送先のサーバ３０に処理要求を送信し、サーバ３０から応答が返されると、接続オブジェクト６１を接続オブジェクトプール６３に返却するようにした。これにより、スローダウンが発生しているサーバ３０を伝送先とする接続オブジェクト６１は返却されず、再使用されないので、サーバ３０のスローダウン時又はサーバ３０の障害の発生から検知までの間にストームドレインが起こる可能性を低下させることができるようになった。
【００６６】
また、本実施の形態では、１つのトランザクション処理部３１の負荷増大や処理性能の一時的な低下（ダンプの取得等）により、１つのサーバ３０の処理能力の余力が低下した場合、そのサーバ３０を伝送先とする接続オブジェクト６１が接続オブジェクトプール６３に戻され難くなり、概ね伝送先の処理能力の余力を反映した数の接続オブジェクト６１が接続オブジェクトプール６３に格納されることになる。これにより、サーバ３０の処理状況に応じた負荷分散が行われるようになる。
更に、本実施の形態では、既存の製品の接続プール機能の改良で実装可能であり、アプリケーションの変更が不要であるという利点もある。
【００６７】
最後に、本実施の形態を適用するのに好適なコンピュータのハードウェア構成について説明する。
図１６は、このようなコンピュータのハードウェア構成例を示した図である。図示するように、コンピュータは、演算手段であるＣＰＵ（Central Processing Unit）９０ａと、Ｍ／Ｂ（マザーボード）チップセット９０ｂを介してＣＰＵ９０ａに接続されたメインメモリ９０ｃと、同じくＭ／Ｂチップセット９０ｂを介してＣＰＵ９０ａに接続された表示機構９０ｄとを備える。また、Ｍ／Ｂチップセット９０ｂには、ブリッジ回路９０ｅを介して、ネットワークインターフェイス９０ｆと、磁気ディスク装置（ＨＤＤ）９０ｇと、音声機構９０ｈと、キーボード／マウス９０ｉと、フレキシブルディスクドライブ９０ｊとが接続されている。
【００６８】
尚、図１６において、各構成要素は、バスを介して接続される。例えば、ＣＰＵ９０ａとＭ／Ｂチップセット９０ｂの間や、Ｍ／Ｂチップセット９０ｂとメインメモリ９０ｃの間は、ＣＰＵバスを介して接続される。また、Ｍ／Ｂチップセット９０ｂと表示機構９０ｄとの間は、ＡＧＰ（Accelerated Graphics Port）を介して接続されてもよいが、表示機構９０ｄがＰＣＩ Ｅｘｐｒｅｓｓ対応のビデオカードを含む場合、Ｍ／Ｂチップセット９０ｂとこのビデオカードの間は、ＰＣＩ Ｅｘｐｒｅｓｓ（ＰＣＩｅ）バスを介して接続される。また、ブリッジ回路９０ｅと接続する場合、ネットワークインターフェイス９０ｆについては、例えば、ＰＣＩ Ｅｘｐｒｅｓｓを用いることができる。また、磁気ディスク装置９０ｇについては、例えば、シリアルＡＴＡ（AT Attachment）、パラレル転送のＡＴＡ、ＰＣＩ（Peripheral Components Interconnect）を用いることができる。更に、キーボード／マウス９０ｉ、及び、フレキシブルディスクドライブ９０ｊについては、ＵＳＢ（Universal Serial Bus）を用いることができる。
【００６９】
即ち、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム（装置又は機器）、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク−リード／ライト（ＣＤ−Ｒ／Ｗ）及びＤＶＤが含まれる。
【００７０】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【００７１】
１０…端末装置、２０…ゲートウェイ、２１…処理スレッド、２２，３２…キューマネージャ、２３…接続オブジェクト管理部、３０…サーバ、３１…トランザクション処理部、４１…要求受信部、４２…接続オブジェクト貸し出し要求部、４３…要求送信部、４４…応答受信部、４５…接続オブジェクト返却部、４６…応答送信部、５１…資源／接続先テーブル記憶部、６１…接続オブジェクト、６２…接続オブジェクト管理テーブル、６３…接続オブジェクトプール、６４…接続オブジェクト数記憶部、６５…接続オブジェクト生成部、６６…接続オブジェクト貸し出し部、６７…接続オブジェクト返却受付部、６８…チャネル障害検知部、６９…チャネル復帰検知部
【図１】
2014211744.tif 000003
【図２】
2014211744.tif 000004
【図３】
2014211744.tif 000005
【図４】
2014211744.tif 000006
【図５】
2014211744.tif 000007
【図６】
2014211744.tif 000008
【図７】
2014211744.tif 000009
【図８】
2014211744.tif 000010
【図９】
2014211744.tif 000011
【図１０】
2014211744.tif 000012
【図１１】
2014211744.tif 000013
【図１２】
2014211744.tif 000014
【図１３】
2014211744.tif 000015
【図１４】
2014211744.tif 000016
【図１５】
2014211744.tif 000017
【図１６】
2014211744.tif 000018