以下の実施例1では、図1を用いて、実施例1に係る情報処理システムの一例を説明する。図1は、実施例1に係る情報処理システムを説明するための図である。図1に示す例では、情報処理システム1は、複数のクライアント2〜2b、ロードバランサ3、複数の情報処理サーバ4〜4b、複数のメッセージ中継装置10〜10b、方式選択サーバ50を有する。
また、図1に示す例では、各クライアント2〜2bとロードバランサ3、ロードバランサ3と各メッセージ中継装置10〜10b、各メッセージ中継装置10〜10bと方式選択サーバ50とが接続されている。また、各メッセージ中継装置10〜10bは、各情報処理サーバ4〜4bと相互に接続されている。
なお、図1に示す例では、クライアント2〜2bを図示したが、情報処理システム1は、任意の数のクライアントを接続することができる。また、図1に示す例では、メッセージ中継装置10〜10b、情報処理サーバ4〜4bを図示したが、実施例はこれに限定されるものではなく、情報処理システム1は、任意の数のメッセージ中継装置、および任意の数の情報処理サーバ備えることとしてもよい。
以下、クライアント2、ロードバランサ3、情報処理サーバ4、メッセージ中継装置10、方式選択サーバ50が実行する処理について説明する。なお、クライアント2a、2bは、クライアント2と同様の機能を発揮するものとして、説明を省略する。また、情報処理サーバ4a、4bは、情報処理サーバ4と同様の機能を発揮するものとして、説明を省略する。また、メッセージ中継装置10a、10bは、メッセージ中継装置10と同様の機能を発揮するものとして、説明を省略する。
クライアント2は、各情報処理サーバ4〜4bが実行するウェブアプリケーション等との間でセッションを確立し、継続したサービスを受ける利用者端末である。例えば、クライアント2は、サービスの提供を要求するメッセージを発行し、ロードバランサ3に送信する。また、クライアント2は、メッセージに対する応答に含まれるセッションIDを記憶する。ここで、セッションIDとは、確立したセッションを示す識別子である。
そして、クライアント2は、継続したサービスの提供を要求する際は、送信するメッセージに記憶したセッションIDを格納する。その後、クライアント2は、セッションIDを格納したメッセージをロードバランサ3に送信する。
ロードバランサ3は、クライアント2〜2bからメッセージを受信すると、受信したメッセージのL(Layer)3およびL(Layer)4情報を用いて、メッセージをいずれかのメッセージ中継装置に振分ける。例えば、ロードバランサ3は、受信したメッセージのTCP(Transmission Control Protocol)/IPヘッダを識別し、識別したTCP/IPヘッダの送信元IPアドレス、送信元ポート番号、宛先IPアドレス、宛先ポート番号の値に応じて、メッセージ中継装置10〜10bへの振り分けを行う。また、ロードバランサ3は、メッセージ中継装置10〜10bから応答を受信した場合には、受信した応答を、リクエストを発行したクライアント2〜2bに転送する。
このように、ロードバランサ3は、セッションIDを参照せずに、クライアント2〜2bが発行したメッセージを各メッセージ中継装置10〜10bに振分ける。このため、各メッセージ中継装置10〜10bは、同一のセッションIDを含むリクエストメッセージが振分けられるとは限らない。この結果、各メッセージ中継装置10〜10bは、同一のセッションIDを含むリクエストメッセージの振分け先となる情報処理サーバの同一性を保持する機能が要求される。
情報処理サーバ4は、クライアント2〜2bに対して継続するサービスを提供するプログラムを実行する。例えば、情報処理サーバ4は、いずれかのメッセージ中継装置10〜10bからからセッションIDを含まないメッセージを受信すると、初回のサービス提供を行う。具体的には、情報処理サーバ4が実行するプログラムは、サービスの提供を継続する場合は、新たなセッションIDを生成し、生成したセッションIDと提供したサービスに係る情報とを対応付けて記憶する。
そして、情報処理サーバ4は、生成したセッションIDを応答に格納してメッセージ中継装置10〜10bに送信する。すると、セッションIDが含まれる応答は、メッセージ中継装置10〜10b、ロードバランサ3を介して、メッセージを発行したクライアントに転送される。
また、情報処理サーバ4が実行するプログラムは、所定の条件を満たした場合には、セッションを更新する。例えば、情報処理サーバ4が実行するプログラムは、クライアント2に提供するサービスについて、メッセージを受信した際に、前回メッセージを受信した時刻から所定の時間が経過している場合は、セッションを更新すると判別する。そして、情報処理サーバ4が実行するプログラムは、新たなセッションIDを生成するとともに、新たなセッションIDを応答に含めて送信する。
ここで、図2を用いて、情報処理サーバ4が実行するプログラムがセッションを更新する頻度、すなわち、各サービスのセッション更新頻度について説明する。図2は、各サービスがセッションを更新する頻度を説明するための図である。なお、図2に示す例では、情報処理サーバ4が提供するサービスの一例として、ウェブを介して提供するサービスをサイトごとに記載した。具体的には、図2に示す例では、各サイトが提供するサービスのカテゴリと、各サイトの閲覧者と、各サイトのページビューと、各サイトにおけるセッションの更新頻度とを対応付け、閲覧者が多い順に記載した。
ここで、更新頻度は、1つのウェブページを取得する際に10回のリクエストが発行され、ユーザーが1回ログインするたびに1回のセッションが確立される際に、各ユーザが1日に1回ログインするものとして算出した値である。この結果、例えば、サイト「aaa.com」におけるセッションはリクエストが「351」回発行されるごとに「1」回更新される。
また、例えば、サイト「fff.com」におけるセッションは、リクエストが「4」回発行されるごとに「1」回更新される。また、サイト「lll.com」におけるセッションは、リクエストが「472」回発行されるごとに「1」回更新される。このように、情報処理サーバ4は、クライアント2〜2bに提供するサービスごとに、異なる頻度でセッションを更新する。
図1に戻って、メッセージ中継装置10は、セッションIDと、セッションが確立したサービスを提供するサーバのアドレスとを対応受けたメッセージ中継情報を記憶する。また、メッセージ中継装置10は、ロードバランサ3からメッセージを受信すると、受信したメッセージを解析し、格納されたセッションIDを取得する。そして、メッセージ中継装置10は、取得したセッションIDがメッセージ中継情報に含まれているか否かを判別する。
そして、メッセージ中継装置10は、取得したセッションIDがメッセージ中継情報に含まれている場合は、取得したセッションIDと対応付けられたアドレスのサーバにメッセージを転送する。一方、メッセージ中継装置10は、取得したセッションIDがメッセージ中継情報に含まれていない場合は、セッションIDが示すセッションが確立されたサービスにおけるセッションの更新頻度に応じて、メッセージの中継方式を選択する。
具体的には、メッセージ中継装置10は、方式選択サーバ50がサービスにおけるセッションの更新頻度に応じて選択したメッセージの中継方式を取得する。そして、メッセージ中継装置10は、取得した中継方式を用いて、メッセージの転送を行う。
ここで、図3を用いて、メッセージ中継装置10がメッセージの転送を行う中継方式を説明する。図3は、メッセージの中継方法を説明するための図である。図3に示すように、メッセージ中継装置10は、中継方式(A)〜(D)の4つの中継方法のうち、いずれかの中継方法を用いてメッセージの中継を行う。
以下、各中継方式(A)〜(D)について説明する。例えば、中継方式(A)とは、メッセージ中継情報を更新するたびに、各メッセージ中継装置10〜10bのメッセージ中継情報を同期する中継方式を用いる。中継方式(A)では、各メッセージ中継装置10〜10bが記憶するメッセージ中継情報が同期される。このため、各メッセージ中継装置10〜10bは、ロードバランサ3がメッセージをどのメッセージ中継装置10〜10bに振分けても、そのまま情報処理サーバ4〜4bへの転送を行う。
この結果、中継方式(A)では、メッセージをサーバへ中継する際の消費リソース量を削減できる。また、中継方式(A)では、メッセージのサイズが大きくなり、メッセージ中継処理の負荷の大きい場合にも、スループットに対する影響を他の中継方式(B)〜(D)と比較して小さくする。
しかしながら、中継方式(A)では、新たなセッションが確立された場合、あるいは、セッションが更新された場合に、新たなセッションIDを含む応答を受信すると、各メッセージ中継装置10〜10bのメッセージ中継情報を同期させる。このため、中継方式(A)では、セッションが更新された際に消費するリソース量が他の中継方式(B)〜(D)と比較して大きくなる。
また、中継方式(B)とは、各メッセージ中継装置10〜10bがそれぞれ異なるメッセージ中継情報を有する中継方式である。例えば、各メッセージ中継装置10〜10bは、セッションIDがハッシュ計算等により各メッセージ中継装置10〜10bに対してあらかじめ振分けられている。そして、各メッセージ中継装置10〜10bは、振分けられたセッションIDを含むメッセージ中継情報を記憶する。
例えば、メッセージ中継装置10は、自身に振分けられていないセッションIDを含むメッセージをクライアント2から受信する。そして、メッセージ中継装置10は、ハッシュ計算等により、受信したメッセージのセッションIDが振分けられたメッセージ中継装置、例えば、メッセージ中継装置10aを識別する。
そして、メッセージ中継装置10は、識別したメッセージ中継装置10aにメッセージを転送する。すると、メッセージ中継装置10aは、自身のメッセージ中継情報を用いて、サーバにメッセージを送信するとともに、サーバから受信した応答をメッセージ中継装置10に転送する。そして、メッセージ中継装置10は、メッセージ中継装置10aから受信した応答を、クライアント2へ送信する。
この結果、中継方式(B)では、各メッセージ中継装置10〜10bが記憶するメッセージ中継情報の同期を不要とするので、セッション更新時の消費リソース量を中継方式(A)と比較して小さくする。しかし、中継方式(B)では、ハッシュ計算等を用いてセッションIDが振分けられたメッセージ中継装置を識別し、識別したメッセージ中継装置を介してメッセージと応答の送受信を行う。このため、中継方式(B)では、メッセージ中継時の消費リソース量や、メッセージ中継処理の負荷が増大した際の影響が中継方式(A)と比較して大きくなる。
また、中継方式(C)とは、中継方式(B)と同様に、各メッセージ中継装置10〜10bにセッションIDが振分けられている中継方式である。また、中継方式(C)では、メッセージ中継装置10は、受信したメッセージのセッションIDが自身のメッセージ中継情報に含まれない場合には、セッションIDが振分けられたメッセージ中継装置にメッセージの転送先となるサーバの問合せを行う中継方式である。
例えば、メッセージ中継装置10は、受信したメッセージのセッションIDが自身のメッセージ中継装置に含まれていない場合は、ハッシュ計算等を用いて、セッションIDが振分けられたメッセージ中継装置を識別する。そして、メッセージ中継装置10は、識別したメッセージ中継装置にセッションIDを通知し、識別したメッセージ中継装置からセッションIDと対応付けられたサーバのアドレスを取得する。その後、メッセージ中継装置10は、取得したアドレスのサーバに、受信したメッセージを送信する。
この結果、中継方式(C)では、セッション更新時の消費リソース量を中継方式(A)と比較して小さくする。また、中継方式(C)では、メッセージの転送を行わないので、メッセージ中継処理の負荷が増大した際の影響を中継方式(B)と比較して、小さくする。しかし、中継方式(C)では、メッセージ中継時にハッシュ計算等を行うので、メッセージを中継する際に消費するリソース量を中継方式(A)と比較して増大させる。
また、中継方式(D)は、中継方式(C)と同様に、メッセージの転送先となるサーバを他のメッセージ中継装置に問い合わせる方式である。また、中継方式(D)では、各メッセージ中継装置10〜10bは、他のメッセージ中継装置に問い合わせた結果取得するサーバのアドレスを受信したメッセージのセッションIDと対応付けて自身のメッセージ中継情報にキャッシュする。
このため、メッセージ転送装置10〜10bは、同じセッションIDを含むメッセージを再度受信した際に、他のメッセージ転送装置に問合せを行わずとも、メッセージをサーバに転送する。この結果、中継方式(D)では、中継方式(C)と同様に、セッションを更新する際に消費するリソース量とメッセージ中継処理の負荷が増大した際の影響を他の中継方式と比較して小さくすることができる。しかし、中継方式(D)では、メッセージ中継時に消費するリソース量が中継方式(A)と比較して大きくなる。
このように、各中継方式(A)〜(D)は、メッセージ中継時に消費するリソース量、セッションが更新された際に消費するリソース量、メッセージ中継処理10の負荷が増大した際の影響がそれぞれ異なる。そこで、メッセージ中継装置10は、セッションIDが示すセッションが確立されたサービスごとに、中継方式(A)〜(D)のいずれかを用いてメッセージの転送を行う。具体的には、メッセージ中継装置10は、サービスごとに方式選択サーバ50が選択する中継方式を用いて、メッセージの中継を行う。
方式選択サーバ50は、メッセージ中継装置10〜10bから、セッションの更新頻度、メッセージ中継情報を同期する際に必要なリソース量の通知を受信する。また、方式選択サーバ50は、メッセージを他の中継装置に転送する際に消費するリソース量、サーバの問合せを行う際に消費するリソース量の通知を受信する。そして、方式選択サーバ50は、受信した更新頻度やリソース量を用いて、各中継方式(A)〜(D)を用いてメッセージの転送を行う際のスループットを算出する。その後、方式選択サーバ50は、スループットがもっとも大きい中継方式を各メッセージ中継装置10〜10bに通知する。
以下、図4を用いて、メッセージ中継装置10と方式選択サーバ50とが実行する処理について説明する。図4は、実施例1に係るメッセージ中継装置と方式選択サーバが実行する処理を説明するための図である。まず、メッセージ中継装置10は、メッセージや応答の中継処理を行う。また、メッセージ中継装置10は、他のメッセージ中継装置10a、10bとメッセージ中継情報の同期や、転送先サーバの問合せを行う。
また、メッセージ中継装置10は、各中継処理において消費したリソース量を計測し、計測結果を方式選択サーバ50に通知する計測結果通知処理を実行する。すると、方式選択サーバ50は、メッセージ中継装置10から通知された計測結果を計測情報DB(Data Base)に格納する。そして、方式選択サーバ50は、計測情報DBに格納した計測結果を用いて、スループットの予測値を計算し、計算したスループットの予測値が最も大きい中継方式を選択する中継方式選択処理を実行する。
その後、方式選択サーバ50は、選択した中継方式をメッセージ中継装置10に通知する。すると、メッセージ中継装置10は、通知された中継方式を方式選択設定DBに格納する。そして、メッセージ中継装置10は、方式選択設定DBに格納された中継方式を用いて、メッセージの中継を行う。
次に、図5を用いて、メッセージ中継装置10の機能構成について説明する。図5は、実施例1に係るメッセージ中継装置の機能構成を説明するための図である。図5に示す例では、メッセージ中継装置10は、中継処理部11、中継先情報管理部12、計測結果通知部13、リソース消費量DB記憶部14、セッション更新頻度計算用カウンタ部15を有する。また、中継処理部11は、応答受信部16、応答受信部17、中継方式選択部18、新規セッション識別部19、新規セッションカウンタ更新部20、メッセージ処理数カウンタ更新部21を有する。
また、中継処理部11は、応答送信部22、他装置転送部23、リクエスト受信部24、方式選択テーブル記憶部25、中継方式選択部26、リクエスト受信部27、中継先決定部28、メッセージ中継情報記憶部29、リクエスト転送部30を有する。また、中継処理部11は、転送先問合せ部31、他装置転送部32、中継先問合せ部33、キャッシュ34、メッセージ中継装置リスト記憶部35を有する。
また、中継先情報管理部12は、中継先情報回答部36、中継先情報取得部37、中継先情報保持装置検索部38、テーブル配布部39、テーブル更新部40を有する。また、計測結果通知部13は、リソース使用量通知部41、セッション更新頻度通知部42を有する。まず、以下の説明では、方式選択テーブル記憶部25が記憶する方式選択テーブル、メッセージ中継情報記憶部29が記憶するリクエスト中継情報、メッセージ中継装置リスト記憶部35が記憶するメッセージ中継装置リストの一例について説明する。
図6は、方式選択テーブルの一例を説明するための図である。図6に示すように、方式選択テーブル記憶部25は、各サーバ4〜4bが提供するウェブサービスのURL(Uniform Resource Locator)と、中継方式とを対応付けた方式選択テーブルを記憶する。例えば、図6に示す例では、方式選択テーブル記憶部25は、URL「AAA.com」と「方式(A)」とを対応付けて記憶する。なお、方式選択テーブル記憶部25は、URLではなく、サービスを提供するウェブアプリケーションの名称を格納することとしてもよい。
図7は、メッセージ中継情報の一例を説明するための図である。図7に示すように、メッセージ中継情報記憶部29は、セッションIDとメッセージ転送先アドレスとを対応付けたメッセージ中継情報を記憶する。ここで、メッセージ転送先アドレスとは、対応付けられたセッションIDが示すセッションが確立されたサービスを提供するサーバのアドレスである。例えば、図7に示す例では、メッセージ中継情報記憶部29は、セッションID「55D95DFF…」と情報処理サーバ4のIP(Internet Protocol)アドレスであるメッセージ転送先アドレス「192.168.1.4」とを対応付けて記憶する。
図8は、メッセージ中継装置リストの一例を説明するための図である。図8に示すように、メッセージ中継装置リスト記憶部35は、メッセージ中継装置10〜10bの装置番号と、メッセージ中継装置10〜10bのアドレスとを対応付けて記憶する。例えば、図8に示す例では、メッセージ中継装置リスト記憶部35は、メッセージ中継装置10aの番号である「1」と、メッセージ中継装置10aのIPアドレスである「192.168.0.2」とを対応付けて記憶する。
次に、図9、図10を用いて、リソース消費量DB記憶部14が記憶するリソース消費量DBと、セッション更新頻度計算用カウンタ部15が記憶する情報について説明する。まず、図9を用いて、リソース消費量DB記憶部14が記憶するリソース消費量DBについて説明する。
図9は、リソース消費量DBの一例を説明するための図である。図9に示す例では、リソース消費量DB記憶部14は、ウェブサービスのURL、メッセージ中継リソース量、メッセージ転送リソース量、メッセージ中継情報問合せリソース量、メッセージ中継情報配布リソース量を対応付けたリソース量DBを記憶する。
ここで、メッセージ中継リソース量とは、メッセージをサーバ4〜4bに中継するメッセージ中継処理に消費するリソース量である。また、メッセージ転送リソース量とは、メッセージ中継装置10〜10b間でメッセージを転送する際に消費するリソース量である。また、メッセージ中継情報問合せリソース量とは、メッセージ中継装置10が他のメッセージ中継装置10a、10bにメッセージの転送先となるサーバを問い合わせる際に消費するリソース量である。
また、メッセージ中継情報配布リソース量とは、メッセージ中継情報を各メッセージ中継装置10〜10b間で同期する際に消費するリソース量である。なお、各リソース量は、例えば、各処理の実行時におけるCPU時間で表される。例えば、図9に示す例では、リソース消費量DB記憶部14は、URL「AAA.com」とメッセージ中継リソース量「0:00:01」、メッセージ中継情報配布リソース量「0:00:08」を対応付けたエントリを記憶する。
次に、図10を用いて、セッション更新頻度計算用カウンタ部15が記憶する情報について説明する。図10は、セッション更新頻度計算用カウンタの一例を説明するための図である。図10に示すように、セッション更新頻度計算用カウンタ部15は、サービスを提供するURLとメッセージ処理数とセッション確立数とを対応付けた情報を記憶する。
ここで、メッセージ処理数とは、対応付けたURLに対するメッセージを処理した回数であり、対応付けたURLに対するメッセージの応答を受信する度に、インクリメントする。また、セッション確立数とは、対応付けたURLで提供されるサービスにおいてセッションが確立した回数である。例えば、図10に示す例では、セッション更新頻度計算用カウンタ部15は、URL「AAA.com」で提供されるサービスについて、処理したメッセージの数が「257」であり、セッションを確立した回数が「1」回である旨を示す情報を記憶する。
図5に戻って、応答受信部16は、メッセージ中継装置10a、10bから転送された応答を受信する。すなわち、応答受信部16は、中継方式(B)を用いて、他のメッセージ中継装置10a、10bに転送したメッセージの応答をを受信する。そして、応答受信部16は、応答を応答送信部22に転送する。また、応答受信部17は、情報処理サーバ4〜4bからメッセージの応答を受信する。すなわち、応答受信部17は、メッセージ中継装置10が直接情報処理サーバ4〜4bに転送したメッセージの応答を受信する。そして、応答受信部17は、受信した応答を中継方式選択部18に転送する。
中継方式選択部18は、応答受信部17から応答を受信すると、受信した応答に含まれるセッションIDを抽出し、抽出したセッションIDが示すセッションが確立されたサービスを特定する。そして、中継方式選択部18は、方式選択テーブル記憶部25が記憶する方式選択テーブルから、特定したサービスと対応付けられた中継方式を特定する。その後、中継方式選択部18は、受信した応答と特定した中継方式を新規セッション識別部19に通知する。
新規セッション識別部19は、中継方式選択部18から応答と中継方式とを受信する。そして、新規セッション識別部19は、受信した応答からセッションIDを抽出し、抽出したセッションIDで特定されるセッションが新規セッションであるか否かを判別する。具体的には、新規セッション識別部19は、応答からセッションIDを抽出するとともに、応答の発行元である情報処理サーバを識別する。そして、新規セッション識別部19は、抽出したセッションIDと識別した情報処理サーバのアドレスとを対応付けたリクエスト中継情報をメッセージ中継情報記憶部29が記憶しているか否かを判別する。
そして、新規セッション識別部19は、抽出したセッションIDと識別した情報処理サーバのアドレスとを対応付けたリクエスト中継情報をメッセージ中継情報記憶部29が記憶している場合は、抽出したセッションIDが既存のセッションIDであると判別する。そして、新規セッション識別部19は、応答をメッセージ処理数カウンタ更新部21に送信する。
また、新規セッション識別部19は、抽出したセッションIDと識別した情報処理サーバのアドレスとを対応付けたリクエスト中継情報をメッセージ中継情報記憶部29が記憶していない場合は、抽出したセッションIDが新規なセッションIDであると判別する。そして、新規セッション識別部19は、応答から抽出したセッションIDと識別した情報処理サーバのアドレスとを対応付けたエントリをリクエスト中継情報に追加する。
また、新規セッション判定部19は、中継方式選択部18から通知された中継方式が中継方式(A)である場合には、応答に含まれるセッションIDと、応答の発行元となるサーバのアドレスとをテーブル配布部39に通知する。そして、新規セッション識別部19は、応答を新規セッションカウンタ更新部20に送信する。
新規セッションカウンタ更新部20は、新規セッション識別部19から応答を受信すると、応答に含まれるセッションIDを用いて、応答を発行したサービスを識別する。そして、新規セッションカウンタ更新部20は、セッション更新頻度計算用カウンタ部15が記憶するセッション確立数のうち、識別したサービスと対応付けられたセッション確立数の値を1インクリメントする。そして、新規セッションカウンタ更新部20は、応答をメッセージ処理数カウンタ更新部21に送信する。
メッセージ処理数カウンタ更新部21は、新規セッション識別部19、または、新規セッションカウンタ更新部20から応答を受信すると、応答に含まれるセッションIDを用いて、応答を発行したサービスを識別する。そして、メッセージ処理数カウンタ更新部21は、セッション更新頻度計算用カウンタ部15が記憶するメッセージ処理数のうち、識別したサービスと対応付けられたメッセージ処理数の値を1インクリメントする。
その後、メッセージ処理数カウンタ更新部21は、受信した応答がメッセージ中継装置10が情報処理サーバ3〜3bに対して中継したメッセージに対する応答である場合には、受信した応答を応答送信部22に出力する。一方、メッセージ処理数カウンタ更新部21は、受信した応答が、他のメッセージ中継装置10a、10bから転送されたメッセージに対する応答である場合には、応答を他装置転送部23に送信する。
応答送信部22は、応答受信部16、またはメッセージ処理数カウンタ更新部21から応答を受信すると、受信した応答をロードバランサ3へ送信する。また、他装置転送部23は、メッセージ処理数カウンタ更新部21から応答を受信すると、受信した応答に対するメッセージの転送元であるメッセージ中継装置10a、10bに応答を転送する。
リクエスト受信部24は、ロードバランサ3がメッセージ中継装置10に割り当てたメッセージを受信する。そして、リクエスト受信部24は、受信したリクエストを中継方式選択部26に送信する。
ここで、図11は、実施例1に係るメッセージの一例を説明するための図である。図11に示すように、リクエスト受信部24は、レイヤ3プロトコルヘッダ、レイヤ4プロトコルヘッダ、レイヤ7プロトコルヘッダ、メッセージコンテンツを有するメッセージを受信する。
例えば、レイヤ3プロトコルヘッダは、IPヘッダであり、プロトコル番号やあて先のIPアドレス等が格納される。また、例えば、レイヤ4プロトコルヘッダは、TCPヘッダであり、ポート番号等が格納される。また、例えば、レイヤ7プロトコルヘッダは、HTTP(Hyper Text Transfer Protocol)ヘッダであり、Cookie等の情報が格納される。また、メッセージコンテンツは、例えば、SOAP(Simple Object Access Protocol)ヘッダおよびボディ等である。
ここで、図11に示す例では、レイヤ7プロトコルヘッダのCookieに、セッションIDであるJSESSIONIDが格納される。メッセージ中継装置10は、レイヤ7に格納されたJSESSIONIDを抽出し、抽出したJSESSIONIDを用いて、メッセージの転送先となる情報処理サーバを特定する。また、メッセージ中継装置10は、レイヤ3プロトコルヘッダに格納されるIPアドレスを用いて、メッセージの発行元となるクライアントに提供されるサービスを特定する。
図5に戻って、中継方式選択部26は、リクエスト受信部24からリクエストを受信すると、リクエストに含まれる宛先のURL、またはサービスを提供するウェブアプリケーション名を抽出する。そして、中継方式選択部26は、抽出したURLと対応付けられた中継方式を方式選択テーブルから識別する。その後、中継方式選択部26は、リクエストを中継先決定部28に出力するとともに、識別した中継方式を中継先決定部28に通知する。
一方、中継方式選択部26は、抽出したURLまたはウェブアプリケーション名と対応付けられた中継方式が方式選択テーブル記憶部25が記憶する方式選択テーブルに存在しない場合は、中継方式が未定である旨を中継先決定部28に通知する。また、中継方式選択部26は、リクエストを中継先決定部28に出力する。
リクエスト受信部27は、他のメッセージ中継装置10a、10bがメッセージ中継装置10に転送したリクエストを受信する。すなわち、リクエスト受信部27は、中継方式(B)を用いて中継されるリクエストを受信する。そして、リクエスト受信部27は、受信したリクエストを中継先決定部28に出力する。
中継先決定部28は、中継方式選択部26からリクエストとを受信するとともに、中継方式の通知を受信した場合は、以下の処理を実行する。まず、中継先決定部28は、リクエストに含まれるセッションIDと対応付けられたサーバのアドレスをメッセージ中継情報記憶部29から検索する。そして、中継先決定部28は、リクエストに含まれるセッションIDと対応付けられたサーバのアドレスがヒットした場合には、ヒットしたアドレスとリクエストとをリクエスト転送部30に出力する。
一方、中継先決定部28は、リクエストに含まれるセッションIDと対応付けられたサーバのアドレスがヒットしなかった場合は、通知された中継方式に応じて、以下の処理を実行する。まず、中継先決定部28は、通知された中継方式が中継方式(B)である場合には、受信したメッセージを転送先問合せ部31に出力する。また、中継先決定部28は、通知された中継方式が中継方式(C)、または中継方式(D)である場合は、受信したメッセージを中継先問合せ部33に出力するとともに、中継方式を通知する。
ここで、中継先決定部28は、通知された中継方式が中継方式(A)である場合には、リクエストに含まれるセッションIDと対応付けられたサーバのアドレスが必ずヒットする。このため、中継先決定部28は、検索したサーバのアドレスと受信したメッセージをリクエスト転送部30に出力する。また、中継先決定部28は、中継方式選択部26からリクエストを受信するとともに、中継方式が未定である旨の通知を受信した場合には、リクエスト転送部30にリクエストを出力するとともに、中継方式が未定である旨をリクエスト転送部30に通知する。
リクエスト転送部30は、中継先決定部28からサーバのアドレスとメッセージとを受信すると、受信したアドレスの情報処理サーバ4〜4bに対してメッセージを送信する。また、リクエスト転送部30は、中継先問合せ部33からサーバのアドレスとメッセージとを受信すると、受信したアドレスの情報処理サーバ4〜4bに対してメッセージを送信する。
転送先問合せ部31は、中継先決定部28からメッセージを受信すると、メッセージの転送先となるメッセージ中継装置を問い合わせる。すなわち、転送先問合せ部31は、中継方式(B)で転送されるメッセージの転送先を問い合わせる。具体的には、転送先問合せ部31は、受信したメッセージからセッションIDを抽出し、抽出したセッションIDを中継先情報保持装置検索部38に出力する。
ここで、中継先情報保持装置検索部38は、セッションIDを受信すると、セッションIDと対応付けられたサーバアドレスをどのメッセージ中継装置10a、10bが記憶しているかを判別し、判別したメッセージ中継装置を転送先問合せ部31に通知する。例えば、N+1台のメッセージ中継装置10〜10bには、0〜Nまでの数値が付与されている。
そして、中継先情報保持装置検索部38は、転送先問合せ部31からセッションIDを受信すると、受信したセッションIDをハッシュ関数にかけることにより数値化し、数値化した値をN+1で除算した余りの値を算出する。その後、中継先情報保持装置検索部38は、算出した余りの値と対応付けられたメッセージ中継装置のアドレスをメッセージ中継装置リスト記憶部35から取得し、取得したアドレスを転送先問合せ部31に通知する。
すると、転送先問合せ部31は、中継先情報保持装置検索部38から通知されたアドレスと中継先決定部28から受信したメッセージとを他装置転送部32に出力する。すると、他装置転送部32は、受信したアドレスのメッセージ中継装置10a、10bにメッセージを転送する。
中継先問合せ部33は、中継先決定部28からメッセージを受信すると、受信したメッセージからセッションIDを抽出し、抽出したセッションIDを中継先情報取得部37に通知する。このような場合には、中継先情報取得部37は、セッションIDと対応付けられたサーバアドレスを他のメッセージ中継装置から取得し、取得したサーバアドレスを中継先問合せ部33に通知する。
すると、中継先問合せ部33は、取得したサーバアドレスとメッセージとをリクエスト転送部30に送信する。また、中継先問合せ部33は、通知された中継方式が中継方式(D)である場合には、取得したサーバアドレスとメッセージから抽出したセッションIDとを対応付けてキャッシュ34に格納する。その後、キャッシュ34に記憶されたサーバアドレスとセッションIDは、メッセージ中継情報記憶部29が記憶するリクエスト中継情報に追加される。
中継先情報回答部36は、他のメッセージ中継装置10a、10bから、サーバアドレスの検索要求を受信する。ここで、サーバアドレスの検索要求には、セッションIDが含まれている。中継先情報回答部36は、サーバアドレスの検索要求を受信した場合には、受信した検索要求に含まれるセッションIDを抽出し、抽出したセッショIDと対応付けられたサーバアドレスをリクエスト中継情報から検索する。そして、中継先情報回答部36は、検索したサーバアドレスを検索要求の送信元となるメッセージ中継装置10a、10bに通知する。
中継先情報取得部37は、中継先問合せ部33からセッションIDを受信すると、受信したセッションIDを中継先情報保持装置検索部38に出力する。このような場合には、中継先情報保持装置検索部38は、転送先問合せ部31からセッションIDを受信した際と同様の処理を実行し、セッションIDと対応付けられたサーバアドレスを記憶するメッセージ中継装置のアドレスを中継先情報取得部37に出力する。
すると、中継先情報取得部37は、受信したアドレスのメッセージ中継装置に対してセッションIDを含むサーバアドレスの検索要求を送信する。そして、中継先情報取得部37は、検索要求を送信したメッセージ中継装置からサーバアドレスを受信した場合には、受信したサーバアドレスを中継先問合せ部33に通知する。
中継先情報保持装置検索部38は、転送先問合せ部31、中継先情報取得部37からセッションIDを受信すると、受信したセッションIDと対応付けられたサーバアドレスを記憶するメッセージ中継装置のアドレスをメッセージ中継装置リストから検索する。そして、中継先情報保持装置検索部38は、検索結果となるメッセージ中継装置のアドレスを転送先問合せ部31および中継先情報取得部37に出力する。
また、中継先情報保持装置検索部38は、テーブル配布部39からリクエスト中継情報の配布先の問合せを受信した場合には、各メッセージ中継装置10a、10bのアドレスをメッセージ中継処理リストから取得する。そして、中継先情報保持装置検索部38は、取得したアドレスをテーブル配布部39に通知する。
テーブル配布部39は、新規セッション識別部19から応答に含まれるセッションIDと、応答の発行元となるサーバのアドレスとを受信した場合には、中継先情報保持装置検索部38にメッセージ中継先情報の配布先の問合せを出力する。そして、テーブル配布部39は、各メッセージ中継装置10a、10bのアドレスを取得すると、新規セッション識別部19から受信したセッションIDとサーバのアドレスとを対応付けたエントリを、各メッセージ中継装置10a、10bに配布する。
テーブル更新部40は、他のメッセージ中継装置10a、10bからセッションIDとサーバのアドレスとを対応付けたエントリを受信した場合には、受信したエントリをメッセージ中継情報記憶部29が記憶するリクエスト中継情報に追加する。すなわち、テーブル配布部39、テーブル更新部40は、中継方式(A)において各メッセージ中継装置10〜10bが記憶するメッセージ中継情報を同期させる。
なお、テーブル更新部40は、中継方式(B)〜(D)において、メッセージ中継装置10が保持担当であるセッションIDが付与されるような初回のメッセージを、メッセージ中継装置10以外のメッセージ中継装置10a、10bが受信した場合は、メッセージ中継情報の受信等を行う。また、テーブル配布部39は、中継方法(B)〜(C)において、メッセージ中継装置10以外のメッセージ中継装置10a、10bが保持担当であるセッションIDが付与されるような初回のメッセージをメッセージ中継装置10が受信した場合には、メッセージ中継情報の転送等を行う。
なお、中継処理部11、中継先情報管理部12は、メッセージの中継や転送先の問合せを行う際に消費したリソース量を特定し、測定したリソース量をリソース量DB記憶部14に格納する。具体的には、中継処理部11、中継先情報管理部12は、処理対象のメッセージに関わるサービスを提供するURLごとに、メッセージ中継処理を行う際のCPU時間、メッセージ転送処理を行う際のCPU時間を測定する。
また、中継処理部11、中継先情報管理部12は、メッセージ中継先の情報を他のメッセージ中継装置に問い合わせる際のCPU時間、メッセージ中継情報を配布する際のCPU時間を測定する。そして、中継処理部11、中継先情報管理部12は、測定したCPU時間をサービスを提供するURLごとにリソース消費量DB記憶部14に格納する。
以下、中継処理部11、中継先情報管理部12がリソースの消費量を算出する一例を説明する。例えば、中継処理部11、中継先情報管理部12は、図5中m1〜m9、o1〜o6において処理を実行したCPU時間を計測する。そして、中継処理部11、中継先情報管理部12は、計測したCPU時間を用いて、各処理前のCPU時間と処理後のCPU時間との差分から、消費したリソース量を算出する。
ここで、図12は、各処理に要するリソース量を算出する処理を説明するための図である。例えば、中継処理部11、中継先情報管理部12は、メッセージ中継処理の際に消費したリソース量「rfwd」を「rfwd=(m3−m1)+{(m4−m2)−(o6−o5)}」で算出する。また、中継処理部11、中継先情報管理部12は、メッセージ転送処理の際に消費したリソース量「rfwd2」を「rfwd2=(m7−m6)+(m3−m5)+(m4−m9)」で算出する。
また、中継処理部11、中継先情報管理部12は、メッセージの中継先を問合せる際に消費したリソース量「rquery」を「rquery=o2−o1」で算出する。また、中継処理部11、中継先情報管理部12は、メッセージ中継情報を配布する際に消費したリソース量「rctrl」を以下のように算出する。例えば、中継処理部11、中継先情報管理部12は、中継方式(A)によるメッセージ中継情報を配布する際は、「rctrl=(o6−o5)/N」で算出し、中継方式(B)〜(D)の際は、「rctrl=(o6−o5)」とする。なお、メッセージ中継装置10は、OS(Operating System)等の各プロセスやスレッドのリソース使用量を測定する機能を用いて、リソース使用量を取得することとしてもよい。
図5に戻って、リソース使用量通知部41は、リソース消費量DB記憶部14が記憶するリソース消費量を方式選択サーバ50に通知するとともに、リソース消費量DB記憶部14が記憶するリソース消費量をリセットする。また、セッション更新頻度通知部42は、セッション更新頻度計算用カウンタ部15が記憶する各情報を方式選択サーバ50に送信するとともに、セッション更新頻度計算用カウンタ部15が記憶する各情報をリセットする。
次に、図13を用いて、方式選択サーバ50が実行する処理について説明する。図13は、実施例1に係る方式選択サーバの機能構成を説明するための図である。図13に示す例では、方式選択サーバ50は、計測値集計部51、計測情報DB記憶部52、スループット予測値計算部53、中継方式決定部54、中継方式制御部55を有する。ここで、計測情報DB記憶部52は、サービス(URL)ごとにセッションを更新する頻度とリソース量とを対応付けて記憶する記憶装置である。
計測値集計部51は、メッセージ中継装置10が有するリソース使用量通知部41が送信したリソース消費量と、セッション更新頻度通知部42が送信した各情報を受信する。また、計測値集計部51は、他のメッセージ中継装置10a、10bからも、リソース消費量と各情報とを受信する。
そして、計測値集計部51は、各メッセージ中継装置10〜10bから通知されたリソース消費量と各情報とをサービス(URL)ごとに集計し、集計したリソース消費量と各情報とを用いて、以下の処理を実行する。まず、計測値集計部51は、通知されたメッセージ処理数でセッション確立数を除算したセッション更新頻度を算出する。そして、計測値集計部51は、算出したセッション更新頻度と、リソース使用量通知部41から通知された各リソース量とを、サービス(URL)ごとに対応付けて計測情報DB記憶部52に格納する。
スループット予測値計算部53は、計測情報DB記憶部52が記憶する情報を用いて、各中継方法(A)〜(D)を用いてメッセージの転送を行う際のスループットの予測値を、サービス(URL)ごとにそれぞれ算出する。そして、スループット予測値計算部53は、算出したスループットの予測値を中継方式決定部54に通知する。
ここで、スループット予測値計算部53がスループットの予測値を算出する処理について説明する。例えば、スループット予測値計算部53は、1つのメッセージの中継に必要なリソース量と、メッセージの中継先を決定するために必要なリソース量と、メッセージ中継情報の配布に必要なリソース量との和を算出する。そして、スループット予測値計算部53は、算出した各リソース量の和で、メッセージ中継装置10〜10bが有する全てのリソース量を除算した値をスループットの予測値とする。
ここで、メッセージの中継先を決定するために必要なリソース量は、メッセージのサイズや中継処理の内容によって変化する。例えば、メッセージの中継先がメッセージに含まれるセッションIDを記憶している際に、メッセージの中継に必要なリソース量に追加されるリソース量をXとすると、Xの値は、中継方式(A)〜(D)に応じて、図14に示す値となる。
図14は、リソース量の一例を説明するための図である。図14に示すように、中継方式(A)では、メッセージを他のメッセージ中継装置10a、10bに転送しないため、Xの値が「0」となる。一方、中継方式(B)では、Xの値は、メッセージ中継装置間でメッセージを転送する際に必要なリソース量に、ミスヒット率を積算した値となる。ここで、ミスヒット率とは、メッセージ転送先のメッセージ中継装置が、転送するメッセージに含まれるセッションIDと対応付けたサーバアドレスを記憶していない確率である。
また、中継方式(C)および中継方式(D)では、Xの値は、メッセージ中継装置間でメッセージ転送先となる情報処理サーバのサーバアドレスを問い合わせるために必要なリソース量と、ミスヒット率とを積算した値となる。ここでミスヒット率とは、問合せ先のメッセージ中継装置に、転送するメッセージに含まれるセッションIDと対応付けたサーバアドレスが記憶されていない確率である。
一方、メッセージ中継情報の配布に必要なリソース量は、メッセージに係るサービスに係らず固定値となる。このため、メッセージ中継情報の配布に必要なリソース量をYとすると、Yの値は、メッセージ中継情報の配布に必要なリソース量にセッション更新頻度を積算した値となる。
図15は、メッセージ中継情報の配布に必要なリソース量の一例を説明するための図である。図15に示すように、中継方式(A)では、Yの値は、メッセージ中継情報を1回配布するのに必要なリソース量と、メッセージ中継装置の数と、セッション更新頻度とを積算した値となる。また、中継方式(B)〜(D)では、Yの値は、メッセージ中継先情報を1回配布するのに必要なリソース量と、メッセージ中継先情報を配布する装置の数と、セッション更新頻度とを積算した値となる。ここで、中継方式(B)〜(D)においてメッセージ中継先情報を配布する処理とは、他のメッセージ中継装置に対して、メッセージを転送するサーバアドレスを通知する処理である。
次に、スループット予測値計算部53がスループットの予測値を算出する処理の具体例について説明する。まず、スループット予測値計算部53は、1つのサービス(URL)について、各リソース量とセッション更新頻度とを計測情報DB記憶部52から読み出す。そして、スループット予測値計算部53は、以下の式(1)を用いて、中継方式(A)でメッセージを転送する際のスループットの予測値を算出する。
ここで、式(1)中のTAとは、中継方式(A)を用いてメッセージを転送する際のスループットの予測値である。また、Rnodeとは、単位時間あたりのノードが有するリソース量であり、例えば、CPUのクロック数(GHz:キガヘルツ)となる。なお、以下の具体例では、Rnodeの値を3(GHz)とした。また、式(1)中のNとは、メッセージ中継装置10〜10bの数である。また、mは、1セッションで送受信するメッセージの数であり、セッション更新頻度の逆数である。
また、スループット予測値計算部53は、以下の式(2)を用いて、中継方式(B)でメッセージを転送する際のスループットの予測値を算出する。ここで、式(2)中TBとは、中継方式(B)を用いてメッセージを転送する際のスループットの予測値である。
また、スループット予測値計算部53は、以下の式(3)を用いて、中継方式(C)でメッセージを転送する際のスループットの予測値を算出する。ここで、式(3)中TCとは、中継方式(C)を用いてメッセージを転送する際のスループットの予測値である。
また、スループット予測値計算部53は、以下の式(4)を用いて、中継方式(D)でメッセージを転送する際のスループットの予測値を算出する。ここで、式(4)中TDとは、中継方式(D)を用いてメッセージを転送する際のスループットの予測値である。また、式(4)中のp(k)は、式(5)に示すように、kに応じてn/N、(n+k)/N、1のいずれかの値を取る変数である。
そして、スループット予測値計算部53は、式(1)〜(5)を用いて算出した各中継方式(A)〜(D)のスループットを中継方式決定部54に出力する。
中継方式決定部54は、スループット予測値計算部53から各中継方式(A)〜(D)のスループットの予測値を受信すると、サービスごとにスループットの予測値が最も大きい中継方式を選択する。そして、中継方式決定部54は、選択した中継方式を中継方式制御部55に通知する。
ここで、図16、図17を用いて中継方式決定部54が中継方式を選択する処理について説明する。図16は、スループットの予測値の一例を説明するための図である。また、図17は、中継方式決定部が選択する中継方式の一例を説明するための図である。なお、図16に示す例では、スループット予測値計算部53は、情報処理サーバ4〜4bが提供するウェブアプリケーションごとに算出した各中継方式(A)〜(D)のスループットの予測値について記載した。
例えば、中継方式決定部54は、図16に示すように、各サービスごとに各中継方式(A)〜(D)におけるスループットの予測値を受信する。すると、中継方式決定部54は、ウェブアプリケーション「host1/path11」について、中継方式(D)が最もスループットの予測値が大きいと判別する。
また、中継方式決定部54は、サービス「host2/path21」について中継方式(B)が最もスループットの予測値が大きいと判別する。また、中継方式決定部54は、サービス「host2/path22」について中継方式(A)が最もスループットの予測値が大きいと判別する。また、中継方式決定部54は、サービス「host3」について、中継方式(B)が最もスループットの予測値が大きいと判別する。
この結果、中継方式決定部54は、図17に示すように、各ウェブアプリケーションについて最もスループットの予測値が高い中継方式を示すテーブルを生成し、生成したテーブルを中継方式制御部55に送信する。
図13に戻って、中継方式制御部55は、中継方式決定部54が生成した中継方式を示すテーブルを受信すると、受信したテーブルの内容を方式選択テーブル記憶部25に反映させる。すなわち、中継方式制御部55は、方式選択テーブル記憶部25にサービスと対応付けて記憶された中継方式を、中継方式決定部54が生成したテーブルの内容へと更新する。この結果、メッセージ中継装置10は、サービスごとに、予測されるスループットが最も大きい転送方式を用いてメッセージを転送することができる。
このように、メッセージ中継装置10は、メッセージに含まれるセッションIDが示すセッションが確立されたサービスごとに、スループットが最大となる中継方式でメッセージの中継を行う。このため、メッセージ中継装置10は、情報処理システム全体の処理能力を向上させることができる。
また、方式選択サーバ50は、中継方式を選択する場合には、セッション更新頻度とメッセージの転送処理に必要なリソース量と、メッセージの中継先を問い合わせるために必要なリソース量とを用いて、スループットの予測値を算出する。また、方式選択サーバ50は、メッセージ中継情報を配布する際に必要なリソース量を用いて、各中継方式のスループットの予測値を算出する。
このため、方式選択サーバ50は、情報処理サーバ4〜4bが提供するサービスごとにメッセージの処理に必要なリソース量が異なる場合にも、スループットが最大となる中継方式を選択することができる。
以下、図18、図19を用いて、メッセージの処理負荷に応じたスループット性能の違いについて説明する。図18は、メッセージの処理負荷が小さい際のスループット性能を説明するための図である。また、図19は、メッセージの処理負荷が大きい際のスループット性能を説明するための図である。
なお、図18、図19に示す例では、横軸をセッション更新頻度とし、縦軸をスループットとして、中継方式(A)〜(D)について算出されたスループットの値をプロットした。また、図18、図19に示す例では、中継方式(A)のスループットを三角形で、中継方式(B)のスループットを菱型で、中継方式(C)のスループットを四角形で、中継方式(D)のスループットを円形でプロットした。
例えば、図18に示すように、メッセージの負荷が小さい場合には、セッションの更新頻度が0.05をこえたあたりで中継方式(B)のスループットと他の中継方式のスループットとに約2倍の差が生じる。また、図18に示すように、メッセージの負荷が小さい場合には、セッション更新頻度が0.001の時点では、中継方式(D)のスループットが大きいが、セッション更新頻度が0.005をこえたあたりから中継方式(B)のスループットが大きくなる。
一方、図19に示すように、メッセージの負荷が大きい場合には、セッション更新頻度が0.001の時点では、中継方式(A)、(D)のスループットが大きいが、セッション更新頻度が0.010をこえた辺りから中継方式(B)のスループットが大きくなる。このように、中継方式(A)〜(D)のスループットは、セッション更新頻度とメッセージの処理負荷に応じてそれぞれ変化する。このため、方式選択サーバ50は、実測したセッション更新頻度とメッセージの処理負荷等からスループットを算出し、スループットが最大となる中継方式を選択することで、情報処理システム1の処理能力を向上させることができる。
例えば、中継処理部11、中継先情報管理部12、計測結果通知部13とは、電子回路である。また、中継処理部11は、応答受信部16、応答受信部17、中継方式選択部18、新規セッション識別部19、新規セッションカウンタ更新部20、メッセージ処理数カウンタ更新部21とは、電子回路である。
また、応答送信部22、他装置転送部23、リクエスト受信部24、中継方式選択部26、リクエスト受信部27、中継先決定部28、リクエスト転送部30とは、電子回路である。また、転送先問合せ部31、他装置転送部32、中継先問合せ部33とは、電子回路である。
また、中継先情報回答部36、中継先情報取得部37、中継先情報保持装置検索部38、テーブル配布部39、テーブル更新部40とは、電子回路である。また、リソース使用量通知部41、セッション更新頻度通知部42、計測値集計部51、スループット予測値計算部53、中継方式決定部54、中継方式制御部55とは、電子回路である。ここで、電子回路の例として、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路、またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などを適用する。
また、リソース消費量DB記憶部14、セッション更新頻度計算用カウンタ部15、方式選択テーブル記憶部25、メッセージ中継情報記憶部29、キャッシュ34、メッセージ中継装置リスト記憶部35、計測情報DB記憶部52とは、記憶装置である。なお、記憶装置の例として、RAM(Random Access Memory)、フラッシュメモリ(flash memory)などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。
次に、図面を用いて、メッセージ中継装置10が実行する処理の流れについて説明する
。まず、図20を用いて、メッセージ中継装置10がリクエストを受信した際の処理の流れについて説明する。図20は、リクエストの中継処理の流れを説明するためのフローチャートである。なお、図20には、メッセージ中継装置10がロードバランサ3からメッセージを受信した際の処理の流れについて記載した。また、図20には、メッセージ中継装置10が単体でメッセージの中継を行う際の処理について記載した。
例えば、メッセージ中継装置10は、ロードバランサ3からメッセージを受信する(ステップS101)。すると、メッセージ中継装置10は、メッセージからセッションIDを抽出する(ステップS102)。次に、メッセージ中継装置10は、メッセージにセッションIDが存在するか否かを判別し(ステップS103)、存在する場合には(ステップS103肯定)、セッションIDをキーとして、メッセージ中継情報を検索する(ステップS104)。
次に、メッセージ中継装置10は、検索結果、すなわちサーバアドレスがヒットしたか否かを判別し(ステップS105)、ヒットした場合には(ステップS105肯定)、ヒットしたサーバアドレスを取得する(ステップS106)。そして、メッセージ中継装置10は、取得したサーバアドレスを宛先としてリクエストを送信し(ステップS107)、処理を終了する。
一方、メッセージ中継装置10は、検索結果がヒットしなかった場合は(ステップS105否定)、ロードバランサ3を介して、クライアント2〜2bにエラーを通知し(ステップS108)、処理を終了する。一方、メッセージ中継装置10は、メッセージにセッションIDが存在しない場合は(ステップS103否定)、あらかじめ設定された負荷分散アルゴリズムに従って宛先を決定し(ステップS109)、リクエストを送信する(ステップS107)。なお、あらかじめ設定された負荷分散アルゴリズムとは、例えばラウンドロビンやランダムにリクエストの送信先となる情報処理サーバを選択するアルゴリズムである。
次に、図21を用いて、メッセージ中継装置10が情報処理サーバ4〜4bから応答を受信した際に実行する処理の流れについて説明する。図21は、応答の中継処理の流れを説明するためのフローチャートである。なお、図21に示す例では、メッセージ中継装置10が中継方式(A)が設定されたメッセージの応答を受信した際に実行する処理の流れを記載した。また、図21には、メッセージ中継装置10が単体でメッセージの中継を行う際の処理について記載した。
例えば、メッセージ中継装置10は、応答を受信すると(ステップS201)、応答からセッションIDを抽出する(ステップS202)。そして、メッセージ中継装置10は、セッションIDが応答に含まれるか否かを判別する(ステップS203)。次に、メッセージ中継装置10は、セッションIDが応答に含まれる場合には(ステップS203肯定)、セッションIDをキーとしてメッセージ中継情報を検索する(ステップS204)。
そして、メッセージ中継装置10は、検索結果がヒットしたか否かを判別し(ステップS205)、ヒットしなかった場合は(ステップS205否定)、メッセージ中継情報を更新する(ステップS206)。具体的には、メッセージ中継装置10は、セッションIDと応答の送信元となる情報処理サーバのサーバアドレスとを対応付けてメッセージ中継情報に追加する。
その後、メッセージ中継装置10は、リクエスト元に応答を送信し(ステップS207)、処理を終了する。一方、メッセージ中継装置10は、検索結果がヒットした場合は(ステップS205肯定)、そのままリクエスト元に応答を送信し(ステップS207)、処理を終了する。また、メッセージ中継装置10は、セッションIDが応答に含まれない場合は(ステップS203否定)、リクエスト元に応答を送信し(ステップS207)、処理を終了する。
次に、図22を用いて、メッセージ中継装置10がロードバランサ3によって振分けられたリクエストを受信した際に実行する処理の流れについて説明する。図22は、メッセージ中継装置がリクエストを受信した際に実行する処理の流れを説明するためのフローチャートである。なお、図22には、メッセージ中継装置10が他のメッセージ中継装置10a、10bと連係してメッセージの中継処理を行う際の処理の流れについて記載した。
なお、図22に示すステップS301〜S303、ステップS304、ステップS306の処理は、図20に示すステップS101〜S103、ステップS109、ステップS105と同様の処理であるものとして、説明を省略する。例えば、メッセージ中継装置10は、検索結果がヒットしなかった場合は(ステップS306否定)、方式選択テーブルからセッションIDと対応付けられた方式を選択する(ステップS307)。
すなわち、メッセージ中継装置10は、セッションIDと対応付けられた中継方式が中継方式(D)である場合は(ステップS307:方式(D))、メッセージ中継情報を他のメッセージ中継装置に問合せする(ステップS308)。そして、メッセージ中継装置10は、応答に含まれる情報をキャッシュし(ステップS309)、メッセージを情報処理サーバへ送信し(ステップS305)、処理を終了する。
一方、メッセージ中継装置10は、セッションIDと対応付けられた中継方式が中継方式(B)である場合は(ステップS307:方式(B))、ハッシュ関数等を用いてメッセージを転送するメッセージ中継装置を決定する(ステップS310)。そして、メッセージ中継装置10は、決定したメッセージ中継装置にメッセージを転送し(ステップS311)、処理を終了する。
また、メッセージ中継装置10は、セッションIDと対応付けれられた中継方式が中継方式(C)である場合には(ステップS307:方式(C))、メッセージ中継情報を他のメッセージ中継装置10a、10bに問合せする(ステップS312)。そして、メッセージ中継装置10は、問合せした結果、他のメッセージ中継装置10a、10bから取得したサーバアドレスの情報処理サーバにメッセージを送信し(ステップS305)、処理を終了する。なお、セッションIDと対応付けられた中継方式が中継方式(A)である場合には、ステップS306にて、必ず検索結果がヒットする(ステップS306肯定)。
次に、図23を用いて、メッセージ中継装置10が他のメッセージ中継装置10a、10bから各中継方式(A)〜(D)で中継されるメッセージについて、メッセージ中継情報を受信した際に実行する処理の流れについて説明する。図23は、メッセージ中継装置がメッセージ中継情報を受信した際に実行する処理の流れを説明するためのフローチャートである。
例えば、メッセージ中継装置10は、他のメッセージ中継装置10a、10bから、メッセージ中継情報を受信する(ステップS401)。すると、メッセージ中継装置10は、受信したメッセージ中継情報からセッションIDと転送先となるサーバアドレスとを抽出する(ステップS402)。次に、メッセージ中継装置10は、抽出したセッションIDを用いてメッセージ中継情報を検索し(ステップS403)、検索結果がヒットしたか否かを判別する(ステップS404)。
そして、メッセージ中継装置10は、ヒットしなかった場合には(ステップS404否定)、抽出したセッションIDと転送先サーバアドレスとを対応付けたエントリをメッセージ中継情報に追加し(ステップS405)、処理を終了する。また、メッセージ中継装置10は、検索結果がヒットした場合は(ステップS404肯定)、メッセージ中継情報を更新し(ステップS406)、処理を終了する。
次に図24を用いて、メッセージ中継装置10が他のメッセージ中継装置10a、10bから中継方式(C)、(D)に係るサーバアドレスの問合せを受信した際に実行する処理の流れについて説明する。図24は、メッセージ中継装置がサーバアドレスの問い合せを受信した際に実行する処理の流れを説明するためのフローチャートである。
例えば、メッセージ中継装置10は、サーバアドレスの問合せを他のメッセージ中継装置10a、10bから受信する(ステップS501)。すると、メッセージ中継装置10は、問合せからセッションIDを抽出する(ステップS502)。次に、メッセージ中継装置10は、抽出したセッションIDをキーとして、メッセージ中継情報を検索し(ステップS503)、検索結果がヒットしたか否かを判別する(ステップS504)。
そして、メッセージ中継装置10は、検索結果がヒットした場合には(ステップS504肯定)、以下の処理を実行する。すなわち、メッセージ中継装置10は、ヒットした転送先サーバアドレスを取得し、セッションIDとともに問合せ応答メッセージに記載して、問合せ元のメッセージ中継装置へ送信し(ステップS505)、処理を終了する。一方、メッセージ中継装置10は、検索結果がヒットしなかった場合は(ステップS504否定)、エラー通知を問合せ元のメッセージ中継装置へ送信し(ステップS506)、処理を終了する。
次に、図25を用いて、メッセージ中継装置10が他のメッセージ中継装置10a、10bから、中継方式(B)に係る転送されたメッセージを受信した際に実行する処理の流れについて説明する。図25は、メッセージ中継装置が転送メッセージを受信した際に実行する処理の流れを説明するためのフローチャートである。
図25に示す例では、メッセージ中継装置10は、他のメッセージ中継装置10a、10bから転送されたメッセージを受信する(ステップS601)。すると、メッセージ中継装置10は、受信したメッセージからセッションIDを抽出する(ステップS602)。次に、メッセージ中継装置10は、メッセージにセッションIDが存在するか否かを判別し(ステップS603)、存在する場合は(ステップS603肯定)、以下の処理を実行する。
すなわち、メッセージ中継装置10は、抽出したセッションIDをキーとしてメッセージ中継情報を検索し、検索結果がヒットするか否かを判別する(ステップS604)。その後、メッセージ中継装置10は、検索結果がヒットした場合は(ステップS604肯定)、ヒットしたサーバアドレスを宛先として、メッセージを送信し(ステップS605)、処理を終了する。
一方、メッセージ中継装置10は、転送されたメッセージにセッションIDが含まれない場合は(ステップS603否定)、メッセージの転送元となるメッセージ中継装置にエラーを通知し(ステップS606)、処理を終了する。なお、メッセージ中継装置10は、検索結果がヒットしなかった場合は(ステップS604否定)、メッセージの転送元となるメッセージ中継装置にエラーを通知し(ステップS606)、処理を終了する。
次に、図26を用いて、メッセージ中継装置10が情報処理サーバ4〜4bから応答を受信した際に実行する処理の流れを説明する。図26は、メッセージ中継装置が応答を受信した際に実行する処理の流れを説明するためのフローチャートである。
例えば、メッセージ中継装置10は、応答を受信すると(ステップS701)、応答からセッションIDを抽出し(ステップS702)、抽出したセッションIDが示すセッションが新規セッションであるか否かを判別する(ステップS703)。そして、メッセージ中継装置10は、抽出したセッションIDが示すセッションが新規セッションである場合は(ステップS703肯定)、セッション確立数のカウントアップを行う(ステップS704)。
次に、メッセージ中継装置10は、メッセージ中継情報を更新し(ステップS705)、抽出したセッションIDが含まれるメッセージの中継方式を方式選択テーブルから検索する(ステップS706)。そして、メッセージ中継装置10は、中継方式が中継方式(B)〜(D)である場合は(ステップS706:方式(B、C、D))、メッセージ中継情報の配布先を決定し(ステップS707)、メッセージ中継情報を配布する(ステップS708)。
一方、メッセージ中継装置10は、中継方式が中継方式(A)である場合には(ステップS706:方式(A))、全てのメッセージ中継装置へメッセージ中継装置を配布する(ステップS709)。その後、メッセージ中継装置10は、メッセージ処理数をカウントアップし(ステップS710)、ロードバランサ3を介してクライアント2〜2bに応答を送信し(ステップS711)、処理を終了する。
一方、メッセージ中継装置10は、抽出したセッションIDが示すセッションが新規セッションではない場合は(ステップS703否定)、応答に係るメッセージの転送元が他のメッセージ中継装置であるか否かを判別する(ステップS712)。そして、メッセージ中継装置10は、応答に係るメッセージの転送元が他のメッセージ中継装置である場合は(ステップS712肯定)、メッセージ処理数のカウントアップを行う(ステップS713)。
その後、メッセージ中継装置10は、メッセージ転送元のメッセージ中継装置へ応答を転送し(ステップS714)、処理を終了する。一方、メッセージ中継装置10は、応答に係るメッセージの転送元が他のメッセージ中継装置ではない場合は(ステップS712否定)、ステップS710の処理を実行する。
[実施例1の効果]
上述したように、メッセージ中継装置10は、情報処理サーバ4〜4b上で動作するプログラムによって確立されたセッションのセッションIDと、セッションIDが確立された情報処理サーバ4〜4bのサーバアドレスとを対応付けたメッセージ中継情報を記憶する。そして、メッセージ中継装置10は、メッセージに含まれるセッションIDがメッセージ中継情報に含まれているか判別し、含まれていないと判別した場合には、方式選択テーブルに記憶された中継方式を用いてメッセージを送信する。すなわち、メッセージ中継装置10は、セッションを確立したプログラムが提供するサービスに応じて方式選択サーバ50が選択した中継方式を用いて、メッセージを転送する。
このため、メッセージ中継装置10は、メッセージを中継する際のスループットを向上させることができる。すなわち、方式選択サーバ50は、セッションを確立したプログラムが提供するサービスごとに、スループットが最大となる中継方式を選択する。この結果、メッセージ中継装置10は、スループットが最大となる中継方式でメッセージを中継することができる。
また、方式選択サーバ50は、サービスのセッション更新頻度に応じて中継方式を選択する。このため、メッセージ中継装置10は、メッセージを中継する際のスループットを向上させることができる。例えば、メッセージ中継装置10は、サービスのセッション更新頻度が低い場合には、中継方式(A)の方式でメッセージの中継を行い。サービスのセッション更新頻度が高い場合は、他の中継方式(B)〜(D)でメッセージの中継を行う。このため、メッセージ中継装置10は、メッセージを中継する際の処理負荷を削減し、スループットを向上させることができる。
また、メッセージ中継装置10は、メッセージを中継する際に、中継方式(A)〜(D)のいずれかを用いて、メッセージの中継を行う。このため、メッセージ中継装置10は、メッセージを中継する際の処理負荷やセッション更新頻度等に応じて、スループットが最大となる中継方式でメッセージを中継することができる。
また、方式選択サーバ50は、セッション更新頻度と、メッセージ中継情報を配布する際のリソース量と、メッセージを他のメッセージ中継装置に転送する際のリソース量を用いて、各中継方式(A)〜(D)を実行した際のスループットを算出する。また、方式選択サーバ50は、メッセージを送信するサーバの問合せを行う際のリソース量を用いて、各中継方式(A)〜(D)を実行した際のスループットを算出する。そして、方式選択サーバ50は、算出したスループットが最も大きい中継方式を選択する。このため、メッセージ中継装置10は、メッセージを転送する際のスループットが最大となる中継方式を用いて、メッセージの転送を行うことができる。
また、メッセージ中継装置10は、セッションを更新する頻度と、メッセージ中継情報を同期する際のリソース量と、メッセージを他のメッセージ中継装置に転送する際のリソース量とを測定する。そして、方式選択サーバ50は、メッセージ中継装置10が測定したセッションを更新する頻度と各リソース量とを用いて、各中継方式(A)〜(D)におけるスループットの値を算出する。このため、メッセージ中継装置10は、実測値を用いて予測されるスループットの値に応じた中継方式でメッセージを転送するので、より最適な中継方式でメッセージを中継することができる。
また、メッセージ中継装置10は、情報処理サーバ4〜4bから応答を受信すると、受信した応答に含まれるセッションIDが示すセッションが新規セッションであるか否かを判別する。そして、メッセージ中継装置10は、応答に含まれるセッションIDが示すセッションが新規セッションである場合は、セッションを確立したプログラムが提供するサービスに応じて、メッセージの中継方法を選択する。すなわち、メッセージ中継装置10は、新規セッションを確立したプログラムが提供するサービスと同一のサービスに対する後続のメッセージを中継する中継方法を選択する。このため、メッセージ中継装置10は、新規セッションを確立したプログラムが提供するサービスについてのメッセージを中継する際に、スループットを向上させることができる。
また、メッセージ中継装置10は、応答のセッションIDが示すセッションが新規セッションではない場合は、応答をクライアント2〜2b、または、メッセージ転送元のメッセージ中継装置10a、10bに転送する。このため、メッセージ中継装置10は、メッセージを他のメッセージ中継装置10a、10bに転送する中継方式(B)を採用した場合にも、適切に応答の転送を行うことができる。
また、メッセージ中継装置10は、サービスと中継方式とを対応付けた方式選択テーブルを記憶する。そして、メッセージ中継装置10は、方式選択テーブルに記憶された中継方式を用いて、メッセージの中継を行う。このため、メッセージ中継装置10は、メッセージを転送する際に中継方式を選択する処理を迅速に行う事ができるので、メッセージ転送時のレイテンシを削減することができる。
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例2として本発明に含まれる他の実施例を説明する。
(1)リソース量の測定タイミングについて
上述したメッセージ中継装置10は、セッション更新頻度やメッセージを転送する際のリソース量等を所定のタイミングで測定し、測定結果を所定のタイミングおきに方式選択サーバ50に送信した。ここで、メッセージ中継装置10がメッセージのリソース量等を測定する処理は、任意のタイミングで行うことができる。
例えば、図27、図28を用いて、メッセージ中継装置10〜10bがメッセージごとに方式選択サーバ50に通知を行った際の処理の流れについて説明する。図27は、セッションの更新頻度を収集する際の計算リソースを説明するための図である。また、図28は、メッセージ中継処理で消費する計算リソース量を説明するための図である。
例えば、メッセージ中継装置10〜10bは、メッセージを受信するごとに、メッセージに係るウェブアプリケーションとセッションIDとをセッションが確立した際と確立後に方式選択サーバ50に送信する。すると、方式選択サーバ50は、メッセージを受信する度に、各メッセージ中継装置10〜10bからのメッセージを集計し、集計結果からウェブアプリケーションごとのセッション更新頻度を算出する。
また、図28に示す例では、各メッセージ中継装置10〜10bは、メッセージの中継を行うたびに、処理を行う前と後のCPU時間c1、c2を取得し、c2からc1を減算したリソース量(CPU時間)を算出する。そして、各メッセージ中継装置10〜10bは、算出したCPU時間を方式選択サーバ50に転送する。すると、方式選択サーバ50は、メッセージが中継されるたびに、リソース量を集計し、スループットを算出する。
ここで、各メッセージ中継装置10〜10bがメッセージの中継処理を行うたびにセッション更新頻度の通知やリソース量の通知を行った場合には、メッセージ中継装置10〜10b、方式選択サーバ50の双方での処理負荷が増加する。そこで、各メッセージ中継装置10〜10bは、所定の時間間隔で、それまでのリソース量の平均を算出し、算出した平均を方式選択サーバ50に通知してもよい。
図29は、平均値を方式選択サーバへ通知する際の消費計算リソース量を説明するための図である。図29に示すように、各メッセージ中継装置10〜10bは、メッセージの中継処理を行うごとに、アプリケーションごとのメッセージ数とセッション確立数とのカウンタをカウントアップする。そして、各メッセージ中継装置10〜10bは、カウントした値を所定の時間間隔で、方式選択サーバ50に通知する。また、メッセージ中継装置10〜10bは、リソース量を平均値で算出し、算出した平均値を方式選択サーバ50に送信する。
このため、各メッセージ中継装置10〜10bは、中継方式を選択する際に消費するリソース量を削減することができる。すなわち、各メッセージ中継装置10〜10bは、セッション更新頻度やリソース量の平均値を算出し、算出した平均値を方式選択サーバ50に送信する。このため、各メッセージ中継装置10〜10bは、中継方式を選択する際のリソース量を削減することができる。
(2)セッション更新頻度やリソース量を送信するメッセージ中継装置について
実施例1に係るメッセージ中継装置10〜10bは、それぞれメッセージ処理数、セッション確立数、リソース量をメッセージ中継装置に通知した。しかし、実施例は、これに限定されるものではなく、例えば、1台のメッセージ中継装置をサンプリングノードとし、サンプリングノードのみが、メッセージ処理数、セッション確立数、リソース量を通知することとしてもよい。
図30は、1台のメッセージ中継装置をサンプリングノードとした際の処理を説明するための図である。図30に示す例では、メッセージ中継装置10〜10bのうち、サンプリングノードとして選択されたメッセージ中継装置10のみが、方式選択サーバ50に対して、メッセージを送信する。
ここで、ロードバランサ3は、セッションIDを参照せず、TCPヘッダ等の情報を用いて各メッセージ中継装置10〜10bに対し、メッセージをランダムに振り分ける。このため、各メッセージ中継装置10〜10bには、セッションの確立を伴うメッセージが偏ることなく振分けられる。この結果、情報処理システム1は、任意のメッセージ中継装置をサンプルノードとすることで、適切な中継方式を選択することができる。
また、情報処理システム1は、各メッセージ中継装置10〜10bが消費するリソース量や、方式選択サーバ50が中継方式を選択する際に消費するリソース量を削減することができる。このため、情報処理システム1は、各メッセージ中継装置10〜10bのスループットを向上させることができる。
(3)リソース量の平均値について
実施例1に係るメッセージ中継装置10は、メッセージを処理するたびに、リソース消費量DB記憶部14に記憶されたリソース消費量を上書きした。しかし、実施例はこれに限定されるものではない。例えば、メッセージ中継装置10は、リソース消費量DB記憶部14に記憶されたリソース消費量と新たなリソース消費量との和を2で除算した値を新たなリソース消費量として、リソース消費量DBに登録してもよい。このような処理を行った場合には、メッセージ中継装置10は、例えば、平均から大きく外れたリソース消費量が測定された場合にも、誤った中継方式によるメッセージの転送を防げる。
(4)中継装置の切り替えについて
実施例1においては、中継方式(A)では、あるセッションIDについてのメッセージ中継情報を全てのメッセージ中継装置10〜10bが記憶した。また、中継方式(B)、(C)では、あるセッションIDについてのメッセージ中継情報を、1つのメッセージ中継装置が記憶した。
また、中継方式(D)では、あるセッションIDについてのメッセージ中継情報を1つのメッセージ中継装置が記憶するとともに、複数のメッセージ中継装置がキャッシュしていた。この結果、あるサービスについて中継方式が切り替わった場合には、各メッセージ中継装置10〜10bのメッセージ中継情報についても更新が必要である。
そこで、情報処理システム1は、セッションを管理するための機能を方式選択サーバ50に設けることとしてもよい。例えば、メッセージ中継装置10〜10bは、新規セッションが確立した際に、サービスとセッションIDとのペアを方式選択サーバ50に通知する。また、メッセージ中継装置10〜10bは、タイムアウト等によりセッションを消去する際に、方式選択サーバ50にセッション消去を通知する。そして、方式選択サーバ50は、各メッセージ中継装置10〜10bから通知されたサービスとセッションIDとのペア、およびセッション消去の通知に応じて、確立したセッションを管理する。
ここで、図31は、確立済みセッション情報の一例を説明するための図である。図31に示す例では、方式選択サーバ50は、サービスと、各サービスについて確立したセッションを示すセッションIDとを対応付けたリストを記憶する。そして、方式選択サーバ50は、あるサービスについての中継方式が、中継方式(B)〜(D)から中継方式(A)に変更となる場合は、以下の処理を実行する。
まず、方式選択サーバ50は、図31に示すリストを参照し、中継方式が切り替わったサービスについて確立しているセッションのセッションIDを取得する。そして、方式選択サーバ50は、各セッションIDについてハッシュ計算と剰余の演算を行い、メッセージ中継情報を記憶するメッセージ中継装置を特定する。
そして、方式選択サーバ50は、特定したメッセージ中継装置以外のメッセージ中継装置に対して、メッセージ中継情報を配布する。なお、方式選択サーバ50は、特定したメッセージ中継装置からメッセージ中継情報を取得し、特定したメッセージ中継装置以外のメッセージ中期装置に対してメッセージ中継情報を配布することとしてもよい。
一方、方式選択サーバ50は、中継方式(A)から中継方式(B)〜(D)に変更となる場合は、以下の処理を実行する。まず、方式選択サーバ50は、図31に示すリストを参照し、中継方式が切り替わったサービスについて確立しているセッションのセッションIDを取得する。そして、方式選択サーバ50は、各セッションIDについてハッシュ計算と剰余の演算を行い、メッセージ中継情報を記憶するメッセージ中継装置を特定する。その後、方式選択サーバ50は、特定したメッセージ中継装置以外のメッセージ中継装置に対して、メッセージ中継情報の削除を要求する。
このように、情報処理システム1は、方式選択サーバ50に確立済みセッションの情報を管理させ、中継方式が変更となるたびに、メッセージ中継情報の更新を行った場合には、以下の効果を有する。すなわち、情報処理システム1は、各メッセージ中継装置10〜10bが、古いメッセージ中継情報を用いてメッセージの転送を行うことを防ぐことができる。
なお、上述したように、中継方式が変化した際のメッセージ中継情報の更新について、方式選択サーバ50が集中管理する場合には、負荷が高くなる場合がある。このため、メッセージ中継情報の更新は、各メッセージ中継装置10〜10bが分散して実施することとしてもよい。
例えば、各メッセージ中継装置10〜10bは、方式選択テーブルが更新されたことをトリガとして、以下の処理を実行する。まず、各メッセージ中継装置10〜10bは、中継方式が変更となったサービスについて確立されたセッションのリストを取得し、取得したリストの中から、自装置が担当となるセッションIDを抽出する。すなわち、セッションIDのハッシュ値を剰余演算した値が自装置に付与された番号であるセッションIDを抽出する。なお、効率化のため、メッセージ中継情報に自装置が保持するフラグをセットしておくことで、自装置が担当のセッションIDを識別することとしてもよい。
そして、各メッセージ中継装置10〜10bは、メッセージ中継装置リストを参照して、自装置以外のメッセージ中継装置のアドレスを識別し、識別したアドレスに対して、メッセージ中継情報の削除を要求してもよい。
(5)メッセージについて
実施例1では、図11を用いてメッセージの一例について説明した。しかし、実施例は、これに限定されるものではない。例えば、メッセージには、送信元MACアドレス、送信先MACアドレス、送信元IPアドレスおよびポート番号、送信先IPアドレスおよびポート番号が格納される。
また、メッセージには、HTTPプロトコルヘッダとメッセージコンテンツが格納され、HTTPプロトコルヘッダに、Cookieの一部として、セッションIDが格納されている。しかし、セッションIDは、他のフィールドや、メッセージコンテンツ、HTTP以外のプロトコルのヘッダに格納することとしてもよい。
また、メッセージ中継装置10〜10bによる問い合わせ、メッセージの転送、応答等の制御メッセージは、メッセージと同様の形式で情報を送受信することとしてもよい。すなわち、制御メッセージには、送信元MACアドレス、送信先MACアドレス、送信元IPアドレスおよびポート番号、送信先IPアドレスおよびポート番号が格納されることとしてもよい。また、メッセージコンテンツとして、セッションIDが格納されていることとしてもよい。
(6)方式選択サーバ50が実行する処理について
上述した実施例1にでは、方式選択サーバ50が各メッセージ中継装置10〜10bからリソース量やセッション確立数、メッセージ処理数等を取得し、中継方法を算出した。しかし実施例はこれに限定されるものではなく、例えば、各メッセージ中継装置10
〜10bのうちいずれかのサンプルノードが方式選択サーバ50と同様の処理を行い、選択した中継方法を他のメッセージ中継装置へ通知することとしてもよい。
すなわち、方式選択サーバ50の機能を、任意のメッセージ中継装置10〜10bに含めてもよい。また、方式選択サーバ50の機能を全てのメッセージ中継装置10〜10bに含め、代表となる1台のメッセージ中継装置が、方式選択サーバ50の機能を発揮してもよい。
(7)プログラム
ところで、実施例1に係るメッセージ中継装置10は、ハードウェアを利用して各種の処理を実現する場合を説明した。しかし、実施例はこれに限定されるものではなく、あらかじめ用意されたプログラムをメッセージ中継装置10が有するコンピュータで実行することによって実現するようにしてもよい。そこで、以下では、図32を用いて、メッセージ中継装置10と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図32は、中継プログラムを実行するコンピュータの一例を説明するための図である。
図32に例示されたコンピュータ100は、ROM(Read Only Memory)110、HDD(Hard Disk Drive)120、RAM(Random Access Memory)130、CPU(Central Processing Unit)140がバス160で接続される。また、図32に例示されたコンピュータ100は、メッセージを送受信するためのI/O(Input Output)150を有する。
RAM130には、中継プログラム131があらかじめ保持される。CPU140が中継プログラム131をRAM130から読み出して実行することによって、図32に示す例では、中継プログラム131は、中継プロセス141として機能するようになる。なお、中継プロセス141は、図5のメッセージ中継装置10と同様の機能を発揮する。
なお、本実施例で説明した中継プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM(Compact Disc Read Only Memory)、MO(Magneto Optical Disc)、DVD(Digital Versatile Disc)などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。