(57)【要約】【課題】状態を持つトランザクション(stateful trnsaction)でも、トランザクション処理の速度低下や、トランザクションの一貫性喪失や信頼性低下などを引き起こすことなく、負荷分散を可能にすること。【解決手段】トランザクション受付部11は、状態を持つトランザクションの各段階においてクライアントから送信されてくるメッセージの宛先アドレスが自トランザクション負荷分散装置のアドレスである場合、該メッセージを受け付ける。ID抽出部12は、メッセージに挿入されているリソースIDを抽出する。トランザクション振り分け部12-15は、リソースIDに基づいて当該メッセージを、配下の複数の処理装置のいずれかに振り分ける。【選択図】図２
2010061622.tif 000002
【特許請求の範囲】
【請求項１】
クライアントからのトランザクションを複数の処理装置に振り分けて負荷分散させるトランザクション負荷分散装置において、
複数段階の処理または手続きが必要となり、各段階において前段階の状態を考慮する必要があるトランザクションの、各段階においてクライアントから送信されてくるメッセージのヘッダ内に挿入されている宛先アドレスが、自トランザクション負荷分散装置のアドレスである場合に、該メッセージを受け付けるトランザクション受付部と、
前記トランザクション受付部で受け付けられたメッセージのヘッダ内に挿入されているリソースＩＤを抽出するＩＤ抽出部と、
前記ＩＤ抽出部により抽出されたリソースＩＤに基づいて当該メッセージを、配下の複数の処理装置のいずれかに振り分けるトランザクション振り分け部を備えることを特徴とするトランザクション負荷分散装置。
【請求項２】
前記リソースＩＤは、トランザクションの最初の段階のメッセージでは、ブランクであり、以降の段階のメッセージでは、最初の段階のメッセージが振り分けられた処理装置からクライアントに送信された応答中に該処理装置が挿入したものであり、前記トランザクション振り分け部は、最初の段階のメッセージを任意の手法により複数の処理装置のうちのいずれかに振り分け、以降の段階のメッセージを、該メッセージに挿入されているリソースＩＤに従って振り分けることを特徴とする請求項１に記載のトランザクション負荷分散装置。
【請求項３】
前記リソースＩＤは、トランザクションの最初の段階のメッセージでは、ブランクであり、以降の段階のメッセージでは、最初の段階のメッセージが振り分けられた処理装置からクライアントに送信された応答中にトランザクション負荷分散装置が挿入したものであり、前記トランザクション振り分け部は、最初の段階のメッセージを任意の手法により複数の処理装置のうちのいずれかに振り分け、以降の段階のメッセージを、該メッセージに挿入されているリソースＩＤに従って振り分けることを特徴とする請求項１に記載のトランザクション負荷分散装置。
【請求項４】
前記リソースＩＤは、トランザクションの最初の段階のメッセージからクライアントが挿入したものであり、前記トランザクション振り分け部は、トランザクションの各段階のメッセージを、該メッセージに挿入されているリソースＩＤに従って振り分けることを特徴とする請求項１に記載のトランザクション負荷分散装置。
【請求項５】
トランザクションの各段階のメッセージに挿入されるリソースＩＤは、各処理装置に対して予め与えられた範囲の値を持つことを特徴とする請求項１ないし４のいずれかに記載のトランザクション負荷分散装置。
【請求項６】
トランザクションの各段階のメッセージに挿入されるリソースＩＤは、それを処理装置数で割ったときの剰余値により各処理装置が同定される値を持つことを特徴とする請求項１ないし４のいずれかに記載のトランザクション負荷分散装置。
【請求項７】
トランザクションの各段階のメッセージに挿入されるリソースＩＤは、トランザクションのエントリとネットワーク内で唯一の値を有するＩＤ情報との積算値あるいはハッシュ値から得られる値を持つことを特徴とする請求項１ないし４のいずれかに記載のトランザクション負荷分散装置。
【請求項８】
コンピュータを、
複数段階の処理または手続きが必要となり、各段階において前段階の状態を考慮する必要があるトランザクションの、各段階においてクライアントから送信されてくるメッセージのヘッダ内に挿入されている宛先アドレスが、自トランザクション負荷分散装置のアドレスである場合に、該メッセージを受け付けるトランザクション受付手段と、
前記トランザクション受付部で受け付けられたメッセージのヘッダ内に挿入されているリソースＩＤを抽出するＩＤ抽出手段と、
前記ＩＤ抽出部により抽出されたリソースＩＤに基づいて当該メッセージを、配下の複数の処理装置のいずれかに振り分けるトランザクション振り分け手段として機能させ、
クライアントからのトランザクションを複数の処理装置に振り分けて負荷分散させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トランザクション負荷分散装置およびプログラムに関し、特に、複数段階の処理または手続きが必要となり、各段階において前段階の状態を考慮する必要があるトランザクションでも負荷分散させることができるトランザクション負荷分散装置およびプログラムに関する。
【背景技術】
【０００２】
従来、処理装置、例えばWebサーバに対するトランザクションの数が膨大である場合、Webサーバの前段にトランザクション負荷分散装置を設け、その配下に複数のWebサーバを配置してトランザクションを分散する形態が採られる。トランザクション負荷分散装置は、仮想的に複数のWebサーバの窓口となるIPアドレスを持ち、クライアントからのトランザクションを受け付け、これを配下の複数のWebサーバに振り分ける。この振り分けは、例えば、ラウンドロビン方式あるいは応答時間の早いWebサーバを優先させるなどの方法によって行われる。このようなトランザクション負荷分散装置は、特許文献１に記載されており、これによれば、クライアントからのトランザクションの数の増大に対処することができる。
【０００３】
非特許文献１には、複数段階の処理または手続きが必要となるトランザクションについて記載されている。このようなトランザクションは、例えば、２相コミットを利用してトランザクションの原子性や永続性を向上させる場合、以前に要求したトランザクションの条件を後で変更したりするなど、トランザクションに紐付けした柔軟な処理を行う場合などに必要となる。
【特許文献１】米国特許６１２８２７９号
【非特許文献１】中川路 哲男著「OSIとUNIX(登録商標)分散トランザクション処理技術解説」ソフト・リサーチセンター  1994年
【発明の開示】
【発明が解決しようとする課題】
【０００４】
従来のトランザクション負荷分散装置では、トランザクションの状態遷移などのトランザクション間の関連性を考慮しないので、複数段階の処理または手続きが必要となり、各段階において前段階の状態を考慮する必要があるトランザクションの場合、それをそのまま適用することができない。
【０００５】
負荷分散させた複数のWebサーバ間でのデータベース同期(データベースの状態の同期：ミラーリング)やデータベース集中(共有)化を行うことで、これを可能にすることも考えられるが、データベース同期やデータベース集中化を行うと、トランザクション処理の速度低下が生じ、負荷分散の意味が低減されてしまうという課題が生じる。また、トランザクションの一貫性喪失や信頼性低下などを引き起こす可能性もある。
【０００６】
本発明の目的は、上記課題を解決し、複数段階の処理または手続きが必要となり、各段階において前段階の状態を考慮する必要があるトランザクションでも、トランザクション処理の速度低下や、トランザクションの一貫性喪失や信頼性低下などを引き起こすことなく、負荷分散させることができるトランザクション負荷分散装置およびプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するため、本発明は、クライアントからのトランザクションを複数の処理装置に振り分けて負荷分散させるトランザクション負荷分散装置において、複数段階の処理または手続きが必要となり、各段階において前段階の状態を考慮する必要があるトランザクションの、各段階においてクライアントから送信されてくるメッセージのヘッダ内に挿入されている宛先アドレスが、自トランザクション負荷分散装置のアドレスである場合に、該メッセージを受け付けるトランザクション受付部と、前記トランザクション受付部で受け付けられたメッセージのヘッダ内に挿入されているリソースＩＤを抽出するＩＤ抽出部と、前記ＩＤ抽出部により抽出されたリソースＩＤに基づいて当該メッセージを、配下の複数の処理装置のいずれかに振り分けるトランザクション振り分け部を備えることを特徴としている。
【０００８】
また、本発明は、前記リソースＩＤが、トランザクションの最初の段階のメッセージでは、ブランクであり、以降の段階のメッセージでは、最初の段階のメッセージが振り分けられた処理装置からクライアントに送信された応答中に該処理装置が挿入したものであり、前記トランザクション振り分け部は、最初の段階のメッセージを任意の手法により複数の処理装置のうちのいずれかに振り分け、以降の段階のメッセージを、該メッセージに挿入されているリソースＩＤに従って振り分けることを特徴としている。
【０００９】
また、本発明は、前記リソースＩＤが、トランザクションの最初の段階のメッセージでは、ブランクであり、以降の段階のメッセージでは、最初の段階のメッセージが振り分けられた処理装置からクライアントに送信された応答中にトランザクション負荷分散装置が挿入したものであり、前記トランザクション振り分け部は、最初の段階のメッセージを任意の手法により複数の処理装置のうちのいずれかに振り分け、以降の段階のメッセージを、該メッセージに挿入されているリソースＩＤに従って振り分けることを特徴としている。
【００１０】
また、本発明は、前記リソースＩＤが、トランザクションの最初の段階のメッセージからクライアントが挿入したものであり、前記トランザクション振り分け部は、トランザクションの各段階のメッセージを、該メッセージに挿入されているリソースＩＤに従って振り分けることを特徴としている。
【００１１】
また、本発明は、トランザクションの各段階のメッセージに挿入されるリソースＩＤが、各処理装置に対して予め与えられた範囲の値を持つことを特徴としている。
【００１２】
また、本発明は、トランザクションの各段階のメッセージに挿入されるリソースＩＤが、それを処理装置数で割ったときの剰余値により各処理装置が同定される値を持つことを特徴としている。
【００１３】
さらに、本発明は、トランザクションの各段階のメッセージに挿入されるリソースＩＤが、トランザクションのエントリとネットワーク内で唯一の値を有するＩＤ情報との積算値あるいはハッシュ値から得られる値を持つことを特徴としている。
【００１４】
なお、本発明は、コンピュータに搭載してトランザクション負荷分散装置として機能させるプログラムとしても実現できる。
【発明の効果】
【００１５】
本発明のトランザクション負荷分散装置およびプログラムによれば、複数段階の処理または手続きが必要となり、各段階において前段階の状態を考慮する必要があるトランザクションでも、配下の複数の処理装置間のデータベース同期やデータベースの共有化を行うことなく、処理装置間の独立性を維持したまま負荷分散させることができる。したがって、複数段階の処理または手続きが必要となり、各段階において前段階の状態を考慮する必要があるトランザクションでも、トランザクション処理の速度低下や、トランザクションの一貫性喪失や信頼性低下などを引き起こすことなく、負荷分散させることができる。
【発明を実施するための最良の形態】
【００１６】
以下、図面を参照して本発明を説明する。以下では、本発明をトランザクション負荷分散装置として実現した場合について説明するが、本発明は、コンピュータに搭載してトランザクション負荷分散装置として機能させるプログラムとしても実現できる。
【００１７】
図１は、本発明が適用される基本的なトランザクション処理システムの基本構成を示すブロック図である。
【００１８】
トランザクション負荷分散装置10は、クライアント1と複数の分散サーバ(処理装置)2-1,2-2,2-3,・・・の間に設けられ、クライアント1からのトランザクションを受付け、該トランザクションを配下の複数の分散サーバ2-1,2-2,2-3,・・・に振り分ける。
【００１９】
図２は、本発明に係るトランザクション負荷分散装置の一実施形態を示すブロック図である。
【００２０】
トランザクション負荷分散装置10は、トランザクション受付部11、ID抽出部12、ID処理部13、宛先編集部14、トランザクション切替部15、ポリシーデータベース(DB)16および宛先DB17を備え、クライアント1からのトランザクションを受付け、配下の複数の分散サーバ2-1,2-2,2-3,・・・に振り分ける。
【００２１】
トランザクション負荷分散装置10は、仮想的に分散サーバ2-1,2-2,2-3,・・・全ての窓口となるIPアドレスを持ち、トランザクション受付部11は、このIPアドレスがヘッダに挿入された、クライアント1からのトランザクションを受け付ける。
【００２２】
ID抽出部12は、トランザクション受付部11で受け付けられたトランザクションからリソースID(Resource ID)を抽出する。例えば、SOAP(Simple Object Access Protocol)で転送されたトランザクションの場合、ID抽出部12としてのXMLパーサ部でトランザクションを解析処理し、Resource IDを抽出する。ポリシーDB16は、トランザクションのヘッダを解析し、Resource IDを抽出するために必要なポリシーを格納している。
【００２３】
以下のID処理部13、宛先編集部14およびトランザクション切替部15は、ID抽出部12により抽出されたリソースIDに基づいてメッセージを、配下の分散サーバ2-1,2-2,2-3,・・・のいずれかに振り分けるトランザクション振り分け部として機能する。
【００２４】
まず、ID処理部13は、受け付けたトランザクションを送出する宛先の分散サーバ2-1,2-2,2-3,・・・を判定するために、ID抽出部12で抽出されたResource IDを計算処理する。この際、定義された処理方法(計算アルゴリズム)は、Resource IDの計算処理が定義されている前処理定義データベースを参照する。この前処理定義データベース定義は、任意に変更可能であり、分散サーバの構成に応じたものとされる。
【００２５】
宛先編集部14は、宛先DB17に格納されているリソースIDプロファイルを参照し、ID処理部13で計算処理されたResource IDを基に宛先アドレスを編集する。リソースIDプロファイルには、Resource IDと宛先の分散サーバ2-1,2-2,2-3,・・・との関係が定義されている。
【００２６】
トランザクション切替部15は、宛先編集部14で編集された宛先アドレスに従って当該トランザクションを分散サーバ2-1,2-2,2-3,・・・に振り分ける。
【００２７】
図３は、トランザクション負荷分散装置の負荷分散動作の例を示すフローチャートである。
【００２８】
本例の場合、各分散サーバ2-1,2-2,2-3,・・・に対してResource IDの範囲を予め与える。例えば、分散サーバ2-1に対して0〜10000のResource IDを与え、分散サーバ2-2に対して10001〜20000のResource IDを与え、分散サーバ2-3に対して20001〜30000のResource IDを与える。
【００２９】
以下では、複数段階の処理または手続きが必要となり、各段階において前段階の状態を考慮する必要があるトランザクションを、状態を持つトランザクション(ステートフル・トランザクション(stateful trnsaction)と称する。また、クライアント1のアドレスが「ID1」であり、トランザクション負荷分散装置10のアドレスが「ID10」であり、分散サーバ2-1,2-2,2-3,・・・のアドレスがそれぞれ「IDA」,「IDB」,「IDC」,・・・であるとする。
【００３０】
まず、クライアント1は、状態を持つトランザクションの最初の段階のメッセージ(1)を送信する。この最初のメッセージ(1)は、ヘッダ内に送信元アドレス(SA)、送信先アドレス(DS)およびResource ID(ID)を含み、この場合、SA=「ID1」、DS=「ID10」、ID=「ブランク(空)」である。このメッセージ(1)は、例えば、送信先処理装置(DS=「ID10」)において、トランザクションを構成する処理が実現可能かどうかの問い合わせである
【００３１】
トランザクション負荷分散装置10は、メッセージ(1)の送信先アドレス(DS=「ID10」)に従ってメッセージ(1)を受け付ける。次に、メッセージ(1)のヘッダ内のResource ID(ID)を抽出して宛先分散サーバを特定するが、ID=「ブランク(空)」であり、宛先分散サーバは特定されないので、メッセージ(1)を、例えば、ラウンドロビン方式に従って、配下の分散サーバ2-1,2-2,2-3,・・・のいずれかに振り分ける。例えば、メッセージ(1)を、そのヘッダ内の送信先アドレスDSを分散サーバ2-1のアドレスである「IDA」に修正して分散サーバ2-1に振り分ける。
【００３２】
分散サーバ2-1は、トランザクション負荷分散装置10からメッセージ(1)を受け、トランザクションを構成する処理が実現可能であれば、承認の応答(1′)をトランザクション負荷分散装置10に返す。分散サーバ2-1は、このときの応答(1′)のヘッダ内の送信元アドレス(SA)、送信先アドレス(DS)をそれぞれ、「IDA」、「ID1」とし、また、Resource ID(ID)を自分散サーバに与えられている範囲内の値、例えば「1000」とする。
【００３３】
トランザクション負荷分散装置10は、分散サーバ2-1から応答(1′)を受けると、応答(1′)のヘッダ内の送信元アドレス(SA)を「ID10」に修正してクライアント1に送信する。
【００３４】
承認の応答を受けたクライアント1は、次の段階のメッセージ(2)をトランザクション負荷分散装置10に送信する。メッセージ(2)のSAおよびDSは、メッセージ(1)と同一であるが、Resource IDは、応答(1′)のヘッダ内に含まれていたもの(ID=「1000」)とする。
【００３５】
トランザクション負荷分散装置10は、メッセージ(2)の送信先アドレス(DS=「ID10」)に従ってメッセージ(2)を受け付ける。次に、メッセージ(2)のヘッダ内のResource ID(ID)を抽出して宛先分散サーバを特定する。メッセージ(2)では、ID=「1000」であり、宛先分散サーバ2-1が特定されているので、メッセージ(2)を、そのヘッダ内の送信先アドレスDSを分散サーバ2-1のアドレスである「IDA」に修正して分散サーバ2-1に振り分ける。これにより、状態を持つトランザクションの最初の段階のメッセージ(1)と次の段階のメッセージ(2)は、同じ分散サーバ2-1に振り分けられる。
【００３６】
分散サーバ2-1は、トランザクション負荷分散装置10からメッセージ(2)を受け、メッセージ(2)での指示に従って処理を行い、その応答(2′)をトランザクション負荷分散装置10に返す。このときの応答(2′)のヘッダ内のSA,DA,IDは、応答(1′)と同じである。
【００３７】
トランザクション負荷分散装置10は、分散サーバ2-1から応答(2′)を受けると、応答(2′)のヘッダ内の送信元アドレス(SA)を「ID10」に修正してクライアント1に送信する。
【００３８】
同様にして、状態を持つトランザクションの以降に続く段階のメッセージを同じ分散サーバ2-1に振り分けることができる。
【００３９】
以上のように、本例においては、状態を持つトランザクションの最初の段階のメッセージが振り分けられた分散サーバが、自装置に予め与えられているResource IDをヘッダ内に挿入して応答を返し、クライアントが、以降に続く段階のメッセージに、応答に含まれるResource IDを挿入し、トランザクション負荷分散装置は、このResource IDを手掛かりとして分散サーバに振り分けるので、状態を持つトランザクションの処理を、１つの分散サーバで、一貫して矛盾なく、独立して実行させることができる。
【００４０】
図３は、トランザクション負荷分散装置の負荷分散動作の他の例を示すフローチャートである。図２の例では、Resource IDは分散サーバにより付与されるが、本例では、Resource IDはトランザクション負荷分散装置により付与される。
【００４１】
クライアント1から、状態を持つトランザクションの最初の段階のメッセージ(1)が送信されること、トランザクション負荷分散装置10が、メッセージ(1)の送信先アドレス(DS=「ID10」)に従ってメッセージ(1)を受け付け、例えば、ラウンドロビン方式に従って、メッセージ(1)を分散サーバ2-1に振り分けることまでは、図２の例と同じである。
【００４２】
分散サーバ2-1は、トランザクション負荷分散装置10からメッセージ(1)を受け、承認の応答(1′)をトランザクション負荷分散装置10に返す。このときの応答(1′)のヘッダ内の送信元アドレス(SA)、送信先アドレス(DS)をそれぞれ、「IDA」、「ID1」とすることは、図２の例と同じであるが、Resource ID(ID)は、そのままブランク(空)とする、すなわち、Resource IDが分散サーバで付与されないことが、図２の例と異なる。
【００４３】
トランザクション負荷分散装置10は、分散サーバ2-1から応答(1′)を受けると、応答(1′)のヘッダ内の送信元アドレス(SA)を「ID10」に修正し、さらに、Resource ID(ID)を分散サーバ2-1に与えられている範囲内の値、例えば「1000」としてクライアント1に送信する。すなわち、Resource IDはトランザクション負荷分散装置10で付与される。以降の動作は、図２の例と同じであるので、図示するのみで、説明を省略する。
【００４４】
本例においても、状態を持つトランザクションの最初の段階のメッセージに対して、トランザクション負荷分散装置が、該メッセージを振り分けた分散サーバに予め与えられているResource IDをヘッダ内に挿入して応答を返し、クライアントが、以降に続く段階のメッセージに、応答に含まれるResource IDを挿入し、トランザクション負荷分散装置は、このResource IDを手掛かりとして分散サーバに振り分けるので、状態を持つトランザクションの処理を、１つの分散サーバで、一貫して矛盾なく、独立して実行させることができる。
【００４５】
図４は、トランザクション負荷分散装置の負荷分散動作のさらに他の例を示すフローチャートである。本例は、分散サーバに与えられているResource IDがクライアント側で予め分かっている場合である。この場合、Resource IDを分散サーバやトランザクション負荷分散装置により付与することは不要であり、クライアント1からの状態を持つトランザクションの最初の段階のメッセージ(1)から、分散サーバを特定するResource IDを含ませることができる。
【００４６】
トランザクション負荷分散装置は、メッセージ(1)のResource IDから、該メッセージ(1)を振り分ける分散サーバを、例えば分散サーバ2-1に特定し、以降に続くメッセージ(2),・・・も同様に、分散サーバ2-1に特定して振り分けることができる。
【００４７】
以上、実施形態を説明したが、本発明は、上記実施形態に限定されるものではなく、種々に変形することができる。例えば、上記実施形態では、各分散サーバ2-1,2-2,2-3,・・・に対してResource IDの範囲を予め与え、このResource IDから分散サーバ2-1,2-2,2-3,・・・の同定を行うものとしたが、各分散サーバ2-1,2-2,2-3,・・・に対して与えるResource IDとしては、種々のものを用いることができる。
【００４８】
例えば、Resource IDの剰余値から分散サーバ2-1,2-2,2-3,・・・の同定を行うようにすることもできる。これは、例えば、3台の分散サーバ2-1,2-2,2-3にトランザクションを分散させる場合、Resource IDの剰余値が0か1か2かに従って分散サーバ2-1か2-2か2-3かを同定できるように、各分散サーバ2-1,2-2,2-3にResource IDを付与しておき、この規則を宛先DB17に格納しておくことで実現できる。
【００４９】
また、トランザクションのエントリ(例えば、通し番号)とネットワーク内で唯一の値を有するIPアドレスやMACアドレスなどのID情報との積算値やハッシュ値などから得られる値を唯一のIDとして生成し、これをResource IDとして分散サーバに付与するようにしてもよい。この場合、Resource IDから逆算することにより、トランザクションの宛先の分散サーバを導出できる。
【００５０】
本発明は、Webトランザクションに対する負荷分散システム、SOAP、XML、SIP(Session Initiation Protocol)、Diameterプロトコル、COPSプロトコル、H.248プロトコルなどを利用したトランザクションに対する負荷分散システムに適用できる。
【図面の簡単な説明】
【００５１】
【図１】本発明が適用される基本的なトランザクション処理構成を示すブロック図である。
【図２】本発明に係るトランザクション負荷分散装置の一実施形態を示すブロック図である。
【図３】トランザクション負荷分散装置の負荷分散動作の例を示すフローチャートである。
【図４】トランザクション負荷分散装置の負荷分散動作の他の例を示すフローチャートである。
【図５】トランザクション負荷分散装置の負荷分散動作のさらに他の例を示すフローチャートである。
【符号の説明】
【００５２】
1・・・クライアント、分散サーバ・・・2-1,2-2,2-3、10・・・トランザクション負荷分散装置、11・・・トランザクション受付部、12・・・ID抽出部、13・・・ID処理部、14宛先編集部、15トランザクション切替部、16・・・ポリシーデータベース(DB)、17・・・宛先DB
【図１】
2010061622.tif 000003
【図２】
2010061622.tif 000004
【図３】
2010061622.tif 000005
【図４】
2010061622.tif 000006
【図５】
2010061622.tif 000007