以下、図面に基づいて、本発明の実施の形態を説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
<Shared Nothing方式>
図1は、Shared Nothing方式の情報処理システムの例を示す図である。Shared Nothing方式は、データベースのアクセス管理をサーバと対応させる方式である。図1において、情報処理システムは、ノード1およびノード2を含む。現用系のノード1は、Database Management System(DBMS)によりデータベースDB1を管理する。ノード1は、DB1に直接アクセスし、ノード1内において排他制御を行う。現用系のノード2は、DBMSによりデータベースDB2を管理する。ノード2は、DB2に直接アクセスし、ノード2内において排他制御を行う。ノード1は、DB2にアクセスする場合、ノード2に処理依頼を出し、間接的にDB2にアクセスする。
Shared Nothing方式の利点は、情報処理システムを構成するコンピュータ間での排他制御が不要となることである。また、Shared Nothing方式では、データベースシステムの性能を左右するメモリ上のデータベースバッファが、単一システムの場合と同様に活用できる。このため、Shared Nothing方式の情報処理システムは、Input/Output(I/O)処理を効率良く行うことができ、サーバ数に比例した性能スケーラビリティが保証できる。
<比較例1>
図2は、比較例1におけるスケールアウトの例を示す図である。図2において、ステートレス処理方式で運用される情報処理システムは、複数のクライアント装置(以下、クライアントともいう)であるCL#1からCL#2nを含む。また、情報処理システムは、サーバ装置(以下、サーバともいう)としてサーバ#1を含む。サーバ#1は、複数のノードSV#11からSV#1nを含む。情報処理システムは、ステートレス処理方式で運用されるため、制御システム内部に状態およびデータ等(以下、状態データともいう)を保持せず、入力データに対し出力データを決定する。
図2において、CL#1からCL#nは、それぞれSV#11からSV#1nに処理依頼をする。さらに、CL#n+1からCL#2nがそれぞれSV#11からSV#1nに処理依頼をすると、サーバ#1に対する処理依頼は2倍になる。処理依頼の増加に対処するため、サーバ#2が追加される。サーバ#2は、複数のノードSV#21からSV#2nを含む。情報処理システムは、ステートレス処理方式で運用されるため、追加したサーバ#2への状態データの移行は行わない。このため、CL#n+1からCL#2nの処理依頼の接続先を、それぞれSV#21からSV#2nに変更することで、スケールアウトが可能となり、サーバ側の処理能力は2倍になる。
<比較例2>
図3は、比較例2におけるスケールアウトの例を示す図である。図3において、ステートフル処理方式で運用される情報処理システムは、複数のクライアントであるCL#1からCL#2nを含む。また、情報処理システムは、サーバとしてサーバ#1を含む。サーバ#1は、複数のノードSV#11からSV#1nを含む。サーバ#1は、CL#1からCL#2nの状態データを保持する。情報処理システムは、ステートフル処理方式で運用されるため、制御システム内部にクライアントからの処理依頼に関する状態データを保持し、保持された内容を入力データに反映して出力データを決定する。
図3において、CL#1からCL#nは、それぞれSV#11からSV#1nに処理依頼をする。さらに、CL#n+1からCL#2nがそれぞれSV#11からSV#1nに処理依頼をすると、サーバ#1に対する処理依頼は2倍になる。処理依頼の増加に対処するため、サーバ#2が追加される。このとき、情報処理システムは、状態データもサーバ#2に移行する。
具体的には、サーバ#2が追加されると、まず、クライアントから状態データへのアクセスが停止される。処理中のトランザクションは破棄される。次に、CL#n+1からCL#2nの状態データは、サーバ#2に移行される。クライアントは、状態データの移行が完了するまで、処理依頼を送信しない。また、CL#n+1からCL#2nは、処理依頼の接続先を追加されたサーバ#2に変更する。状態データの移行完了後、クライアントは、破棄されたトランザクションの処理依頼をサーバ#2に送信する。当該トランザクションは最初から実行される。
<比較例3>
図4は、比較例3におけるスケールアウトの例を示す図である。図4において、情報処理システムは、複数のクライアントであるCL#1からCL#2nを含む。また、情報処理システムは、サーバとしてサーバ#1およびサーバ#2を含む。サーバ#1は、ノードSV#11およびデータ集合1からデータ集合Xを含む。サーバ#2は、ノードSV#21を含む。また、サーバ#2は、サーバ#1から移行されたデータ集合nからデータ集合mを含む。
図4において、クライアントCL#1からCL#2nは、サーバ#1のデータ集合にアクセスする。更新中のデータ集合がサーバ#2に移行されると、サーバ#1のデータ集合
とサーバ#2のデータ集合との間に差異が生じる。また、データ集合をサーバ#2に移行し、クライアント側で保持しているサーバ#1およびサーバ#2におけるデータ配置情報を更新しなければ、クライアントは、接続先が変更されていないため、サーバ#2に移行されたデータ集合にアクセスできない。
Shared Nothing方式またはステートフルな方式で動作しているサーバをスケールアウトする際、移行元サーバのデータと移行先サーバのデータとで、差異が生じないようにするためには、クライアントからサーバへのデータアクセスが停止される。クライアントからサーバへのデータアクセスの停止により、クライアントは、新規サーバの接続先情報の追加やクライアントが保持しているデータ配置等を変更することができる。これにより、クライアントとサーバのデータ配置の整合性が保たれる。
<実施形態>
情報処理システムにおいて処理能力を拡大する場合、スケールアウトにより、新たなサーバが増設される。スケールアウトの対象であるサーバ(以下、移行元サーバともいう)は、自身の保持するデータの一部を増設されたサーバ(以下、移行先サーバともいう)に移行する。
Shared Nothing方式またはステートフルな方式で動作している情報処理システムにおいてスケールアウトをする際、移行先サーバは、移行元サーバで保持していたデータの他、トランザクション状態やコネクション状態を、移行元サーバから引き継ぐ。これにより、情報処理システムは、クライアントからサーバへのデータアクセスを停止することなくトランザクション処理を継続することができる。
また、クライアントは、操作対象のデータ集合を含むサーバに対し、処理を依頼するためのデータ(以下、依頼データまたは処理依頼ともいう)を送信する。なお、サーバに配置されるデータは、データ集合単位で管理される。依頼データを受信し、依頼データに基づく処理を実施したサーバは、処理結果を含むデータ(以下、結果データともいう)を、クライアントに送信する。クライアントは、依頼データの送信先であるサーバと、結果データの返信元のサーバとが異なる場合に、データ集合の配置先が変更されたことを認識する。データ集合の配置先が変更されたことを認識すると、クライアントは、クライアント側で保持しているデータ集合が配置されているサーバの接続先情報を変更する。これにより、クライアントは、データ集合の配置等の管理情報を動的に変更することができる。
したがって、情報処理システムは、クライアントからサーバへのデータアクセスを停止することなく、クライアントの管理情報を動的に変更することで、オンライン中のスケールアウトを可能とする。移行先サーバ、移行元サーバおよびサーバは、情報処理装置の一例である。また、依頼データは処理依頼の一例である。依頼データの操作対象であるデータ集合は、操作対象データの一例である。
<装置構成>
図5および図6は、実施形態における装置構成の一例を説明する。図5は、情報処理システム1の一例を示す図である。情報処理システム1は、ネットワーク14を介して接続される複数の情報処理装置2を含む。情報処理装置2は、クライアント装置、サーバ装置、またはサーバ兼クライアント装置であってもよい。
図6は、情報処理装置2のハードウェア構成の一例を示す図である。情報処理装置2は、プロセッサ3、主記憶装置4、補助記憶装置5、画像信号処理部6、入力信号処理部7、可搬記録媒体駆動装置8、通信インタフェース9を備える。また、これらはバス10により互いに接続される。
プロセッサ3は、補助記憶装置5又は記憶媒体13に保持されたOSや様々なコンピュータプログラムを主記憶装置4にロードして実行することによって、様々な処理を実行する。ただし、コンピュータプログラムによる処理の一部がハードウェア回路により実行されてもよい。プロセッサ3は、例えば、Central Processing Unit(CPU)や、Digital
Signal Processor(DSP)である。
主記憶装置4は、プロセッサ3に、補助記憶装置5に格納されているプログラムをロードするための記憶領域、及びプログラムを実行するための作業領域を提供する。また、主記憶装置4は、データを保持するためのバッファとして用いられる。主記憶装置4は、例えば、Read Only Memory(ROM)、Random Access Memory(RAM)等の半導体メモリである。
補助記憶装置5は、様々なプログラムや、各プログラムの実行に際してプロセッサ3が使用するデータを格納する。補助記憶装置5は、例えば、Erasable Programmable ROM(
EPROM)、又はハードディスクドライブ(Hard Disk Drive、HDD)等の不揮発性
のメモリである。補助記憶装置5は、例えば、オペレーティングシステム(Operating System、OS)、コンパイラプログラム、その他様々なアプリケーションプログラムを保持する。
画像信号処理部6は、プロセッサ3の処理の結果を画像信号に変換し、例えば、ディスプレイ11に出力する。入力信号処理部7は、入力デバイス12から入力された入力信号をプロセッサ3に出力する。入力デバイス12は、例えば、キーボード、マウス等のポインティングデバイスである。
可搬記録媒体駆動装置8は、記憶媒体13に記録されるプログラムや各種データを読出し、プロセッサ3に出力する。記憶媒体13は、例えば、SDカード、miniSDカード、microSDカード、Universal Serial Bus(USB)フラッシュメモリ、Compact Disc(CD)、Digital Versatile Disc(DVD)、フラッシュメモリカード等の記録媒体である。
通信インタフェース9は、ネットワーク14との情報の入出力を行うインタフェースである。通信インタフェース9は、有線のネットワークと接続するインタフェース、無線のネットワークと接続するインタフェースを含む。通信インタフェース9は、例えば、Network Interface Card(NIC)、無線Local Area Network(LAN)カード等である。通信インタフェース9で受信されたデータ等は、プロセッサ3に出力される。
例えば、情報処理装置2では、プロセッサ3が、補助記憶装置5に保持される制御プログラムを主記憶装置4にロードして実行する。なお、情報処理装置2の装置構成は一例であり、上記に限られず、実施の形態に応じて適宜構成要素の省略や置換、追加が可能である。制御プログラムは、例えば、記憶媒体13に記録されていてもよい。
<処理構成>
図7および図8は、情報処理装置2の処理構成を説明する。図7は、サーバ装置2aの処理構成の一例を示す図である。サーバ装置2aは、情報処理装置2の一例である。サーバ装置2aは、サーバ制御部20aを含む。サーバ制御部20aは、通信制御部30a、記憶部40aおよび処理制御部50aを含む。
通信制御部30aは、ネットワーク14を介して、情報処理システム1内の他の情報処理装置2との通信を制御する。記憶部40aは、定義ファイル41aを含む。定義ファイ
ル41aは、処理制御部50aの処理に使用されるサーバ側の定義パラメタの値を記憶する。
処理制御部50aは、処理部51、応答部52、移行部53および処理依頼送信部54を含む。処理部51は、クライアントからの依頼データを受信し、依頼データに基づく処理を実施する。応答部52は、データ集合の配置情報を含む処理結果をクライアントに通知する。移行部53は、移行元サーバから移行先サーバに、移行対象のデータ集合を移行する。移行部53は、更新中のデータ集合については、データ集合と共に、移行元サーバでの更新内容を含む差分データを移行先サーバに移行する。処理依頼送信部54は、クライアントから受信した依頼データを、移行先サーバに送信する。
サーバ装置2aのプロセッサ3は、コンピュータプログラムにより、通信制御部30a、記憶部40a、処理制御部50a、処理部51、応答部52、移行部53および処理依頼送信部54の処理を実行する。ただし、通信制御部30a、記憶部40a、処理制御部50a、処理部51、応答部52、移行部53および処理依頼送信部54のいずれか、またはその処理の一部がハードウェア回路により実行されてもよい。
図8は、クライアント装置2bの処理構成の一例を示す図である。クライアント装置2bは、情報処理装置2の一例である。クライアント装置2bは、クライアント制御部20bおよびアプリケーションソフトウェア60を含む。クライアント制御部20bは、通信制御部30b、記憶部40bおよび処理制御部50bを含む。
通信制御部30bは、ネットワーク14を介して、情報処理システム1内の他の情報処理装置2との通信を制御する。記憶部40bは、定義ファイル41bを含む。定義ファイル41bは、処理制御部50bの処理に使用されるクライアント側の定義パラメタの値を記憶する。処理制御部50bは、データ集合の配置等のクライアント側での管理情報を変更する。アプリケーションソフトウェア60は、クライアント装置2bで実行されるアプリケーションである。アプリケーションソフトウェア60の実行により、クライアント装置2bからサーバ装置2aへの処理依頼が発生する。クライアント装置2bは、処理依頼の内容を含む依頼データをサーバ装置2aに送信する。
クライアント装置2bのプロセッサ3は、コンピュータプログラムにより、通信制御部30b、記憶部40bおよび処理制御部50bの処理を実行する。ただし、通信制御部30b、記憶部40bおよび処理制御部50bのいずれか、またはその処理の一部がハードウェア回路により実行されてもよい。
<データ構造>
図9Aから図16は、サーバ装置2aで使用する定義およびデータ構造の例を説明する。図17から図19は、クライアント装置2bで使用する定義およびデータ構造の例を説明する。図20および図21は、サーバ装置2aとクライアント装置2b間で送受信するデータ構造の例を説明する。
図9Aは、RDBMSの表定義の例を示す図である。RDBMSの表定義は、データ集合の配置定義をするために使用される。図9Aにおいて、RDBMSの表定義は、一例として「列名」、「型」および「設定値」の項目を含む。RDBMSの表定義は、Structured Query Language(SQL)規約に準拠した項目を含む表定義であってもよい。
「列名」は、RDBMSにおける列の名称である。「列名」には、任意の文字列、例えば“COLUMN1”、“COLUMN2”が設定される。「型」は、RDBMSにおけるデータ型である。例えば、“COLUMN2”の列に対する「型」として“INTEG
ER”が設定される。即ち、“COLUMN2”の列は、整数型の値を記憶する。「設定値」は、対応する列に設定される値である。例えば、“COLUMN2”の列に設定される「設定値」として-32,768 〜 +32,767が設定される。即ち、“COLUMN2”の列に設定される値は、-32,768 〜 +32,767の範囲内の整数である。
図9Bは、KVSの表定義の例を示す図である。KVSの表定義は、データ集合の配置定義をするために使用される。図9Bにおいて、KVSの表定義は、一例として「キー(KEY)」および「値(VALUE)」の項目を含む。さらに、「キー(KEY)」および「値(VALUE)」は、それぞれ「識別子」、「型名」および「設定値」の項目を含む。KVSの表定義は、インデックス等の項目を含む表定義であってもよい。
「キー(KEY)」は、KVSにおいて、保存したいデータを識別するために設定される一意のキーである。例えば、「キー(KEY)」の「識別子」、「型名」および「設定値」には、それぞれ“KEY1”、“INTEGER”、“-32,768 〜 +32,767”が設定される。即ち、識別子“KEY1”は、-32,768 〜 +32,767の整数をキーとして含む。
「値(VALUE)」は、キーに対応づけられる値である。例えば、「値(VALUE)」の「識別子」、「型名」および「設定値」には、それぞれ“VALUE1”、“CHAR”、“ABCDEFGHIJK”が設定される。即ち、識別子“VALUE1”は、各キーに対応する文字列を含む。
図9Cは、データ集合の配置定義の例を示す図である。データ集合の配置定義は、データ集合に含まれるデータの範囲、およびデータ集合が配置されるサーバ装置2aを定義する。図9Cにおいて、データ集合の配置定義は、一例として「データ集合名」、「列名またはキー名」、「値の範囲」および「配置サーバ」の項目を含む。
「データ集合名」は、データ集合の名称である。「データ集合名」には、例えば“Partition01”、“Partition02”等が設定される。「列名またはキー名」は、データ集合に含まれる列またはキーの名称である。例えば、“Partition01”のデータ集合に対する列名またはキー名として“COLUMN2”または“KEY1”が設定される。「値の範囲」は、列またはキーの値の範囲である。例えば、“COLUMN2”の列名の値の範囲として“0〜10000”が設定される。「配置サーバ」は、データ集合が配置されるサーバ装置2aである。例えば、“Partition01”のデータ集合の配置サーバ装置2aとして“SV01”が設定される。即ち、データ集合“Partition01”は、“COLUMN2”または“KEY1”の値の範囲が“0〜10000”であるデータの集合であり、“SV01”に配置される。
図10は、データ移行リストのデータ構造の一例を示す図である。データ移行リストは、移行元サーバから移行先サーバへ移行するデータ集合のリストである。移行元サーバは、スケールアウトの命令を受けて、データ移行リストを作成する。移行対象のデータ集合は、データ集合配置定義を変更することで指定してもよい。移行対象のデータ集合は、スケールアウトコマンドにより、スケールアウトの命令と共に指定してもよい。
データ移行リストは、「データ集合名」、「移行状態」および「トランID」の項目を含む。「データ集合名」は、移行対象のデータ集合の名称である「移行状態」は、データ集合が移行先サーバに移行されたか否かの状態である。例えば、「移行状態」には、移行されていない場合には、移行未を示す“0”が設定される。また、移行中の場合は、移行中であることを示す“1”が設定される。移行されている場合は、移行済であることを示す“2”が設定される。「トランID」は、データ集合に対するトランザクションIDである。データ集合が更新中である場合、「トランID」には、“0”でない値がトランザ
クションIDとして設定される。
図10において、データ集合“Partition01”の移行状態は“移行未(0)”であり、トランIDは“15896231”である。即ち、データ集合“Partition01”は、移行先サーバに移行されておらず、更新中であるため、トランザクションID“15896231”と対応づけられている。また、“Partition02”は移行中であり、“Partition03”は移行済である。
図11は、被データ移行リストのデータ構造の一例を示す図である。被データ移行リストは、移行元サーバから移行先サーバへ移行されるデータ集合のリストである。移行先サーバは、スケールアウトの命令を受けて、被データ移行リストを作成する。被移行対象のデータ集合は、データ集合配置定義を変更することで指定してもよい。被移行対象のデータ集合は、スケールアウトの命令とともに指定してもよい。
被データ移行リストは、「データ集合名」、「被移行状態」および「トランID」の項目を含む。「データ集合名」および「トランID」は、データ移行リストと同様であるため説明を省略する。また、「被移行状態」はデータ移行リストの「移行状態」と同様であるため説明を省略する。
図11において、データ集合“Partition01”は移行未であり、“Partition02”は移行中である。また、“Partition03”は移行済であり、トランIDは“15896239”である。即ち、“Partition03”は、移行先サーバに移行されており、更新中であるため、トランザクションID“15896239”と対応づけられている。
図12は、クライアント通知リストのデータ構造の一例を示す図である。クライアント通知リストは、スケールアウトにより、移行対象のデータ集合が移行先サーバに移行されたことを各クライアント装置2bに通知したか否かを管理するリストである。各クライアント装置2bは、サーバ装置2aへの処理依頼に対し、サーバ装置2aから受信した結果データから、移行対象のデータ集合が、移行先サーバに移行されたことを認識することができる。サーバ装置2aは、クライアント装置2bに結果データを送信することで、データ集合の移行を通知したと判断してもよい。
クライアント通知リストは、サーバ装置2aに接続されたクライアント装置2bを含む。サーバ装置2aは、クライアント通知リストの各クライアント装置2bにデータ集合移行の通知を完了するまでの間、データ移行リストを保持し、結果データの送信とともにデータ集合の移行を通知する。
クライアント通知リストは、「クライアント名」および「クライアント通知状態」の項目を含む。「クライアント名」は、サーバ装置2aに接続されたクライアント装置2bを識別する名称である。「クライアント通知状態」は、データ集合の移行が通知されたか否かの状態である。例えば、「クライアント通知状態」には、通知されていない場合には、通知未を示す“0”が設定される。また、通知されている場合は、通知済であることを示す“2”が設定される。
図12において、クライアント装置2bである“CLI01”のクライアント通知状態は“通知済(2)”である。即ち、“CLI01”に対し、サーバ装置2aは、データ集合の移行を通知している。同様に、サーバ装置2aは、クライアント装置2bである“CLI02”に対し、データ集合の移行を通知している。一方、サーバ装置2aは、クライアント装置2bである“CLI03”に対し、データ集合の移行を通知していない。
図13は、コネクション情報リストのデータ構造の一例を示す図である。コネクション情報リストは、サーバ装置2aに接続される各クライアント装置2bとのコネクション情報のリストである。サーバ装置2aは、クライアント装置2bから処理依頼を受信し、当該クライアント装置2bとのコネクションが確立されていない場合に、コネクション情報を作成する。
コネクション情報リストは、「コネクション数」およびコネクション情報の項目を含む。「コネクション数」は、クライアント装置2bとのコネクションの数であり、例えば、“1000”が設定される。コネクション情報は、各クライアント装置2bとのコネクションに関する情報であり、コネクション数分が作成される。
コネクション情報は、「コネクションID」、「クライアント名」、「クライアントポート番号」および「トランID」の項目を含む。「コネクションID」は、コネクション接続時に割り当てられる一意な識別子であり、例えば“102367598”が設定される。「ク
ライアント名」は、クライアント装置2bのInternet Protocol(IP)アドレスまたは
マシン名等であり、例えば“CLI01”が設定される。「クライアントポート番号」は、クライアント装置2bのポート番号であり、例えば“80”が設定される。「トランID」は、トランザクションが発生した際のトランザクションIDであり、例えば“15896231”が設定される。なお、サーバ装置2aは、コネクション情報が作成されたクライアント装置2bをクライアント通知リストに登録してもよい。
図14は、トランザクションログのデータ構造の一例を示す図である。トランザクションログ(以下、トランログともいう)は、コミットされていないトランザクションの属性、操作対象および更新内容等を含む。
トランログは、「トランID」、「コネクションID」、「トランザクション状態」、「トランザクション種別」、「カーソル状態」、「テーブル名」、「データ集合名」、「カーソル位置」および「更新データ」の項目を含む。
「トランID」は、トランザクションが発生した際のトランザクションIDであり、例えば“15896231”が設定される。「コネクションID」は、コネクション接続時に割り当てられる一意な識別子であり、例えば“102367598”が設定される。「トランザクション
状態」は、トランザクションの状態であり、例えば“CONTINUE”が設定される。「トランザクション種別」は、トランザクションの種別であり、例えば“ReadOnly”または“ReadWrite”が設定される。「カーソル状態」は、カーソルの状態であり、例えば“OPEN”または“CLOSE”が設定される。「テーブル名」は、操作対象のテーブル名であり、例えば“TBL01”が設定される。「データ集合名」は、操作対象のデータ集合名であり、例えば“Partition01”が設定される。「カーソル位置」は、カーソルの位置情報であり、例えば“101”が設定される。「更新デー
タ」は、トランザクションが発生する前のデータと更新中のデータとの差分であり、更新されていない場合には、例えば“NONE”が設定される。更新中の場合には、「更新データ」には、変更後のデータが設定されてもよい。また、更新中の場合、「更新データ」には、データベースを操作するための命令文、例えばStructured Query Language(SQ
L)文であって、トランザクション発生後に実行されたSQL文が設定されてもよい。
図15は、移行データのデータ構造の一例を示す図である。移行データは、移行元サーバから移行先サーバに移行されるデータの内容を含む。移行対象のデータ集合が更新中の場合には、移行データは、トランログの内容を含む。
移行データは、「データ集合名」、「データ集合データ長」、「トランID」、「トランログデータ長」、「データ集合の実データ部」および「トランログの実データ部」の項目を含む。
「データ集合名」は、移行対象のデータ集合の名称であり、例えば“Partition01”が設定される。「データ集合データ長」は、移行対象のデータ集合のデータ長であり、例えば“102400”が設定される。「トランID」は、移行対象のデータ集合に対するトランザクションIDである。例えば、「トランID」には、移行対象のデータ集合についてトランザクションが発生している場合は、対応するトランログのトランIDが設定され、トランザクションが発生していない場合は“0”が設定される。「トランログデータ長」は、移行対象のデータ集合に対するトランログのデータ長であり、例えば“1024”が設定される。「データ集合の実データ部」は、移行対象のデータ集合の実データである。「トランログの実データ部」は、移行対象のデータ集合に対するトランログの実データである。
図16は、サーバ装置2aの定義ファイル41aの例を示す図である。サーバ装置2aの定義ファイル41aは、「CommunicationControlMultiplicity」、「ServerTimeOut」
および「ScaleoutTimeOut」を定義する。
「CommunicationControlMultiplicity」は、サーバ装置2aの通信制御の多重度であり、例えば、“4”が設定される。「ServerTimeOut」は、クライアント装置2bから依頼
データを受信し、返却するまでの時間がタイムアウトとなる閾値であり、例えば、“3”が設定される。「ScaleoutTimeOut」は、スケールアウト処理の時間がタイムアウトとな
る閾値であり、例えば、“180”が設定される。
図17は、クライアント装置2bにおけるデータ集合接続先リストのデータ構造の一例を示す図である。データ集合接続先リストは、クライアント装置2bが操作対象とするデータ集合および当該データ集合の接続先情報のリストである。
データ集合接続先リストは、「データ集合要素数」および「データ集合と接続先組み合わせ」の項目を含む。「データ集合要素数」は、クライアント装置2bが操作対象とするデータ集合の数であり、例えば、“5”が設定される。「データ集合と接続先組み合わせ」は、データ集合と当該データ集合が配置された接続先サーバの組み合わせであり、データ集合要素数分作成される。
「データ集合と接続先組み合わせ」は、「データ集合名」および「接続先サーバ名」の項目を含む。「データ集合名」は、操作対象のデータ集合の名称であり、例えば、「データ集合と接続先組み合わせ1」の「データ集合名」には“Partition00”が設定される。「接続先サーバ名」は、操作対象のデータ集合が配置された接続先サーバの名称であり、例えば、「データ集合と接続先組み合わせ1」の「接続先サーバ名」には“SV01”が設定される。
図18は、クライアント装置2bにおけるサーバ接続先リストのデータ構造の一例を示す図である。サーバ接続先リストは、クライアント装置2bからアクセスするサーバ装置2aの接続先情報のリストである。
サーバ接続先リストは、「サーバ接続先要素数」および「サーバ接続先情報」の項目を含む。「サーバ接続先要素数」は、クライアント装置2bからアクセスするサーバ装置2aの接続先の数であり、例えば、“2”が設定される。「サーバ接続先情報」は、サーバ接続先要素数分作成される。
「サーバ接続先情報」は、「サーバ名」および「ポート番号」の項目を含む。「サーバ名」は、クライアント装置2bから接続するサーバ装置2aのIPアドレスまたはマシン名等であり、例えば、「サーバ接続先情報1」の「サーバ名」には“SV01”が設定される。「ポート番号」は、クライアント装置2bから接続するサーバ装置2aのポート番号であり、例えば、「サーバ接続先情報1」の「ポート番号」には“80”が設定される。
図19は、クライアント装置2bの定義ファイル41bの例を示す図である。クライアント装置2bの定義ファイル41bは、「ClientTimeOut」、「ClientPort」、「ServerName」、「ServerPort」および「DataLocatedServer」を定義する。
「ClientTimeOut」は、依頼データを送信し、結果データが返却されるまでの時間がタ
イムアウトとなる閾値であり、例えば、“3”が設定される。「ClientPort」は、クライアント装置2bで使用するポート番号であり、例えば、“80”が設定される。「ServerName」は、クライアント装置2bから接続するサーバ装置2aのIPアドレスまたはマシン名等であり、例えば、“SV01”が設定される。「ServerPort」は、クライアント装置2bから接続するサーバ装置2aのポート番号であり、例えば、“80”が設定される。「DataLocatedServer」は、データ集合名と接続先の組み合わせであり、例えば、“Par
tition00:SV01”が設定される。なお、「ServerName」、「ServerPort」および「DataLocatedServer」は、それぞれ複数定義してもよい。図19において、上述の
例の他、「ServerName」、「ServerPort」および「DataLocatedServer」として、それぞ
れ“SV02”、“80”および“Partition01:SV02”が設定されている。
図20は、依頼データのデータ構造の一例を示す図である。依頼データは、操作対象のデータ集合を含むサーバ装置2aに対し、クライアント装置2bから処理を依頼するためのデータである。依頼データは、「サーバ名」、「サーバポート番号」、「クライアントID」、「依頼データ番号」、「クライアント名」、「クライアントポート番号」、「クライアントプロセスID」、「クライアントスレッドID」、「コネクションID」、「依頼データ送信時刻」、「処理依頼種別」、「処理依頼対象」、「処理依頼入力情報」および「処理依頼出力情報」の項目を含む。
「サーバ名」は、クライアント装置2bから接続するサーバ装置2aのIPアドレスまたはマシン名等であり、例えば、“101.23.11.501”が設定される。「サーバポート番号
」は、クライアント装置2bから接続するサーバ装置2aのポート番号であり、例えば、“80”が設定される。「クライアントID」は、クライアント制御プログラムの識別子であり、例えば、“CL001”が設定される。「依頼データ番号」は、クライアント制御プログラムにより設定される一意な番号であり、例えば、“000000001”が設定される。
「クライアント名」は、クライアント装置2bのIPアドレスまたはマシン名等であり、例えば、“CLI001”が設定される。「クライアントポート番号」は、クライアント装置2bで使用するポート番号であり、例えば、“80”が設定される。「クライアントプロセスID」は、クライアントアプリケーションのプロセスIDであり、例えば、“4438”が設定される。「クライアントスレッドID」は、クライアントアプリケーションプロセスのスレッドIDであり、例えば、“47470217350064”が設定される。「コネクションID」は、コネクション確立時にサーバ装置2aからクライアント装置2bに通知されるIDであり、例えば、“102367598”が設定される。サーバ装置2aは、クライアント装
置2bからのコネクション確立依頼時に、例えば、「クライアント名」、「クライアントポート番号」、「クライアントプロセスID」、「クライアントスレッドID」、および「依頼データ送信時刻」に基づいて、一意なコネクションIDを生成する。「依頼データ送信時刻」は、クライアント装置2bからの処理依頼時のタイムスタンプであり、例えば
、“2013.8.19 15:32.32.225”が設定される。「処理依頼種別」は、SQLにおけるSELECT、INSERT、UPDATE、DELETE等の操作命令であり、クライアントアプリケーションでは関数名である。「処理依頼種別」には、例えば、“SELECT”が設定される。「処理依頼対象」は、DB名、スキーマ名、表名、またはパーティション等のリソース情報であり、例えば、“TABLE1”が設定される。「処理依頼入力情報」は、処理依頼を実行するための入力情報である。具体的には、「処理依頼入力情報」は、SQLのSELECT文における検索条件およびカーソル名等であり、クライアントアプリケーションの入力パラメタおよびハンドル等である。「処理依頼入力情報」には、例えば、“WHERE COLUMN2=5”が設定される。「処理依頼出力情報」は、処理依頼の実行結果の対象である。具体的には、「処理依頼出力情報」は、SQLのSELECT文の実行結果であり、クライアントアプリケーションの出力結果の対象、例えば行名または集合関数である。「処理依頼出力情報」には、例えば、“COLUMN1”が設定される。
図21は、結果データのデータ構造の一例を示す図である。結果データは、依頼データを送信したクライアント装置2bに対し、依頼データに基づく処理の結果を、サーバ装置2aから通知するためのデータである。結果データは、「クライアント名」、「クライアントポート番号」、「クライアントID」、「依頼先サーバ名」、「結果送信サーバ名」および「結果データ」の項目を含む。
「クライアント名」は、クライアント装置2bのIPアドレスまたはマシン名等であり、例えば、“101.23.11.501”が設定される。「クライアントポート番号」は、クライア
ント装置2bで使用するポート番号であり、例えば、“80”が設定される。「クライアントID」は、クライアント制御プログラムの識別子であり、例えば、“CL001”が設定される。「依頼先サーバ名」は、依頼先サーバ装置2aのIPアドレスまたはマシン名等であり、例えば、“101.24.12.101”が設定される。「結果送信サーバ名」は、結果送
信サーバ装置2aのIPアドレスまたはマシン名等であり、例えば、“101.24.12.102”
が設定される。
「結果データ」は、依頼データに基づく処理の結果に関するデータである。「結果データ」は、「依頼データ番号」、「クライアントプロセスID」、「クライアントスレッドID」、「セッションID」、「依頼データ送信時刻」、「結果データ送信時刻」、「結果データ番号」、「結果データ状態」、「結果データ長」および「処理結果」の項目を含む。
「依頼データ番号」は、クライアント装置2bが処理依頼時に与える番号であり、例えば、“000000001”が設定される。「クライアントプロセスID」は、クライアントアプ
リケーションのプロセスIDであり、例えば、“4438”が設定される。「クライアントスレッドID」は、クライアントアプリケーションプロセスのスレッドIDであり、例えば、“47470217350064”が設定される。「セッションID」は、コネクション確立時にサーバ装置2aからクライアント装置2bに通知されるIDであり、例えば、“102367598”
が設定される。サーバ装置2aは、クライアント装置2bからのコネクション確立依頼時に、例えば、「クライアント名」、「クライアントポート番号」、「クライアントプロセスID」、「クライアントスレッドID」、および「依頼データ送信時刻」に基づいて、一意なセッションIDを生成する。依頼データ送信時刻」は、クライアント装置2bからの処理依頼時のタイムスタンプであり、例えば、“2013.8.19 15:32.32.225”が設定される。「結果データ送信時刻」は、サーバ装置2aからの処理結果送信時のタイムスタンプであり、例えば、“2013.8.19 15:32.32.236”が設定される。「結果データ番号」は、「結果データ」をサーバ装置2aの処理結果と紐付けるための一意な番号であり、例えば、“00000123”が設定される。「結果データ状態」は、処理結果が完結しているか、継続中
であるかの情報であり、例えば、完結していれば“0”、継続中であれば“1”が設定される。「結果データ長」は、結果データの長さであり、例えば、“4”が設定される。「処理結果」は、処理依頼の実行結果である。具体的には、「処理結果」は、SQLのSELECT文の実行結果であり、クライアントアプリケーションの出力結果、例えば行名または集合関数の結果である。「処理結果」には、例えば、“COLUMN1=4”が設定される。
<動作例>
図22から図28は、実施形態の動作例1から動作例7を説明するための図である。図22から図28において、サーバ#1(図28ではサーバ#a1)は、スケールアウトの対象である移行元サーバである。また、サーバ#2(図28ではサーバ#a2)は、移行先サーバである。なお、各図において、サーバ#1(図28ではサーバ#a1)の処理は、ノードSV#11(図28ではノードSV#a11)が処理するものとして記載されているが、各動作例では、サーバ#1(図28ではサーバ#a1)の処理であるものとして説明される。同様に、サーバ#2の処理は、ノードSV#21(図28ではノードSV#a21)が処理するものとして記載されているが、各動作例では、サーバ#2(図28ではサーバ#a2)の処理であるものとして説明される。
《動作例1》
動作例1は、ステートフルな方式で動作しているサーバにおいて、クライアントからサーバへのデータアクセスを停止せずに、業務を継続したままスケールアウトをする例である。また、動作例1は、スケールアウトの処理中にクライアントから処理依頼を受信した際、操作対象となるデータ集合が移行先サーバに移行済である例を示す。
図22は、移行済のデータ集合に対する処理依頼を受信した場合の動作例を示す図である。ステートフルな方式で動作しているサーバをスケールアウトする際、ユーザの指示により、または所定のプログラム等により、サーバ#1およびサーバ#2に対し、スケールアウトコマンドが発行される(A1、A2)。
スケールアウトコマンドにより、スケールアウト命令を受け付けたサーバ#1は、図10で説明したデータ移行リストを作成する。図22の例では、移行対象のデータ集合は、データ集合nからデータ集合mである。同様に、スケールアウト命令を受け付けたサーバ#2は、図11で説明した被データ移行リストを作成する。図22の例では、被移行対象のデータ集合は、データ集合nからデータ集合mである。
次に、サーバ#1は、データ移行リストに含まれるデータ集合をサーバ#2に移行する(A3)。移行対象のデータ集合をサーバ#2に送信する際、サーバ#1は、データ移行リストの当該データ集合の移行状態を“移行未”から“移行中”に更新する。また、サーバ#1は、データ集合の移行が完了すると、当該データ集合の移行状態を“移行中”から“移行済”に更新する。図22の例では、データ集合nは“移行済”、データ集合n+1は“移行中”、データ集合mは“移行未”となっている。
また、サーバ#2は、サーバ#1からデータ集合の受信を開始すると、当該データ集合の被移行状態を“移行未”から“移行中”に更新する。また、サーバ#2は、データ集合の移行が完了すると、当該データ集合の被移行状態を“移行中”から“移行済”に更新する。図22の例では、データ集合nは“移行済”、データ集合n+1は“移行中”、データ集合mは“移行未”となっている。
スケールアウトの処理中に、サーバ#1は、クライアントCL#1からデータ集合nに対する処理依頼を受け付ける(A4)。処理依頼は、図20で説明した依頼データのデー
タ構造により送受信される。サーバ#1は、データ移行リストを参照し、依頼データによる操作対象であるデータ集合nの移行状態を判定する。データ集合nの移行状態は“移行済”であるため、サーバ#1は、CL#1からの依頼データをサーバ#2に転送する(A5)。
サーバ#2は、サーバ#1から受信した依頼データに基づいて、データ集合nに対する操作を行う(A6)。データ集合nに対する操作後、サーバ#2は、CL#1とのコネクションを確立し、処理結果をCL#1に返却する(A7)。処理結果は、図21で説明した結果データのデータ構造により送受信される。
CL#1は、処理を依頼したサーバ#1とは異なるサーバ#2から結果データを返却されたことからデータ集合nが移行されたことを認識し、CL#1が保持しているデータ集合nのデータ配置および処理依頼先の接続先情報を動的に更新する。具体的には、図17のデータ集合接続先リストにおいて、データ集合nに対する「接続先サーバ」をサーバ#2に更新する。
《動作例2》
動作例2は、スケールアウトの処理中にクライアントから処理依頼を受信した際、操作対象となるデータ集合が移行先サーバに移行中である例を示す。この場合、移行元サーバは、移行先サーバへデータ集合の移行が完了した後、処理依頼を移行先サーバに送信する。
図23は、移行中のデータ集合に対する処理依頼を受信した場合の動作例を示す図である。B1からB3までの処理は、図22のA1からA3までの処理とそれぞれ同様であるため、その説明を省略する。
スケールアウトの処理中に、サーバ#1は、クライアントCL#1からデータ集合n+1に対する処理依頼を受け付ける(B4)。処理依頼は、図20で説明した依頼データのデータ構造により送受信される。サーバ#1は、データ移行リストを参照し、依頼データによる操作対象であるデータ集合n+1の移行状態を判定する。データ集合n+1の移行状態は“移行中”であるため、サーバ#1は、データ集合n+1が移行済になるまで待機した後、CL#1からの依頼データをサーバ#2に転送する(B5)。
移行中のデータ集合に対し、移行済になるまで待機するのは、データ集合の移行にかかる時間は、通常の処理依頼における待機時間と変わらないからである。サーバ側の要因またはネットワーク負荷によりタイムアウトになった場合、情報処理システムは、通常の処理依頼においてタイムアウトした場合と同様に、クライアントによる処理依頼からやり直す。したがって、情報処理システムは、業務継続することができる。
サーバ#2は、サーバ#1から受信した依頼データに基づいて、データ集合n+1に対する操作を行う(B6)。データ集合n+1に対する操作後、サーバ#2は、CL#1とのコネクションを確立し、処理結果をCL#1に返却する(B7)。処理結果は、図21で説明した結果データのデータ構造により送受信される。
CL#1は、処理を依頼したサーバ#1とは異なるサーバ#2から結果データを返却されたことからデータ集合n+1が移行されたことを認識し、クライアントが保持しているデータ集合n+1のデータ配置および接続先情報を動的に更新する。具体的には、図17で説明したデータ集合接続先リストにおいて、データ集合n+1に対する「接続先サーバ」をサーバ#2に更新する。
《動作例3》
動作例3は、スケールアウトの処理中にクライアントから処理依頼を受信した際、操作対象となるデータ集合が移行先サーバに移行されていない例を示す。この場合、処理依頼に基づく処理は、移行元サーバで行われる。
図24は、移行未のデータ集合に対する処理依頼を受信した場合の動作例を示す図である。C1からC4までの処理は、サーバ#1がクライアントCL#Z+1から処理依頼を受け付ける点以外は、図23のB1からB4までの処理とそれぞれ同様であるため、その説明を省略する。
サーバ#1は、CL#Z+1から処理依頼を受け付けると、データ移行リストを参照し、依頼データによる操作対象であるデータ集合n+1の移行状態を判定する。データ集合n+1の移行状態は“移行未”であるため、サーバ#1は、依頼データに基づいてデータ集合n+1に対する処理を行う。依頼データに基づく処理がデータ集合を更新する処理であってトランザクションが発生する場合、サーバ#1は、データ移行リストのデータ集合n+1に対し、発生したトランザクションを識別するID(以下、トランIDともいう)を記録する(C5)。
サーバ#1は、データ集合n+1に対し、依頼データに基づく処理を行う(C6)。依頼データに基づく処理に対するトランザクションがコミットまたはロールバックされると、サーバ#1は、データ移行リストに記録したトランIDを削除する(C7)。具体的には、例えば、サーバ#1は、トランIDに“0”を設定する。サーバ#1は、処理結果をCL#Z+1に返却する(C8)。
《動作例4》
動作例4は、スケールアウトの処理中にクライアントから処理依頼を受信した際、業務への影響を低減するため、更新中でないデータ集合を優先して、移行先サーバへ送信する例である。
図25は、更新中でないデータ集合を優先して移行先サーバへ送信する場合の動作例を示す図である。D1からD8までの処理は、図24のC1からC8までの処理とそれぞれ同様であるため、その説明を省略する。
ただし、D3の処理において、サーバ#1は、更新中のデータ集合の移行は後回しとし、更新中でないデータ集合を優先して移行先サーバへ送信する。更新中のデータ集合は、データ移行リストにおいてトランIDが記録されている。したがって、サーバ#1は、移行対象のデータ集合に対してトランIDが記録されている場合、当該データ集合の移行を後回しとし、次のデータ集合を優先してサーバ#2に移行する。
図25において、データ集合n+1の移行状態は“移行未”であり、トランIDが記録されているため、サーバ#1は、データ集合n+1の移行は後回しとし、次のデータ集合n+2を優先してサーバ#2に移行する。
サーバ#1は、データ集合n+2を移行先サーバに移行した後、更新中でないデータ集合を、順次サーバ#2に移行する。データ集合n+1に対するトランザクションがコミットまたはロールバックされ、トランIDが削除されると、サーバ#1はデータ集合n+1を、サーバ#2に移行する。
《動作例5》
動作例5は、スケールアウトの処理中にクライアントから処理依頼を受信した際、操作
対象となるデータ集合が更新中である例を示す。この場合、移行元サーバは、データ集合および更新による差分を移行先サーバに送信する。移行先サーバは、受信したデータ集合に対し、更新による差分をデータ集合に反映した後、データ集合に対する処理を行い、処理結果をクライアントに返却する。
図26は、更新中のデータ集合を移行先サーバへ送信する場合の動作例を示す図である。E1およびE2の処理は、図25のD1およびD2の処理とそれぞれ同様であるため、その説明を省略する。
スケールアウトの処理中に、サーバ#1は、クライアントCL#Z+1からデータ集合nに対する処理依頼を受け付ける(E3)。データ集合nの移行状態が“移行未”である場合、サーバ#1は、CL#Z+1からの依頼データに基づいて、データ集合nに対する処理を行う(E4)。また、サーバ#1は、データ集合nに対する処理において、トランザクションが発生した場合、トランログ1を作成する(E5)。トランログ1は、データ集合nの更新による差分データであり、継続中のトランザクションの更新状態を含む。さらに、サーバ#1は、データ移行リストのデータ集合nに対し、トランIDを記録する(E6)。
次に、サーバ#1は、データ集合nおよびトランログ1を結合した移行データを作成する(E7)。移行データは、図15で説明した移行データのデータ構造により作成される。サーバ#1は、移行データをサーバ#2に送信する(E8)。サーバ#1は、データ移行リストのデータ集合nに対するトランIDを削除する(E9)。
移行データを受信したサーバ#2は、移行データをデータ集合nおよびトランログ1に分解し、トランログ1の差分データをデータ集合nに適用する(E10)。サーバ#1は、CL#Z+1からの依頼データをサーバ#2に転送する(E11)。サーバ#2は、トランログ1の差分データが適用されたデータ集合nに対し、依頼データに基づく処理を行う(E12)。サーバ#2は、CL#Z+1とのコネクションを確立し、処理結果をCL#Z+1に返却する(E13)。なお、サーバ#1で処理中であった依頼データに基づく処理の結果データは、トランログ1が作成された後、CL#Z+1には送信せずに破棄される。
《動作例6》
動作例6は、スケールアウトによるデータ集合の移行が完了した後、各クライアントが、保持しているデータ配置および処理依頼先の接続先情報を動的に更新する例を示す。移行対象のデータ集合の移行先サーバへの送信が完了しても、各クライアントが保持しているデータ配置および処理依頼先の接続先情報は、変更されているとは限らない。このため、各クライアントは、処理依頼に対する結果データを受信すると、保持しているデータ配置および処理依頼先の接続先情報を動的に更新する。
図27は、クライアント装置におけるデータ配置および接続先情報の更新の例を示す図である。F1からF3までの処理は、図22のA1からA3までの処理とそれぞれ同様であるため、その説明を省略する。
スケールアウトによるデータ集合の移行が完了した後、サーバ#1は、クライアントCL#Xからデータ集合n〜mに対する処理依頼を受け付ける(F4)。データ集合n〜mはサーバ#2に移行済みなので、CL#Xからの依頼データをサーバ#2に転送する(F5)。
サーバ#2は、サーバ#1から受信した依頼データに基づいて、データ集合n〜mに対
する操作を行う(F6)。データ集合n〜mに対する操作後、サーバ#2は、CL#Xとのコネクションを確立し、処理結果をCL#Xに返却する(F7)。
CL#Xは、処理を依頼したサーバ#1とは異なるサーバ#2から結果データを返却されたことからデータ集合n〜mが移行されたことを認識し、CL#Xが保持しているデータ集合n〜mのデータ配置および処理依頼先の接続先情報を動的に更新する。
F4以降の処理を、CL#1からCL#Zの各クライアントに対して実行することで、各クライアントが保持しているデータ集合n〜mのデータ配置および処理依頼先の接続先情報は、動的に更新される。
CL#Xは、結果データの受信を契機として、データ配置および処理依頼先の接続先情報を更新することができる。また、サーバからクライアントへのハートビートを行う仕組みが実装されている場合、スケールアウトによるサーバ側のデータ移行が完了した後のハートビートで、サーバ側のデータ配置が変わったことをクライアントに通知してもよい。サーバ側のデータ配置が変わったことは、ハートビート用の送信データに添付し、クライアントに伝えることができる。
《動作例7》
動作例7は、クラスタシステムを構成し、ステートフルな方式で動作しているサーバをスケールアウトする場合に、クライアントからサーバへのデータアクセスを停止せずに、業務運用を継続させたままのスケールアウトをする例である。
図28は、クラスタシステムにおいてスケールアウトする場合の動作例を示す図である。G1およびG2の処理は、図22のA1およびA2の処理とそれぞれ同様であるため、その説明を省略する。
スケールアウトコマンドは、待機系であるサーバ#22に対しても発行される(G3)。スケールアウトコマンドにより、スケールアウト命令を受け付けたサーバ#a1は、データ移行リストを作成する。図28の例では、移行対象のデータ集合は、データ集合nおよびデータ集合n+1である。サーバ#a1は、スケールアウト命令の受信の際、移行先サーバおよび移行対象データも受信する。サーバ#a1は、移行先サーバが複数の場合は、現用系か否かについての情報を受信する。例えば、サーバ#a1は、最初に指定されたサーバを現用系とみなしてもよい。
同様に、スケールアウト命令を受け付けたサーバ#a2は、被データ移行リストを作成する。図28の例では、被移行対象のデータ集合は、データ集合nおよびデータ集合n+1である。
次に、サーバ#a1は、データ移行リストに含まれるデータ集合をサーバ#a2に移行する(G4)。現用系の移行先サーバ#a2は、待機系の移行先サーバ#b2との間で、データ同期をする(G5)。または、移行先サーバ#a2へのデータ移行が完了してから、待機系の移行先サーバ#b2を組み込み、データ同期をしてもよい。
現用系および待機系サーバ間のデータ同期をする手段としては、複数のメモリ間におけるデータのミラー化を制御する技術およびクラスタシステムに組み込んだサーバのデータ同期をする技術が知られている(例えば、国際公開第2008/105098号、特開2012−234333等参照)。
<処理の流れ>
図29から図37Bは、実施形態におけるサーバ装置2aの制御処理の流れを説明する。図38Aから図39は、実施形態におけるクライアント装置2bの制御処理の流れを説明する。
図29は、サーバ制御処理のフローチャートの一例である。サーバ制御処理は、例えば、サーバの起動により開始される。OP1では、サーバ装置2aは、サーバ制御処理を起動する。次に処理がOP2に進む。
OP2では、サーバ装置2aは、サーバ装置2aの定義ファイル41aから定義パラメタの設定値を読み込み、変数に設定する。具体的には、サーバ装置2aは、「通信制御多重度」、「サーバタイムアウト」および「スケールアウトタイムアウト」に、それぞれCommunicationControlMultiplicity、ServerTimeOutおよびScaleoutTimeOutの設定値を設定する。次に処理がOP3に進む。
OP3では、サーバ装置2aは、「プロセス停止フラグ」、「スケールアウトフラグ」および「移行元サーバフラグ」に“OFF”を設定する。次に処理がOP4に進む。OP4では、サーバ装置2aは、自身のサーバ名を取得し、「自サーバ」に設定する。次に処理がOP5に進む。
OP5では、サーバ装置2aは、「表定義」(図9A、図9B)および「データ集合配置定義」(図9C)を読み込んで、データを管理する表、およびデータ集合を作成する。次に処理がOP6に進む。
OP6では、サーバ装置2aは、通信制御多重度数のスレッドを生成する。次に処理がOP7およびOP9に進む。OP7では、サーバ装置2aは、依頼データ受付処理を行う。次に処理がOP8に進む。OP8では、サーバ装置2aは、スレッドを終了する。OP9では、サーバ装置2aは、コマンド受付処理を行い、サーバ制御処理を終了する。
図30は、コマンド受付処理のフローチャートの一例である。図30は、図29のOP9のコマンド受付処理の詳細を示す。OP11では、サーバ装置2aは、コマンドの実行による受信イベントが発生するまで待機する。次に処理がOP12に進む。
OP12では、サーバ装置2aは、スケールアウト命令を受信したか否かを判定する。スケールアウト命令を受信した場合には(OP12:Yes)、処理がOP13に進む。スケールアウト命令を受信していない場合には(OP12:No)、処理がOP14に進む。
OP13では、サーバ装置2aは、スケールアウト処理を行い、処理がOP11に戻る。OP14では、サーバ装置2aは、サーバ制御処理停止命令を受信したか否かを判定する。サーバ制御処理停止命令を受信した場合には(OP14:Yes)、処理がOP15に進む。サーバ制御処理停止命令を受信していない場合には(OP14:No)、処理がOP11に戻る。
OP15では、サーバ装置2aは、「プロセス停止フラグ」に“ON”を設定する。次に処理がOP16に進む。OP16では、サーバ装置2aは、サーバ制御プロセスの停止処理を行い、コマンド受付処理を終了する。
図31は、スケールアウト処理のフローチャートの一例である。図31は、図30のOP13のスケールアウト処理の詳細を示す。OP21では、サーバ装置2aは、スケールアウト命令で指定された入力情報を、入力インタフェースのパラメタとして受け取る。入
力情報は、“移行対象のデータ集合名”、“移行元サーバ名”および“移行先サーバ名”を含む。スケールアウト命令に、待機系移行先サーバが指定された場合、サーバ装置2aは、“待機系移行先サーバ名”も、入力情報として受け取る。次に処理がOP22に進む。
OP22では、サーバ装置2aは、「スケールアウトフラグ」に“ON”を設定する。次に処理がOP23に進む。OP23では、サーバ装置2aは、入力情報の“移行元サーバ名”を「移行元サーバ」に設定する。次に処理がOP24に進む。
OP24では、サーバ装置2aは、入力情報の“移行先サーバ名”を「移行先サーバ」に設定する。次に処理がOP25に進む。OP25では、サーバ装置2aは、「自サーバ」が「移行元サーバ」であるか否かを判定する。即ち、サーバ装置2aは、自身が移行元サーバであるか否かを判定する。自身が移行元サーバである場合には(OP25:Yes)、処理がOP26に進む。自身が移行元サーバでない場合には(OP25:No)、処理がOP27に進む。
OP26では、サーバ装置2aは、移行元サーバの処理を行う。移行元サーバの処理は、移行データを移行先サーバへ送信する処理である。次に処理がOP28に進む。OP27では、サーバ装置2aは、移行先サーバの処理を行う。移行先サーバの処理は、移行データを移行先サーバから受信する処理である。次に処理がOP28に進む。OP28では、サーバ装置2aは、「スケールアウトフラグ」に“OFF”を設定し、スケールアウト処理を終了する。
図32は、移行元サーバの処理のフローチャートの一例である。図32は、図31のOP26の移行元サーバの処理の詳細を示す。OP31では、サーバ装置2aは、入力情報の“移行対象のデータ集合名”(図31、OP21)およびトランログからデータ移行リストを作成する。次に処理がOP32に進む。
OP32では、サーバ装置2aは、コネクション情報からクライアント通知リストを作成する。クライアント通知リストは、各クライアント装置2bに対し、スケールアウトによるデータ配置の変更を通知したか否かを管理する。各クライアント装置2bへの通知が完了すると、サーバ装置2aは、データ配置の変更に関する情報を保持しなくてもよい。一方、データ配置の変更に関する情報を保持し続ける場合には、クライアント通知リストを作成しなくてもよい。次に処理がOP33に進む。
OP33では、サーバ装置2aは、「移行元サーバフラグ」に“ON”を設定する。次に処理がOP34に進む。OP34では、サーバ装置2aは、現在時刻を取得し、「処理開始時刻」に設定する。次に処理がOP35に進む。OP35では、サーバ装置2aは、移行データ送信処理を行い、移行元サーバの処理を終了する。
図33は、移行データ送信処理のフローチャートの一例である。図33は、図32のOP35の移行データ送信処理の詳細を示す。サーバ装置2aは、移行部53により、図33のOP41からOP54までの処理を行う。
OP41では、サーバ装置2aは、移行データを初期化する。次に処理がOP42に進む。OP42では、サーバ装置2aは、データ移行リストにおいて、「移行状態」が“移行未”のデータ集合の数が0より大きいか否かを判定する。“移行未”のデータ集合の数が0より大きい場合には(OP42:Yes)、処理がOP43に進む。“移行未”のデータ集合の数が0以下の場合には(OP42:No)、移行データ送信処理が終了する。
OP43では、サーバ装置2aは、データ移行リストにおいて、「トランID」が“0” のデータ集合の数が0より大きいか否かを判定する。「トランID」が“0” のデータ集合の数が0より大きい場合には(OP43:Yes)、処理がOP44に進む。「トランID」が“0”のデータ集合の数が0以下の場合には(OP43:No)、処理がOP45に進む。
OP44では、サーバ装置2aは、データ移行リストにおいて、「移行状態」が“移行未”で「トランID」が“0”のデータ集合を抽出する。次に処理がOP47に進む。OP45では、サーバ装置2aは、データ移行リストにおいて、「移行状態」が“移行未”で「トランID」が“0”でないデータ集合を抽出する。次に処理がOP46に進む。OP46では、サーバ装置2aは、移行データに当該「トランID」に対応するトランログを設定する。次に処理がOP47に進む。
OP47では、サーバ装置2aは、移行対象のデータ集合の「移行状態」を“移行中"
に変更する。次に処理がOP48に進む。OP48では、サーバ装置2aは、移行データに移行対象のデータ集合を設定する。次に処理がOP49に進む。
OP49では、サーバ装置2aは、移行先サーバに移行データを送信する。次に処理がOP50に進む。OP50では、サーバ装置2aは、移行先サーバからの応答を待つか、または一定時間休止する。一定時間は、例えば10msである。次に処理がOP51に進む。
OP51では、サーバ装置2aは、移行先サーバから応答を受信したか否かを判定する。移行先サーバから応答を受信した場合には(OP51:Yes)、処理がOP52に進む。移行先サーバから応答を受信しない場合には(OP51:No)、処理がOP53に進む。OP52では、サーバ装置2aは、移行対象のデータ集合の「移行状態」を“移行済"に変更する。次に処理がOP41に戻る。
OP53では、サーバ装置2aは、現在時刻≧「処理開始時刻」+「スケールアウトタイムアウト」であるか否かを判定する。即ち、サーバ装置2aは、移行先サーバからの応答待ち時間が所定時間以上であるか否かを判定する。応答待ち時間が所定時間以上である場合には(OP53:Yes)、処理がOP54に進む。応答待ち時間が所定時間より短い場合には(OP53:No)、処理がOP50に戻る。OP54では、サーバ装置2aは、移行先サーバからの応答待ちのタイムアウトにより、スケールアウトが失敗した旨のメッセージを出力し、移行データ送信処理を終了する。
図34は、移行先サーバの処理のフローチャートの一例である。図34は、図31のOP27の移行先サーバの処理の詳細を示す。OP61では、サーバ装置2aは、入力情報の“移行対象のデータ集合名”(図31、OP21)から被データ移行リストを作成する。次に処理がOP62に進む。
OP62では、サーバ装置2aは、被データ移行リストにおいて、「移行状態」が“移行未”のデータ集合の数が0より大きいか否かを判定する。“移行未”のデータ集合の数が0より大きい場合には(OP62:Yes)、処理がOP63に進む。“移行未”のデータ集合の数が0以下の場合には(OP62:No)、処理がOP73に進む。
OP63では、サーバ装置2aは、移行元サーバからの移行データを待つか、または一定時間休止する。一定時間は、例えば10msである。次に処理がOP64に進む。OP64では、サーバ装置2aは、移行元サーバから移行データを受信したか否かを判定する。移行データを受信した場合には(OP64:Yes)、処理がOP65に進む。移行デ
ータを受信しない場合には(OP64:No)、処理がOP71に進む。
OP65では、サーバ装置2aは、移行データからデータ集合を取り出して保存する。次に処理がOP66に進む。OP66では、サーバ装置2aは、移行データにトランログが存在するか否かを判定する。トランログが存在する場合には(OP66:Yes)、処理がOP67に進む。トランログが存在しない場合には(OP66:No)、処理がOP69に進む。
OP67では、サーバ装置2aは、移行データからトランログを取り出して保存する。次に処理がOP68に進む。OP68では、サーバ装置2aは、保存したトランログのIDを、被データ移行リストの被移行対象のデータ集合の「トランID」に設定する。次に処理がOP69に進む。
OP69では、サーバ装置2aは、移行元サーバへ応答を送信する。次に処理がOP70に進む。OP70では、サーバ装置2aは、被移行対象のデータ集合の「移行状態」を"移行済"に変更する。次に処理がOP62に戻る。
OP71では、サーバ装置2aは、現在時刻≧「処理開始時刻」+「スケールアウトタイムアウト」であるか否かを判定する。即ち、サーバ装置2aは、移行元サーバからの移行データの受信待ち時間が所定時間以上であるか否かを判定する。受信待ち時間が所定時間以上である場合には(OP71:Yes)、処理がOP72に進む。受信待ち時間が所定時間より短い場合には(OP71:No)、処理がOP62に戻る。
OP72では、サーバ装置2aは、移行元サーバからの移行データの受信待ちのタイムアウトにより、スケールアウトが失敗した旨のメッセージを出力する。次に処理がOP73に進む。OP73では、サーバ装置2aは、移行元サーバに移行完了通知を送信し、移行先サーバの処理を終了する。
図35は、依頼データ受付処理のフローチャートの一例である。図35は、図29のOP7の依頼データ受付処理の詳細を示す。OP81では、サーバ装置2aは、依頼データの受信を待機する。次に処理がOP82に進む。
OP82では、サーバ装置2aは、依頼データを受信したか否かを判定する。依頼データを受信した場合には(OP82:Yes)、処理がOP83に進む。依頼データを受信しない場合には(OP82:No)、処理がOP84に進む。
OP83では、サーバ装置2aは、依頼データ処理を行う。次に処理がOP84に進む。OP84では、サーバ装置2aは、「プロセス停止フラグ」が“ON”であるか否かを判定する。「プロセス停止フラグ」が“ON”である場合には(OP84:Yes)、依頼データ受付処理が終了する。「プロセス停止フラグ」が“ON”でない場合には(OP84:No)、処理がOP81に戻る。
図36Aおよび図36Bは、依頼データ処理のフローチャートの一例である。図36Aおよび図36Bは、図35のOP83の依頼データ処理の詳細を示す。図36Aは、依頼データの操作対象であるデータ集合が、移行先サーバに移行されていない場合の処理を示す。
OP91では、サーバ装置2aは、現在時刻を取得し、「受付時刻」に設定する。次に処理がOP92に進む。OP92では、サーバ装置2aは、「移行元サーバフラグ」が“ON”であるか否かを判定する。「移行元サーバフラグ」が“ON”である場合には(O
P92:Yes)、処理がOP93に進む。「移行元サーバフラグ」が“ON”でない場合には(OP92:No)、処理がOP94に進む。
OP93では、サーバ装置2aは、データ移行リストにおいて、依頼データの操作対象のデータ集合が"移行未"であるか否かを判定する。操作対象のデータ集合が"移行未"である場合には(OP93:Yes)、処理がOP94に進む。操作対象のデータ集合が"移
行未"でない場合には(OP93:No)、処理が図36BのS1に進む。
OP94では、サーバ装置2aは、依頼データを送信したクライアント装置2bとのコネクションが確立されているか否かを判定する。コネクションが確立されている場合には(OP94:Yes)、処理がOP99に進む。コネクションが確立されていない場合には(OP94:No)、処理がOP95に進む。
OP95では、サーバ装置2aは、依頼データを送信したクライアント装置2bに対するコネクション情報を作成する。次に処理がOP96に進む。OP96では、サーバ装置2aは、「自サーバ」が「移行先サーバ」であるか否かを判定する。即ち、サーバ装置2aは、自身が移行先サーバであるか否かを判定する。自身が移行先サーバである場合には(OP96:Yes)、処理がOP97に進む。自身が移行先サーバでない場合には(OP96:No)、処理がOP99に進む。
OP97では、サーバ装置2aは、被データ移行リストにおいて、操作対象のデータ集合の「トランID」が“0”であるか否かを判定する。操作対象のデータ集合の「トランID」が“0”である場合には(OP97:Yes)、処理がOP99に進む。操作対象のデータ集合の「トランID」が“0”でない場合には(OP97:No)、処理がOP98に進む。
OP98では、サーバ装置2aは、被データ移行リストの操作対象のデータ集合の「トランID」をコネクション情報の「トランID」に設定する。次に処理がOP99に進む。
OP99では、サーバ装置2aは、依頼データに基づく処理操作を行う。次に処理がOP100に進む。OP100では、サーバ装置2aは、依頼データに基づく処理操作の結果データをクライアントに返却し、依頼データ処理を終了する。サーバ装置2aは、応答部52により、OP100の処理を行う。
図36Bは、依頼データの操作対象であるデータ集合が、移行先サーバに移行中または移行済の場合の処理を示す。図36AのS1の次に処理がOP111に進む。OP111では、サーバ装置2aは、依頼データの操作対象のデータ集合が"移行中"であるか否かを判定する。操作対象のデータ集合が"移行中"である場合には(OP111:Yes)、処理がOP112に進む。操作対象のデータ集合が"移行中"でない場合には(OP111:No)、処理がOP114に進む。
OP112では、サーバ装置2aは、一定時間待機する。一定時間は、例えば1msである。次に処理がOP113に進む。OP113では、サーバ装置2aは、「受付時刻」から「サーバタイムアウト」に設定された時間が経過したか否かを判定する。「受付時刻」から「サーバタイムアウト」に設定された時間が経過した場合には(OP113:Yes)、処理が図37BのS2に進む。「受付時刻」から「サーバタイムアウト」に設定された時間が経過していない場合には(OP113:No)、処理がOP111に戻る。
OP114では、サーバ装置2aは、依頼データの操作対象のデータ集合は"移行済"で
あるため、依頼データを移行先サーバへ送信する。サーバ装置2aは、処理依頼送信部54により、OP114の処理を行う。次に処理がOP115に進む。
OP115では、サーバ装置2aは、クライアント通知リストの「クライアント通知状態」を“通知済”にする。次に処理がOP116に進む。OP116では、サーバ装置2aは、クライアント通知リストの「クライアント通知状態」が"通知未"のクライアント装置2bがあるか否かを判定する。「クライアント通知状態」が"通知未"のクライアント装置2bがある場合には(OP116:Yes)、処理がOP119に進む。「クライアント通知状態」が"通知未"のクライアント装置2bがない場合には(OP116:No)、処理がOP117に進む。なお、図32のOP32において、クライアント通知リストを作成しない場合は、OP115およびOP116の処理は省略される。
OP117では、サーバ装置2aは、「スケールアウトフラグ」が“OFF”であるか否かを判定する。「スケールアウトフラグ」が“OFF”である場合には(OP117:Yes)、処理がOP118に進む。「スケールアウトフラグ」が“OFF”でない場合には(OP117:No)、処理がOP119に進む。
OP118では、サーバ装置2aは、「移行元サーバフラグ」に“OFF”を設定する。次に処理がOP119に進む。OP119では、サーバ装置2aは、依頼データを送信したクライアント装置2bに対するコネクション情報を削除し、依頼データ処理を終了する。
図37Aおよび図37Bは、依頼データに基づく処理操作のフローチャートの一例である。図37Aおよび図37Bは、図36AのOP99の依頼データに基づく処理操作の詳細を示す。サーバ装置2aは、処理部51により、図37AのOP121からOP126までの処理、および図37BのOP131からOP142までの処理を行う。
図37AのOP121では、サーバ装置2aは、依頼データに基づく処理操作がコミットであるか否かを判定する。処理操作がコミットである場合には(OP121:Yes)、処理がOP123に進む。処理操作がコミットでない場合には(OP121:No)、処理がOP122に進む。
OP122では、サーバ装置2aは、処理操作がロールバックであるか否かを判定する。処理操作がロールバックである場合には(OP122:Yes)、処理がOP125に進む。処理操作がロールバックでない場合には(OP122:No)、処理が図37BのS3に進む。
OP123では、サーバ装置2aは、処理操作がコミットであり、「トランID」に対応するトランログを読み込む。次に処理がOP124に進む。OP124では、サーバ装置2aは、「トランID」に対応する差分データをデータ集合に書き込む。次に処理がOP125に進む。
OP125では、サーバ装置2aは、「トランID」に対応するトランログを削除する。次に処理がOP126に進む。OP126では、サーバ装置2aは、データ移行リストから「トランID」を削除し、依頼データに基づく処理操作を終了する。
図37Bは、依頼データの処理操作が、コミットでもロールバックでもない場合の処理を示す。図37AのS3の次に処理がOP131に進む。OP131では、サーバ装置2aは、「トランID」に対応するトランログを読み込む。次に処理がOP132に進む。
OP132では、サーバ装置2aは、依頼データの処理操作を、トランログの差分データを反映したデータ集合に対して実施する。次に処理がOP133に進む。OP133では、サーバ装置2aは、依頼データの処理操作が成功したか否かを判定する。依頼データの処理操作が成功した場合には(OP133:Yes)、処理がOP134に進む。依頼データの処理操作が成功しなかった場合には(OP133:No)、処理がOP140に進む。
OP134では、サーバ装置2aは、新たにトランザクションが発生したか否かを判定する。トランザクションが発生した場合には(OP134:Yes)、処理がOP135に進む。トランザクションが発生しない場合には(OP134:No)、処理がOP139に進む。
OP135では、サーバ装置2aは、OP134で発生したトランザクションに対するトランログを作成する。次に処理がOP136に進む。OP136では、サーバ装置2aは、「トランID」をコネクション情報に設定する。次に処理がOP137に進む。
OP137では、サーバ装置2aは、「移行元サーバフラグ」が“ON”で移行対象のデータ集合でトランザクションが発生しているか否かを判定する。「移行元サーバフラグ」が“ON”で移行対象のデータ集合でトランザクションが発生している場合には(OP137:Yes)、処理がOP138に進む。「移行元サーバフラグ」が“ON”でないか、または移行対象のデータ集合でトランザクションが発生していない場合には(OP137:No)、処理がOP139に進む。
OP138では、サーバ装置2aは、データ移行リストの移行対象のデータ集合に対し「トランID」を設定する。次に処理がOP139に進む。OP139では、サーバ装置2aは、データ集合の更新差分をトランログに反映し、依頼データに基づく処理操作を終了する。
OP133において、依頼データの処理操作が成功しなかった場合には、処理がOP140に進む。また、図36BのOP113において、依頼データの「受付時刻」から「サーバタイムアウト」に設定された時間が経過した場合には、処理がOP140に進む。OP140では、サーバ装置2aは、トランザクションのロールバックを行うか否かを判定する。トランザクションのロールバックを行う場合には(OP140:Yes)、処理がOP141に進む。トランザクションのロールバックを行わない場合には(OP140:No)、依頼データに基づく処理操作が終了する。
OP141では、サーバ装置2aは、「トランID」に対応するトランログを削除する。次に処理がOP142に進む。OP142では、サーバ装置2aは、データ移行リストから「トランID」を削除し、依頼データに基づく処理操作を終了する。
図38Aおよび図38Bは、クライアント制御処理のフローチャートの一例である。クライアント制御処理は、依頼データを作成してサーバ装置2aに送信し、結果データを受信してデータ集合の接続先情報を更新する処理を含む。クライアント制御処理は、例えば、クライアントアプリケーションの起動により開始される。OP151では、クライアント装置2bは、クライアントアプリケーションから処理依頼を受け付ける。次に処理がOP152に進む。
OP152では、クライアント装置2bは、サーバ接続先リストおよびデータ集合接続先リストが作成されているか否かを判定する。サーバ接続先リストおよびデータ集合接続先リストが作成されている場合には(OP152:Yes)、処理がOP157に進む。
サーバ接続先リストおよびデータ集合接続先リストが作成されていない場合には(OP152:No)、処理がOP153に進む。
OP153では、クライアント装置2bは、クライアント装置2bの定義ファイル41bから定義パラメタの設定値を読み込み、変数に設定する。具体的には、クライアント装置2bは、「クライアントタイムアウト」および「クライアントポート番号」に、それぞれClientTimeOutおよびClientPortの設定値を設定する。次に処理がOP154に進む。
OP154では、クライアント装置2bは、自サーバの"IPアドレス"や"マシン名"を取得し、「クライアント名」に設定する。次に処理がOP155に進む。
OP155では、クライアント装置2bは、クライアント装置2bの定義ファイル41bを読み込み、サーバ接続先リストを作成する。具体的には、クライアント装置2bは、サーバ接続先リストにおいて、サーバ接続先情報の「サーバ名」および「ポート番号」に、それぞれServerNameおよびServerPortの設定値を設定する。クライアント装置2bの定義ファイル41bに複数のサーバが定義されている場合、クライアント装置2bは、各サーバに対し、サーバ接続先情報の「サーバ名」および「ポート番号」にそれぞれ対応する設定値を設定する。次に処理がOP156に進む。
OP156では、クライアント装置2bは、クライアント装置2bの定義ファイル41bを読み込み、データ集合接続先リストを作成する。具体的には、クライアント装置2bは、データ集合接続先リストにおいて、データ集合と接続先組み合わせの「データ集合名」および「接続先サーバ名」を、DataLocatedServerの設定値に基づいて設定する。クラ
イアント装置2bの定義ファイル41bに複数のデータ集合が定義されている場合、クライアント装置2bは、各データ集合に対し、データ集合と接続先組み合わせの「データ集合名」および「接続先サーバ名」にそれぞれ対応する設定値を設定する。次に処理がOP157に進む。
OP157では、クライアント装置2bは、現在時刻を取得し変数「依頼開始時刻」に設定する。次に処理がOP158に進む。OP158では、クライアント装置2bは、処理依頼から操作対象のデータ集合を抽出する。次に処理がOP159に進む。
OP159では、クライアント装置2bは、データ集合接続先リストから抽出したデータ集合が存在する接続先サーバのサーバ名とポート番号を、依頼データの「サーバ名」および「サーバポート番号」に設定する。次に処理がOP160に進む。
OP160では、クライアント装置2bは、OP159における接続先サーバを「依頼先サーバ」に設定する。次に処理がOP161に進む。OP161では、クライアント装置2bは、OP159におけるデータ集合を「依頼データ集合」に設定し、処理が図38BのS4に進む。
図38BのS4の次に処理がOP171に進む。OP171では、クライアント装置2bは、クライアントアプリケーションから受け付けた処理依頼に、制御情報を追加した依頼データを、サーバ装置2aへ送信する。制御情報は、依頼データの「サーバ名」、「サーバポート番号」、「クライアント名」、「クライアントポート番号」および「依頼データ番号」等である。次に処理がOP172に進む。
OP172では、クライアント装置2bは、一定時間経過するか、結果データを受信するまで待機する。一定時間は、例えば、「クライアントタイムアウト」の1/10の時間である。次に処理がOP173に進む。
OP173では、クライアント装置2bは、サーバ装置2aから結果データを受信したか否かを判定する。結果データを受信した場合には(OP173:Yes)、処理がOP174に進む。結果データを受信していない場合には(OP173:No)、処理がOP175に進む。
OP174では、クライアント装置2bは、結果データ受信処理を行う。次に処理がOP178に進む。OP175では、クライアント装置2bは、現在時刻を取得し変数「現在時刻」に設定する。次に処理がOP176に進む。
OP176では、クライアント装置2bは、「クライアントタイムアウト」>「現在時刻」−「依頼開始時刻」であるか否かを判定する。即ち、クライアント装置2bは、サーバ装置2aからの結果データの受信待ち時間が所定時間より短いか否かを判定する。受信待ち時間が所定時間より短い場合には(OP176:Yes)、処理がOP172に戻る。受信待ち時間が所定時間以上である場合には、(OP176:No)、処理がOP177に進む。
OP177では、クライアント装置2bは、復帰値にタイムアウトであることを示す値を設定する。次に処理がOP178に進む。OP178では、クライアント装置2bは、クライアントアプリケーションに復帰し、クライアント制御処理を終了する。
図39は、結果データ受信処理のフローチャートの一例である。図39は、図38BのOP174の結果データ受信処理の詳細を示す。OP181では、クライアント装置2bは、サーバ装置2aから受信した結果データから制御情報を取り出す。制御情報は、結果データの「依頼先サーバ名」および「結果送信サーバ名」等である。次に処理がOP182に進む。
OP182では、クライアント装置2bは、依頼データを送信した「依頼先サーバ」と結果データを送信した「結果送信サーバ」とが異なるか否かを判定する。具体的には、クライアント装置2bは、図38AのOP160で設定された「依頼先サーバ」と、サーバ装置2aから受信した結果データの「結果送信サーバ名」とが異なるか否かを判定すればよい。「依頼先サーバ」と「結果送信サーバ」とが異なる場合には(OP182:Yes)、処理がOP183に進む。「依頼先サーバ」と「結果送信サーバ」とが同じ場合には(OP182:No)、処理がOP184に進む。
OP183では、クライアント装置2bは、「依頼先サーバ」と「結果送信サーバ」とが異なるため、データ集合の接続先サーバが変更されたと判断し、データ集合接続先リストを更新する。即ち、クライアント装置2bは、データ集合接続先リストにおいて、データ集合に対する接続先サーバを「依頼先サーバ」から「結果送信サーバ」に更新する。次に処理がOP184に進む。
OP184では、クライアント装置2bは、サーバ装置2aから受信した結果データから「処理結果」を取り出す。次に処理がOP185に進む。OP185では、クライアント装置2bは、アプリケーションの返却域に「処理結果」を設定する。次に処理がOP186に進む。OP186では、クライアント装置2bは、復帰値に「処理結果」に応じた値を設定し、結果データ受信処理を終了する。
<実施形態の作用効果>
情報処理システム1において、スケールアウトによりシステム規模を拡充する場合、移行元サーバは、移行対象のデータ集合を、増設された移行先サーバに移行する。移行元サーバは、クライアントからの処理依頼を受信し、操作対象のデータ集合が移行先サーバに
移行されている場合、処理依頼を移行先サーバに送信する。移行先サーバは、受信した処理依頼に基づいて、移行済のデータ集合に対する処理を行う。
移行先サーバは、処理依頼に基づいて行った処理の結果をクライアントに送信する。処理結果は、操作対象のデータ集合が、移行先サーバに配置されている旨の情報を含む。このため、クライアントは、操作対象のデータ集合が移行先サーバに移行されたことを認識し、クライアント自身が保持するデータ集合の配置情報を更新することができる。したがって、情報処理システム1は、クライアントからサーバへの処理依頼の停止を回避して、スケールアウトすることができる。
また、移行先サーバは、移行対象のデータ集合が移行元サーバから移行中である場合、移行完了後に、移行元サーバから受信した処理依頼に基づく処理を行う。このとき移行先サーバは、移行元サーバで行う場合と変わらない待ち時間で、操作対象のデータ集合に対する処理を行うことができる。この場合も、移行先サーバは、データ集合の配置情報を含む処理結果をクライアントに送信する。したがって、情報処理システム1は、クライアントからサーバへの処理依頼の停止を回避して、スケールアウトすることができる。
さらに、移行元サーバは、操作対象のデータ集合が更新中である場合、当該データ集合に対する更新内容を含む差分データを、当該データ集合とともに移行先サーバに移行する。移行先サーバは、移行された差分データを当該データ集合に反映し、クライアントからの処理依頼に基づく処理を行う。このため、操作対象のデータ集合が更新中であっても、差分データとともに移行先サーバに送信することで、更新中のデータ集合の移行が可能となる。また、移行先サーバは、処理結果をデータ集合の配置情報とともにクライアントに送信する。したがって、情報処理システム1は、クライアントからサーバへの処理依頼の停止を回避して、スケールアウトすることができる。
なお、操作対象のデータ集合が更新中であるか否かの判断は、次のように行うことができる。操作対象のデータ集合に対してトランザクションが発生すると、移行元サーバは、データ移行リストの当該データ集合に対して「トランID」を記録する。そして、トランザクションが終了すると、移行元サーバは、データ移行リストの当該データ集合に対する「トランID」を削除する。移行元サーバは、操作対象のデータ集合に対して「トランID」が記録されているか否かにより、当該データ集合が更新中であるか否かを判断することができる。
またさらに、移行元サーバは、更新中でないデータ集合を優先して移行先サーバに移行する。したがって、情報処理システム1は、クライアントからサーバへの処理依頼の停止を回避し、業務への影響を抑制しながら、スケールアウトすることができる。
情報処理システム1が、移行元の現用系サーバおよび待機系サーバを含むクラスタシステムを構築する場合、スケールアウトによりデータ集合が移行先の現用系サーバに移行されると、移行先の現用系サーバは、移行先の待機系サーバと同期を取る。移行先の現用系サーバは、クライアントからの処理依頼を受信すると、処理依頼に基づく処理を行い、データ集合の配置情報を含む処理結果をクライアントに送信する。したがって、クラスタシステムを構築する情報処理システム1は、クライアントからサーバへの処理依頼の停止を回避し、スケールアウトすることができる。
<記録媒体>
コンピュータその他の機械、装置(以下、コンピュータ等)に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させること
により、その機能を提供させることができる。
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、CD−ROM、CD−R/W、DVD、ブルーレイディスク、DAT、8mmテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやROM(リードオンリーメモリ)等がある。さらに、Solid State Drive(SSD)はコンピュータ等から取り外し可能な記録媒体としても、コンピュータ等
に固定された記録媒体としても利用可能である。
<その他>
上述した実施形態は、以下の付記を開示する。以下の付記は適宜組み合わせることが可能である。
(付記1)
移行元の情報処理装置からデータの移行を受け付ける情報処理装置において、
クライアント装置からの処理依頼の対象である操作対象データに対して、前記移行元の情報処理装置からの移行がなされ、前記移行元の情報処理装置から前記処理依頼を受信した場合に、前記操作対象データに対する処理を実行する処理部と、
前記操作対象データの配置情報を含む前記処理の結果を、前記クライアント装置に通知する応答部と、
を備える情報処理装置。
(付記2)
前記処理部は、前記操作対象データが、前記移行元の情報処理装置から移行中である場合には、移行完了後に前記処理を実行する、
付記1に記載の情報処理装置。
(付記3)
前記処理部は、前記操作対象データが更新中である場合、前記移行元の情報処理装置における前記操作対象データの更新内容を含む差分データとともに、前記操作対象データの移行を受け付け、前記操作対象データおよび前記差分データに基づいて前記処理を行う、付記1又は2に記載の情報処理装置。
(付記4)
移行先の情報処理装置にデータを移行する移行部と、
クライアント装置からの処理依頼の対象である操作対象データを、前記移行先の情報処理装置に移行し、前記処理依頼を前記移行先の情報処理装置に送信する処理依頼送信部と、
を備える情報処理装置。
(付記5)
前記処理依頼を受信してトランザクションが発生した場合、前記操作対象データが更新中であることを記録し、前記トランザクションが終了すると、前記記録を消去する記憶部、
をさらに備える付記4に記載の情報処理装置。
(付記6)
前記移行部は、前記操作対象データが複数ある場合、更新中でない操作対象データを優先して、前記移行先の情報処理装置に移行する、
付記4又は5に記載の情報処理装置。
(付記7)
前記移行部は、前記操作対象データが更新中である場合、前記操作対象データの更新内容を含む差分データとともに、前記操作対象データを前記移行先の情報処理装置に移行する、
付記4から6のいずれか一項に記載の情報処理装置。
(付記8)
移行元の情報処理装置と、前記移行元の情報処理装置からデータの移行を受け付ける移行先の情報処理装置とを有する情報処理システムにおいて、
前記移行先の情報処理装置は、
クライアント装置からの処理依頼の対象である操作対象データに対して、前記移行元の情報処理装置からの移行がなされ、前記移行元の情報処理装置から前記処理依頼を受信した場合に、前記操作対象データに対する処理を実行する処理部と、
前記操作対象データの配置情報を含む前記処理の結果を、前記クライアント装置に通知する応答部と、を備える、
情報処理システム。
(付記9)
前記移行元の情報処理装置は、前記処理依頼を受信してトランザクションが発生した場合、前記操作対象データが更新中であることを記録し、前記トランザクションが終了すると、前記記録を消去する記憶部、をさらに備える、
付記8に記載の情報処理システム。
(付記10)
前記クライアント装置は、前記処理の結果に基づいて、前記クライアント装置で保持しているデータの配置情報を更新する、
付記8又は9に記載の情報処理システム。
(付記11)
前記移行元の情報処理装置が、移行元の待機系情報処理装置と共にクラスタシステムを構築する場合に、前記移行先の情報処理装置は、前記データを受信すると、移行先の待機系情報処理装置との間で同期を取る、
付記8から10のいずれか一項に記載の情報処理システム。
(付記12)
移行元の情報処理装置からデータの移行を受け付ける移行先の情報処理装置に、
クライアント装置からの処理依頼の対象である操作対象データに対して、前記移行元の情報処理装置からの移行がなされ、前記移行元の情報処理装置から前記処理依頼を受信した場合に、前記操作対象データに対する処理を実行させ、
前記操作対象データの配置情報を含む前記処理の結果を、前記クライアント装置に通知させる、
ための制御プログラム。
(付記13)
移行元の情報処理装置に処理依頼を送信し、前記処理依頼の対象である操作対象データが前記移行元の情報処理装置から移行先の情報処理装置に移行され、前記移行元の情報処
理装置から前記処理依頼を受信した前記移行先の情報処理装置により前記操作対象データに対する処理が実行された場合に、前記操作対象データの配置情報を含む前記処理の結果を受信し、前記結果に基づいて前記操作対象データの配置情報を更新する処理制御部、
を備えるクライアント装置。