(57)【特許請求の範囲】
【請求項１】
サーバ上で動作するプログラムによって確立された該サーバとクライアントとの間のセッションを識別するセッション識別子と、該サーバを識別するサーバ識別子との対応関係情報を記憶する記憶部と、
振分け装置から受信したメッセージに含まれるセッション識別子が前記記憶部に記憶した前記対応関係情報に含まれているか否かを判別する判別部と、
受信した前記メッセージに含まれる前記セッション識別子が前記対応関係情報に含まれていないと前記判別部が判別した場合には、前記メッセージに含まれる前記セッション識別子が示すセッションを確立したプログラムが当該セッションを更新する頻度に応じて、受信した前記メッセージを前記サーバに転送する際の中継方式を選択する選択部と、
前記選択部が選択した中継方式を用いて、前記メッセージを転送する転送部と
を有することを特徴とする中継装置。 
【請求項２】
前記選択部は、受信した前記メッセージを前記サーバに転送する際の中継方式として、複数のサーバに対してメッセージの転送を行う複数の中継装置が記憶する対応関係情報を同期し、各中継装置が受信したメッセージを前記サーバに転送する中継方式、受信した前記メッセージに含まれるセッション識別子を含む対応関係情報を記憶する中継装置へ前記メッセージを転送し、転送先の中継装置がサーバにメッセージを転送する中継方式、受信した前記メッセージに含まれるセッション識別子を含む対応関係情報を記憶する中継装置に該セッション識別子と対応付けられたサーバを問合せ、問合せの結果として通知されるサーバにメッセージを転送する中継方式、および、問合せの結果として通知されたサーバにメッセージを転送するとともに、問合せの結果として通知されたサーバをキャッシュする中継方式のうちのいずれかの中継方式を選択することを特徴とする請求項１に記載の中継装置。 
【請求項３】
前記セッションが更新される頻度と、前記対応関係情報を同期する際に必要なリソース量と、前記メッセージを他の中継装置に転送する際に消費するリソース量と、前記サーバの問合せを行う際に消費するリソース量とを用いて、各中継方式を実行した際のスループットを算出する算出部を有し、
前記選択部は、前記算出部が算出したスループットが最も大きい中継方式を選択することを特徴とする請求項２に記載の中継装置。 
【請求項４】
前記プログラムがセッションを更新する頻度と、前記対応関係情報を同期する際に必要なリソース量と、前記メッセージを他の中継装置に転送する際に消費するリソース量と、前記サーバの問合せを行う際に消費するリソース量とをそれぞれ測定する測定部を有し、
前記算出部は、前記測定部が測定したリソース量を用いて、各中継方式を実行した際のスループットを算出することを特徴とする請求項３に記載の中継装置。 
【請求項５】
前記判別部は、前記転送部が転送したメッセージに対する応答を前記サーバから受信した場合には、当該応答に含まれるセッション識別子と応答元サーバとを対応付けた情報が前記対応関係情報に含まれているか否かを判別し、
前記選択部は、前記応答に含まれるセッション識別子と応答元のサーバとを対応付けた情報が前記対応関係情報に含まれていないと前記判別部が判別した場合は、当該セッション識別子が示すセッションを確立したプログラムに応じて、当該セッション識別子を含むメッセージを前記サーバに転送する中継方式を選択することを特徴とする請求項１から４のいずれか１つに記載の中継装置。 
【請求項６】
前記転送部は、前記応答に含まれるセッション識別子と応答元のサーバとを対応付けた情報が前記対応関係情報に含まれていると前記判別部が判別した場合には、当該応答の元となるメッセージを発行したクライアント、または、当該応答の元となるメッセージの転送元となる他の中継装置に、当該応答を転送することを特徴とする請求項５に記載の中継装置。 
【請求項７】
前記選択部は、前記セッション識別子を含むメッセージについて選択した中継方式と、当該セッション識別子が示すセッションを確立したプログラムとを対応付けた中継方式選択情報を生成し、
前記転送部は、前記セッション識別子が前記対応関係情報に含まれていないと前記判別部が判別した場合には、当該セッション識別子が示すセッションを確立したプログラムと対応付けられた中継方式を前記中継方式選択情報から識別し、識別した中継方式を用いて前記メッセージを転送することを特徴とする請求項１から６のいずれか１つに記載の中継装置。 
【請求項８】
クライアントにサービスを提供する複数のサーバと
クライアントが発行したメッセージを受信すると、受信したメッセージをいずれかのサーバに転送する複数の中継装置と、
クライアントが発行したメッセージを各中継装置に振分ける振分け装置と
を有する情報処理システムにおいて、
前記中継装置は、
前記サーバ上で動作するプログラムによって確立された該サーバとクライアントとの間のセッションを識別するセッション識別子と、該サーバを識別するサーバ識別子との対応関係情報を記憶する記憶部と、
振分け装置から受信したメッセージに含まれるセッション識別子が前記記憶部に記憶した前記対応関係情報に含まれているか否かを判別する判別部と、
受信した前記メッセージに含まれる前記セッション識別子が前記対応関係情報に含まれていないと前記判別部が判別した場合には、前記メッセージに含まれる前記セッション識別子が示すセッションを確立したプログラムが当該セッションを更新する頻度に応じて、受信した前記メッセージを前記サーバに転送する際の中継方式を選択する選択部と、
前記選択部が選択した中継方式を用いて、前記メッセージを転送する転送部と
を有することを特徴とする情報処理システム。 
【請求項９】
クライアントが発行するメッセージをサーバに転送する中継装置が有するコンピュータに、
サーバ上で動作するプログラムによって確立された該サーバとクライアントとの間のセッションを識別するセッション識別子と、該サーバを識別するサーバ識別子との対応関係情報を記憶する記憶装置が、振分け装置から受信したメッセージに含まれるセッション識別子を記憶しているか否かを判別し、
前記受信したメッセージに含まれる前記セッション識別子が前記記憶装置が記憶していないと判別した場合には、前記メッセージに含まれる前記セッション識別子が示すセッションを確立したプログラムが当該セッションを更新する頻度に応じて、受信した前記メッセージを前記サーバに転送する際の中継方式を選択し、
前記選択した中継方式を用いて、前記メッセージを転送する
処理を実行させることを特徴とする中継プログラム。 
【請求項１０】
クライアントが発行するメッセージをサーバに転送する中継装置が、
サーバ上で動作するプログラムによって確立された該サーバとクライアントとの間のセッションを識別するセッション識別子と、該サーバを識別するサーバ識別子との対応関係情報を記憶する記憶装置が、振分け装置から受信したメッセージに含まれるセッション識別子を記憶しているか否かを判別し、
前記受信したメッセージに含まれる前記セッション識別子が前記記憶装置が記憶していないと判別した場合には、前記メッセージに含まれる前記セッション識別子が示すセッションを確立したプログラムが当該セッションを更新する頻度に応じて、受信した前記メッセージを前記サーバに転送する際の中継方式を選択し、
前記選択した中継方式を用いて、前記メッセージを転送する
処理を実行することを特徴とする中継方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、中継装置、情報処理システム、中継プログラム、中継方法に関する。
【背景技術】
【０００２】
従来、クライアントとの間にセッションを確立することで、クライアントに継続したサービスを提供する情報処理システムが知られている。このような情報処理システムの一例として、クライアントにサービスを提供する複数のサーバと、クライアントからのメッセージを各サーバに振分けるメッセージ中継装置とを有する情報処理システムが知られている。
【０００３】
まず、図３３を用いて、クライアントとの間にセッションを確立することで、クライアントに継続したサービスを提供する情報処理システムについて説明する。図３３は、セッションを確立する処理を説明するための図である。図３３に示す例では、クライアント７０は、サーバ７１に対して、リクエストメッセージを送信する。
【０００４】
すると、サーバ７１は、クライアント７０との間に確立したセッションを示すセッションＩＤ＃１２と、クライアント７０に継続したサービスを提供するためのセッションデータとを対応付けて記憶する。そして、サーバ７１は、生成したセッションＩＤ＃１２を含む応答メッセージをクライアント７０に送信する。
【０００５】
ここで、クライアント７０は、セッションＩＤ＃１２を含む後続のリクエストメッセージをサーバ７１に送信する。すると、サーバ７１は、リクエストメッセージに含まれるセッションＩＤ＃１２と対応付けたセッションデータ＃１２を用いて、クライアント７０に応答メッセージを送信することで、継続したサービスを提供する。
【０００６】
ここで、情報処理システムは、クライアントの数が増大すると、１台のサーバではサービスの提供が困難となる。そこで、メッセージ中継装置が複数のサーバにクライアントからのリクエストを振分けることで、各サーバの負荷を分散するメッセージ中継装置が知られている。
【０００７】
ここで、図３４を用いて、複数のサーバにリクエストを振分けることで、各サーバの付加を分散するメッセージ中継装置について説明する。図３４は、メッセージ中継装置の技術を説明するための図である。図３４に示す例では、メッセージ中継装置７２は、セッションＩＤとセッションを確立したサーバとを対応付けたメッセージ中継情報７３を有する。そして、メッセージ中継装置７２は、クライアントからメッセージを受信すると、メッセージ中継情報７３を用いて、メッセージに含まれるセッションＩＤと対応付けたサーバを判別し、判別したサーバにメッセージを転送する。
【０００８】
例えば、図３４に示す例では、メッセージ中継装置７２は、セッションＩＤ＃１１とサーバ７１のアドレスとを対応付けて記憶する。そして、メッセージ中継装置７２は、クライアント７０からセッションＩＤ＃１１を含むメッセージを受信した場合は、メッセージをサーバ７１に転送することで、メッセージの振り分け先となるサーバの一意性を保障する。
【０００９】
ここで、サービスを提供するサーバの数が増加すると、メッセージ中継装置の処理負荷が増加し、メッセージの振り分けがボトルネックとなる場合がある。そこで、複数のメッセージ中継装置が同一のメッセージ中継情報を有し、クライアントからのメッセージを各メッセージ中継装置に分配する情報処理システムが知られている。
【００１０】
図３５は、複数のメッセージ中継装置を有する情報処理システムを説明するための図である。図３５に示す例では、情報処理システムは、メッセージ中継情報７３を記憶するメッセージ中継装置７２と、メッセージ中継情報７７を記憶するメッセージ中継装置７６とを有する。また、情報処理システムは、Ｌ（Ｌｅｖｅｌ）３−Ｌ４ヘッダに応じて、クライアントからのメッセージを各メッセージ中継装置７２、７６に振分けるロードバランサ７８を有する。
【００１１】
例えば、メッセージ中継装置７２は、ロードバランサ７８から振分けられたメッセージに含まれるセッションＩＤがメッセージ中継情報７３に存在しない場合や、メッセージにセッションＩＤが含まれない場合は、メッセージを任意のサーバに転送する。そして、メッセージ中継装置７２は、メッセージを転送したサーバから応答とセッションＩＤとを受信すると、メッセージを転送したサーバのアドレスと、セッションＩＤとを対応付けてメッセージ中継情報７３に格納する。
【００１２】
また、メッセージ中継装置７２は、メッセージ中継装置７６にメッセージ中継情報７３のデータを送信し、メッセージ中継情報７３とメッセージ中継情報７７とを同期させる。その後、メッセージ中継装置７２は、ロードバランサ７８を介して、サーバから受信した応答とセッションＩＤとをメッセージ発行元のクライアントへ転送する。この結果、各メッセージ中継装置７２、７６は、メッセージ中継情報７３、７７が同一内容となるので、同一のセッションＩＤを有するメッセージを同一のサーバに振分ける一意性を保障する。
【００１３】
次に、図３６を用いて、メッセージ中継装置がクライアントにサーバからの応答を転送する処理の流れについて説明する。図３６は、応答を転送する処理の一例を説明するための図である。例えば、メッセージ中継装置は、応答を受信する（ステップＳ１）。次に、メッセージ中継装置は、受信した応答からセッションＩＤ抽出し（ステップＳ２）、応答がセッションＩＤを有するか否かを判別する（ステップＳ３）。
【００１４】
そして、メッセージ中継装置は、応答がセッションＩＤを有すると判別すると（ステップＳ３肯定）、セッションＩＤをキーとして、メッセージ中継情報を検索する（ステップＳ４）。そして、メッセージ中継装置は、検索結果がヒットしたか否かを判別し（ステップＳ５）、ヒットした場合には（ステップＳ５肯定）、応答をクライアントに転送する（ステップＳ９）。
【００１５】
一方、メッセージ中継装置は、検索結果がヒットしなかった場合は（ステップＳ５否定）、メッセージ中継情報を更新する（ステップＳ６）。そして、メッセージ中継装置は、更新結果を他のメッセージ中継装置に反映させるため、他のメッセージ中継装置に、メッセージ中継情報を配布する（ステップＳ７）。
【００１６】
次に、メッセージ中継装置は、全てのメッセージ中継装置に配布したか否かを判別し（ステップＳ８）、配布した場合には（ステップＳ８肯定）、応答をクライアントに転送し（ステップＳ９）、処理を終了する。なお、メッセージ中継装置は、応答がセッションＩＤを有さない場合は（ステップＳ３否定）、メッセージ中継情報の更新を行わずに応答をクライアントに転送し（ステップＳ９）、処理を終了する。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開２０１１−０８２８９８号公報
【特許文献２】特開２００８−２５９１１４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
しかしながら、各メッセージ中継装置がメッセージ中継情報を同期させる技術では、新たなセッションが確立されるたびに、各メッセージ中継装置が記憶するメッセージ中継情報を同期させてから、メッセージをクライアントに転送する。このため、メッセージ中継装置は、クライアントに提供するサービスのセッションの更新頻度が多くなると、頻繁にメッセージ中継情報を同期させるので、スループットが低下し、情報処理システムの性能を低下させるという問題がある。
【００１９】
なお、メッセージ中継装置のスループットを向上させるため、メッセージ中継情報を複数のメッセージ中継装置が分割して記憶する手法も考えれる。例えば、メッセージ中継装置は、それぞれ異なるセッションＩＤを含むメッセージ中継情報を記憶する。そして、メッセージ中継装置は、受信したメッセージのセッションＩＤが自身のメッセージ中継情報に含まれない場合は、他のメッセージ中継装置にメッセージを転送し、転送先のメッセージ中継装置からサーバに転送する手法が考えられる。または、メッセージ中継装置は、メッセージのセッションＩＤと対応付けられたサーバを他のメッセージ中継装置に問合せ、送信先のサーバを識別する手法も考えられる。
【００２０】
しかし、メッセージのサイズが大きい場合は、メッセージを転送する際の処理負荷が増大する。このため、メッセージ中継情報を複数のメッセージ中継装置が分割して記憶する手法では、メッセージのサイズが大きい場合は、メッセージ中継装置のスループットが低下し、情報処理システムの性能を低下させてしまう。
【００２１】
１つの側面では、本発明は、メッセージ中継装置のスループットを向上させることを目的とする。
【課題を解決するための手段】
【００２２】
１つの側面では、クライアントが発行するメッセージをサーバに転送する中継装置である。この中継装置は、サーバ上で動作するプログラムによって確立されたサーバとクライアントとの間のセッションを識別するセッション識別子と、サーバを識別するサーバ識別子との対応関係情報を記憶する。そして、中継装置は、振分け装置から受信したメッセージに含まれるセッション識別子を記憶しているか否かを判別する。その後、中継装置は、受信したメッセージに含まれるセッション識別子を記憶していないと判別した場合には、メッセージに含まれるセッション識別子が示すセッションを確立したプログラムが当該セッションを更新する頻度に応じて、受信したメッセージをサーバに転送する際の中継方式を選択する。その後、中継装置は、選択した中継方式を用いて、メッセージを転送する。
【発明の効果】
【００２３】
１つの側面では、メッセージ中継装置のスループットを向上させることができる。
【図面の簡単な説明】
【００２４】
【図１】図１は、実施例１に係る情報処理システムを説明するための図である。
【図２】図２は、各サービスがセッションを更新する頻度を説明するための図である。
【図３】図３は、メッセージの中継方法を説明するための図である。
【図４】図４は、実施例１に係るメッセージ中継装置と方式選択サーバが実行する処理を説明するための図である。
【図５】図５は、実施例１に係るメッセージ中継装置の機能構成を説明するための図である。
【図６】図６は、方式選択テーブルの一例を説明するための図である。
【図７】図７は、メッセージ中継情報の一例を説明するための図である。
【図８】図８は、メッセージ中継装置リストの一例を説明するための図である。
【図９】図９は、リソース消費量ＤＢの一例を説明するための図である。
【図１０】図１０は、セッション更新頻度計算用カウンタの一例を説明するための図である。
【図１１】図１１は、実施例１に係るメッセージの一例を説明するための図である。
【図１２】図１２は、各処理に要するリソース量を算出する処理を説明するための図である。
【図１３】図１３は、実施例１に係る方式選択サーバの機能構成を説明するための図である。
【図１４】図１４は、リソース量の一例を説明するための図である。
【図１５】図１５は、メッセージ中継情報の配布に必要なリソース量の一例を説明するための図である。
【図１６】図１６は、スループットの予測値の一例を説明するための図である。
【図１７】図１７は、中継方式決定部が選択する中継方式の一例を説明するための図である。
【図１８】図１８は、メッセージの処理負荷が小さい際のスループット性能を説明するための図である。
【図１９】図１９は、メッセージの処理負荷が大きい際のスループット性能を説明するための図である。
【図２０】図２０は、リクエストの中継処理の流れを説明するためのフローチャートである。
【図２１】図２１は、応答の中継処理の流れを説明するためのフローチャートである。
【図２２】図２２は、メッセージ中継装置がリクエストを受信した際に実行する処理の流れを説明するためのフローチャートである。
【図２３】図２３は、メッセージ中継装置がメッセージ中継情報を受信した際に実行する処理の流れを説明するためのフローチャートである。
【図２４】図２４は、メッセージ中継装置がサーバアドレスの問合せを受信した際に実行する処理の流れを説明するためのフローチャートである。
【図２５】図２５は、メッセージ中継装置が転送メッセージを受信した際に実行する処理の流れを説明するためのフローチャートである。
【図２６】図２６は、メッセージ中継装置が応答を受信した際に実行する処理の流れを説明するためのフローチャートである。
【図２７】図２７は、セッションの更新頻度を収集する際の計算リソースを説明するための図である。
【図２８】図２８は、メッセージ中継処理で消費する計算リソース量を説明するための図である。
【図２９】図２９は、平均値を方式選択サーバへ通知する際の消費計算リソース量を説明するための図である。
【図３０】図３０は、１台のメッセージ中継装置をサンプリングノードとした際の処理を説明するための図である。
【図３１】図３１は、確立済みセッション情報の一例を説明するための図である。
【図３２】図３２は、中継プログラムを実行するコンピュータの一例を説明するための図である。
【図３３】図３３は、セッションを確立する処理を説明するための図である。
【図３４】図３４は、メッセージ中継装置の技術を説明するための図である。
【図３５】図３５は、複数のメッセージ中継装置を有する情報処理システムを説明するための図である。
【図３６】図３６は、応答を転送する処理の一例を説明するための図である。
【発明を実施するための形態】
【００２５】
以下に添付図面を参照して本願に係る中継装置、情報処理システム、中継プログラム、中継方法について説明する。
【実施例１】
【００２６】
以下の実施例１では、図１を用いて、実施例１に係る情報処理システムの一例を説明する。図１は、実施例１に係る情報処理システムを説明するための図である。図１に示す例では、情報処理システム１は、複数のクライアント２〜２ｂ、ロードバランサ３、複数の情報処理サーバ４〜４ｂ、複数のメッセージ中継装置１０〜１０ｂ、方式選択サーバ５０を有する。
【００２７】
また、図１に示す例では、各クライアント２〜２ｂとロードバランサ３、ロードバランサ３と各メッセージ中継装置１０〜１０ｂ、各メッセージ中継装置１０〜１０ｂと方式選択サーバ５０とが接続されている。また、各メッセージ中継装置１０〜１０ｂは、各情報処理サーバ４〜４ｂと相互に接続されている。
【００２８】
なお、図１に示す例では、クライアント２〜２ｂを図示したが、情報処理システム１は、任意の数のクライアントを接続することができる。また、図１に示す例では、メッセージ中継装置１０〜１０ｂ、情報処理サーバ４〜４ｂを図示したが、実施例はこれに限定されるものではなく、情報処理システム１は、任意の数のメッセージ中継装置、および任意の数の情報処理サーバ備えることとしてもよい。
【００２９】
以下、クライアント２、ロードバランサ３、情報処理サーバ４、メッセージ中継装置１０、方式選択サーバ５０が実行する処理について説明する。なお、クライアント２ａ、２ｂは、クライアント２と同様の機能を発揮するものとして、説明を省略する。また、情報処理サーバ４ａ、４ｂは、情報処理サーバ４と同様の機能を発揮するものとして、説明を省略する。また、メッセージ中継装置１０ａ、１０ｂは、メッセージ中継装置１０と同様の機能を発揮するものとして、説明を省略する。
【００３０】
クライアント２は、各情報処理サーバ４〜４ｂが実行するウェブアプリケーション等との間でセッションを確立し、継続したサービスを受ける利用者端末である。例えば、クライアント２は、サービスの提供を要求するメッセージを発行し、ロードバランサ３に送信する。また、クライアント２は、メッセージに対する応答に含まれるセッションＩＤを記憶する。ここで、セッションＩＤとは、確立したセッションを示す識別子である。
【００３１】
そして、クライアント２は、継続したサービスの提供を要求する際は、送信するメッセージに記憶したセッションＩＤを格納する。その後、クライアント２は、セッションＩＤを格納したメッセージをロードバランサ３に送信する。
【００３２】
ロードバランサ３は、クライアント２〜２ｂからメッセージを受信すると、受信したメッセージのＬ（Layer）３およびＬ（Layer）４情報を用いて、メッセージをいずれかのメッセージ中継装置に振分ける。例えば、ロードバランサ３は、受信したメッセージのＴＣＰ（Transmission  Control  Protocol）／ＩＰヘッダを識別し、識別したＴＣＰ／ＩＰヘッダの送信元ＩＰアドレス、送信元ポート番号、宛先ＩＰアドレス、宛先ポート番号の値に応じて、メッセージ中継装置１０〜１０ｂへの振り分けを行う。また、ロードバランサ３は、メッセージ中継装置１０〜１０ｂから応答を受信した場合には、受信した応答を、リクエストを発行したクライアント２〜２ｂに転送する。
【００３３】
このように、ロードバランサ３は、セッションＩＤを参照せずに、クライアント２〜２ｂが発行したメッセージを各メッセージ中継装置１０〜１０ｂに振分ける。このため、各メッセージ中継装置１０〜１０ｂは、同一のセッションＩＤを含むリクエストメッセージが振分けられるとは限らない。この結果、各メッセージ中継装置１０〜１０ｂは、同一のセッションＩＤを含むリクエストメッセージの振分け先となる情報処理サーバの同一性を保持する機能が要求される。
【００３４】
情報処理サーバ４は、クライアント２〜２ｂに対して継続するサービスを提供するプログラムを実行する。例えば、情報処理サーバ４は、いずれかのメッセージ中継装置１０〜１０ｂからからセッションＩＤを含まないメッセージを受信すると、初回のサービス提供を行う。具体的には、情報処理サーバ４が実行するプログラムは、サービスの提供を継続する場合は、新たなセッションＩＤを生成し、生成したセッションＩＤと提供したサービスに係る情報とを対応付けて記憶する。
【００３５】
そして、情報処理サーバ４は、生成したセッションＩＤを応答に格納してメッセージ中継装置１０〜１０ｂに送信する。すると、セッションＩＤが含まれる応答は、メッセージ中継装置１０〜１０ｂ、ロードバランサ３を介して、メッセージを発行したクライアントに転送される。
【００３６】
また、情報処理サーバ４が実行するプログラムは、所定の条件を満たした場合には、セッションを更新する。例えば、情報処理サーバ４が実行するプログラムは、クライアント２に提供するサービスについて、メッセージを受信した際に、前回メッセージを受信した時刻から所定の時間が経過している場合は、セッションを更新すると判別する。そして、情報処理サーバ４が実行するプログラムは、新たなセッションＩＤを生成するとともに、新たなセッションＩＤを応答に含めて送信する。
【００３７】
ここで、図２を用いて、情報処理サーバ４が実行するプログラムがセッションを更新する頻度、すなわち、各サービスのセッション更新頻度について説明する。図２は、各サービスがセッションを更新する頻度を説明するための図である。なお、図２に示す例では、情報処理サーバ４が提供するサービスの一例として、ウェブを介して提供するサービスをサイトごとに記載した。具体的には、図２に示す例では、各サイトが提供するサービスのカテゴリと、各サイトの閲覧者と、各サイトのページビューと、各サイトにおけるセッションの更新頻度とを対応付け、閲覧者が多い順に記載した。
【００３８】
ここで、更新頻度は、１つのウェブページを取得する際に１０回のリクエストが発行され、ユーザーが１回ログインするたびに１回のセッションが確立される際に、各ユーザが１日に１回ログインするものとして算出した値である。この結果、例えば、サイト「ａａａ．ｃｏｍ」におけるセッションはリクエストが「３５１」回発行されるごとに「１」回更新される。
【００３９】
また、例えば、サイト「ｆｆｆ．ｃｏｍ」におけるセッションは、リクエストが「４」回発行されるごとに「１」回更新される。また、サイト「ｌｌｌ．ｃｏｍ」におけるセッションは、リクエストが「４７２」回発行されるごとに「１」回更新される。このように、情報処理サーバ４は、クライアント２〜２ｂに提供するサービスごとに、異なる頻度でセッションを更新する。
【００４０】
図１に戻って、メッセージ中継装置１０は、セッションＩＤと、セッションが確立したサービスを提供するサーバのアドレスとを対応受けたメッセージ中継情報を記憶する。また、メッセージ中継装置１０は、ロードバランサ３からメッセージを受信すると、受信したメッセージを解析し、格納されたセッションＩＤを取得する。そして、メッセージ中継装置１０は、取得したセッションＩＤがメッセージ中継情報に含まれているか否かを判別する。
【００４１】
そして、メッセージ中継装置１０は、取得したセッションＩＤがメッセージ中継情報に含まれている場合は、取得したセッションＩＤと対応付けられたアドレスのサーバにメッセージを転送する。一方、メッセージ中継装置１０は、取得したセッションＩＤがメッセージ中継情報に含まれていない場合は、セッションＩＤが示すセッションが確立されたサービスにおけるセッションの更新頻度に応じて、メッセージの中継方式を選択する。
【００４２】
具体的には、メッセージ中継装置１０は、方式選択サーバ５０がサービスにおけるセッションの更新頻度に応じて選択したメッセージの中継方式を取得する。そして、メッセージ中継装置１０は、取得した中継方式を用いて、メッセージの転送を行う。
【００４３】
ここで、図３を用いて、メッセージ中継装置１０がメッセージの転送を行う中継方式を説明する。図３は、メッセージの中継方法を説明するための図である。図３に示すように、メッセージ中継装置１０は、中継方式（Ａ）〜（Ｄ）の４つの中継方法のうち、いずれかの中継方法を用いてメッセージの中継を行う。
【００４４】
以下、各中継方式（Ａ）〜（Ｄ）について説明する。例えば、中継方式（Ａ）とは、メッセージ中継情報を更新するたびに、各メッセージ中継装置１０〜１０ｂのメッセージ中継情報を同期する中継方式を用いる。中継方式（Ａ）では、各メッセージ中継装置１０〜１０ｂが記憶するメッセージ中継情報が同期される。このため、各メッセージ中継装置１０〜１０ｂは、ロードバランサ３がメッセージをどのメッセージ中継装置１０〜１０ｂに振分けても、そのまま情報処理サーバ４〜４ｂへの転送を行う。
【００４５】
この結果、中継方式（Ａ）では、メッセージをサーバへ中継する際の消費リソース量を削減できる。また、中継方式（Ａ）では、メッセージのサイズが大きくなり、メッセージ中継処理の負荷の大きい場合にも、スループットに対する影響を他の中継方式（Ｂ）〜（Ｄ）と比較して小さくする。
【００４６】
しかしながら、中継方式（Ａ）では、新たなセッションが確立された場合、あるいは、セッションが更新された場合に、新たなセッションＩＤを含む応答を受信すると、各メッセージ中継装置１０〜１０ｂのメッセージ中継情報を同期させる。このため、中継方式（Ａ）では、セッションが更新された際に消費するリソース量が他の中継方式（Ｂ）〜（Ｄ）と比較して大きくなる。
【００４７】
また、中継方式（Ｂ）とは、各メッセージ中継装置１０〜１０ｂがそれぞれ異なるメッセージ中継情報を有する中継方式である。例えば、各メッセージ中継装置１０〜１０ｂは、セッションＩＤがハッシュ計算等により各メッセージ中継装置１０〜１０ｂに対してあらかじめ振分けられている。そして、各メッセージ中継装置１０〜１０ｂは、振分けられたセッションＩＤを含むメッセージ中継情報を記憶する。
【００４８】
例えば、メッセージ中継装置１０は、自身に振分けられていないセッションＩＤを含むメッセージをクライアント２から受信する。そして、メッセージ中継装置１０は、ハッシュ計算等により、受信したメッセージのセッションＩＤが振分けられたメッセージ中継装置、例えば、メッセージ中継装置１０ａを識別する。
【００４９】
そして、メッセージ中継装置１０は、識別したメッセージ中継装置１０ａにメッセージを転送する。すると、メッセージ中継装置１０ａは、自身のメッセージ中継情報を用いて、サーバにメッセージを送信するとともに、サーバから受信した応答をメッセージ中継装置１０に転送する。そして、メッセージ中継装置１０は、メッセージ中継装置１０ａから受信した応答を、クライアント２へ送信する。
【００５０】
この結果、中継方式（Ｂ）では、各メッセージ中継装置１０〜１０ｂが記憶するメッセージ中継情報の同期を不要とするので、セッション更新時の消費リソース量を中継方式（Ａ）と比較して小さくする。しかし、中継方式（Ｂ）では、ハッシュ計算等を用いてセッションＩＤが振分けられたメッセージ中継装置を識別し、識別したメッセージ中継装置を介してメッセージと応答の送受信を行う。このため、中継方式（Ｂ）では、メッセージ中継時の消費リソース量や、メッセージ中継処理の負荷が増大した際の影響が中継方式（Ａ）と比較して大きくなる。
【００５１】
また、中継方式（Ｃ）とは、中継方式（Ｂ）と同様に、各メッセージ中継装置１０〜１０ｂにセッションＩＤが振分けられている中継方式である。また、中継方式（Ｃ）では、メッセージ中継装置１０は、受信したメッセージのセッションＩＤが自身のメッセージ中継情報に含まれない場合には、セッションＩＤが振分けられたメッセージ中継装置にメッセージの転送先となるサーバの問合せを行う中継方式である。
【００５２】
例えば、メッセージ中継装置１０は、受信したメッセージのセッションＩＤが自身のメッセージ中継装置に含まれていない場合は、ハッシュ計算等を用いて、セッションＩＤが振分けられたメッセージ中継装置を識別する。そして、メッセージ中継装置１０は、識別したメッセージ中継装置にセッションＩＤを通知し、識別したメッセージ中継装置からセッションＩＤと対応付けられたサーバのアドレスを取得する。その後、メッセージ中継装置１０は、取得したアドレスのサーバに、受信したメッセージを送信する。
【００５３】
この結果、中継方式（Ｃ）では、セッション更新時の消費リソース量を中継方式（Ａ）と比較して小さくする。また、中継方式（Ｃ）では、メッセージの転送を行わないので、メッセージ中継処理の負荷が増大した際の影響を中継方式（Ｂ）と比較して、小さくする。しかし、中継方式（Ｃ）では、メッセージ中継時にハッシュ計算等を行うので、メッセージを中継する際に消費するリソース量を中継方式（Ａ）と比較して増大させる。
【００５４】
また、中継方式（Ｄ）は、中継方式（Ｃ）と同様に、メッセージの転送先となるサーバを他のメッセージ中継装置に問い合わせる方式である。また、中継方式（Ｄ）では、各メッセージ中継装置１０〜１０ｂは、他のメッセージ中継装置に問い合わせた結果取得するサーバのアドレスを受信したメッセージのセッションＩＤと対応付けて自身のメッセージ中継情報にキャッシュする。
【００５５】
このため、メッセージ転送装置１０〜１０ｂは、同じセッションＩＤを含むメッセージを再度受信した際に、他のメッセージ転送装置に問合せを行わずとも、メッセージをサーバに転送する。この結果、中継方式（Ｄ）では、中継方式（Ｃ）と同様に、セッションを更新する際に消費するリソース量とメッセージ中継処理の負荷が増大した際の影響を他の中継方式と比較して小さくすることができる。しかし、中継方式（Ｄ）では、メッセージ中継時に消費するリソース量が中継方式（Ａ）と比較して大きくなる。
【００５６】
このように、各中継方式（Ａ）〜（Ｄ）は、メッセージ中継時に消費するリソース量、セッションが更新された際に消費するリソース量、メッセージ中継処理１０の負荷が増大した際の影響がそれぞれ異なる。そこで、メッセージ中継装置１０は、セッションＩＤが示すセッションが確立されたサービスごとに、中継方式（Ａ）〜（Ｄ）のいずれかを用いてメッセージの転送を行う。具体的には、メッセージ中継装置１０は、サービスごとに方式選択サーバ５０が選択する中継方式を用いて、メッセージの中継を行う。
【００５７】
方式選択サーバ５０は、メッセージ中継装置１０〜１０ｂから、セッションの更新頻度、メッセージ中継情報を同期する際に必要なリソース量の通知を受信する。また、方式選択サーバ５０は、メッセージを他の中継装置に転送する際に消費するリソース量、サーバの問合せを行う際に消費するリソース量の通知を受信する。そして、方式選択サーバ５０は、受信した更新頻度やリソース量を用いて、各中継方式（Ａ）〜（Ｄ）を用いてメッセージの転送を行う際のスループットを算出する。その後、方式選択サーバ５０は、スループットがもっとも大きい中継方式を各メッセージ中継装置１０〜１０ｂに通知する。
【００５８】
以下、図４を用いて、メッセージ中継装置１０と方式選択サーバ５０とが実行する処理について説明する。図４は、実施例１に係るメッセージ中継装置と方式選択サーバが実行する処理を説明するための図である。まず、メッセージ中継装置１０は、メッセージや応答の中継処理を行う。また、メッセージ中継装置１０は、他のメッセージ中継装置１０ａ、１０ｂとメッセージ中継情報の同期や、転送先サーバの問合せを行う。
【００５９】
また、メッセージ中継装置１０は、各中継処理において消費したリソース量を計測し、計測結果を方式選択サーバ５０に通知する計測結果通知処理を実行する。すると、方式選択サーバ５０は、メッセージ中継装置１０から通知された計測結果を計測情報ＤＢ（Data  Base）に格納する。そして、方式選択サーバ５０は、計測情報ＤＢに格納した計測結果を用いて、スループットの予測値を計算し、計算したスループットの予測値が最も大きい中継方式を選択する中継方式選択処理を実行する。
【００６０】
その後、方式選択サーバ５０は、選択した中継方式をメッセージ中継装置１０に通知する。すると、メッセージ中継装置１０は、通知された中継方式を方式選択設定ＤＢに格納する。そして、メッセージ中継装置１０は、方式選択設定ＤＢに格納された中継方式を用いて、メッセージの中継を行う。
【００６１】
次に、図５を用いて、メッセージ中継装置１０の機能構成について説明する。図５は、実施例１に係るメッセージ中継装置の機能構成を説明するための図である。図５に示す例では、メッセージ中継装置１０は、中継処理部１１、中継先情報管理部１２、計測結果通知部１３、リソース消費量ＤＢ記憶部１４、セッション更新頻度計算用カウンタ部１５を有する。また、中継処理部１１は、応答受信部１６、応答受信部１７、中継方式選択部１８、新規セッション識別部１９、新規セッションカウンタ更新部２０、メッセージ処理数カウンタ更新部２１を有する。
【００６２】
また、中継処理部１１は、応答送信部２２、他装置転送部２３、リクエスト受信部２４、方式選択テーブル記憶部２５、中継方式選択部２６、リクエスト受信部２７、中継先決定部２８、メッセージ中継情報記憶部２９、リクエスト転送部３０を有する。また、中継処理部１１は、転送先問合せ部３１、他装置転送部３２、中継先問合せ部３３、キャッシュ３４、メッセージ中継装置リスト記憶部３５を有する。
【００６３】
また、中継先情報管理部１２は、中継先情報回答部３６、中継先情報取得部３７、中継先情報保持装置検索部３８、テーブル配布部３９、テーブル更新部４０を有する。また、計測結果通知部１３は、リソース使用量通知部４１、セッション更新頻度通知部４２を有する。まず、以下の説明では、方式選択テーブル記憶部２５が記憶する方式選択テーブル、メッセージ中継情報記憶部２９が記憶するリクエスト中継情報、メッセージ中継装置リスト記憶部３５が記憶するメッセージ中継装置リストの一例について説明する。
【００６４】
図６は、方式選択テーブルの一例を説明するための図である。図６に示すように、方式選択テーブル記憶部２５は、各サーバ４〜４ｂが提供するウェブサービスのＵＲＬ（Uniform  Resource  Locator）と、中継方式とを対応付けた方式選択テーブルを記憶する。例えば、図６に示す例では、方式選択テーブル記憶部２５は、ＵＲＬ「ＡＡＡ．ｃｏｍ」と「方式（Ａ）」とを対応付けて記憶する。なお、方式選択テーブル記憶部２５は、ＵＲＬではなく、サービスを提供するウェブアプリケーションの名称を格納することとしてもよい。
【００６５】
図７は、メッセージ中継情報の一例を説明するための図である。図７に示すように、メッセージ中継情報記憶部２９は、セッションＩＤとメッセージ転送先アドレスとを対応付けたメッセージ中継情報を記憶する。ここで、メッセージ転送先アドレスとは、対応付けられたセッションＩＤが示すセッションが確立されたサービスを提供するサーバのアドレスである。例えば、図７に示す例では、メッセージ中継情報記憶部２９は、セッションＩＤ「５５Ｄ９５ＤＦＦ…」と情報処理サーバ４のＩＰ（Internet  Protocol）アドレスであるメッセージ転送先アドレス「１９２．１６８．１．４」とを対応付けて記憶する。
【００６６】
図８は、メッセージ中継装置リストの一例を説明するための図である。図８に示すように、メッセージ中継装置リスト記憶部３５は、メッセージ中継装置１０〜１０ｂの装置番号と、メッセージ中継装置１０〜１０ｂのアドレスとを対応付けて記憶する。例えば、図８に示す例では、メッセージ中継装置リスト記憶部３５は、メッセージ中継装置１０ａの番号である「１」と、メッセージ中継装置１０ａのＩＰアドレスである「１９２．１６８．０．２」とを対応付けて記憶する。
【００６７】
次に、図９、図１０を用いて、リソース消費量ＤＢ記憶部１４が記憶するリソース消費量ＤＢと、セッション更新頻度計算用カウンタ部１５が記憶する情報について説明する。まず、図９を用いて、リソース消費量ＤＢ記憶部１４が記憶するリソース消費量ＤＢについて説明する。
【００６８】
図９は、リソース消費量ＤＢの一例を説明するための図である。図９に示す例では、リソース消費量ＤＢ記憶部１４は、ウェブサービスのＵＲＬ、メッセージ中継リソース量、メッセージ転送リソース量、メッセージ中継情報問合せリソース量、メッセージ中継情報配布リソース量を対応付けたリソース量ＤＢを記憶する。
【００６９】
ここで、メッセージ中継リソース量とは、メッセージをサーバ４〜４ｂに中継するメッセージ中継処理に消費するリソース量である。また、メッセージ転送リソース量とは、メッセージ中継装置１０〜１０ｂ間でメッセージを転送する際に消費するリソース量である。また、メッセージ中継情報問合せリソース量とは、メッセージ中継装置１０が他のメッセージ中継装置１０ａ、１０ｂにメッセージの転送先となるサーバを問い合わせる際に消費するリソース量である。
【００７０】
また、メッセージ中継情報配布リソース量とは、メッセージ中継情報を各メッセージ中継装置１０〜１０ｂ間で同期する際に消費するリソース量である。なお、各リソース量は、例えば、各処理の実行時におけるＣＰＵ時間で表される。例えば、図９に示す例では、リソース消費量ＤＢ記憶部１４は、ＵＲＬ「ＡＡＡ．ｃｏｍ」とメッセージ中継リソース量「０：００：０１」、メッセージ中継情報配布リソース量「０：００：０８」を対応付けたエントリを記憶する。
【００７１】
次に、図１０を用いて、セッション更新頻度計算用カウンタ部１５が記憶する情報について説明する。図１０は、セッション更新頻度計算用カウンタの一例を説明するための図である。図１０に示すように、セッション更新頻度計算用カウンタ部１５は、サービスを提供するＵＲＬとメッセージ処理数とセッション確立数とを対応付けた情報を記憶する。
【００７２】
ここで、メッセージ処理数とは、対応付けたＵＲＬに対するメッセージを処理した回数であり、対応付けたＵＲＬに対するメッセージの応答を受信する度に、インクリメントする。また、セッション確立数とは、対応付けたＵＲＬで提供されるサービスにおいてセッションが確立した回数である。例えば、図１０に示す例では、セッション更新頻度計算用カウンタ部１５は、ＵＲＬ「ＡＡＡ．ｃｏｍ」で提供されるサービスについて、処理したメッセージの数が「２５７」であり、セッションを確立した回数が「１」回である旨を示す情報を記憶する。
【００７３】
図５に戻って、応答受信部１６は、メッセージ中継装置１０ａ、１０ｂから転送された応答を受信する。すなわち、応答受信部１６は、中継方式（Ｂ）を用いて、他のメッセージ中継装置１０ａ、１０ｂに転送したメッセージの応答をを受信する。そして、応答受信部１６は、応答を応答送信部２２に転送する。また、応答受信部１７は、情報処理サーバ４〜４ｂからメッセージの応答を受信する。すなわち、応答受信部１７は、メッセージ中継装置１０が直接情報処理サーバ４〜４ｂに転送したメッセージの応答を受信する。そして、応答受信部１７は、受信した応答を中継方式選択部１８に転送する。
【００７４】
中継方式選択部１８は、応答受信部１７から応答を受信すると、受信した応答に含まれるセッションＩＤを抽出し、抽出したセッションＩＤが示すセッションが確立されたサービスを特定する。そして、中継方式選択部１８は、方式選択テーブル記憶部２５が記憶する方式選択テーブルから、特定したサービスと対応付けられた中継方式を特定する。その後、中継方式選択部１８は、受信した応答と特定した中継方式を新規セッション識別部１９に通知する。
【００７５】
新規セッション識別部１９は、中継方式選択部１８から応答と中継方式とを受信する。そして、新規セッション識別部１９は、受信した応答からセッションＩＤを抽出し、抽出したセッションＩＤで特定されるセッションが新規セッションであるか否かを判別する。具体的には、新規セッション識別部１９は、応答からセッションＩＤを抽出するとともに、応答の発行元である情報処理サーバを識別する。そして、新規セッション識別部１９は、抽出したセッションＩＤと識別した情報処理サーバのアドレスとを対応付けたリクエスト中継情報をメッセージ中継情報記憶部２９が記憶しているか否かを判別する。
【００７６】
そして、新規セッション識別部１９は、抽出したセッションＩＤと識別した情報処理サーバのアドレスとを対応付けたリクエスト中継情報をメッセージ中継情報記憶部２９が記憶している場合は、抽出したセッションＩＤが既存のセッションＩＤであると判別する。そして、新規セッション識別部１９は、応答をメッセージ処理数カウンタ更新部２１に送信する。
【００７７】
また、新規セッション識別部１９は、抽出したセッションＩＤと識別した情報処理サーバのアドレスとを対応付けたリクエスト中継情報をメッセージ中継情報記憶部２９が記憶していない場合は、抽出したセッションＩＤが新規なセッションＩＤであると判別する。そして、新規セッション識別部１９は、応答から抽出したセッションＩＤと識別した情報処理サーバのアドレスとを対応付けたエントリをリクエスト中継情報に追加する。
【００７８】
また、新規セッション判定部１９は、中継方式選択部１８から通知された中継方式が中継方式（Ａ）である場合には、応答に含まれるセッションＩＤと、応答の発行元となるサーバのアドレスとをテーブル配布部３９に通知する。そして、新規セッション識別部１９は、応答を新規セッションカウンタ更新部２０に送信する。
【００７９】
新規セッションカウンタ更新部２０は、新規セッション識別部１９から応答を受信すると、応答に含まれるセッションＩＤを用いて、応答を発行したサービスを識別する。そして、新規セッションカウンタ更新部２０は、セッション更新頻度計算用カウンタ部１５が記憶するセッション確立数のうち、識別したサービスと対応付けられたセッション確立数の値を１インクリメントする。そして、新規セッションカウンタ更新部２０は、応答をメッセージ処理数カウンタ更新部２１に送信する。
【００８０】
メッセージ処理数カウンタ更新部２１は、新規セッション識別部１９、または、新規セッションカウンタ更新部２０から応答を受信すると、応答に含まれるセッションＩＤを用いて、応答を発行したサービスを識別する。そして、メッセージ処理数カウンタ更新部２１は、セッション更新頻度計算用カウンタ部１５が記憶するメッセージ処理数のうち、識別したサービスと対応付けられたメッセージ処理数の値を１インクリメントする。
【００８１】
その後、メッセージ処理数カウンタ更新部２１は、受信した応答がメッセージ中継装置１０が情報処理サーバ３〜３ｂに対して中継したメッセージに対する応答である場合には、受信した応答を応答送信部２２に出力する。一方、メッセージ処理数カウンタ更新部２１は、受信した応答が、他のメッセージ中継装置１０ａ、１０ｂから転送されたメッセージに対する応答である場合には、応答を他装置転送部２３に送信する。
【００８２】
応答送信部２２は、応答受信部１６、またはメッセージ処理数カウンタ更新部２１から応答を受信すると、受信した応答をロードバランサ３へ送信する。また、他装置転送部２３は、メッセージ処理数カウンタ更新部２１から応答を受信すると、受信した応答に対するメッセージの転送元であるメッセージ中継装置１０ａ、１０ｂに応答を転送する。
【００８３】
リクエスト受信部２４は、ロードバランサ３がメッセージ中継装置１０に割り当てたメッセージを受信する。そして、リクエスト受信部２４は、受信したリクエストを中継方式選択部２６に送信する。
【００８４】
ここで、図１１は、実施例１に係るメッセージの一例を説明するための図である。図１１に示すように、リクエスト受信部２４は、レイヤ３プロトコルヘッダ、レイヤ４プロトコルヘッダ、レイヤ７プロトコルヘッダ、メッセージコンテンツを有するメッセージを受信する。
【００８５】
例えば、レイヤ３プロトコルヘッダは、ＩＰヘッダであり、プロトコル番号やあて先のＩＰアドレス等が格納される。また、例えば、レイヤ４プロトコルヘッダは、ＴＣＰヘッダであり、ポート番号等が格納される。また、例えば、レイヤ７プロトコルヘッダは、ＨＴＴＰ（Hyper  Text  Transfer  Protocol）ヘッダであり、Ｃｏｏｋｉｅ等の情報が格納される。また、メッセージコンテンツは、例えば、ＳＯＡＰ（Simple  Object  Access  Protocol）ヘッダおよびボディ等である。
【００８６】
ここで、図１１に示す例では、レイヤ７プロトコルヘッダのＣｏｏｋｉｅに、セッションＩＤであるＪＳＥＳＳＩＯＮＩＤが格納される。メッセージ中継装置１０は、レイヤ７に格納されたＪＳＥＳＳＩＯＮＩＤを抽出し、抽出したＪＳＥＳＳＩＯＮＩＤを用いて、メッセージの転送先となる情報処理サーバを特定する。また、メッセージ中継装置１０は、レイヤ３プロトコルヘッダに格納されるＩＰアドレスを用いて、メッセージの発行元となるクライアントに提供されるサービスを特定する。
【００８７】
図５に戻って、中継方式選択部２６は、リクエスト受信部２４からリクエストを受信すると、リクエストに含まれる宛先のＵＲＬ、またはサービスを提供するウェブアプリケーション名を抽出する。そして、中継方式選択部２６は、抽出したＵＲＬと対応付けられた中継方式を方式選択テーブルから識別する。その後、中継方式選択部２６は、リクエストを中継先決定部２８に出力するとともに、識別した中継方式を中継先決定部２８に通知する。
【００８８】
一方、中継方式選択部２６は、抽出したＵＲＬまたはウェブアプリケーション名と対応付けられた中継方式が方式選択テーブル記憶部２５が記憶する方式選択テーブルに存在しない場合は、中継方式が未定である旨を中継先決定部２８に通知する。また、中継方式選択部２６は、リクエストを中継先決定部２８に出力する。
【００８９】
リクエスト受信部２７は、他のメッセージ中継装置１０ａ、１０ｂがメッセージ中継装置１０に転送したリクエストを受信する。すなわち、リクエスト受信部２７は、中継方式（Ｂ）を用いて中継されるリクエストを受信する。そして、リクエスト受信部２７は、受信したリクエストを中継先決定部２８に出力する。
【００９０】
中継先決定部２８は、中継方式選択部２６からリクエストとを受信するとともに、中継方式の通知を受信した場合は、以下の処理を実行する。まず、中継先決定部２８は、リクエストに含まれるセッションＩＤと対応付けられたサーバのアドレスをメッセージ中継情報記憶部２９から検索する。そして、中継先決定部２８は、リクエストに含まれるセッションＩＤと対応付けられたサーバのアドレスがヒットした場合には、ヒットしたアドレスとリクエストとをリクエスト転送部３０に出力する。
【００９１】
一方、中継先決定部２８は、リクエストに含まれるセッションＩＤと対応付けられたサーバのアドレスがヒットしなかった場合は、通知された中継方式に応じて、以下の処理を実行する。まず、中継先決定部２８は、通知された中継方式が中継方式（Ｂ）である場合には、受信したメッセージを転送先問合せ部３１に出力する。また、中継先決定部２８は、通知された中継方式が中継方式（Ｃ）、または中継方式（Ｄ）である場合は、受信したメッセージを中継先問合せ部３３に出力するとともに、中継方式を通知する。
【００９２】
ここで、中継先決定部２８は、通知された中継方式が中継方式（Ａ）である場合には、リクエストに含まれるセッションＩＤと対応付けられたサーバのアドレスが必ずヒットする。このため、中継先決定部２８は、検索したサーバのアドレスと受信したメッセージをリクエスト転送部３０に出力する。また、中継先決定部２８は、中継方式選択部２６からリクエストを受信するとともに、中継方式が未定である旨の通知を受信した場合には、リクエスト転送部３０にリクエストを出力するとともに、中継方式が未定である旨をリクエスト転送部３０に通知する。
【００９３】
リクエスト転送部３０は、中継先決定部２８からサーバのアドレスとメッセージとを受信すると、受信したアドレスの情報処理サーバ４〜４ｂに対してメッセージを送信する。また、リクエスト転送部３０は、中継先問合せ部３３からサーバのアドレスとメッセージとを受信すると、受信したアドレスの情報処理サーバ４〜４ｂに対してメッセージを送信する。
【００９４】
転送先問合せ部３１は、中継先決定部２８からメッセージを受信すると、メッセージの転送先となるメッセージ中継装置を問い合わせる。すなわち、転送先問合せ部３１は、中継方式（Ｂ）で転送されるメッセージの転送先を問い合わせる。具体的には、転送先問合せ部３１は、受信したメッセージからセッションＩＤを抽出し、抽出したセッションＩＤを中継先情報保持装置検索部３８に出力する。
【００９５】
ここで、中継先情報保持装置検索部３８は、セッションＩＤを受信すると、セッションＩＤと対応付けられたサーバアドレスをどのメッセージ中継装置１０ａ、１０ｂが記憶しているかを判別し、判別したメッセージ中継装置を転送先問合せ部３１に通知する。例えば、Ｎ＋１台のメッセージ中継装置１０〜１０ｂには、０〜Ｎまでの数値が付与されている。
【００９６】
そして、中継先情報保持装置検索部３８は、転送先問合せ部３１からセッションＩＤを受信すると、受信したセッションＩＤをハッシュ関数にかけることにより数値化し、数値化した値をＮ＋１で除算した余りの値を算出する。その後、中継先情報保持装置検索部３８は、算出した余りの値と対応付けられたメッセージ中継装置のアドレスをメッセージ中継装置リスト記憶部３５から取得し、取得したアドレスを転送先問合せ部３１に通知する。
【００９７】
すると、転送先問合せ部３１は、中継先情報保持装置検索部３８から通知されたアドレスと中継先決定部２８から受信したメッセージとを他装置転送部３２に出力する。すると、他装置転送部３２は、受信したアドレスのメッセージ中継装置１０ａ、１０ｂにメッセージを転送する。
【００９８】
中継先問合せ部３３は、中継先決定部２８からメッセージを受信すると、受信したメッセージからセッションＩＤを抽出し、抽出したセッションＩＤを中継先情報取得部３７に通知する。このような場合には、中継先情報取得部３７は、セッションＩＤと対応付けられたサーバアドレスを他のメッセージ中継装置から取得し、取得したサーバアドレスを中継先問合せ部３３に通知する。
【００９９】
すると、中継先問合せ部３３は、取得したサーバアドレスとメッセージとをリクエスト転送部３０に送信する。また、中継先問合せ部３３は、通知された中継方式が中継方式（Ｄ）である場合には、取得したサーバアドレスとメッセージから抽出したセッションＩＤとを対応付けてキャッシュ３４に格納する。その後、キャッシュ３４に記憶されたサーバアドレスとセッションＩＤは、メッセージ中継情報記憶部２９が記憶するリクエスト中継情報に追加される。
【０１００】
中継先情報回答部３６は、他のメッセージ中継装置１０ａ、１０ｂから、サーバアドレスの検索要求を受信する。ここで、サーバアドレスの検索要求には、セッションＩＤが含まれている。中継先情報回答部３６は、サーバアドレスの検索要求を受信した場合には、受信した検索要求に含まれるセッションＩＤを抽出し、抽出したセッショＩＤと対応付けられたサーバアドレスをリクエスト中継情報から検索する。そして、中継先情報回答部３６は、検索したサーバアドレスを検索要求の送信元となるメッセージ中継装置１０ａ、１０ｂに通知する。
【０１０１】
中継先情報取得部３７は、中継先問合せ部３３からセッションＩＤを受信すると、受信したセッションＩＤを中継先情報保持装置検索部３８に出力する。このような場合には、中継先情報保持装置検索部３８は、転送先問合せ部３１からセッションＩＤを受信した際と同様の処理を実行し、セッションＩＤと対応付けられたサーバアドレスを記憶するメッセージ中継装置のアドレスを中継先情報取得部３７に出力する。
【０１０２】
すると、中継先情報取得部３７は、受信したアドレスのメッセージ中継装置に対してセッションＩＤを含むサーバアドレスの検索要求を送信する。そして、中継先情報取得部３７は、検索要求を送信したメッセージ中継装置からサーバアドレスを受信した場合には、受信したサーバアドレスを中継先問合せ部３３に通知する。
【０１０３】
中継先情報保持装置検索部３８は、転送先問合せ部３１、中継先情報取得部３７からセッションＩＤを受信すると、受信したセッションＩＤと対応付けられたサーバアドレスを記憶するメッセージ中継装置のアドレスをメッセージ中継装置リストから検索する。そして、中継先情報保持装置検索部３８は、検索結果となるメッセージ中継装置のアドレスを転送先問合せ部３１および中継先情報取得部３７に出力する。
【０１０４】
また、中継先情報保持装置検索部３８は、テーブル配布部３９からリクエスト中継情報の配布先の問合せを受信した場合には、各メッセージ中継装置１０ａ、１０ｂのアドレスをメッセージ中継処理リストから取得する。そして、中継先情報保持装置検索部３８は、取得したアドレスをテーブル配布部３９に通知する。
【０１０５】
テーブル配布部３９は、新規セッション識別部１９から応答に含まれるセッションＩＤと、応答の発行元となるサーバのアドレスとを受信した場合には、中継先情報保持装置検索部３８にメッセージ中継先情報の配布先の問合せを出力する。そして、テーブル配布部３９は、各メッセージ中継装置１０ａ、１０ｂのアドレスを取得すると、新規セッション識別部１９から受信したセッションＩＤとサーバのアドレスとを対応付けたエントリを、各メッセージ中継装置１０ａ、１０ｂに配布する。
【０１０６】
テーブル更新部４０は、他のメッセージ中継装置１０ａ、１０ｂからセッションＩＤとサーバのアドレスとを対応付けたエントリを受信した場合には、受信したエントリをメッセージ中継情報記憶部２９が記憶するリクエスト中継情報に追加する。すなわち、テーブル配布部３９、テーブル更新部４０は、中継方式（Ａ）において各メッセージ中継装置１０〜１０ｂが記憶するメッセージ中継情報を同期させる。
【０１０７】
なお、テーブル更新部４０は、中継方式（Ｂ）〜（Ｄ）において、メッセージ中継装置１０が保持担当であるセッションＩＤが付与されるような初回のメッセージを、メッセージ中継装置１０以外のメッセージ中継装置１０ａ、１０ｂが受信した場合は、メッセージ中継情報の受信等を行う。また、テーブル配布部３９は、中継方法（Ｂ）〜（Ｃ）において、メッセージ中継装置１０以外のメッセージ中継装置１０ａ、１０ｂが保持担当であるセッションＩＤが付与されるような初回のメッセージをメッセージ中継装置１０が受信した場合には、メッセージ中継情報の転送等を行う。
【０１０８】
なお、中継処理部１１、中継先情報管理部１２は、メッセージの中継や転送先の問合せを行う際に消費したリソース量を特定し、測定したリソース量をリソース量ＤＢ記憶部１４に格納する。具体的には、中継処理部１１、中継先情報管理部１２は、処理対象のメッセージに関わるサービスを提供するＵＲＬごとに、メッセージ中継処理を行う際のＣＰＵ時間、メッセージ転送処理を行う際のＣＰＵ時間を測定する。
【０１０９】
また、中継処理部１１、中継先情報管理部１２は、メッセージ中継先の情報を他のメッセージ中継装置に問い合わせる際のＣＰＵ時間、メッセージ中継情報を配布する際のＣＰＵ時間を測定する。そして、中継処理部１１、中継先情報管理部１２は、測定したＣＰＵ時間をサービスを提供するＵＲＬごとにリソース消費量ＤＢ記憶部１４に格納する。
【０１１０】
以下、中継処理部１１、中継先情報管理部１２がリソースの消費量を算出する一例を説明する。例えば、中継処理部１１、中継先情報管理部１２は、図５中ｍ１〜ｍ９、ｏ１〜ｏ６において処理を実行したＣＰＵ時間を計測する。そして、中継処理部１１、中継先情報管理部１２は、計測したＣＰＵ時間を用いて、各処理前のＣＰＵ時間と処理後のＣＰＵ時間との差分から、消費したリソース量を算出する。
【０１１１】
ここで、図１２は、各処理に要するリソース量を算出する処理を説明するための図である。例えば、中継処理部１１、中継先情報管理部１２は、メッセージ中継処理の際に消費したリソース量「ｒｆｗｄ」を「ｒｆｗｄ＝（ｍ３−ｍ１）＋｛（ｍ４−ｍ２）−（ｏ６−ｏ５）｝」で算出する。また、中継処理部１１、中継先情報管理部１２は、メッセージ転送処理の際に消費したリソース量「ｒｆｗｄ２」を「ｒｆｗｄ２＝（ｍ７−ｍ６）＋（ｍ３−ｍ５）＋（ｍ４−ｍ９）」で算出する。
【０１１２】
また、中継処理部１１、中継先情報管理部１２は、メッセージの中継先を問合せる際に消費したリソース量「ｒｑｕｅｒｙ」を「ｒｑｕｅｒｙ＝ｏ２−ｏ１」で算出する。また、中継処理部１１、中継先情報管理部１２は、メッセージ中継情報を配布する際に消費したリソース量「ｒｃｔｒｌ」を以下のように算出する。例えば、中継処理部１１、中継先情報管理部１２は、中継方式（Ａ）によるメッセージ中継情報を配布する際は、「ｒｃｔｒｌ＝（ｏ６−ｏ５）／Ｎ」で算出し、中継方式（Ｂ）〜（Ｄ）の際は、「ｒｃｔｒｌ＝（ｏ６−ｏ５）」とする。なお、メッセージ中継装置１０は、ＯＳ（Operating  System）等の各プロセスやスレッドのリソース使用量を測定する機能を用いて、リソース使用量を取得することとしてもよい。
【０１１３】
図５に戻って、リソース使用量通知部４１は、リソース消費量ＤＢ記憶部１４が記憶するリソース消費量を方式選択サーバ５０に通知するとともに、リソース消費量ＤＢ記憶部１４が記憶するリソース消費量をリセットする。また、セッション更新頻度通知部４２は、セッション更新頻度計算用カウンタ部１５が記憶する各情報を方式選択サーバ５０に送信するとともに、セッション更新頻度計算用カウンタ部１５が記憶する各情報をリセットする。
【０１１４】
次に、図１３を用いて、方式選択サーバ５０が実行する処理について説明する。図１３は、実施例１に係る方式選択サーバの機能構成を説明するための図である。図１３に示す例では、方式選択サーバ５０は、計測値集計部５１、計測情報ＤＢ記憶部５２、スループット予測値計算部５３、中継方式決定部５４、中継方式制御部５５を有する。ここで、計測情報ＤＢ記憶部５２は、サービス（ＵＲＬ）ごとにセッションを更新する頻度とリソース量とを対応付けて記憶する記憶装置である。
【０１１５】
計測値集計部５１は、メッセージ中継装置１０が有するリソース使用量通知部４１が送信したリソース消費量と、セッション更新頻度通知部４２が送信した各情報を受信する。また、計測値集計部５１は、他のメッセージ中継装置１０ａ、１０ｂからも、リソース消費量と各情報とを受信する。
【０１１６】
そして、計測値集計部５１は、各メッセージ中継装置１０〜１０ｂから通知されたリソース消費量と各情報とをサービス（ＵＲＬ）ごとに集計し、集計したリソース消費量と各情報とを用いて、以下の処理を実行する。まず、計測値集計部５１は、通知されたメッセージ処理数でセッション確立数を除算したセッション更新頻度を算出する。そして、計測値集計部５１は、算出したセッション更新頻度と、リソース使用量通知部４１から通知された各リソース量とを、サービス（ＵＲＬ）ごとに対応付けて計測情報ＤＢ記憶部５２に格納する。
【０１１７】
スループット予測値計算部５３は、計測情報ＤＢ記憶部５２が記憶する情報を用いて、各中継方法（Ａ）〜（Ｄ）を用いてメッセージの転送を行う際のスループットの予測値を、サービス（ＵＲＬ）ごとにそれぞれ算出する。そして、スループット予測値計算部５３は、算出したスループットの予測値を中継方式決定部５４に通知する。
【０１１８】
ここで、スループット予測値計算部５３がスループットの予測値を算出する処理について説明する。例えば、スループット予測値計算部５３は、１つのメッセージの中継に必要なリソース量と、メッセージの中継先を決定するために必要なリソース量と、メッセージ中継情報の配布に必要なリソース量との和を算出する。そして、スループット予測値計算部５３は、算出した各リソース量の和で、メッセージ中継装置１０〜１０ｂが有する全てのリソース量を除算した値をスループットの予測値とする。
【０１１９】
ここで、メッセージの中継先を決定するために必要なリソース量は、メッセージのサイズや中継処理の内容によって変化する。例えば、メッセージの中継先がメッセージに含まれるセッションＩＤを記憶している際に、メッセージの中継に必要なリソース量に追加されるリソース量をＸとすると、Ｘの値は、中継方式（Ａ）〜（Ｄ）に応じて、図１４に示す値となる。
【０１２０】
図１４は、リソース量の一例を説明するための図である。図１４に示すように、中継方式（Ａ）では、メッセージを他のメッセージ中継装置１０ａ、１０ｂに転送しないため、Ｘの値が「０」となる。一方、中継方式（Ｂ）では、Ｘの値は、メッセージ中継装置間でメッセージを転送する際に必要なリソース量に、ミスヒット率を積算した値となる。ここで、ミスヒット率とは、メッセージ転送先のメッセージ中継装置が、転送するメッセージに含まれるセッションＩＤと対応付けたサーバアドレスを記憶していない確率である。
【０１２１】
また、中継方式（Ｃ）および中継方式（Ｄ）では、Ｘの値は、メッセージ中継装置間でメッセージ転送先となる情報処理サーバのサーバアドレスを問い合わせるために必要なリソース量と、ミスヒット率とを積算した値となる。ここでミスヒット率とは、問合せ先のメッセージ中継装置に、転送するメッセージに含まれるセッションＩＤと対応付けたサーバアドレスが記憶されていない確率である。
【０１２２】
一方、メッセージ中継情報の配布に必要なリソース量は、メッセージに係るサービスに係らず固定値となる。このため、メッセージ中継情報の配布に必要なリソース量をＹとすると、Ｙの値は、メッセージ中継情報の配布に必要なリソース量にセッション更新頻度を積算した値となる。
【０１２３】
図１５は、メッセージ中継情報の配布に必要なリソース量の一例を説明するための図である。図１５に示すように、中継方式（Ａ）では、Ｙの値は、メッセージ中継情報を１回配布するのに必要なリソース量と、メッセージ中継装置の数と、セッション更新頻度とを積算した値となる。また、中継方式（Ｂ）〜（Ｄ）では、Ｙの値は、メッセージ中継先情報を１回配布するのに必要なリソース量と、メッセージ中継先情報を配布する装置の数と、セッション更新頻度とを積算した値となる。ここで、中継方式（Ｂ）〜（Ｄ）においてメッセージ中継先情報を配布する処理とは、他のメッセージ中継装置に対して、メッセージを転送するサーバアドレスを通知する処理である。
【０１２４】
次に、スループット予測値計算部５３がスループットの予測値を算出する処理の具体例について説明する。まず、スループット予測値計算部５３は、１つのサービス（ＵＲＬ）について、各リソース量とセッション更新頻度とを計測情報ＤＢ記憶部５２から読み出す。そして、スループット予測値計算部５３は、以下の式（１）を用いて、中継方式（Ａ）でメッセージを転送する際のスループットの予測値を算出する。
【０１２５】
ここで、式（１）中のＴＡとは、中継方式（Ａ）を用いてメッセージを転送する際のスループットの予測値である。また、Ｒｎｏｄｅとは、単位時間あたりのノードが有するリソース量であり、例えば、ＣＰＵのクロック数（ＧＨｚ：キガヘルツ）となる。なお、以下の具体例では、Ｒｎｏｄｅの値を３（ＧＨｚ）とした。また、式（１）中のＮとは、メッセージ中継装置１０〜１０ｂの数である。また、ｍは、１セッションで送受信するメッセージの数であり、セッション更新頻度の逆数である。
【０１２６】
【数１】
0005928040.tif 000002
【０１２７】
また、スループット予測値計算部５３は、以下の式（２）を用いて、中継方式（Ｂ）でメッセージを転送する際のスループットの予測値を算出する。ここで、式（２）中ＴＢとは、中継方式（Ｂ）を用いてメッセージを転送する際のスループットの予測値である。
【０１２８】
【数２】
0005928040.tif 000003
【０１２９】
また、スループット予測値計算部５３は、以下の式（３）を用いて、中継方式（Ｃ）でメッセージを転送する際のスループットの予測値を算出する。ここで、式（３）中ＴＣとは、中継方式（Ｃ）を用いてメッセージを転送する際のスループットの予測値である。
【０１３０】
【数３】
0005928040.tif 000004
【０１３１】
また、スループット予測値計算部５３は、以下の式（４）を用いて、中継方式（Ｄ）でメッセージを転送する際のスループットの予測値を算出する。ここで、式（４）中ＴＤとは、中継方式（Ｄ）を用いてメッセージを転送する際のスループットの予測値である。また、式（４）中のｐ（ｋ）は、式（５）に示すように、ｋに応じてｎ／Ｎ、（ｎ＋ｋ）／Ｎ、１のいずれかの値を取る変数である。
【０１３２】
【数４】
0005928040.tif 000005
【０１３３】
【数５】
0005928040.tif 000006
【０１３４】
そして、スループット予測値計算部５３は、式（１）〜（５）を用いて算出した各中継方式（Ａ）〜（Ｄ）のスループットを中継方式決定部５４に出力する。
【０１３５】
中継方式決定部５４は、スループット予測値計算部５３から各中継方式（Ａ）〜（Ｄ）のスループットの予測値を受信すると、サービスごとにスループットの予測値が最も大きい中継方式を選択する。そして、中継方式決定部５４は、選択した中継方式を中継方式制御部５５に通知する。
【０１３６】
ここで、図１６、図１７を用いて中継方式決定部５４が中継方式を選択する処理について説明する。図１６は、スループットの予測値の一例を説明するための図である。また、図１７は、中継方式決定部が選択する中継方式の一例を説明するための図である。なお、図１６に示す例では、スループット予測値計算部５３は、情報処理サーバ４〜４ｂが提供するウェブアプリケーションごとに算出した各中継方式（Ａ）〜（Ｄ）のスループットの予測値について記載した。
【０１３７】
例えば、中継方式決定部５４は、図１６に示すように、各サービスごとに各中継方式（Ａ）〜（Ｄ）におけるスループットの予測値を受信する。すると、中継方式決定部５４は、ウェブアプリケーション「ｈｏｓｔ１／ｐａｔｈ１１」について、中継方式（Ｄ）が最もスループットの予測値が大きいと判別する。
【０１３８】
また、中継方式決定部５４は、サービス「ｈｏｓｔ２／ｐａｔｈ２１」について中継方式（Ｂ）が最もスループットの予測値が大きいと判別する。また、中継方式決定部５４は、サービス「ｈｏｓｔ２／ｐａｔｈ２２」について中継方式（Ａ）が最もスループットの予測値が大きいと判別する。また、中継方式決定部５４は、サービス「ｈｏｓｔ３」について、中継方式（Ｂ）が最もスループットの予測値が大きいと判別する。
【０１３９】
この結果、中継方式決定部５４は、図１７に示すように、各ウェブアプリケーションについて最もスループットの予測値が高い中継方式を示すテーブルを生成し、生成したテーブルを中継方式制御部５５に送信する。
【０１４０】
図１３に戻って、中継方式制御部５５は、中継方式決定部５４が生成した中継方式を示すテーブルを受信すると、受信したテーブルの内容を方式選択テーブル記憶部２５に反映させる。すなわち、中継方式制御部５５は、方式選択テーブル記憶部２５にサービスと対応付けて記憶された中継方式を、中継方式決定部５４が生成したテーブルの内容へと更新する。この結果、メッセージ中継装置１０は、サービスごとに、予測されるスループットが最も大きい転送方式を用いてメッセージを転送することができる。
【０１４１】
このように、メッセージ中継装置１０は、メッセージに含まれるセッションＩＤが示すセッションが確立されたサービスごとに、スループットが最大となる中継方式でメッセージの中継を行う。このため、メッセージ中継装置１０は、情報処理システム全体の処理能力を向上させることができる。
【０１４２】
また、方式選択サーバ５０は、中継方式を選択する場合には、セッション更新頻度とメッセージの転送処理に必要なリソース量と、メッセージの中継先を問い合わせるために必要なリソース量とを用いて、スループットの予測値を算出する。また、方式選択サーバ５０は、メッセージ中継情報を配布する際に必要なリソース量を用いて、各中継方式のスループットの予測値を算出する。
【０１４３】
このため、方式選択サーバ５０は、情報処理サーバ４〜４ｂが提供するサービスごとにメッセージの処理に必要なリソース量が異なる場合にも、スループットが最大となる中継方式を選択することができる。
【０１４４】
以下、図１８、図１９を用いて、メッセージの処理負荷に応じたスループット性能の違いについて説明する。図１８は、メッセージの処理負荷が小さい際のスループット性能を説明するための図である。また、図１９は、メッセージの処理負荷が大きい際のスループット性能を説明するための図である。
【０１４５】
なお、図１８、図１９に示す例では、横軸をセッション更新頻度とし、縦軸をスループットとして、中継方式（Ａ）〜（Ｄ）について算出されたスループットの値をプロットした。また、図１８、図１９に示す例では、中継方式（Ａ）のスループットを三角形で、中継方式（Ｂ）のスループットを菱型で、中継方式（Ｃ）のスループットを四角形で、中継方式（Ｄ）のスループットを円形でプロットした。
【０１４６】
例えば、図１８に示すように、メッセージの負荷が小さい場合には、セッションの更新頻度が０．０５をこえたあたりで中継方式（Ｂ）のスループットと他の中継方式のスループットとに約２倍の差が生じる。また、図１８に示すように、メッセージの負荷が小さい場合には、セッション更新頻度が０．００１の時点では、中継方式（Ｄ）のスループットが大きいが、セッション更新頻度が０．００５をこえたあたりから中継方式（Ｂ）のスループットが大きくなる。
【０１４７】
一方、図１９に示すように、メッセージの負荷が大きい場合には、セッション更新頻度が０．００１の時点では、中継方式（Ａ）、（Ｄ）のスループットが大きいが、セッション更新頻度が０．０１０をこえた辺りから中継方式（Ｂ）のスループットが大きくなる。このように、中継方式（Ａ）〜（Ｄ）のスループットは、セッション更新頻度とメッセージの処理負荷に応じてそれぞれ変化する。このため、方式選択サーバ５０は、実測したセッション更新頻度とメッセージの処理負荷等からスループットを算出し、スループットが最大となる中継方式を選択することで、情報処理システム１の処理能力を向上させることができる。
【０１４８】
例えば、中継処理部１１、中継先情報管理部１２、計測結果通知部１３とは、電子回路である。また、中継処理部１１は、応答受信部１６、応答受信部１７、中継方式選択部１８、新規セッション識別部１９、新規セッションカウンタ更新部２０、メッセージ処理数カウンタ更新部２１とは、電子回路である。
【０１４９】
また、応答送信部２２、他装置転送部２３、リクエスト受信部２４、中継方式選択部２６、リクエスト受信部２７、中継先決定部２８、リクエスト転送部３０とは、電子回路である。また、転送先問合せ部３１、他装置転送部３２、中継先問合せ部３３とは、電子回路である。
【０１５０】
また、中継先情報回答部３６、中継先情報取得部３７、中継先情報保持装置検索部３８、テーブル配布部３９、テーブル更新部４０とは、電子回路である。また、リソース使用量通知部４１、セッション更新頻度通知部４２、計測値集計部５１、スループット予測値計算部５３、中継方式決定部５４、中継方式制御部５５とは、電子回路である。ここで、電子回路の例として、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路、またはＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などを適用する。
【０１５１】
また、リソース消費量ＤＢ記憶部１４、セッション更新頻度計算用カウンタ部１５、方式選択テーブル記憶部２５、メッセージ中継情報記憶部２９、キャッシュ３４、メッセージ中継装置リスト記憶部３５、計測情報ＤＢ記憶部５２とは、記憶装置である。なお、記憶装置の例として、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（flash  memory）などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。
【０１５２】
次に、図面を用いて、メッセージ中継装置１０が実行する処理の流れについて説明する
。まず、図２０を用いて、メッセージ中継装置１０がリクエストを受信した際の処理の流れについて説明する。図２０は、リクエストの中継処理の流れを説明するためのフローチャートである。なお、図２０には、メッセージ中継装置１０がロードバランサ３からメッセージを受信した際の処理の流れについて記載した。また、図２０には、メッセージ中継装置１０が単体でメッセージの中継を行う際の処理について記載した。
【０１５３】
例えば、メッセージ中継装置１０は、ロードバランサ３からメッセージを受信する（ステップＳ１０１）。すると、メッセージ中継装置１０は、メッセージからセッションＩＤを抽出する（ステップＳ１０２）。次に、メッセージ中継装置１０は、メッセージにセッションＩＤが存在するか否かを判別し（ステップＳ１０３）、存在する場合には（ステップＳ１０３肯定）、セッションＩＤをキーとして、メッセージ中継情報を検索する（ステップＳ１０４）。
【０１５４】
次に、メッセージ中継装置１０は、検索結果、すなわちサーバアドレスがヒットしたか否かを判別し（ステップＳ１０５）、ヒットした場合には（ステップＳ１０５肯定）、ヒットしたサーバアドレスを取得する（ステップＳ１０６）。そして、メッセージ中継装置１０は、取得したサーバアドレスを宛先としてリクエストを送信し（ステップＳ１０７）、処理を終了する。
【０１５５】
一方、メッセージ中継装置１０は、検索結果がヒットしなかった場合は（ステップＳ１０５否定）、ロードバランサ３を介して、クライアント２〜２ｂにエラーを通知し（ステップＳ１０８）、処理を終了する。一方、メッセージ中継装置１０は、メッセージにセッションＩＤが存在しない場合は（ステップＳ１０３否定）、あらかじめ設定された負荷分散アルゴリズムに従って宛先を決定し（ステップＳ１０９）、リクエストを送信する（ステップＳ１０７）。なお、あらかじめ設定された負荷分散アルゴリズムとは、例えばラウンドロビンやランダムにリクエストの送信先となる情報処理サーバを選択するアルゴリズムである。
【０１５６】
次に、図２１を用いて、メッセージ中継装置１０が情報処理サーバ４〜４ｂから応答を受信した際に実行する処理の流れについて説明する。図２１は、応答の中継処理の流れを説明するためのフローチャートである。なお、図２１に示す例では、メッセージ中継装置１０が中継方式（Ａ）が設定されたメッセージの応答を受信した際に実行する処理の流れを記載した。また、図２１には、メッセージ中継装置１０が単体でメッセージの中継を行う際の処理について記載した。
【０１５７】
例えば、メッセージ中継装置１０は、応答を受信すると（ステップＳ２０１）、応答からセッションＩＤを抽出する（ステップＳ２０２）。そして、メッセージ中継装置１０は、セッションＩＤが応答に含まれるか否かを判別する（ステップＳ２０３）。次に、メッセージ中継装置１０は、セッションＩＤが応答に含まれる場合には（ステップＳ２０３肯定）、セッションＩＤをキーとしてメッセージ中継情報を検索する（ステップＳ２０４）。
【０１５８】
そして、メッセージ中継装置１０は、検索結果がヒットしたか否かを判別し（ステップＳ２０５）、ヒットしなかった場合は（ステップＳ２０５否定）、メッセージ中継情報を更新する（ステップＳ２０６）。具体的には、メッセージ中継装置１０は、セッションＩＤと応答の送信元となる情報処理サーバのサーバアドレスとを対応付けてメッセージ中継情報に追加する。
【０１５９】
その後、メッセージ中継装置１０は、リクエスト元に応答を送信し（ステップＳ２０７）、処理を終了する。一方、メッセージ中継装置１０は、検索結果がヒットした場合は（ステップＳ２０５肯定）、そのままリクエスト元に応答を送信し（ステップＳ２０７）、処理を終了する。また、メッセージ中継装置１０は、セッションＩＤが応答に含まれない場合は（ステップＳ２０３否定）、リクエスト元に応答を送信し（ステップＳ２０７）、処理を終了する。
【０１６０】
次に、図２２を用いて、メッセージ中継装置１０がロードバランサ３によって振分けられたリクエストを受信した際に実行する処理の流れについて説明する。図２２は、メッセージ中継装置がリクエストを受信した際に実行する処理の流れを説明するためのフローチャートである。なお、図２２には、メッセージ中継装置１０が他のメッセージ中継装置１０ａ、１０ｂと連係してメッセージの中継処理を行う際の処理の流れについて記載した。
【０１６１】
なお、図２２に示すステップＳ３０１〜Ｓ３０３、ステップＳ３０４、ステップＳ３０６の処理は、図２０に示すステップＳ１０１〜Ｓ１０３、ステップＳ１０９、ステップＳ１０５と同様の処理であるものとして、説明を省略する。例えば、メッセージ中継装置１０は、検索結果がヒットしなかった場合は（ステップＳ３０６否定）、方式選択テーブルからセッションＩＤと対応付けられた方式を選択する（ステップＳ３０７）。
【０１６２】
すなわち、メッセージ中継装置１０は、セッションＩＤと対応付けられた中継方式が中継方式（Ｄ）である場合は（ステップＳ３０７：方式（Ｄ））、メッセージ中継情報を他のメッセージ中継装置に問合せする（ステップＳ３０８）。そして、メッセージ中継装置１０は、応答に含まれる情報をキャッシュし（ステップＳ３０９）、メッセージを情報処理サーバへ送信し（ステップＳ３０５）、処理を終了する。
【０１６３】
一方、メッセージ中継装置１０は、セッションＩＤと対応付けられた中継方式が中継方式（Ｂ）である場合は（ステップＳ３０７：方式（Ｂ））、ハッシュ関数等を用いてメッセージを転送するメッセージ中継装置を決定する（ステップＳ３１０）。そして、メッセージ中継装置１０は、決定したメッセージ中継装置にメッセージを転送し（ステップＳ３１１）、処理を終了する。
【０１６４】
また、メッセージ中継装置１０は、セッションＩＤと対応付けれられた中継方式が中継方式（Ｃ）である場合には（ステップＳ３０７：方式（Ｃ））、メッセージ中継情報を他のメッセージ中継装置１０ａ、１０ｂに問合せする（ステップＳ３１２）。そして、メッセージ中継装置１０は、問合せした結果、他のメッセージ中継装置１０ａ、１０ｂから取得したサーバアドレスの情報処理サーバにメッセージを送信し（ステップＳ３０５）、処理を終了する。なお、セッションＩＤと対応付けられた中継方式が中継方式（Ａ）である場合には、ステップＳ３０６にて、必ず検索結果がヒットする（ステップＳ３０６肯定）。
【０１６５】
次に、図２３を用いて、メッセージ中継装置１０が他のメッセージ中継装置１０ａ、１０ｂから各中継方式（Ａ）〜（Ｄ）で中継されるメッセージについて、メッセージ中継情報を受信した際に実行する処理の流れについて説明する。図２３は、メッセージ中継装置がメッセージ中継情報を受信した際に実行する処理の流れを説明するためのフローチャートである。
【０１６６】
例えば、メッセージ中継装置１０は、他のメッセージ中継装置１０ａ、１０ｂから、メッセージ中継情報を受信する（ステップＳ４０１）。すると、メッセージ中継装置１０は、受信したメッセージ中継情報からセッションＩＤと転送先となるサーバアドレスとを抽出する（ステップＳ４０２）。次に、メッセージ中継装置１０は、抽出したセッションＩＤを用いてメッセージ中継情報を検索し（ステップＳ４０３）、検索結果がヒットしたか否かを判別する（ステップＳ４０４）。
【０１６７】
そして、メッセージ中継装置１０は、ヒットしなかった場合には（ステップＳ４０４否定）、抽出したセッションＩＤと転送先サーバアドレスとを対応付けたエントリをメッセージ中継情報に追加し（ステップＳ４０５）、処理を終了する。また、メッセージ中継装置１０は、検索結果がヒットした場合は（ステップＳ４０４肯定）、メッセージ中継情報を更新し（ステップＳ４０６）、処理を終了する。
【０１６８】
次に図２４を用いて、メッセージ中継装置１０が他のメッセージ中継装置１０ａ、１０ｂから中継方式（Ｃ）、（Ｄ）に係るサーバアドレスの問合せを受信した際に実行する処理の流れについて説明する。図２４は、メッセージ中継装置がサーバアドレスの問い合せを受信した際に実行する処理の流れを説明するためのフローチャートである。
【０１６９】
例えば、メッセージ中継装置１０は、サーバアドレスの問合せを他のメッセージ中継装置１０ａ、１０ｂから受信する（ステップＳ５０１）。すると、メッセージ中継装置１０は、問合せからセッションＩＤを抽出する（ステップＳ５０２）。次に、メッセージ中継装置１０は、抽出したセッションＩＤをキーとして、メッセージ中継情報を検索し（ステップＳ５０３）、検索結果がヒットしたか否かを判別する（ステップＳ５０４）。
【０１７０】
そして、メッセージ中継装置１０は、検索結果がヒットした場合には（ステップＳ５０４肯定）、以下の処理を実行する。すなわち、メッセージ中継装置１０は、ヒットした転送先サーバアドレスを取得し、セッションＩＤとともに問合せ応答メッセージに記載して、問合せ元のメッセージ中継装置へ送信し（ステップＳ５０５）、処理を終了する。一方、メッセージ中継装置１０は、検索結果がヒットしなかった場合は（ステップＳ５０４否定）、エラー通知を問合せ元のメッセージ中継装置へ送信し（ステップＳ５０６）、処理を終了する。
【０１７１】
次に、図２５を用いて、メッセージ中継装置１０が他のメッセージ中継装置１０ａ、１０ｂから、中継方式（Ｂ）に係る転送されたメッセージを受信した際に実行する処理の流れについて説明する。図２５は、メッセージ中継装置が転送メッセージを受信した際に実行する処理の流れを説明するためのフローチャートである。
【０１７２】
図２５に示す例では、メッセージ中継装置１０は、他のメッセージ中継装置１０ａ、１０ｂから転送されたメッセージを受信する（ステップＳ６０１）。すると、メッセージ中継装置１０は、受信したメッセージからセッションＩＤを抽出する（ステップＳ６０２）。次に、メッセージ中継装置１０は、メッセージにセッションＩＤが存在するか否かを判別し（ステップＳ６０３）、存在する場合は（ステップＳ６０３肯定）、以下の処理を実行する。
【０１７３】
すなわち、メッセージ中継装置１０は、抽出したセッションＩＤをキーとしてメッセージ中継情報を検索し、検索結果がヒットするか否かを判別する（ステップＳ６０４）。その後、メッセージ中継装置１０は、検索結果がヒットした場合は（ステップＳ６０４肯定）、ヒットしたサーバアドレスを宛先として、メッセージを送信し（ステップＳ６０５）、処理を終了する。
【０１７４】
一方、メッセージ中継装置１０は、転送されたメッセージにセッションＩＤが含まれない場合は（ステップＳ６０３否定）、メッセージの転送元となるメッセージ中継装置にエラーを通知し（ステップＳ６０６）、処理を終了する。なお、メッセージ中継装置１０は、検索結果がヒットしなかった場合は（ステップＳ６０４否定）、メッセージの転送元となるメッセージ中継装置にエラーを通知し（ステップＳ６０６）、処理を終了する。
【０１７５】
次に、図２６を用いて、メッセージ中継装置１０が情報処理サーバ４〜４ｂから応答を受信した際に実行する処理の流れを説明する。図２６は、メッセージ中継装置が応答を受信した際に実行する処理の流れを説明するためのフローチャートである。
【０１７６】
例えば、メッセージ中継装置１０は、応答を受信すると（ステップＳ７０１）、応答からセッションＩＤを抽出し（ステップＳ７０２）、抽出したセッションＩＤが示すセッションが新規セッションであるか否かを判別する（ステップＳ７０３）。そして、メッセージ中継装置１０は、抽出したセッションＩＤが示すセッションが新規セッションである場合は（ステップＳ７０３肯定）、セッション確立数のカウントアップを行う（ステップＳ７０４）。
【０１７７】
次に、メッセージ中継装置１０は、メッセージ中継情報を更新し（ステップＳ７０５）、抽出したセッションＩＤが含まれるメッセージの中継方式を方式選択テーブルから検索する（ステップＳ７０６）。そして、メッセージ中継装置１０は、中継方式が中継方式（Ｂ）〜（Ｄ）である場合は（ステップＳ７０６：方式（Ｂ、Ｃ、Ｄ））、メッセージ中継情報の配布先を決定し（ステップＳ７０７）、メッセージ中継情報を配布する（ステップＳ７０８）。
【０１７８】
一方、メッセージ中継装置１０は、中継方式が中継方式（Ａ）である場合には（ステップＳ７０６：方式（Ａ））、全てのメッセージ中継装置へメッセージ中継装置を配布する（ステップＳ７０９）。その後、メッセージ中継装置１０は、メッセージ処理数をカウントアップし（ステップＳ７１０）、ロードバランサ３を介してクライアント２〜２ｂに応答を送信し（ステップＳ７１１）、処理を終了する。
【０１７９】
一方、メッセージ中継装置１０は、抽出したセッションＩＤが示すセッションが新規セッションではない場合は（ステップＳ７０３否定）、応答に係るメッセージの転送元が他のメッセージ中継装置であるか否かを判別する（ステップＳ７１２）。そして、メッセージ中継装置１０は、応答に係るメッセージの転送元が他のメッセージ中継装置である場合は（ステップＳ７１２肯定）、メッセージ処理数のカウントアップを行う（ステップＳ７１３）。
【０１８０】
その後、メッセージ中継装置１０は、メッセージ転送元のメッセージ中継装置へ応答を転送し（ステップＳ７１４）、処理を終了する。一方、メッセージ中継装置１０は、応答に係るメッセージの転送元が他のメッセージ中継装置ではない場合は（ステップＳ７１２否定）、ステップＳ７１０の処理を実行する。
【０１８１】
［実施例１の効果］
上述したように、メッセージ中継装置１０は、情報処理サーバ４〜４ｂ上で動作するプログラムによって確立されたセッションのセッションＩＤと、セッションＩＤが確立された情報処理サーバ４〜４ｂのサーバアドレスとを対応付けたメッセージ中継情報を記憶する。そして、メッセージ中継装置１０は、メッセージに含まれるセッションＩＤがメッセージ中継情報に含まれているか判別し、含まれていないと判別した場合には、方式選択テーブルに記憶された中継方式を用いてメッセージを送信する。すなわち、メッセージ中継装置１０は、セッションを確立したプログラムが提供するサービスに応じて方式選択サーバ５０が選択した中継方式を用いて、メッセージを転送する。
【０１８２】
このため、メッセージ中継装置１０は、メッセージを中継する際のスループットを向上させることができる。すなわち、方式選択サーバ５０は、セッションを確立したプログラムが提供するサービスごとに、スループットが最大となる中継方式を選択する。この結果、メッセージ中継装置１０は、スループットが最大となる中継方式でメッセージを中継することができる。
【０１８３】
また、方式選択サーバ５０は、サービスのセッション更新頻度に応じて中継方式を選択する。このため、メッセージ中継装置１０は、メッセージを中継する際のスループットを向上させることができる。例えば、メッセージ中継装置１０は、サービスのセッション更新頻度が低い場合には、中継方式（Ａ）の方式でメッセージの中継を行い。サービスのセッション更新頻度が高い場合は、他の中継方式（Ｂ）〜（Ｄ）でメッセージの中継を行う。このため、メッセージ中継装置１０は、メッセージを中継する際の処理負荷を削減し、スループットを向上させることができる。
【０１８４】
また、メッセージ中継装置１０は、メッセージを中継する際に、中継方式（Ａ）〜（Ｄ）のいずれかを用いて、メッセージの中継を行う。このため、メッセージ中継装置１０は、メッセージを中継する際の処理負荷やセッション更新頻度等に応じて、スループットが最大となる中継方式でメッセージを中継することができる。
【０１８５】
また、方式選択サーバ５０は、セッション更新頻度と、メッセージ中継情報を配布する際のリソース量と、メッセージを他のメッセージ中継装置に転送する際のリソース量を用いて、各中継方式（Ａ）〜（Ｄ）を実行した際のスループットを算出する。また、方式選択サーバ５０は、メッセージを送信するサーバの問合せを行う際のリソース量を用いて、各中継方式（Ａ）〜（Ｄ）を実行した際のスループットを算出する。そして、方式選択サーバ５０は、算出したスループットが最も大きい中継方式を選択する。このため、メッセージ中継装置１０は、メッセージを転送する際のスループットが最大となる中継方式を用いて、メッセージの転送を行うことができる。
【０１８６】
また、メッセージ中継装置１０は、セッションを更新する頻度と、メッセージ中継情報を同期する際のリソース量と、メッセージを他のメッセージ中継装置に転送する際のリソース量とを測定する。そして、方式選択サーバ５０は、メッセージ中継装置１０が測定したセッションを更新する頻度と各リソース量とを用いて、各中継方式（Ａ）〜（Ｄ）におけるスループットの値を算出する。このため、メッセージ中継装置１０は、実測値を用いて予測されるスループットの値に応じた中継方式でメッセージを転送するので、より最適な中継方式でメッセージを中継することができる。
【０１８７】
また、メッセージ中継装置１０は、情報処理サーバ４〜４ｂから応答を受信すると、受信した応答に含まれるセッションＩＤが示すセッションが新規セッションであるか否かを判別する。そして、メッセージ中継装置１０は、応答に含まれるセッションＩＤが示すセッションが新規セッションである場合は、セッションを確立したプログラムが提供するサービスに応じて、メッセージの中継方法を選択する。すなわち、メッセージ中継装置１０は、新規セッションを確立したプログラムが提供するサービスと同一のサービスに対する後続のメッセージを中継する中継方法を選択する。このため、メッセージ中継装置１０は、新規セッションを確立したプログラムが提供するサービスについてのメッセージを中継する際に、スループットを向上させることができる。
【０１８８】
また、メッセージ中継装置１０は、応答のセッションＩＤが示すセッションが新規セッションではない場合は、応答をクライアント２〜２ｂ、または、メッセージ転送元のメッセージ中継装置１０ａ、１０ｂに転送する。このため、メッセージ中継装置１０は、メッセージを他のメッセージ中継装置１０ａ、１０ｂに転送する中継方式（Ｂ）を採用した場合にも、適切に応答の転送を行うことができる。
【０１８９】
また、メッセージ中継装置１０は、サービスと中継方式とを対応付けた方式選択テーブルを記憶する。そして、メッセージ中継装置１０は、方式選択テーブルに記憶された中継方式を用いて、メッセージの中継を行う。このため、メッセージ中継装置１０は、メッセージを転送する際に中継方式を選択する処理を迅速に行う事ができるので、メッセージ転送時のレイテンシを削減することができる。
【実施例２】
【０１９０】
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例２として本発明に含まれる他の実施例を説明する。
【０１９１】
（１）リソース量の測定タイミングについて
上述したメッセージ中継装置１０は、セッション更新頻度やメッセージを転送する際のリソース量等を所定のタイミングで測定し、測定結果を所定のタイミングおきに方式選択サーバ５０に送信した。ここで、メッセージ中継装置１０がメッセージのリソース量等を測定する処理は、任意のタイミングで行うことができる。
【０１９２】
例えば、図２７、図２８を用いて、メッセージ中継装置１０〜１０ｂがメッセージごとに方式選択サーバ５０に通知を行った際の処理の流れについて説明する。図２７は、セッションの更新頻度を収集する際の計算リソースを説明するための図である。また、図２８は、メッセージ中継処理で消費する計算リソース量を説明するための図である。
【０１９３】
例えば、メッセージ中継装置１０〜１０ｂは、メッセージを受信するごとに、メッセージに係るウェブアプリケーションとセッションＩＤとをセッションが確立した際と確立後に方式選択サーバ５０に送信する。すると、方式選択サーバ５０は、メッセージを受信する度に、各メッセージ中継装置１０〜１０ｂからのメッセージを集計し、集計結果からウェブアプリケーションごとのセッション更新頻度を算出する。
【０１９４】
また、図２８に示す例では、各メッセージ中継装置１０〜１０ｂは、メッセージの中継を行うたびに、処理を行う前と後のＣＰＵ時間ｃ１、ｃ２を取得し、ｃ２からｃ１を減算したリソース量（ＣＰＵ時間）を算出する。そして、各メッセージ中継装置１０〜１０ｂは、算出したＣＰＵ時間を方式選択サーバ５０に転送する。すると、方式選択サーバ５０は、メッセージが中継されるたびに、リソース量を集計し、スループットを算出する。
【０１９５】
ここで、各メッセージ中継装置１０〜１０ｂがメッセージの中継処理を行うたびにセッション更新頻度の通知やリソース量の通知を行った場合には、メッセージ中継装置１０〜１０ｂ、方式選択サーバ５０の双方での処理負荷が増加する。そこで、各メッセージ中継装置１０〜１０ｂは、所定の時間間隔で、それまでのリソース量の平均を算出し、算出した平均を方式選択サーバ５０に通知してもよい。
【０１９６】
図２９は、平均値を方式選択サーバへ通知する際の消費計算リソース量を説明するための図である。図２９に示すように、各メッセージ中継装置１０〜１０ｂは、メッセージの中継処理を行うごとに、アプリケーションごとのメッセージ数とセッション確立数とのカウンタをカウントアップする。そして、各メッセージ中継装置１０〜１０ｂは、カウントした値を所定の時間間隔で、方式選択サーバ５０に通知する。また、メッセージ中継装置１０〜１０ｂは、リソース量を平均値で算出し、算出した平均値を方式選択サーバ５０に送信する。
【０１９７】
このため、各メッセージ中継装置１０〜１０ｂは、中継方式を選択する際に消費するリソース量を削減することができる。すなわち、各メッセージ中継装置１０〜１０ｂは、セッション更新頻度やリソース量の平均値を算出し、算出した平均値を方式選択サーバ５０に送信する。このため、各メッセージ中継装置１０〜１０ｂは、中継方式を選択する際のリソース量を削減することができる。
【０１９８】
（２）セッション更新頻度やリソース量を送信するメッセージ中継装置について
実施例１に係るメッセージ中継装置１０〜１０ｂは、それぞれメッセージ処理数、セッション確立数、リソース量をメッセージ中継装置に通知した。しかし、実施例は、これに限定されるものではなく、例えば、１台のメッセージ中継装置をサンプリングノードとし、サンプリングノードのみが、メッセージ処理数、セッション確立数、リソース量を通知することとしてもよい。
【０１９９】
図３０は、１台のメッセージ中継装置をサンプリングノードとした際の処理を説明するための図である。図３０に示す例では、メッセージ中継装置１０〜１０ｂのうち、サンプリングノードとして選択されたメッセージ中継装置１０のみが、方式選択サーバ５０に対して、メッセージを送信する。
【０２００】
ここで、ロードバランサ３は、セッションＩＤを参照せず、ＴＣＰヘッダ等の情報を用いて各メッセージ中継装置１０〜１０ｂに対し、メッセージをランダムに振り分ける。このため、各メッセージ中継装置１０〜１０ｂには、セッションの確立を伴うメッセージが偏ることなく振分けられる。この結果、情報処理システム１は、任意のメッセージ中継装置をサンプルノードとすることで、適切な中継方式を選択することができる。
【０２０１】
また、情報処理システム１は、各メッセージ中継装置１０〜１０ｂが消費するリソース量や、方式選択サーバ５０が中継方式を選択する際に消費するリソース量を削減することができる。このため、情報処理システム１は、各メッセージ中継装置１０〜１０ｂのスループットを向上させることができる。
【０２０２】
（３）リソース量の平均値について
実施例１に係るメッセージ中継装置１０は、メッセージを処理するたびに、リソース消費量ＤＢ記憶部１４に記憶されたリソース消費量を上書きした。しかし、実施例はこれに限定されるものではない。例えば、メッセージ中継装置１０は、リソース消費量ＤＢ記憶部１４に記憶されたリソース消費量と新たなリソース消費量との和を２で除算した値を新たなリソース消費量として、リソース消費量ＤＢに登録してもよい。このような処理を行った場合には、メッセージ中継装置１０は、例えば、平均から大きく外れたリソース消費量が測定された場合にも、誤った中継方式によるメッセージの転送を防げる。
【０２０３】
（４）中継装置の切り替えについて
実施例１においては、中継方式（Ａ）では、あるセッションＩＤについてのメッセージ中継情報を全てのメッセージ中継装置１０〜１０ｂが記憶した。また、中継方式（Ｂ）、（Ｃ）では、あるセッションＩＤについてのメッセージ中継情報を、１つのメッセージ中継装置が記憶した。
【０２０４】
また、中継方式（Ｄ）では、あるセッションＩＤについてのメッセージ中継情報を１つのメッセージ中継装置が記憶するとともに、複数のメッセージ中継装置がキャッシュしていた。この結果、あるサービスについて中継方式が切り替わった場合には、各メッセージ中継装置１０〜１０ｂのメッセージ中継情報についても更新が必要である。
【０２０５】
そこで、情報処理システム１は、セッションを管理するための機能を方式選択サーバ５０に設けることとしてもよい。例えば、メッセージ中継装置１０〜１０ｂは、新規セッションが確立した際に、サービスとセッションＩＤとのペアを方式選択サーバ５０に通知する。また、メッセージ中継装置１０〜１０ｂは、タイムアウト等によりセッションを消去する際に、方式選択サーバ５０にセッション消去を通知する。そして、方式選択サーバ５０は、各メッセージ中継装置１０〜１０ｂから通知されたサービスとセッションＩＤとのペア、およびセッション消去の通知に応じて、確立したセッションを管理する。
【０２０６】
ここで、図３１は、確立済みセッション情報の一例を説明するための図である。図３１に示す例では、方式選択サーバ５０は、サービスと、各サービスについて確立したセッションを示すセッションＩＤとを対応付けたリストを記憶する。そして、方式選択サーバ５０は、あるサービスについての中継方式が、中継方式（Ｂ）〜（Ｄ）から中継方式（Ａ）に変更となる場合は、以下の処理を実行する。
【０２０７】
まず、方式選択サーバ５０は、図３１に示すリストを参照し、中継方式が切り替わったサービスについて確立しているセッションのセッションＩＤを取得する。そして、方式選択サーバ５０は、各セッションＩＤについてハッシュ計算と剰余の演算を行い、メッセージ中継情報を記憶するメッセージ中継装置を特定する。
【０２０８】
そして、方式選択サーバ５０は、特定したメッセージ中継装置以外のメッセージ中継装置に対して、メッセージ中継情報を配布する。なお、方式選択サーバ５０は、特定したメッセージ中継装置からメッセージ中継情報を取得し、特定したメッセージ中継装置以外のメッセージ中期装置に対してメッセージ中継情報を配布することとしてもよい。
【０２０９】
一方、方式選択サーバ５０は、中継方式（Ａ）から中継方式（Ｂ）〜（Ｄ）に変更となる場合は、以下の処理を実行する。まず、方式選択サーバ５０は、図３１に示すリストを参照し、中継方式が切り替わったサービスについて確立しているセッションのセッションＩＤを取得する。そして、方式選択サーバ５０は、各セッションＩＤについてハッシュ計算と剰余の演算を行い、メッセージ中継情報を記憶するメッセージ中継装置を特定する。その後、方式選択サーバ５０は、特定したメッセージ中継装置以外のメッセージ中継装置に対して、メッセージ中継情報の削除を要求する。
【０２１０】
このように、情報処理システム１は、方式選択サーバ５０に確立済みセッションの情報を管理させ、中継方式が変更となるたびに、メッセージ中継情報の更新を行った場合には、以下の効果を有する。すなわち、情報処理システム１は、各メッセージ中継装置１０〜１０ｂが、古いメッセージ中継情報を用いてメッセージの転送を行うことを防ぐことができる。
【０２１１】
なお、上述したように、中継方式が変化した際のメッセージ中継情報の更新について、方式選択サーバ５０が集中管理する場合には、負荷が高くなる場合がある。このため、メッセージ中継情報の更新は、各メッセージ中継装置１０〜１０ｂが分散して実施することとしてもよい。
【０２１２】
例えば、各メッセージ中継装置１０〜１０ｂは、方式選択テーブルが更新されたことをトリガとして、以下の処理を実行する。まず、各メッセージ中継装置１０〜１０ｂは、中継方式が変更となったサービスについて確立されたセッションのリストを取得し、取得したリストの中から、自装置が担当となるセッションＩＤを抽出する。すなわち、セッションＩＤのハッシュ値を剰余演算した値が自装置に付与された番号であるセッションＩＤを抽出する。なお、効率化のため、メッセージ中継情報に自装置が保持するフラグをセットしておくことで、自装置が担当のセッションＩＤを識別することとしてもよい。
【０２１３】
そして、各メッセージ中継装置１０〜１０ｂは、メッセージ中継装置リストを参照して、自装置以外のメッセージ中継装置のアドレスを識別し、識別したアドレスに対して、メッセージ中継情報の削除を要求してもよい。
【０２１４】
（５）メッセージについて
実施例１では、図１１を用いてメッセージの一例について説明した。しかし、実施例は、これに限定されるものではない。例えば、メッセージには、送信元ＭＡＣアドレス、送信先ＭＡＣアドレス、送信元ＩＰアドレスおよびポート番号、送信先ＩＰアドレスおよびポート番号が格納される。
【０２１５】
また、メッセージには、ＨＴＴＰプロトコルヘッダとメッセージコンテンツが格納され、ＨＴＴＰプロトコルヘッダに、Ｃｏｏｋｉｅの一部として、セッションＩＤが格納されている。しかし、セッションＩＤは、他のフィールドや、メッセージコンテンツ、ＨＴＴＰ以外のプロトコルのヘッダに格納することとしてもよい。
【０２１６】
また、メッセージ中継装置１０〜１０ｂによる問い合わせ、メッセージの転送、応答等の制御メッセージは、メッセージと同様の形式で情報を送受信することとしてもよい。すなわち、制御メッセージには、送信元ＭＡＣアドレス、送信先ＭＡＣアドレス、送信元ＩＰアドレスおよびポート番号、送信先ＩＰアドレスおよびポート番号が格納されることとしてもよい。また、メッセージコンテンツとして、セッションＩＤが格納されていることとしてもよい。
【０２１７】
（６）方式選択サーバ５０が実行する処理について
上述した実施例１にでは、方式選択サーバ５０が各メッセージ中継装置１０〜１０ｂからリソース量やセッション確立数、メッセージ処理数等を取得し、中継方法を算出した。しかし実施例はこれに限定されるものではなく、例えば、各メッセージ中継装置１０
〜１０ｂのうちいずれかのサンプルノードが方式選択サーバ５０と同様の処理を行い、選択した中継方法を他のメッセージ中継装置へ通知することとしてもよい。
【０２１８】
すなわち、方式選択サーバ５０の機能を、任意のメッセージ中継装置１０〜１０ｂに含めてもよい。また、方式選択サーバ５０の機能を全てのメッセージ中継装置１０〜１０ｂに含め、代表となる１台のメッセージ中継装置が、方式選択サーバ５０の機能を発揮してもよい。
【０２１９】
（７）プログラム
ところで、実施例１に係るメッセージ中継装置１０は、ハードウェアを利用して各種の処理を実現する場合を説明した。しかし、実施例はこれに限定されるものではなく、あらかじめ用意されたプログラムをメッセージ中継装置１０が有するコンピュータで実行することによって実現するようにしてもよい。そこで、以下では、図３２を用いて、メッセージ中継装置１０と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図３２は、中継プログラムを実行するコンピュータの一例を説明するための図である。
【０２２０】
図３２に例示されたコンピュータ１００は、ＲＯＭ（Read  Only  Memory）１１０、ＨＤＤ（Hard  Disk  Drive）１２０、ＲＡＭ（Random  Access  Memory）１３０、ＣＰＵ（Central  Processing  Unit）１４０がバス１６０で接続される。また、図３２に例示されたコンピュータ１００は、メッセージを送受信するためのＩ／Ｏ（Input  Output）１５０を有する。
【０２２１】
ＲＡＭ１３０には、中継プログラム１３１があらかじめ保持される。ＣＰＵ１４０が中継プログラム１３１をＲＡＭ１３０から読み出して実行することによって、図３２に示す例では、中継プログラム１３１は、中継プロセス１４１として機能するようになる。なお、中継プロセス１４１は、図５のメッセージ中継装置１０と同様の機能を発揮する。
【０２２２】
なお、本実施例で説明した中継プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ（Compact  Disc  Read  Only  Memory）、ＭＯ（Magneto  Optical  Disc）、ＤＶＤ（Digital  Versatile  Disc）などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【０２２３】
１  情報処理システム
２〜２ｂ  クライアント
３  ロードバランサ
４〜４ｂ  情報処理サーバ
１０〜１０ｂ  メッセージ中継装置
１１  中継処理部
１２  中継先情報管理部
１３  計測結果通知部
１４  リソース消費量ＤＢ記憶部
１５  セッション更新頻度計算用カウンタ部
１６  応答受信部
１７  応答受信部
１８  中継方式選択部
１９  新規セッション識別部
２０  新規セッションカウンタ更新部
２１  メッセージ処理数カウンタ更新部
２２  応答送信部
２３  他装置転送部
２４  リクエスト受信部
２５  方式選択テーブル記憶部
２６  中継方式選択部
２７  リクエスト受信部
２８  中継先決定部
２９  メッセージ中継情報記憶部
３０  リクエスト転送部
３１  転送先問合せ部
３２  他装置転送部
３３  中継先問合せ部
３４  キャッシュ
３５  メッセージ中継装置リスト記憶部
３６  中継先情報回答部
３７  中継先情報取得部
３８  中継先情報保持装置検索部
３９  テーブル配布部
４０  テーブル更新部
４１  リソース使用量通知部
４２  セッション更新頻度通知部
５０  方式選択サーバ
５１  計測値集計部
５２  計測情報ＤＢ記憶部
５３  スループット予測値計算部
５４  中継方式決定部
５５  中継方式制御部
【図１】
0005928040.tif 000007
【図２】
0005928040.tif 000008
【図３】
0005928040.tif 000009
【図４】
0005928040.tif 000010
【図５】
0005928040.tif 000011
【図６】
0005928040.tif 000012
【図７】
0005928040.tif 000013
【図８】
0005928040.tif 000014
【図９】
0005928040.tif 000015
【図１０】
0005928040.tif 000016
【図１１】
0005928040.tif 000017
【図１２】
0005928040.tif 000018
【図１３】
0005928040.tif 000019
【図１４】
0005928040.tif 000020
【図１５】
0005928040.tif 000021
【図１６】
0005928040.tif 000022
【図１７】
0005928040.tif 000023
【図１８】
0005928040.tif 000024
【図１９】
0005928040.tif 000025
【図２０】
0005928040.tif 000026
【図２１】
0005928040.tif 000027
【図２２】
0005928040.tif 000028
【図２３】
0005928040.tif 000029
【図２４】
0005928040.tif 000030
【図２５】
0005928040.tif 000031
【図２６】
0005928040.tif 000032
【図２７】
0005928040.tif 000033
【図２８】
0005928040.tif 000034
【図２９】
0005928040.tif 000035
【図３０】
0005928040.tif 000036
【図３１】
0005928040.tif 000037
【図３２】
0005928040.tif 000038
【図３３】
0005928040.tif 000039
【図３４】
0005928040.tif 000040
【図３５】
0005928040.tif 000041
【図３６】
0005928040.tif 000042