JP6248523B2 - データ処理管理方法、情報処理装置およびデータ処理管理プログラム - Google Patents

データ処理管理方法、情報処理装置およびデータ処理管理プログラム Download PDF

Info

Publication number
JP6248523B2
JP6248523B2 JP2013209824A JP2013209824A JP6248523B2 JP 6248523 B2 JP6248523 B2 JP 6248523B2 JP 2013209824 A JP2013209824 A JP 2013209824A JP 2013209824 A JP2013209824 A JP 2013209824A JP 6248523 B2 JP6248523 B2 JP 6248523B2
Authority
JP
Japan
Prior art keywords
query
event
node
transmission
computer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2013209824A
Other languages
English (en)
Other versions
JP2015075803A (ja
JP2015075803A5 (ja
Inventor
信貴 今村
信貴 今村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2013209824A priority Critical patent/JP6248523B2/ja
Priority to EP14186610.3A priority patent/EP2857969B1/en
Priority to US14/499,321 priority patent/US9742841B2/en
Priority to CN201410522191.8A priority patent/CN104516776B/zh
Publication of JP2015075803A publication Critical patent/JP2015075803A/ja
Publication of JP2015075803A5 publication Critical patent/JP2015075803A5/ja
Application granted granted Critical
Publication of JP6248523B2 publication Critical patent/JP6248523B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration

Description

本発明はデータ処理管理方法、情報処理装置およびデータ処理管理プログラムに関する。
複数のマシンを含む分散処理システムを用いてデータ処理を行うことがある。マシンには、物理的なコンピュータ(物理マシンや物理ホストということがある)や物理マシン上で動作する仮想的なコンピュータ(仮想マシンや論理ホストということがある)が含まれ得る。例えば、分散処理システムを用いて複合イベント処理(CEP:Complex Event Processing)を行うことがある。種々の装置により発行された複数のイベントを複数のマシンで並列に処理することで、複数のイベントを高速に処理し得る。
分散処理システムでは、マシン毎の処理の割当てを変更することでマシン毎の負荷の平準化を図ることがある。そこで、処理の割当て変更を行う種々の方法が考えられている。例えば、第1の計算機で実行中のプロセスを第2の計算機に移動させる際に、複製した当該プロセスを第2の計算機に送信しながら、第1の計算機で当該プロセスの実行を継続することで、プロセス移動中のプロセス停止時間を短く抑える提案がある。
また、自プロセッサで動作しているタスクを他のプロセッサに移動させる際、当該タスクを移動先に送り出す送り出しタスクを実行し、送り出す最中に移動対象タスクに対する割り込み要求が発生すると、送り出しタスクにより割り込み処理を起動する提案もある。
更に、処理負荷が所定値を超える仮想マシンが検出された場合、複合イベント処理の関連度に基づいて、仮想マシンそれぞれに複合イベント処理を分散させる提案もある。
特開2004−78465号公報 特開2010−272076号公報 特開2012−79242号公報
データ処理の割当てを変更する際に、変更前の処理経過を変更後も引き継ぎたいことがある。例えば、複数のイベントに対する処理を行う場合に、そのうち一部のイベントが発生済なら、一部のイベントの発生済の状態を割当て変更後も維持したいことがある。そこで、割当て変更前の第1のマシンから割当て変更後の第2のマシンに処理の進捗を提供し、第2のマシンに処理を途中から引き継がせることが考えられる。ところが、第1のマシンから第2のマシンへの進捗情報の送信中にも、割当て変更対象の処理に用いられるデータが第1のマシンに入力されることがある。このとき、当該データの扱いが問題となる。
例えば、上記提案のように、入力されたデータを第1のマシン側で継続して処理することが考えられる。しかし、当該データが第1のマシンに到着し続けると第1のマシンで処理を終えられなくなり、第2のマシンに当該処理を開始させるまでに時間がかかり得る。一方、第1のマシンで当該処理を中断し、進捗情報の送信完了後に、第1のマシンに入力されたデータを第2のマシンに送信し、処理を再開させることも考えられる。しかし、進捗情報の送信完了を待ち、更に当該データを次に送信できるタイミングまで待っていると、第2のマシンへの当該データの到着が遅れ、第2のマシンでの処理再開が遅延し得る。
1つの側面では、本発明は、割当て変更先での処理開始までの遅延を短縮できるデータ処理管理方法、情報処理装置およびデータ処理管理プログラムを提供することを目的とする。
1つの態様では、第1のコンピュータおよび第2のコンピュータを有するシステムのデータ処理管理方法が提供される。このデータ処理管理方法では、第1のコンピュータが、一連のイベントを示すパターンであって記憶部に記憶されたパターンに対応する処理を、第1のコンピュータにより受信した到着済イベントに応じて実行し、到着済イベントの情報を記憶部に記録し、処理の割当てを第2のコンピュータに変更する指示を受信し、処理に対する到着済イベントを示す進捗情報の送信準備中に、パターンに属する第1のイベントを受信し、進捗情報および第1のイベントを含む送信データを生成し、進捗情報に代えて、送信データを第2のコンピュータに送信する。
また、1つの態様では、情報処理装置が提供される。この情報処理装置は、記憶部と演算部とを有する。記憶部は、自装置で実行される処理に対応する一連のイベントのパターンを記憶する。演算部は、パターンに対応する処理を、受信した到着済イベントに応じて実行し、到着済イベントの情報を記憶部に記録し、処理の割当てを他の情報処理装置に変更する指示を受信し、処理に対する到着済イベントを示す進捗情報の送信準備中に、パターンに属する第1のイベントを受信し、進捗情報および第1のイベントを含む送信データを生成し、進捗情報に代えて、送信データを他の情報処理装置に送信する。
また、1つの態様では、データ処理管理プログラムが提供される。このデータ処理管理プログラムは、コンピュータに、一連のイベントを示すパターンであって記憶部に記憶されたパターンに対応する処理を、コンピュータにより受信した到着済イベントに応じて実行し、到着済イベントの情報を記憶部に記録し、処理の割当てを他のコンピュータに変更する指示を受信し、処理に対する到着済イベントを示す進捗情報の送信準備中に、パターンに属する第1のイベントを受信し、進捗情報および第1のイベントを含む送信データを生成し、進捗情報に代えて、送信データを他のコンピュータに送信する、処理を実行させる。
1つの側面では、割当て変更先での処理開始までの遅延を短縮できる。
第1の実施の形態の分散処理システムを示す図である。 第2の実施の形態の分散処理システムを示す図である。 ノードのハードウェア例を示す図である。 クエリの割当て変更例を示す図である。 分散処理システムのソフトウェア例を示す図である。 分散処理システムのソフトウェア例(続き)を示す図である。 イベントの例を示す図である。 クエリの例を示す図である。 クエリ状態の例を示す図である。 配置表の例(その1)を示す図である。 配置表の例(その2)を示す図である。 配置表の例(その3)を示す図である。 送信データ管理構造体の例を示す図である。 送信リストの例を示す図である。 クエリ状態送信管理の例を示すフローチャートである。 イベント受信管理(変更元)の例を示すフローチャートである。 クエリ状態受信管理の例を示すフローチャートである。 イベント受信管理(変更先)の例を示すフローチャートである。 イベント送信管理の例を示すフローチャートである。 クエリ状態の送信例(その1)を示す図である。 クエリ状態の送信例(その2)を示す図である。 クエリ割当て変更の例(その1)を示すシーケンス図である。 クエリ割当て変更の比較例(その1)を示すシーケンス図である。 クエリ割当て変更の例(その2)を示すシーケンス図である。 クエリ割当て変更の比較例(その2)を示すシーケンス図である。 分散処理システムの他の例を示す図である。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の分散処理システムを示す図である。第1の実施の形態の分散処理システムはマシン1,2を含む複数のマシンを有する。複数のマシンはネットワークに接続され、相互に通信可能である。この分散処理システムでは、複数の処理を複数のマシンにより分散して実行する。
ここで、第1の実施の形態ではマシン1,2として物理マシンを想定する。ただし、マシン1,2は仮想マシンでもよい。例えば、マシン1,2は異なる物理マシン上で動作する仮想マシンでもよいし、1台の物理マシン(記憶装置や演算処理を行う装置などを備えたコンピュータシステム)上で動作する仮想マシンでもよい。
マシン1は、記憶部1aおよび演算部1bを有する。マシン2は、記憶部2aおよび演算部2bを有する。記憶部1a,2aは、RAM(Random Access Memory)などの揮発性記憶装置でもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置でもよい。演算部1b,2bは、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。演算部1b,2bはプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合(マルチプロセッサ)も含まれ得る。
記憶部1aは、マシン1に割当てられた処理毎の進捗情報を記憶する。進捗情報3は、そのうちのある処理の進捗情報である。例えば、第1の実施の形態の分散処理システムが、複数の入力データに対して所定の処理を実行するシステムなら、記憶部1aは、複数の入力データのうち一部が到着済であることを進捗情報3として記憶する。一例として、CEPを実行するシステムが考えられる。その場合、記憶部1aは、一連のイベントのうちの一部のイベントが到着済であることを進捗情報3として記憶することが考えられる。
演算部1bは、マシン1に割当てられた複数の処理を実行する。演算部1bは、各処理の実行状況を進捗情報として記録し、記憶部1aに格納する。例えば、演算部1bは、複数の入力データに対して当該処理を実行する。例えば、演算部1bは、複数の入力データの何れかを受信するたびに、当該入力データが到着済である(当該入力データを処理済である)ことを進捗情報3に記録してもよい。
演算部1bは、マシン1で実行される処理の割当てをマシン2に変更する指示(変更指示4)を受信すると、当該指示で指定された処理に対応する進捗情報3をマシン2に送信する。例えば、演算部1bは、処理の割当てを管理する所定の装置から変更指示4を受け付けてもよい。あるいは、演算部1bは、マシン1に接続された所定の入力デバイスを用いたユーザの操作入力により、変更指示4を受け付けてもよい。
ここで、各処理を実行するためのプログラムは、例えば記憶部1a,2aに予め格納される。例えば、演算部1b,2bは、ある処理が自身に割当てられた際に、HDDなどに格納された当該処理に対応するプログラムをRAMに格納し、実行することで、当該処理をデータ入力待ちの状態とすることができる。
演算部1bは、割当て変更対象の処理の進捗情報3をマシン2に送信中に、当該処理に用いられるデータ5を受信すると、進捗情報3にデータ5を追加してマシン2に送信する。情報の送信中の期間は、ネットワーク上へ当該情報を送出するための準備(送信準備)期間を含む。例えば、準備期間はシリアライズやバッファリングなどに要する期間を含む。シリアライズは、進捗情報3をネットワークの転送形式に変換する処理である。バッファリングは、送信する情報を所定量まで蓄積する処理である。マシン1からマシン2へ進捗情報3を送信中の間、進捗情報3に対応する処理の実行は中断される。
例えば、演算部1bは、変更指示4を受信すると、記憶部1aに記憶された進捗情報3のシリアライズやバッファリングを行い、進捗情報3を含む送信データを生成する。演算部1bは、当該送信データの生成中にデータ5を受信すると、当該送信データにデータ5を含めた送信データ6を生成する。送信データ6には、進捗情報3およびデータ5以外の情報が含まれてもよい。演算部1bは、送信データ6をマシン2に送信する。
マシン2は、送信データ6を受信すると、送信データ6から進捗情報3およびデータ5を取得する。マシン2は、進捗情報3およびデータ5を用いて、マシン1からマシン2に割当て変更された処理を再開する。
第1の実施の形態の分散処理システムによれば、マシン1により、マシン1で実行される処理の割当てをマシン2に変更する変更指示4が受信される(ステップS1)。マシン1により、当該処理の進捗情報3のマシン2への送信中に、当該処理に用いられるデータ5が受信される(ステップS2)。すると、マシン1により、進捗情報3にデータ5が追加されてマシン2に送信される(ステップS3)。
これにより、割当て変更先(上記の例ではマシン2)での処理開始までの遅延を短縮できる。ここで、例えば、進捗情報3の送信中、割当て変更対象の処理をマシン1で継続することも考えられる。しかし、当該処理に対してデータ5を含む複数のデータがマシン1に入力され続けることがある。すると、マシン1での処理を終えられなくなり、マシン2への当該処理の割当て変更が完了するまでに時間がかかる。また、マシン1が高負荷であるために処理の割当て変更を行いたいにも関わらず、マシン1が高負荷である状況が継続してしまう。しかも、マシン1の負荷が高い程、このような状況が発生する可能性は高い。更に、マシン1で処理が行われると、進捗情報3にも更新による差分が生じる。このため、マシン1は、マシン2への進捗情報3の差分の提供も継続することになり、ネットワーク帯域を消費してしまうという問題もある。
一方、マシン1による割当て変更対象の処理を中断し、進捗情報3の送信完了後にデータ5をマシン2に送信して、マシン2により当該処理を再開させることも考えられる。しかし、情報の送信にはシリアライズやバッファリングなどの送信側での処理や、デシリアライズなどの受信側での処理を要し、時間がかかる。このため、進捗情報3の送信完了を待ち、更にデータ5を次に送信できるタイミングまで待っていると、マシン2へのデータ5の到着が遅れ、マシン2での処理再開が遅延し得る。
そこで、マシン1は、割当て変更対象の処理の進捗情報3のマシン2への送信中に、当該処理に用いられるデータ5を受信すると、進捗情報3にデータ5を追加してマシン2に送信する。例えば、マシン1へデータ5を含む複数のデータが継続的にマシン1に入力されても、進捗情報3とともに各データ(あるいは、そのうちの一部)をマシン2へ提供し得る。マシン2は、進捗情報3とともにデータ5を取得できるので、進捗情報3およびデータ5を用いて当該処理を迅速に開始できる。また、マシン1で当該処理を継続せずに済むので、進捗情報3の提供を継続して行わなくてもよい。よって、マシン1で処理を継続する場合よりも、マシン1の負荷を迅速に低減でき、また、ネットワーク帯域の利用量も低減できる。
更に、進捗情報3とともにデータ5をマシン2に提供できるので、進捗情報3の送信完了を待機し、更に、次の送信タイミングまでデータ5の送信を待機しなくてよい。このため、マシン2へデータ5が到着するまでの時間を短縮化でき、マシン2で割当て変更対象の処理を再開するまでの遅延を短縮できる。
[第2の実施の形態]
図2は、第2の実施の形態の分散処理システムを示す図である。第2の実施の形態の分散処理システムは、ノード100,200,300および管理ノード400を含む。ノード100,200,300および管理ノード400は、ネットワーク10に接続されている。ネットワーク10は、例えばLAN(Local Area Network)である。
ネットワーク10は、ネットワーク20に接続されている。ネットワーク20は、WAN(Wide Area Network)やインターネットなどの広域ネットワークでもよい。ネットワーク20には、スマートシティ21、物流センサ22、気象衛星23、携帯装置24およびスマートセンサ25が無線または有線で接続されている。ネットワーク20には、これらの装置以外にもイベントを発行する各種の装置が接続され得る。第2の実施の形態の分散処理システムは、ノード100,200,300を用いてCEPを実行する。
ノード100,200,300は、イベントを処理するサーバコンピュータである。ノード100,200,300は、スマートシティ21、物流センサ22、気象衛星23、携帯装置24およびスマートセンサ25などにより発行された種々のイベントを並列に処理する。ノード100,200,300は、複数のイベントの処理結果(新たなイベント)に対する所定の処理を行うこともある。
ノード100,200,300は、CEPにより次のような機能を実現することが考えられる。例えば、ネットワーク20に接続されたスマートシティ21やスマートセンサ25から取得された消費電力の情報を基にして、スマートシティ21の省電力化を制御する。また、ネットワーク20に接続された各種装置から取得した交通状況の情報を基にして、携帯装置24を所持するユーザや車などの状況に合わせた適切なナビゲーションを携帯装置24に提供する。また、気象衛星23やレーダーなどから取得されたイベントを基にして、天気予報を携帯装置24に提供する。更に、家屋への侵入有無の報告、家族(子供やお年寄り)の所在確認の報告などを行う。ノード100,200,300は、その他にも種々の情報をユーザに提供し得る。
ここで、ノード100,200,300により、イベントに応じて実行される処理を以下ではクエリと称する。クエリの内容を記述したプログラムは、ノード100,200,300に予め与えられる。当該プログラムを、イベントに応じた処理を記述したルールまたはルール情報ということもできる。また、以下の説明では、ノード100,200,300それぞれを指す場合に、各ノードということがある。
管理ノード400は、各クエリによるイベント処理を、何れのノードに担当させるかの割当て(クエリの割当て)を行うサーバコンピュータである。例えば、管理ノード400は、ノード100,200,300の負荷を分散する。管理ノード400は、ノード100,200,300の負荷に応じてクエリの割当て変更を行うことで、ノード100,200,300の負荷の平準化を図る。
図3は、ノードのハードウェア例を示す図である。ノード100は、プロセッサ101、RAM102、HDD103、通信部104、画像信号処理部105、入力信号処理部106、ディスクドライブ107および機器接続部108を有する。各ユニットがノード100のバスに接続されている。ノード200,300および管理ノード400もノード100と同様のユニットを用いて実現できる。
プロセッサ101は、ノード100の情報処理を制御する。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU、DSP、ASICまたはFPGAなどである。プロセッサ101は、CPU、DSP、ASIC、FPGAなどのうちの2以上の要素の組み合わせであってもよい。
RAM102は、ノード100の主記憶装置である。RAM102は、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、RAM102は、プロセッサ101による処理に用いる各種データを記憶する。
HDD103は、ノード100の補助記憶装置である。HDD103は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。ノード100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
通信部104は、ネットワーク10を介して他のコンピュータと通信を行えるインタフェースである。通信部104は、有線インタフェースでもよいし、無線インタフェースでもよい。
画像信号処理部105は、プロセッサ101からの命令に従って、ノード100に接続されたディスプレイ11に画像を出力する。ディスプレイ11としては、CRT(Cathode Ray Tube)ディスプレイや液晶ディスプレイなどを用いることができる。
入力信号処理部106は、ノード100に接続された入力デバイス12から入力信号を取得し、プロセッサ101に出力する。入力デバイス12としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
ディスクドライブ107は、レーザ光などを利用して、光ディスク13に記録されたプログラムやデータを読み取る駆動装置である。光ディスク13として、例えば、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などを使用できる。ディスクドライブ107は、例えば、プロセッサ101からの命令に従って、光ディスク13から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
機器接続部108は、ノード100に周辺機器を接続するための通信インタフェースである。例えば、機器接続部108にはメモリ装置14やリーダライタ装置15を接続できる。メモリ装置14は、機器接続部108との通信機能を搭載した記録媒体である。リーダライタ装置15は、メモリカード16へのデータの書き込み、またはメモリカード16からのデータの読み出しを行う装置である。メモリカード16は、カード型の記録媒体である。機器接続部108は、例えば、プロセッサ101からの命令に従って、メモリ装置14またはメモリカード16から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
図4は、クエリの割当て変更例を示す図である。ノード100は、CEPエンジンE1を有する。ノード200は、CEPエンジンE2を有する。ノード300は、CEPエンジンE3を有する。CEPエンジンE1,E2,E3はCEPを実行する。例えば、CEPエンジンE1,E2,E3は、各ノードが備えるRAMに記憶されたプログラムを各ノードが備えるプロセッサが実行することで実現される。CEPエンジンE1,E2,E3は、各ノードが備える専用のハードウェアで実現されてもよい。
例えば、CEPエンジンE1には、ノード100が担当するクエリに応じたイベントが入力される。CEPエンジンE1は当該クエリの結果として新たなイベントを生成し、出力する。出力されたイベントは、他ノードに送信されたり、ネットワーク20に接続された各種の装置に送信されたりする。これにより、CEPエンジンE1は、他ノードに別のイベント処理を行わせたり、ネットワーク20に接続された装置を制御したりする。CEPエンジンE2,E3もCEPエンジンE1と同様である。
ここで、管理ノード400は、ノード100,200,300の負荷を監視する。例えば、ノード200の負荷がノード100よりも高く、ノード300の負荷がノード100よりも低い場合が考えられる。この場合、管理ノード400は、ノード200に割当てられた何れかのクエリをノード300に割当てると決定する。ノード200の負荷を軽減でき、かつ、ノード100,200,300の負荷の平準化を図れるからである。管理ノード400は、ノード300の負荷が比較的高まり、ノード200の負荷が比較的低くなったのであれば、ノード300に割当てられた何れかのクエリをノード200に割当てると決定することもできる。
管理ノード400は、決定した割当て変更をノード100,200,300に指示する。ノード100,200,300は当該指示に応じて、クエリの割当て変更を行う。例えば、あるクエリの割当てがノード200からノード300へ変更になった場合、ノード100,200,300は、当該クエリの担当ノードをノード300に更新する。このように、第2の実施の形態では、スケーラブルなシステムを実現し得る。例えば、ノードの追加やノードの削減に対して、クエリの割当てを柔軟化できる。
ここで、クエリは、複数のイベントの到着状況に応じた状態(クエリ状態)をもつ。第2の実施の形態では、クエリの割当て変更前後でクエリ状態を維持する。具体的には、割当て変更元のノードは、割当て変更先のノードへ、割当て変更対象のクエリのクエリ状態を提供することで、割当て変更先のノードへクエリの実行を引き継ぐ。ここで、クエリ状態は、第1の実施の形態の進捗情報の一例である。
図5は、分散処理システムのソフトウェア例を示す図である。ノード100は、クエリ記憶部110、管理情報記憶部120、クエリ実行管理部130、クエリ状態送信管理部140、クエリ状態受信管理部150、イベント送信管理部160、イベント受信管理部170および通信部180を有する。クエリ記憶部110および管理情報記憶部120は、RAM102やHDD103に確保した記憶領域として実現できる。
クエリ実行管理部130、クエリ状態送信管理部140、クエリ状態受信管理部150、イベント送信管理部160、イベント受信管理部170および通信部180は、プロセッサ101が実行するソフトウェアのモジュールとして実現できる。また、各部はCEPエンジンE1の機能の一部でもよい(ノード200,300も同様)。
クエリ記憶部110は、クエリおよびクエリ状態を記憶する。クエリ記憶部110は、分散処理システムで用いられる全てのクエリを予め記憶する。また、クエリ記憶部110は、クエリ毎の現在のクエリ状態を記憶する。クエリ記憶部110は、イベントに含まれるストリーム名とそのイベントを処理するクエリの識別情報(クエリ名)との対応関係の情報を予め記憶する。
管理情報記憶部120は、配置表および送信リストを記憶する。配置表は、各ノードへのクエリの割当て状況を示す。また、配置表は、クエリと当該クエリの現在のクエリ状態との対応を示す。送信リストは、送信対象のデータを格納したコンテナである。送信リストは、宛先毎に用意される。
クエリ実行管理部130は、入力されたイベントに応じたクエリの実行を管理する。クエリ実行管理部130は、クエリの実行に伴って、クエリ記憶部110に記憶された当該クエリのクエリ状態を更新する。
クエリ状態送信管理部140は、自ノード(ここでは、ノード100)に割当てられたクエリの他ノードへの割当て変更指示を管理ノード400から受信する。すると、クエリ状態送信管理部140は、クエリ記憶部110から当該クエリのクエリ状態を取得する。クエリ状態送信管理部140は、取得したクエリ状態をシリアライズし、宛先ノードへの送信リストに追加する。シリアライズとは、ネットワーク10に送出可能なデータ形式へ情報を変換する処理である。クエリ状態送信管理部140は、送信リストのデータサイズが所定サイズに達するまでバッファリングし、当該送信リストに含まれるデータを宛先ノードへ送信する。
クエリ状態受信管理部150は、他ノードから自ノードへ割当て変更されたクエリのクエリ状態を、当該他ノードから受信する。クエリ状態受信管理部150は、割当て変更されたクエリとクエリ状態との対応を管理情報記憶部120に記憶された配置表に登録する。後述するように、クエリ状態受信管理部150が他ノードから受信するクエリ状態には、当該クエリに対するイベントが付加されていることもある。その場合、クエリ状態受信管理部150は当該イベントを用いたクエリ実行をクエリ実行管理部130に依頼する。
イベント送信管理部160は、イベントの送信管理を行う。具体的には、イベント送信管理部160は、他ノードが担当するクエリのイベントを当該他ノードへ送信するため、当該イベントのシリアライズや送信リストへの登録を行う。イベント送信管理部160は、送信リストに含まれるイベントを当該他ノードへ送信する。
イベント受信管理部170は、イベントの受信管理を行う。具体的には、イベント受信管理部170は、次に示す(1)〜(4)の各場合に応じた処理を実行する。
(1)取得したイベントが自ノードに割当てられたクエリに対応するものである場合。この場合、イベント受信管理部170は、当該イベントを用いたクエリ実行をクエリ実行管理部130に依頼する。
(2)取得したイベントが自ノードから他ノードへの割当て変更対象のクエリに対応するものであり、当該クエリのクエリ状態が自ノードから他ノードへ送信中として管理されている場合。この場合、イベント受信管理部170は、当該クエリ状態の送信リストに当該イベントを追加する。
(3)取得したイベントが他ノードから自ノードへの割当て変更対象のクエリに対応するものであり、当該クエリのクエリ状態が他ノードから自ノードへ送信中として管理されている場合。この場合、イベント受信管理部170は、当該クエリに対する待ちイベントとして、管理情報記憶部120に記憶された配置表に当該イベントを登録する。
(4)取得したイベントが他ノードに割当てられたクエリに対応するものである場合。この場合、イベント受信管理部170は当該他ノードに当該イベントを転送する。
イベント受信管理部170は、管理情報記憶部120に記憶された配置表に基づいて上記(1)〜(4)の場合を判断できる。なお、上記(2)、(3)において「クエリ状態が送信中である」と管理される期間には、クエリ状態をネットワーク上へ送出するための準備(送信準備)期間(シリアライズやバッファリングなどを行う期間)を含む。
通信部180は、ノード200,300、管理ノード400およびネットワーク20に接続された各種の装置との間の通信を行う。上述したクエリ状態送信管理部140、クエリ状態受信管理部150、イベント送信管理部160およびイベント受信管理部170と他の装置との間のデータの送受信は、通信部180を介して行われる。
管理ノード400は、管理情報記憶部410および配置制御部420を有する。管理情報記憶部410は、管理ノード400が備えるRAMやHDDなどに確保した記憶領域として実現できる。配置制御部420は、管理ノード400が備えるプロセッサが実行するソフトウェアのモジュールとして実現できる。
管理情報記憶部410は、配置表を記憶する。配置制御部420は、ノード100,200,300の負荷を監視する。配置制御部420は、ノード100,200,300の負荷に応じて、各ノードに対するクエリの割当てを変更することで、各ノードの負荷の平準化を図る。配置制御部420は、クエリの割当て変更に伴って、管理情報記憶部410に記憶された配置表の更新も行う。
配置制御部420は、クエリの割当てを変更する際、ノード100,200,300の全てに、その旨を指示する。この指示は、割当て変更対象のクエリ、変更元のノードおよび変更先のノードを示す識別情報を含む。また、この指示は、各ノードが保持する配置表の更新指示も含む。クエリの割当て変更の指示は、ユーザにより、管理ノード400に接続された所定の入力デバイスを用いて入力されてもよい。その場合、管理ノード400は、ユーザによる操作入力を契機としてクエリの割当て変更を各ノードに指示する。
図6は、分散処理システムのソフトウェア例(続き)を示す図である。ノード200は、クエリ記憶部210、管理情報記憶部220、クエリ実行管理部230、クエリ状態送信管理部240、クエリ状態受信管理部250、イベント送信管理部260、イベント受信管理部270および通信部280を有する。
ノード300は、クエリ記憶部310、管理情報記憶部320、クエリ実行管理部330、クエリ状態送信管理部340、クエリ状態受信管理部350、イベント送信管理部360、イベント受信管理部370および通信部380を有する。
クエリ記憶部210,310および管理情報記憶部220,320は、ノード200,300が備えるRAMやHDDなどに確保した記憶領域として実現できる。クエリ実行管理部230,330、クエリ状態送信管理部240,340、クエリ状態受信管理部250,350、イベント送信管理部260,360、イベント受信管理部270,370および通信部280,380は、ノード200,300が備えるプロセッサが実行するソフトウェアのモジュールとして実現できる。ここで、ノード200,300が備える機能は、ノード100が備える同名の機能と同様であるため、説明を省略する。
図7は、イベントの例を示す図である。イベントXは、イベントのフォーマットを例示している。イベントXは、イベント種別、ストリーム名および内容の項目を含む。イベント種別の項目にはイベントの種別が登録される。ストリーム名の項目には、当該イベントに対応するストリームの識別情報が登録される。内容の項目には、イベントの内容を示す情報が登録される。
イベントX1は、イベントXの一例である。例えば、イベントX1には、イベント種別が“P”、ストリーム名が“InputStream”、内容が“1000W”という情報が格納されている。これは、当該イベント種別が“P”であり、電力に関する情報であることを示す。また、イベントX1に対応するストリーム名が“InputStream”であることを示す。また、イベントX1の内容が“1000W”の消費電力の検出であることを示す。
図8は、クエリの例を示す図である。クエリ111は、クエリ記憶部110に格納される。クエリ111は、Esperと呼ばれるEPL(Event Processing Language)を想定した記述例である。クエリ111では、“A”、“B”、“C”という3種のストリームの順番でイベントが入力された場合に、データ(イベント)をデータストリームに出力する。各クエリでは、このように種々のイベントに対する条件を定めることができる。ここで、以下の説明では、ストリーム名“A”であるイベントを、イベント“A”、イベントAのように表記することがある。
図9は、クエリ状態の例を示す図である。クエリ状態112は、クエリ111のクエリ状態の一例である。クエリ状態112は、クエリ記憶部110に格納される。クエリ状態112は、クエリ111に対して、イベントA,Bが到着済だが、イベントCが未到着である(イベントCの到着待ちの状態である)ことを示している。ノード100,200,300は、クエリ毎の現在のクエリ状態を保持する。クエリとクエリ状態との対応は、配置表により管理される。
図10は、配置表の例(その1)を示す図である。配置表121は、管理情報記憶部120に格納される。図10の例では、テーブル形式で配置表121を表したが任意のデータ構造を利用できる。例えば、配置表121は、クエリ名をkeyとしたHashMapなどでもよい。配置表121は、クエリ名、配置ノード名、状況、クエリ状態への参照、ロックおよび待ちイベントの項目を含む。
クエリ名の項目には、クエリの識別情報が登録される。配置ノード名の項目には、当該クエリを割当てられた(配置された)ノード(担当ノード)の名称が登録される。状況の項目には、当該クエリの現在の状況が登録される。
クエリの状況は、次のような状態を含む。(1)稼働中の状態(担当ノードで当該クエリを実行可能である状態)。(2)他ノードに移動中の状態(クエリの割当て変更に伴い、変更元のノードから変更先の担当ノードへクエリ状態を送信中である状態)。(3)他ノードに移動済の状態(変更元のノードから変更先の担当ノードへクエリ状態の送信を終えた状態)。
クエリ状態への参照の項目には、クエリ状態へのポインタが登録される。ただし、自ノードで当該クエリ状態を管理していない場合には、クエリ状態への参照の項目には“ノード内に無し”という情報が登録される。
ロックの項目には、クエリ状態のロックの有無が登録される。待ちイベントの項目には、待ちイベントが登録される。待ちイベントは、割当て変更前の担当ノードから自ノードへ、割当て変更対象のクエリのクエリ状態の送信が完了する前に、当該クエリに対して自ノードが取得したイベントである。
例えば、配置表121には、クエリ名が“Query1”、配置ノード名が“ノード100”、状況が“ノード200へ移動中”、クエリ状態への参照が“&Query1State”、ロックが“無”、待ちイベントが“null”という情報が登録されている。
これは、“Query1”で示されるクエリがノード100に現在割当てられていること、ノード100からノード200へ当該クエリを割当て変更中であることを示す。また、当該クエリのクエリ状態がポインタ“&Query1State”で示される状態であること、クエリ状態がロックされていないこと、当該クエリに対する待ちイベントが存在しないことを示す。
図11は、配置表の例(その2)を示す図である。配置表221は、管理情報記憶部220に格納される。配置表221は、配置表121と同じタイミングの登録内容を例示している。配置表221に含まれる項目は、配置表121と同様であるため、説明を省略する。
例えば、配置表221では、“Query1”で示されるクエリに対して、クエリ状態への参照が“ノード内に無し”であり、待ちイベントが“α5,α6”である点が、配置表121と異なる。これは、当該クエリは、現在割当て変更中(クエリ状態をノード200へ移動中)であり、自ノード(ノード200)では、クエリ状態を保持していないことを示す。また、当該クエリに対して、既にイベント“α5,α6”を待ちイベントとして取得済であることを示す。
また、配置表221では、“Query8”で示されるクエリに対して、クエリ状態への参照“&Query8State”が登録されている点が配置表121と異なる。これは、当該クエリの担当ノードがノード200であり、ノード200で当該クエリのクエリ状態を保持しているからである。
図12は、配置表の例(その3)を示す図である。配置表321は、管理情報記憶部320に格納される。配置表321は、配置表121,221と同じタイミングの登録内容を例示している。配置表321に含まれる項目は、配置表121と同様であるため、説明を省略する。
例えば、配置表321では、“Query1”で示されるクエリに対して、配置ノード名が“ノード200”、状況が“稼働中”である点が配置表121,221と異なる。これは、ノード300がクエリ名“Query1”のクエリの割当て変更に伴うクエリ状態の送受信に関与しないためである。すなわち、各ノードは、管理ノード400からクエリの割当て変更の指示を受け、自ノードが当該変更に伴うクエリ状態の送受信に関与しないと判断すると、直ちに配置ノード名の変更を行ってよい。
また、配置表321では、“Query10”で示されるクエリに対して、クエリ状態への参照“&Query10State”が登録されている点が配置表121,221と異なる。これは、当該クエリの担当ノードがノード300であり、ノード300で当該クエリのクエリ状態を保持しているからである。
なお、管理ノード400も配置表121,221,321と同様に配置表を保持する。管理ノード400の配置表では、各ノードに対する各クエリの最新の割当て状況が登録される。ただし、管理ノード400が保持する配置表では、クエリ状態への参照、ロックおよび待ちイベントを管理しなくてよい。
図13は、送信データ管理構造体の例を示す図である。送信データ管理構造体Dは、送信リストにおいて1つのクエリのクエリ状態を格納するための構造体である。ここで、送信リストとして、双方向リストを想定したデータ構造を例示するが、双方向リストでなくてもよい(例えば、単方向リストでもよい)。送信データ管理構造体Dは、Forward、Backward、Query StateおよびEventsの項目を含む。
Forwardは、連結された次の送信データ管理構造体を示すポインタ(&SendBufStructure)である。Backwardは、連結された前の送信データ管理構造体を示すポインタ(&SendBufStructure)である。Query Stateは、送信対象のクエリ状態を示すポインタ(&QueryState)である。Eventsは、イベントを格納した配列を示すポインタ(&Events[])である。
図14は、送信リストの例を示す図である。送信リスト122は、管理情報記憶部120に格納される。送信リスト122は、ノード100からノード200への情報の送信に用いられる。送信リスト122は、第1の実施の形態の送信データ6の一例である。送信リストは、宛先毎に作成される。ノード100からノード200以外の他ノードへ情報を送信する際、ノード100は他の送信リストを作成する。
送信リスト122は、送信データ管理構造体D(リスト要素ということがある)を複数連結可能な双方向リストである。送信リスト122は、リスト要素122a,122b,122cを含む。リスト要素122aは、送信リスト122の先頭(Head)である。また、リスト要素122aは、送信リスト122がロックされているか否かを示す情報(例えば、フラグ)を含む(Lockの項目に設定される)。
リスト要素122bは、リスト要素122aの次のリスト要素である。リスト要素122cは、リスト要素122bの次のリスト要素である。リスト要素122b,122cは、Forward、Backward、Query State、Eventsの項目を含む。具体的な設定内容は次の通りである。
リスト要素122bには、次の情報が設定されている。Forwardには、リスト要素122cへのリンク(Forwardリンク)を示すポインタが設定される。Backwardには、リスト要素122aへのリンク(Backwardリンク)を示すポインタが設定される。Query Stateには、“Query1”で示されるクエリのクエリ状態(Query1State)を示すポインタが設定される。当該クエリ状態は、“Query1”で示されるクエリのクエリ状態である旨の情報も含む。Eventsには、当該クエリに対して受信したイベントの配列([α1,α2,α3])を示すポインタが設定される。
リスト要素122cには、次の情報が設定されている。Forwardは、次のリスト要素が存在していないため、設定無し(null)となる。Backwardには、リスト要素122bへのリンクを示すポインタが設定される。Query Stateには、“Query13”で示されるクエリのクエリ状態(Query13State)を示すポインタが設定される。当該クエリ状態は、“Query13”で示されるクエリのクエリ状態である旨の情報も含む。Eventsは、当該クエリに対して受信したイベントが存在していないため、設定無し(null)となる。
次に、第2の実施の形態のクエリの割当て変更時の処理手順を説明する。以下の説明では、ノード100からノード200へクエリの割当てを変更する場合を想定する。ただし、他ノード間でクエリの割当てを変更する場合も同様の手順となる。
図15は、クエリ状態送信管理の例を示すフローチャートである。以下、図15に示す処理をステップ番号に沿って説明する。以下の手順は、ノード100からノード200へクエリの割当てを変更する場合のノード100の手順である。
(S11)クエリ状態送信管理部140は、ノード100が担当するクエリ(例えば、クエリ名“Query1”のクエリ)をノード200へ割当て変更する指示を管理ノード400から受信する。クエリ状態送信管理部140は、配置表121を操作して、変更対象のクエリのクエリ状態をロックする(ロック“無”から“有”に変更する)。
(S12)クエリ状態送信管理部140は、配置表121を操作して、当該クエリに対応するエントリの状況の項目を“稼働中”から“ノード200へ移動中”に変更する(割当て変更先のノード200も同様の設定を行う)。以降、割当て変更が完了し、ノード200で当該クエリの実行が再開されるまで、当該クエリの実行は中断される。
(S13)クエリ状態送信管理部140は、送信データ管理構造体Dを生成する。
(S14)クエリ状態送信管理部140は、配置表121を参照して、当該クエリに対応するエントリのクエリ状態への参照の項目に設定されたポインタを用いて、クエリ状態を取得する。クエリ状態送信管理部140は、配置表121を操作して、当該エントリのクエリ状態への参照の項目を、ステップS13で生成した送信データ管理構造体Dへのポインタに変更する。
(S15)クエリ状態送信管理部140は、配置表121を操作して、変更対象のクエリのクエリ状態をアンロックする(ロック“有”から“無”に変更する)。
(S16)クエリ状態送信管理部140は、ステップS14で取得したクエリ状態のシリアライズを実行する。
(S17)クエリ状態送信管理部140は、シリアライズ済のクエリ状態をステップS13で生成した送信データ管理構造体Dに登録する。具体的には、クエリ状態送信管理部140は、当該クエリ状態へのポインタを送信データ管理構造体Dに登録する。
(S18)クエリ状態送信管理部140は、送信リスト122をロックする。
(S19)クエリ状態送信管理部140は、送信データ管理構造体D(クエリ状態登録済)を送信リスト122に連結する。
(S20)クエリ状態送信管理部140は、送信リスト122の合計のデータサイズが閾値以上であるか否かを判定する。閾値以上である場合、処理をステップS21に進める。閾値未満である場合、処理をステップS24に進める。なお、当該閾値には、例えばユーザにより、通信環境に応じた任意の値が設定され得る。
(S21)クエリ状態送信管理部140は、配置表121を操作して、送信リスト122に登録されているクエリ状態を全てロックする。配置表121において、状況の項目が“ノード200へ移動中”と設定されているエントリのクエリ状態が、送信リスト122に登録されているクエリ状態である。
(S22)クエリ状態送信管理部140は、送信リスト122に登録されているクエリ状態をノード200宛で、ネットワーク10に送出する。クエリ状態送信管理部140は、配置表121を操作して、配置ノード名の項目を(“ノード100”から)“ノード200”に、当該クエリ状態に対応するエントリの状況の項目を“移動済”に、クエリ状態への参照の項目を“ノード内に無し”に変更する。クエリ状態送信管理部140は、配置表121を操作して、当該エントリのクエリ状態をアンロックする。
(S23)クエリ状態送信管理部140は、送信リスト122を参照して、ステップS22で送信対象としたクエリ状態にイベントが付属していれば、当該イベントもノード200に送信する。なお、ステップS22,S23は、送信リスト122に登録されたクエリ状態毎に実行される。送信リスト122に登録されたクエリ状態が複数であれば、クエリ状態送信管理部140は、クエリ状態毎にステップS22,S23を繰り返す。
(S24)クエリ状態送信管理部140は、送信リスト122をアンロックする。
このように、ノード100は、割当て変更対象のクエリのクエリ状態をノード200に送信する際に、当該クエリに対するイベントが送信リスト122に含まれていれば、クエリ状態とともに、そのイベントも送信する。
その後、例えば、クエリ状態送信管理部140は管理ノード400からクエリの割当て変更が完了した旨の通知を受け付ける。例えば、クエリ状態送信管理部140は、当該通知を受けると、配置表121の対応するクエリの状況の項目を(“移動済”から)“稼働中”に変更する。
また、ステップS12において、前述のようにクエリ状態の送受信に関与しないノード300では、ステップS11の指示に対して、配置表321の配置ノード名の項目を“ノード200”に変更してよい。管理ノード400でも同様に、割当て変更指示を行うとともに管理ノード400が保持する配置表の配置ノード名の項目を“ノード200”に変更してよい。
図16は、イベント受信管理(変更元)の例を示すフローチャートである。以下、図16に示す処理をステップ番号に沿って説明する。ノード100を例示するが、他ノードでも同様の手順となる。
(S31)イベント受信管理部170は、イベントを取得する。イベントの発行元は、ネットワーク20に接続された何れかの装置でもよいし、ノード100,200,300の何れかでもよい。イベント受信管理部170は、取得したイベントのデシリアライズを実行する(イベントの発行元がノード100ならデシリアライズを行わなくてもよい)。
(S32)イベント受信管理部170は、当該イベントに含まれるストリーム名から、クエリの識別情報(クエリ名)を取得する。クエリ記憶部110は、ストリーム名と当該ストリーム名のイベントを処理するクエリのクエリ名との対応関係の情報を記憶している。よって、イベント受信管理部170は、当該情報を参照することで、ストリーム名からクエリ名を取得できる。イベント受信管理部170は、クエリ名をキーに配置表121から当該イベントに対応するエントリを検索する。
(S33)イベント受信管理部170は、配置表121を操作して、当該エントリのクエリ状態をロックする。
(S34)イベント受信管理部170は、配置表121を参照して、当該エントリで示されるクエリを実行可能であるか否かを判定する。クエリを実行可能である場合、処理をステップS35に進める。クエリを実行可能でない場合、処理をステップS36に進める。クエリを実行可能である場合とは、当該クエリを自ノードが担当しており、状況が“稼働中”である場合である。クエリを実行可能でない場合とは、当該クエリを自ノードが担当していない場合や、当該クエリを自ノードが担当しているが状況が“稼働中”でない場合である。
(S35)クエリ実行管理部130は、取得したイベントを用いてクエリを実行し、実行結果に応じて当該クエリのクエリ状態を変更する。クエリ実行管理部130は、配置表121を操作して、当該クエリのクエリ状態をアンロックする。そして、処理を終了する。
(S36)イベント受信管理部170は、配置表121を参照して、取得したイベントに対応するクエリのクエリ状態がバッファリング中であるか否かを判定する。クエリ状態がバッファリング中である場合、処理をステップS37に進める。クエリ状態がバッファリング中でない場合、処理をステップS42に進める。クエリ状態がバッファリング中であるか否かは、当該クエリに対応する配置表121のエントリの状況の項目を参照することで判定できる。当該クエリを自ノードが担当しており、状況が“他ノード(例えば、ノード200)に移動中”であれば、当該クエリ状態はバッファリング中である。状況が“他ノードに移動中”以外であれば、当該クエリ状態はバッファリング中でない。
(S37)イベント受信管理部170は、取得したイベントのシリアライズを実行する。
(S38)イベント受信管理部170は、送信リストのうち、当該イベントに対応するクエリのクエリ状態を登録した送信データ管理構造体D(リスト要素)のリンクをロックする。
(S39)イベント受信管理部170は、当該送信データ管理構造体Dに、取得したイベントを登録する(イベント連結)。
(S40)イベント受信管理部170は、当該送信データ管理構造体Dのリンクをアンロックする。
(S41)イベント受信管理部170は、配置表121を操作して、着目するクエリのクエリ状態をアンロックする。そして、処理を終了する。
(S42)イベント受信管理部170は、配置表121を操作して、着目するクエリのクエリ状態をアンロックする。
(S43)イベント受信管理部170は、取得したイベントをイベント送信管理部160に送信させる。イベント送信管理部160による処理の詳細については後述する。
このように、イベント受信管理部170は、イベントを取得した際に、当該イベントを処理するクエリのクエリ状態が送信中の状態であれば、送信リスト内の当該クエリ状態を格納したリスト要素に、そのイベントを登録する(ステップS37〜S40)。ここで、例えばgatherと呼ばれるAPI(Application Programming Interface)を用いることで、上述したクエリ状態送信管理部140やイベント受信管理部170の送信リストの作成処理を低コストで実現できる。
また、自ノードが担当するクエリに対するイベントでクエリ状態が送信中の状態でなければ、通常通りクエリを実行する(ステップS35)。更に、他ノードが担当するクエリに対するイベントを取得した場合には、イベント送信管理部160により、他ノードに当該イベントを送信させる(ステップS43)。
図17は、クエリ状態受信管理の例を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。以下の手順は、ノード100からノード200へクエリの割当てを変更する場合のノード200の手順である。なお、ノード200は、ステップS51よりも前にノード100からノード200へのクエリの割当て変更指示を管理ノード400から受信している。ノード200は、配置表221において、当該変更指示で指定されたクエリの状況を“ノード200へ移動中”と設定している。
(S51)クエリ状態受信管理部250は、ノード100から割当て変更対象のクエリ(例えば、クエリ名“Query1”のクエリ)のクエリ状態を受信する。クエリ状態受信管理部250は、受信したクエリ状態のデシリアライズを実行し、クエリ記憶部210に格納する。
(S52)クエリ状態受信管理部250は、受信したクエリ状態にイベントが付属しているか否かを判定する。イベントが付属している場合、処理をステップS53に進める。イベントが付属していない場合、処理をステップS55に進める。
(S53)クエリ状態受信管理部250は、付属しているイベント(例えば、イベントα1,α2,α3)のデシリアライズを実行し、クエリ実行管理部230に出力する。
(S54)クエリ実行管理部230は、取得したイベントおよびクエリ状態により該当のクエリを実行し、クエリ記憶部210に記憶されたクエリ状態を変更する。
(S55)クエリ状態受信管理部250は、管理情報記憶部220に記憶された配置表221を参照して、当該クエリのエントリを検索する。
(S56)クエリ状態受信管理部250は、当該エントリをロックする。
(S57)クエリ状態受信管理部250は、当該エントリのクエリ状態への参照の項目に、クエリ記憶部210に記憶されたクエリ状態へのポインタを登録する。当該ポインタで示されるクエリ状態は、ステップS54を実行していなければ、ステップS51で取得したクエリ状態である。一方、ステップS54を実行していれば、ステップS54の実行結果に応じたクエリ状態である。
(S58)クエリ状態受信管理部250は、当該エントリに待ちイベントがあるか否かを判定する。待ちイベントがある場合、処理をステップS59に進める。待ちイベントがない場合、処理をステップS60に進める。
(S59)クエリ実行管理部230は、待ちイベント(例えば、イベントα5,α6)および現在のクエリ状態により該当のクエリを実行し、クエリ状態を変更する。
(S60)クエリ状態受信管理部250は、配置表221を操作して、ステップS55で検索されたエントリの配置ノード名の項目を(“ノード100”から)“ノード200”に、状況の項目を“移動済”に変更する。
(S61)クエリ状態受信管理部250は、当該エントリをアンロックする。
このように、クエリ状態受信管理部250は、受信したクエリ状態にイベントが付属していれば、当該イベントおよびクエリ状態を用いてクエリを実行し、クエリ状態を更新する。更に、クエリ状態受信管理部250は、当該クエリに対して待ちイベントが存在する場合には、待ちイベントを用いて当該クエリを実行し、クエリ状態を更新する。
このとき、待ちイベントよりも前に発生し当該クエリに用いられるがノード200に未到着である未到着イベントが存在することもある(後述する)。この場合でも、ノード200によるクエリ状態および待ちイベントを用いたクエリの実行を許容する。
なお、ステップS51の後の何れかのタイミングで、クエリ状態受信管理部250は、クエリ状態を適切に受信した旨を管理ノード400に通知する。例えば、クエリ状態受信管理部250は、当該通知に対する管理ノード400からの応答(割当て変更完了の通知)を受けると、配置表221の当該クエリの状況の項目を“稼働中”に変更する(ステップS60よりも前に“稼働中”になっていればステップS60では“移動済”に変更しなくてよい)。
図18は、イベント受信管理(変更先)の例を示すフローチャートである。以下、図18に示す処理をステップ番号に沿って説明する。ノード200を例示するが、他ノードでも同様の手順となる。
(S71)イベント受信管理部270は、イベントを取得する。イベントの発行元は、ネットワーク20に接続された何れかの装置でもよいし、ノード100,200,300でもよい。イベント受信管理部270は、取得したイベントのデシリアライズを実行する(イベントの発行元がノード200ならデシリアライズを行わなくてもよい)。
(S72)イベント受信管理部270は、当該イベントに含まれるストリーム名から、クエリの識別情報(クエリ名)を取得する。クエリ記憶部210は、ストリーム名と当該ストリーム名のイベントを処理するクエリのクエリ名との対応関係の情報を記憶している。よって、イベント受信管理部270は、当該情報を参照することで、ストリーム名からクエリ名を取得できる。イベント受信管理部270は、クエリ名をキーに配置表221から当該イベントに対応するエントリを検索する。
(S73)イベント受信管理部270は、配置表221を操作して、当該クエリのクエリ状態をロックする。
(S74)イベント受信管理部270は、配置表221を参照して、当該エントリのクエリを実行可能であるか否かを判定する。クエリを実行可能である場合、処理をステップS75に進める。クエリを実行可能でない場合、処理をステップS76に進める。クエリを実行可能である場合とは、当該クエリを自ノードが担当しており、状況が“稼働中”または“移動済”である場合である。クエリを実行可能でない場合とは、当該クエリを自ノードが担当していない場合や、当該クエリを自ノードが担当しているが状況が“稼働中”または“移動済”でない場合である。
(S75)クエリ実行管理部230は、取得したイベントを用いてクエリを実行し、クエリ記憶部210に記憶された当該クエリのクエリ状態を変更する。クエリ実行管理部230は、配置表221を操作して、クエリ状態をアンロックする。そして、処理を終了する。
(S76)イベント受信管理部270は、配置表221を参照して、取得したイベントに対応するクエリについて、クエリ状態の到着待ちであるか否かを判定する。クエリ状態の到着待ちである場合、処理をステップS77に進める。クエリ状態の到着待ちでない場合、処理をステップS79に進める。クエリ状態の到着待ちである場合とは、当該クエリ状態のエントリの状況の項目に“自ノード(ここでは、ノード200)へ移動中”と設定されている場合である。クエリ状態の到着待ちでない場合とは、当該クエリ状態のエントリの状況の項目に“自ノードへ移動中”以外の情報が設定されている場合である。
(S77)イベント受信管理部270は、配置表221の当該エントリの待ちイベントの項目に、取得したイベント(例えば、イベントα5やイベントα6)を登録する。
(S78)イベント受信管理部270は、配置表221を操作して、当該エントリのクエリ状態をアンロックする。そして、処理を終了する。
(S79)イベント受信管理部270は、配置表221を操作して、取得したイベントに対応するクエリのクエリ状態をアンロックする。
(S80)イベント受信管理部270は、取得したイベントをイベント送信管理部260に送信させる。
このように、イベント受信管理部270は、クエリ状態の到着待ちであるクエリに対するイベントを取得すると、当該イベントを待ちイベントとして配置表221に登録する(ステップS76,S77)。それ以外のイベントで自ノードが担当するクエリに対するイベントを取得した場合には、通常通りクエリを実行する(ステップS75)。また、他ノードが担当するクエリに対するイベントを取得した場合には、イベント送信管理部260により、他ノードに当該イベントを送信させる(ステップS80)。
次に、イベント送信管理部160,260,360によるイベント送信管理の手順を説明する。以下では、イベント送信管理部160を例示するが、イベント送信管理部260,360による手順も同様である。
図19は、イベント送信管理の例を示すフローチャートである。以下、図19に示す処理をステップ番号に沿って説明する。
(S81)イベント送信管理部160は、イベントを取得する。イベントの発行元は、ネットワーク20に接続された何れかの装置でもよいし、ノード100,200,300の何れかでもよい。前述のように、イベント送信管理部160は、イベント受信管理部170から他ノードが担当するクエリのイベントを取得することもある。イベント送信管理部160は、イベントのシリアライズを実行する。
(S82)イベント送信管理部160は、配置表121を参照して、当該イベントの送信先のノードを特定する。なお、図16のステップS32や図18のステップS72と同様に、イベント送信管理部160は、イベントに含まれるストリーム名から、当該イベントを処理するクエリのクエリ名を特定できる。当該クエリ名のクエリを担当するノードが当該イベントの送信先のノードである。イベント送信管理部160は、当該送信先に対応する送信リストをロックする。
(S83)イベント送信管理部160は、シリアライズ済のイベントを当該送信リストに追加する。
(S84)イベント送信管理部160は、当該送信リストの合計のデータサイズが閾値を超えたか否かを判定する。閾値以上である場合、処理をステップS85に進める。閾値未満である場合、処理をステップS86に進める。なお、当該閾値には、例えばユーザにより、通信環境に応じた任意の値が設定され得る。
(S85)イベント送信管理部160は、当該送信リスト内のイベントを送信先のノードを宛先として、ネットワーク10に送出する。このとき、他のイベントなどのデータが当該送信リストに格納されていれば、そのデータも送出する。
(S86)イベント送信管理部160は、当該送信リストをアンロックする。
このように、イベント送信管理部160は、担当ノードが自ノードでないクエリに対するイベントを取得すると、当該イベントを担当ノードに送信する。
図20は、クエリ状態の送信例(その1)を示す図である。図20では、ノード100からノード200へ、クエリ名“Query1”のクエリの割当てを変更する場合を例示している。ノード100は、当該クエリのノード200への割当て変更指示を管理ノード400から受信すると、当該クエリのクエリ状態のシリアライズを実行し、送信リスト122に追加する。ノード100において、当該クエリ状態は送信中として管理される。ノード100は、送信リスト122が所定サイズに達するまで、送信対象のデータを送信リスト122に追加する(バッファリング)。
(1)ノード100は、バッファリングの間に、イベントα1,α2,α3を順に取得する。ノード100は、イベントα1,α2,α3が割当て変更対象のクエリに対するイベントであることを特定する。
(2)ノード100は、イベントα1,α2,α3のシリアライズを実行し、送信リスト122内の当該クエリのリスト要素に、順番に追加する。
図21は、クエリ状態の送信例(その2)を示す図である。図21では、図20の後の処理を例示している。なお、前述のイベントα1,α2,α3に加えて、イベントα4,α5,α6,α7もクエリ名“Query1”のクエリで用いられるイベントである。
(3)ノード100は、送信リスト122のデータサイズが閾値に達すると、送信リスト122の内容を、ノード200を宛先としてネットワーク10に送出する。これにより、クエリ名“Query1”のクエリのクエリ状態とともに、イベントα1,α2,α3も送出される。
(4)次に、ノード100はノード300からイベントα4を取得する。このような状況が発生するのは、割当て変更指示がノード300に到着する以前に、ノード300がイベントα4をネットワーク10に送出する場合である。ノード300の配置表321ではイベントα4を送出するタイミングで、イベントα4に対するクエリの担当ノードがノード100のままであったためである。ノード100はイベントα4を、イベントα1,α2,α3よりも後のタイミングでノード200に送信することになる。
(5)ノード100により送出された送信リスト122の内容がノード200に到着する前に、ノード200はイベントα5,α6を取得する。この場合、ノード200は、イベントα5,α6を待ちイベントとして保持する。
(6)ノード200は、ノード300からイベントα7を取得する。このような状況が発生するのは、割当て変更指示がノード300に到着した後にノード300がイベントα7をネットワーク10に送出する場合である(ノード300の配置表321ではイベントα7に対するクエリの担当ノードがノード200に変更されている)。
上記の例では、ノード200は、ノード100からクエリ状態およびイベントα1,α2,α3を受信すると、当該クエリ状態およびイベントα1,α2,α3を用いてクエリ名“Query1”のクエリを実行する。その後、ノード200は、待ちイベントであるイベントα5,α6を用いて当該クエリを実行する。更に、ノード200は、イベントα4,α7をノード200に到着した順に用いて、当該クエリを実行する。
このように、イベントα1,α2,α3の処理をクエリ状態とともにノード200に送信する。このため、当該クエリ状態を取得したノード200は、イベントα1,α2,α3を用いて、直ちにクエリ名“Query1”のクエリを実行できる。すなわち、イベントα1,α2,α3を当該クエリ状態とともにノード200に送信しない場合よりも、ノード200によるクエリの実行再開を短縮化できる。
ここで、第2の実施の形態の方法を用いると、例えば、イベントα1,α2,α3,α5,α6,α4,α7をこの順番で用いて、クエリが実行されることもある。一方、クエリによってはイベントの発生順を重視するものもある。例えば、イベントα1,α2,α3,α4,α5,α6,α7がこの順番に発生したなら、当該発生順で各イベントを用いてクエリを実行したいこともある(例えば、イベントの時間差検出を厳密に行う科学的計測の場合など)。そこで、イベントの発生順を厳密に維持してクエリ実行するか、イベントの発生順と異なる順番で各イベントを用いたクエリ実行を許容するかを指定する情報を、各クエリに含めてもよい。
例えば、イベントの発生順と異なる順番でのクエリ実行を許容するクエリには、その旨を示すアノテーション(注釈を示すメタデータ。例えば、“@XXX”などの文字列。)を当該クエリ内に記述可能とすることが考えられる。例えば、クエリ内に当該アノテーションが記述されている場合には、上記の方法により、クエリ状態にイベントを追加して送信可能とする。クエリ内に当該アノテーションが記述されていない場合には、例えば、クエリ状態の送信が完了するまで、各ノードは対象のクエリに対する全てのイベントの担当ノードへの送信を保留し、クエリ状態の送信完了後に発生順で担当ノードに各イベントを処理させる。
このようにすれば、クエリ状態とともにイベントを送信してクエリ実行する方法と、イベントの発生順を厳守してクエリ実行する方法とを両立できる。特に、イベントの発生順に拘らずにイベント処理を行えるようにすれば、未到着のイベント(上記の例ではイベントα4)を待たずに、待ちイベント(上記の例ではイベントα5,α6)のイベント処理を行える。このため、割当て変更後の担当ノードによるイベント処理を高速に開始できる。
また、クエリ状態にイベントが付属しているときは、付属する当該イベントを先に利用し、待ちイベントをその後で用いることで、(発生順を入れ替えた入力順でのイベント処理を許容するものの)イベント発生順をある程度保ってクエリ実行できる。クエリ状態に付属するイベントの方が、待ちイベントよりも早いタイミングで生成されたものである可能性が高いからである。イベント間の発生タイミングの時間差として、比較的小さな時間差のイベント間の入れ替わりを許容するが、比較的大きな時間差のイベント間の入れ替わりを許容しない場合に有用である。
なお、図21の(4)の例において、送信リスト122に含まれる全情報のネットワーク10への送出が完了する前に、イベントα4の到着や送信準備が間に合えば、当該全情報の中にイベントα4の情報を割り込ませて送出してもよい。例えば、他の情報に代えて、イベントα4を優先して送出してもよい。すると、ノード100は、クエリ状態とともにイベントα1,α2,α3,α4をノード200に提供できる。
図22は、クエリ割当て変更の例(その1)を示すシーケンス図である。以下、図22に示す処理をステップ番号に沿って説明する。
(ST11)管理ノード400は、ノード100からノード200へのクエリの割当て変更をノード100,200,300に指示する。当該指示は、この段階ではノード100,200,300に未だ到着していない。
(ST12)ノード300は、新たなイベントを取得する(ノード300でイベント発生)。当該イベントは、割当て変更対象のクエリに対するイベントである。
(ST13)ノード300は、配置表321を参照し、当該クエリの担当ノードであるノード100を特定する。ノード300は、ノード100へ宛てて、取得したイベントを送出する。当該イベントは、この段階ではノード100に未だ到着していない。
(ST14)ノード100,200,300は、ステップST11の指示を受信する。ノード100,200は、配置表121,221を操作して、当該クエリの状況を“ノード200へ移動中”とする。ノード300は、配置表321の当該クエリの担当ノード名を“ノード200”とする。ノード100は、指示されたクエリのクエリ状態のシリアライズを実行し、当該クエリ状態を登録したリスト要素を送信リスト122に追加する。その後、ノード100は、ノード300から当該クエリに対するイベントを受信する。ノード100は、当該イベントのシリアライズを実行し、上記クエリ状態のリスト要素に追加する。
(ST15)ノード100は、送信リスト122のデータサイズが閾値以上になるまでバッファリングする。
(ST16)ノード100は、送信リスト122のデータサイズが閾値以上になると、送信リスト122の内容をノード200へ宛てて送出する。このとき、ノード100は、ステップST14で送信リスト122に登録したクエリ状態も送出する。
(ST17)ノード100は、ステップST14で当該クエリ状態に付加したイベントも送出する。
(ST18)ノード200は、ノード100からクエリ状態を受信すると、当該クエリ状態のデシリアライズを実行する。ノード200は、ノード100からクエリ状態に付属するイベントを受信すると、当該イベントのデシリアライズを実行する。
(ST19)ノード200は、クエリ状態の移動が完了した旨を管理ノード400に通知する。
(ST20)ノード200は、ステップST18で取得したクエリ状態およびイベントを用いて、ノード100からノード200へ割当て変更されたクエリを実行する。
このように、クエリの割当て変更指示がノード300に到達する前に、ノード300からノード100へ当該クエリに対するイベントが送出され得る。この場合、新たな担当ノードであるノード200が当該イベントを用いて割当て変更対象のクエリを実行できるまでの遅延時間(イベント転送レイテンシと呼ぶ)は、ステップST12からステップST18の完了までとなる。
なお、管理ノード400は、ステップST19の後、クエリの割当て変更が完了した旨をノード100,200,300に通知してもよい。
図23は、クエリ割当て変更の比較例(その1)を示すシーケンス図である。以下、図23に示す処理をステップ番号に沿って説明する。図23では、第2の実施の形態の方法を用いない場合を想定して図22に対する比較例を説明する。図23の説明では、便宜的に第2の実施の形態と同じ符号を用いて各ノードを示す。
(ST21)管理ノード400は、ノード100からノード200へのクエリの割当て変更をノード100,200,300に指示する。当該指示は、この段階ではノード100,200,300に未だ到着していない。
(ST22)ノード300は、新たなイベントを取得する(ノード300でイベント発生)。当該イベントは、割当て変更対象のクエリに対するイベントである。
(ST23)ノード300は、当該クエリの担当ノードをノード100と特定する。ノード300は、ノード100へ宛てて、取得したイベントを送出する。当該イベントは、この段階ではノード100に未だ到着していない。
(ST24)ノード100,200,300は、ステップST21の指示を受信する。ノード100は、指示されたクエリのクエリ状態のシリアライズを実行し、送信データに追加する。また、ノード100は、ノード300から当該クエリに対するイベントを受信する。
(ST25)ノード100は、送信データのデータサイズが閾値以上になるまでバッファリングする。
(ST26)ノード100は、送信データのデータサイズが閾値以上になると、送信データの内容をノード200へ宛てて送出する。当該送信データは、割当て変更対象のクエリのクエリ状態を含む。一方、当該送信データは、ステップST24で受信したイベントを含んでいない。
(ST27)ノード200は、ノード100からクエリ状態を受信すると、当該クエリ状態のデシリアライズを実行する。
(ST28)ノード200は、クエリ状態の移動が完了した旨を管理ノード400に通知する。
(ST29)管理ノード400は、クエリの割当て変更が完了した旨をノード100,200,300に通知する。ノード100,200,300は、当該通知を受信する。
(ST30)ノード100は、ノード300から受信していたイベントを、割当て変更後の新たな担当ノードであるノード200に送信する(当該イベントに対してもシリアライズやバッファリングを行う)。ノード200は、ノード100からイベントを受信すると、当該イベントのデシリアライズを実行する。
(ST31)ノード200は、ステップST27で取得したクエリ状態およびステップST30で取得したイベントを用いて、ノード100からノード200へ割当て変更されたクエリを実行する。
上記比較例の場合、ノード300で発生したイベントをノード200が受信完了するまでのイベント転送レイテンシは、ステップST22からステップST30の完了までとなる。比較例では、図22のイベント転送レイテンシに比べて、ステップST28〜ST30の時間が余計にかかる。特に、ステップST30では、図示を省略しているが、ステップST24〜ST26と同様にロック待ち、バッファリング、転送、デシリアライズ、登録、アンロック待ちという複数段階のフェーズを含み、これら処理のレイテンシも含まれることになる。
一方、図22の場合は、ステップST28〜ST30の時間分の遅延を削減できる。よって、比較例に比べて、割当て変更対象のクエリをノード200により実行再開できるまでの遅延を短縮できる。
なお、ステップS24,S25で送信データのデータサイズが閾値に達していなければ、ステップS26でノード300から到着したイベントをクエリ状態とともにノード200に送信できる可能性もある。ただし、比較例の場合では、送信データを単にバッファリングするのみである。すなわち、第2の実施の形態の方法のように、送信データ管理構造体Dを用いてクエリ状態とイベントとを一塊として管理していない。したがって、ノード100からノード200へクエリ状態とイベントとが関連性なく送信されることになる。この場合、ノード200では、受信したデータの中からクエリ状態と当該クエリ状態に関係するイベントとを検索する演算コストや遅延も生じ得る。この演算コストや遅延も改善の余地がある。
一方、図22の場合は、送信データ管理構造体Dを用いてクエリ状態とイベントとを一塊で管理する。これにより、クエリ状態とイベントとをノード100から連続して送信可能とする。ノード200では、受信データのデシリアイズの際に、クエリ状態の直後にイベントを抽出すれば、当該イベントを直前のクエリ状態に付属するイベントと判断できる。すなわち、クエリ状態とイベントとをノード200により効率的に取得させ、割当て変更対象のクエリの実行再開をより短縮できる(上記の演算コストや遅延を改善し得る)。このように、クエリ状態とイベントとをノード100から連続して送信する方が、より好ましい。
図24は、クエリ割当て変更の例(その2)を示すシーケンス図である。以下、図24に示す処理をステップ番号に沿って説明する。
(ST41)管理ノード400は、ノード100からノード200へのクエリの割当て変更をノード100,200,300に指示する。
(ST42)ノード100,200,300は、ステップST41の指示を受信する。ノード100,200は、配置表121,221を操作して、当該クエリの状況を“ノード200へ移動中”とする。ノード300は、配置表321の当該クエリの担当ノード名を“ノード200”とする。ノード100は、指示されたクエリのクエリ状態のシリアライズを実行し、当該クエリ状態を送信リスト122に追加する。
(ST43)ノード300は、新たなイベントを取得する(ノード300でイベント発生)。当該イベントは、割当て変更対象のクエリに対するイベントである。
(ST44)ノード300は、配置表321を参照し、当該クエリの担当ノードであるノード200を特定する。ノード300は、ノード200へ宛てて、取得したイベントを送出する。その後、ノード200は当該イベントを受信し、受信したイベントのデシリアライズを行う。ノード200は、割当て変更対象のクエリの待ちイベントとして、当該イベントを配置表221に登録する。ノード200の配置表221では、ノード300から受信したイベントに対するクエリの状況が“自ノード(ここでは、ノード200)へ移動中”となっているためである。
(ST45)ノード100は、送信リスト122のデータサイズが閾値以上になるまでバッファリングする。
(ST46)ノード100は、送信リスト122のデータサイズが閾値以上になると、送信リスト122の内容をノード200へ宛てて送出する。
(ST47)ノード200は、ノード100からクエリ状態を受信すると、当該クエリ状態のデシリアライズを実行する。
(ST48)ノード200は、クエリ状態の移動が完了した旨を管理ノード400に通知する。
(ST49)ノード200は、ステップST46で取得したクエリ状態およびステップST44で取得したイベント(待ちイベント)を用いて、ノード100からノード200へ割当て変更されたクエリを実行する。
このように、クエリの割当て変更指示がノード300に到達した直後に、ノード300からノード200へ当該クエリに対するイベントが送出され得る。この場合、イベント転送レイテンシは、ステップST43からステップST47の完了までとなる。
なお、管理ノード400は、ステップST48の後、クエリの割当て変更が完了した旨をノード100,200,300に通知してもよい。
図25は、クエリ割当て変更の比較例(その2)を示すシーケンス図である。以下、図25に示す処理をステップ番号に沿って説明する。図25では、第2の実施の形態の方法を用いない場合を想定して図24に対する比較例を説明する。図25の説明では、便宜的に第2の実施の形態と同じ符号を用いて各ノードを示す。
(ST51)管理ノード400は、ノード100からノード200へのクエリの割当て変更をノード100,200,300に指示する。
(ST52)ノード100,200,300は、ステップST51の指示を受信する。ノード100は、指示されたクエリのクエリ状態のシリアライズを実行し、送信データに追加する。
(ST53)ノード300は、新たなイベントを取得する(ノード300でイベント発生)。当該イベントは、割当て変更対象のクエリに対するイベントである。ノード300は、当該イベントが割当て変更対象のクエリに対するものであることを検出すると、当該イベントの担当ノードへの提供を保留する。
(ST54)ノード100は、送信データのデータサイズが閾値以上になるまでバッファリングする。
(ST55)ノード100は、送信データのデータサイズが閾値以上になると、送信データの内容をノード200へ宛てて送出する。当該送信データには、クエリ状態が含まれる。
(ST56)ノード200は、ノード100からクエリ状態を受信すると、当該クエリ状態のデシリアライズを実行する。
(ST57)ノード200は、クエリ状態の移動が完了した旨を管理ノード400に通知する。
(ST58)管理ノード400は、クエリの割当て変更が完了した旨をノード100,200,300に通知する。ノード100,200,300は、当該通知を受信する。
(ST59)ノード300は、ステップST53で取得したイベントの送信先をノード200と特定する。ノード300は、当該イベントをノード200に送信する(当該イベントに対してもシリアライズやバッファリングを行う)。ノード200は、ノード300からイベントを受信すると、当該イベントのデシリアライズを実行する。
(ST60)ノード200は、ステップST56で取得したクエリ状態およびステップST59で取得したイベントを用いて、ノード100からノード200へ割当て変更されたクエリを実行する。
上記比較例の場合、ノード300で発生したイベントをノード200が受信完了するまでのイベント転送レイテンシは、ステップST53からステップST59の完了までとなる。比較例では、図24のイベント転送レイテンシに比べて、ステップST57〜ST59の時間が余計にかかる。特に、ステップST59では、図示を省略しているが、ステップST52〜ST56と同様にロック待ち、バッファリング、転送、デシリアライズ、登録、アンロック待ちという複数段階のフェーズを含み、これら処理のレイテンシも含まれることになる。
一方、図24の場合はステップST44において、ノード300からノード200へのイベントの送信を許容し、ノード200では当該イベントを待ちイベントとして管理する。このため、ステップST57〜ST59の時間分の遅延を削減できる。すなわち、比較例に比べて、割当て変更対象のクエリをノード200により実行再開できるまでの遅延を短縮できる。
図26は、分散処理システムの他の例を示す図である。図2では、サーバコンピュータ(物理マシン)を用いてノード100,200,300を実現する例を示した。一方、仮想マシンを用いて各ノードを実現してもよい。例えば、サーバ51,52,53をネットワーク10に接続する。ここで、図26ではネットワーク20および他の装置の図示を省略している。
例えば、サーバ51,52,53は、ハイパーバイザや仮想マシンモニタなどと呼ばれる管理用のソフトウェアを実行し、サーバ51,52,53上の複数の仮想マシンに、サーバ51,52,53が備えるCPUやRAMなどのリソースを割当てる。例えば、サーバ51は、仮想マシン100a,200a,300aを有する。
仮想マシン100a,200a,300aを、分散処理を行うノードとして用いることができる。例えば、仮想マシン100aは、ノード100と同一の機能を実現できる。仮想マシン200aは、ノード200と同一の機能を実現できる。仮想マシン300aは、ノード300と同一の機能を実現できる。なお、物理マシンと仮想マシンとが分散処理を行うノードとして混在してもよい。このように、仮想マシン100a,200a,300aを用いて分散処理を行う場合も、クエリの割当て変更先で当該クエリ実行を再開するまでの遅延を短縮できる。
すなわち、ノード100,200,300は、第1の実施の形態のマシン(物理マシン)の一例である。仮想マシン100a,200a,300aは、第1の実施の形態のマシン(仮想マシン)の一例である。
また、上記の例では、クエリ毎に担当ノードを割当てるものとした。一方、クエリおよび当該クエリに対するイベントに含まれる所定のキーに応じて、クエリの割当てを行うことも考えられる。同じクエリでも、キーに応じて担当ノードを別個にしたいこともあるからである。具体的には、複数の地域のうちの何れの地域で発生したイベントかを示す情報(キー)が、当該イベントに含まれる場合に、当該キーに応じて担当ノードを決定することが考えられる。その場合、配置表121,221,321では、クエリとキーとの組に応じて、配置ノード名を管理することができる。その場合でも、上記の説明において「クエリとキーとの組」に対して「クエリ名」が与えられると考えれば、上記と同様の方法を適用できる。
なお、第1の実施の形態の情報処理は、演算部1bにプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、プロセッサ101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体(例えば、光ディスク13、メモリ装置14およびメモリカード16など)に記録できる。
例えば、プログラムを記録した記録媒体を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
1,2 マシン
1a,2a 記憶部
1b,2b 演算部
3 進捗情報
4 変更指示
5 データ
6 送信データ

Claims (8)

  1. 第1のコンピュータおよび第2のコンピュータを有するシステムのデータ処理管理方法において、
    前記第1のコンピュータが、
    一連のイベントを示すパターンであって記憶部に記憶された前記パターンに対応する処理を、前記第1のコンピュータにより受信した到着済イベントに応じて実行し、前記到着済イベントの情報を前記記憶部に記録し、
    前記処理の割当てを前記第2のコンピュータに変更する指示を受信し、
    前記処理に対する前記到着済イベントを示す進捗情報の送信準備中に、前記パターンに属する第1のイベントを受信し、
    前記進捗情報および前記第1のイベントを含む送信データを生成し、
    前記進捗情報に代えて、前記送信データを前記第2のコンピュータに送信する、
    データ処理管理方法。
  2. 前記第2のコンピュータが、前記送信データが到着する前に前記処理に対応付けられた第2のイベントを受信すると、前記第2のイベントを保持する、請求項1記載のデータ処理管理方法。
  3. 前記第2のコンピュータが、前記送信データを受信した際に、前記第2のイベントよりも前に発生し前記処理に対応付けられているが前記第2のコンピュータに未到着である第3のイベントがあっても、前記進捗情報および前記第2のイベントを用い前記処理行する、請求項2記載のデータ処理管理方法。
  4. 前記第2のコンピュータが、前記送信データを受信すると、前記進捗情報および前記第1のイベントを用いて前記処理を実行し、その後、前記第2のイベントを用いて前記処理を実行する、請求項2または3記載のデータ処理管理方法。
  5. 前記第1のコンピュータが、前記進捗情報と前記第1のイベントとを連続して送信する、請求項1乃至4の何れか1項に記載のデータ処理管理方法。
  6. 前記第1のコンピュータが、前記指示を受信すると前記処理の実行を停止し、
    前記第2のコンピュータが、前記進捗情報および前記第1のイベントを用いて前記処理を再開する、請求項1乃至5の何れか1項に記載のデータ処理管理方法。
  7. 自装置で実行される処理に対応する一連のイベントのパターンを記憶する記憶部と、
    前記パターンに対応する前記処理を、受信した到着済イベントに応じて実行し、前記到着済イベントの情報を前記記憶部に記録し、
    前記処理の割当てを他の情報処理装置に変更する指示を受信し、
    前記処理に対する前記到着済イベントを示す進捗情報の送信準備中に、前記パターンに属する第1のイベントを受信し、
    前記進捗情報および前記第1のイベントを含む送信データを生成し、
    前記進捗情報に代えて、前記送信データを前記他の情報処理装置に送信する、演算部と、
    を有する情報処理装置。
  8. コンピュータに、
    一連のイベントを示すパターンであって記憶部に記憶された前記パターンに対応する処理を、前記コンピュータにより受信した到着済イベントに応じて実行し、前記到着済イベントの情報を前記記憶部に記録し、
    前記処理の割当てを他のコンピュータに変更する指示を受信し、
    前記処理に対する前記到着済イベントを示す進捗情報の送信準備中に、前記パターンに属する第1のイベントを受信し、
    前記進捗情報および前記第1のイベントを含む送信データを生成し、
    前記進捗情報に代えて、前記送信データを前記他のコンピュータに送信する、
    処理を実行させるデータ処理管理プログラム。
JP2013209824A 2013-10-07 2013-10-07 データ処理管理方法、情報処理装置およびデータ処理管理プログラム Active JP6248523B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2013209824A JP6248523B2 (ja) 2013-10-07 2013-10-07 データ処理管理方法、情報処理装置およびデータ処理管理プログラム
EP14186610.3A EP2857969B1 (en) 2013-10-07 2014-09-26 Data processing management method, information processing apparatus, and data processing management program
US14/499,321 US9742841B2 (en) 2013-10-07 2014-09-29 Data processing management method and information processing apparatus
CN201410522191.8A CN104516776B (zh) 2013-10-07 2014-09-30 数据处理管理方法及信息处理设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013209824A JP6248523B2 (ja) 2013-10-07 2013-10-07 データ処理管理方法、情報処理装置およびデータ処理管理プログラム

Publications (3)

Publication Number Publication Date
JP2015075803A JP2015075803A (ja) 2015-04-20
JP2015075803A5 JP2015075803A5 (ja) 2016-10-27
JP6248523B2 true JP6248523B2 (ja) 2017-12-20

Family

ID=51687807

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013209824A Active JP6248523B2 (ja) 2013-10-07 2013-10-07 データ処理管理方法、情報処理装置およびデータ処理管理プログラム

Country Status (4)

Country Link
US (1) US9742841B2 (ja)
EP (1) EP2857969B1 (ja)
JP (1) JP6248523B2 (ja)
CN (1) CN104516776B (ja)

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10089362B2 (en) * 2014-08-13 2018-10-02 Software Ag Systems and/or methods for investigating event streams in complex event processing (CEP) applications
US11232100B2 (en) 2016-09-26 2022-01-25 Splunk Inc. Resource allocation for multiple datasets
US11250056B1 (en) 2016-09-26 2022-02-15 Splunk Inc. Updating a location marker of an ingestion buffer based on storing buckets in a shared storage system
US11106734B1 (en) * 2016-09-26 2021-08-31 Splunk Inc. Query execution using containerized state-free search nodes in a containerized scalable environment
US11003714B1 (en) 2016-09-26 2021-05-11 Splunk Inc. Search node and bucket identification using a search node catalog and a data store catalog
US10984044B1 (en) 2016-09-26 2021-04-20 Splunk Inc. Identifying buckets for query execution using a catalog of buckets stored in a remote shared storage system
US11321321B2 (en) 2016-09-26 2022-05-03 Splunk Inc. Record expansion and reduction based on a processing task in a data intake and query system
US11126632B2 (en) 2016-09-26 2021-09-21 Splunk Inc. Subquery generation based on search configuration data from an external data system
US20180089324A1 (en) 2016-09-26 2018-03-29 Splunk Inc. Dynamic resource allocation for real-time search
US11620336B1 (en) 2016-09-26 2023-04-04 Splunk Inc. Managing and storing buckets to a remote shared storage system based on a collective bucket size
US11281706B2 (en) 2016-09-26 2022-03-22 Splunk Inc. Multi-layer partition allocation for query execution
US11860940B1 (en) 2016-09-26 2024-01-02 Splunk Inc. Identifying buckets for query execution using a catalog of buckets
US11461334B2 (en) 2016-09-26 2022-10-04 Splunk Inc. Data conditioning for dataset destination
US11023463B2 (en) 2016-09-26 2021-06-01 Splunk Inc. Converting and modifying a subquery for an external data system
US11314753B2 (en) 2016-09-26 2022-04-26 Splunk Inc. Execution of a query received from a data intake and query system
US11604795B2 (en) 2016-09-26 2023-03-14 Splunk Inc. Distributing partial results from an external data system between worker nodes
US11163758B2 (en) 2016-09-26 2021-11-02 Splunk Inc. External dataset capability compensation
US11550847B1 (en) 2016-09-26 2023-01-10 Splunk Inc. Hashing bucket identifiers to identify search nodes for efficient query execution
US11593377B2 (en) 2016-09-26 2023-02-28 Splunk Inc. Assigning processing tasks in a data intake and query system
US11243963B2 (en) 2016-09-26 2022-02-08 Splunk Inc. Distributing partial results to worker nodes from an external data system
US11269939B1 (en) 2016-09-26 2022-03-08 Splunk Inc. Iterative message-based data processing including streaming analytics
US11442935B2 (en) 2016-09-26 2022-09-13 Splunk Inc. Determining a record generation estimate of a processing task
US10956415B2 (en) 2016-09-26 2021-03-23 Splunk Inc. Generating a subquery for an external data system using a configuration file
US11580107B2 (en) 2016-09-26 2023-02-14 Splunk Inc. Bucket data distribution for exporting data to worker nodes
US10977260B2 (en) 2016-09-26 2021-04-13 Splunk Inc. Task distribution in an execution node of a distributed execution environment
US11663227B2 (en) 2016-09-26 2023-05-30 Splunk Inc. Generating a subquery for a distinct data intake and query system
US10353965B2 (en) 2016-09-26 2019-07-16 Splunk Inc. Data fabric service system architecture
US11294941B1 (en) 2016-09-26 2022-04-05 Splunk Inc. Message-based data ingestion to a data intake and query system
US11599541B2 (en) 2016-09-26 2023-03-07 Splunk Inc. Determining records generated by a processing task of a query
US11222066B1 (en) 2016-09-26 2022-01-11 Splunk Inc. Processing data using containerized state-free indexing nodes in a containerized scalable environment
US11874691B1 (en) 2016-09-26 2024-01-16 Splunk Inc. Managing efficient query execution including mapping of buckets to search nodes
US11615104B2 (en) 2016-09-26 2023-03-28 Splunk Inc. Subquery generation based on a data ingest estimate of an external data system
US11567993B1 (en) 2016-09-26 2023-01-31 Splunk Inc. Copying buckets from a remote shared storage system to memory associated with a search node for query execution
US11562023B1 (en) 2016-09-26 2023-01-24 Splunk Inc. Merging buckets in a data intake and query system
US11586627B2 (en) 2016-09-26 2023-02-21 Splunk Inc. Partitioning and reducing records at ingest of a worker node
US11416528B2 (en) 2016-09-26 2022-08-16 Splunk Inc. Query acceleration data store
US11226887B1 (en) * 2016-12-06 2022-01-18 Amazon Technologies, Inc. User code deployment across compute resource partitions
US11921672B2 (en) 2017-07-31 2024-03-05 Splunk Inc. Query execution at a remote heterogeneous data store of a data fabric service
US11151137B2 (en) 2017-09-25 2021-10-19 Splunk Inc. Multi-partition operation in combination operations
US10896182B2 (en) 2017-09-25 2021-01-19 Splunk Inc. Multi-partitioning determination for combination operations
US11334543B1 (en) 2018-04-30 2022-05-17 Splunk Inc. Scalable bucket merging for a data intake and query system
WO2020220216A1 (en) 2019-04-29 2020-11-05 Splunk Inc. Search time estimate in data intake and query system
US11715051B1 (en) 2019-04-30 2023-08-01 Splunk Inc. Service provider instance recommendations using machine-learned classifications and reconciliation
US11494380B2 (en) 2019-10-18 2022-11-08 Splunk Inc. Management of distributed computing framework components in a data fabric service system
US11922222B1 (en) 2020-01-30 2024-03-05 Splunk Inc. Generating a modified component for a data intake and query system using an isolated execution environment image
CN111401033B (zh) * 2020-03-19 2023-07-25 北京百度网讯科技有限公司 事件抽取方法、事件抽取装置和电子设备
US11704313B1 (en) 2020-10-19 2023-07-18 Splunk Inc. Parallel branch operation using intermediary nodes

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3749208B2 (ja) 2002-08-14 2006-02-22 株式会社東芝 プロセスマイグレーション方法、計算機
US7484208B1 (en) * 2002-12-12 2009-01-27 Michael Nelson Virtual machine migration
US20040260862A1 (en) * 2003-06-20 2004-12-23 Eric Anderson Adaptive migration planning and execution
CN100547583C (zh) * 2003-08-14 2009-10-07 甲骨文国际公司 数据库的自动和动态提供的方法
US7577657B2 (en) * 2005-03-18 2009-08-18 Microsoft Corporation System and method for updating objects in a multi-threaded computing environment
US7536526B2 (en) * 2005-07-11 2009-05-19 General Electric Company Hierarchical state based migration of structured data
JP5214537B2 (ja) 2009-05-25 2013-06-19 株式会社東芝 マルチプロセッサシステム
US8930526B2 (en) * 2009-10-30 2015-01-06 International Business Machines Corporation Processing network events
JP5664098B2 (ja) * 2010-10-05 2015-02-04 富士通株式会社 複合イベント分散装置、複合イベント分散方法および複合イベント分散プログラム
JP5598235B2 (ja) * 2010-10-05 2014-10-01 富士通株式会社 複合イベント処理装置および複合イベント処理方法
JP2012248169A (ja) * 2011-05-31 2012-12-13 Nippon Telegr & Teleph Corp <Ntt> サービス閉塞方法、処理装置、処理プログラム、負荷分散装置および負荷分散プログラム
JP5980335B2 (ja) * 2012-08-22 2016-08-31 株式会社日立製作所 仮想計算機システム、管理計算機及び仮想計算機管理方法
WO2014174570A1 (ja) * 2013-04-22 2014-10-30 株式会社日立製作所 ストレージ管理計算機、ストレージ管理方法、およびストレージシステム

Also Published As

Publication number Publication date
EP2857969A3 (en) 2016-07-06
JP2015075803A (ja) 2015-04-20
US9742841B2 (en) 2017-08-22
US20150100616A1 (en) 2015-04-09
EP2857969A2 (en) 2015-04-08
CN104516776B (zh) 2018-05-22
EP2857969B1 (en) 2022-08-24
CN104516776A (zh) 2015-04-15

Similar Documents

Publication Publication Date Title
JP6248523B2 (ja) データ処理管理方法、情報処理装置およびデータ処理管理プログラム
US20220276998A1 (en) Database transaction processing method and apparatus, server, and storage medium
US10067791B2 (en) Methods and apparatus for resource management in cluster computing
US10891267B2 (en) Versioning of database partition maps
JP6248747B2 (ja) 情報処理装置、制御方法および制御プログラム
TW409215B (en) Parallel file system and method for multiple node file access
US7457828B2 (en) System and method for synchronizing distributed buffers when committing data to a database
JP5387757B2 (ja) 並列データ処理システム、並列データ処理方法及びプログラム
US20220174130A1 (en) Network attached memory using selective resource migration
US8996469B2 (en) Methods and apparatus for job state tracking in cluster computing
JP2019528539A (ja) ワーキングセットおよびスレッドの関連付け
KR20060071860A (ko) 워크플로우 트랜잭션의 일괄화를 통한 런타임 및애플리케이션 상태의 동기화
US9804889B2 (en) Methods and apparatus for state objects in cluster computing
JP2003044452A (ja) 同期メモリ・バリアを実装する方法およびシステム
US20110265093A1 (en) Computer System and Program Product
JPH0954754A (ja) 疎結合並列処理環境における顧客情報制御システム及び方法
JPH0950418A (ja) 疎結合並列処理環境において一時的記憶待ち行列機能を有する顧客情報制御システム及び方法
CN111488492A (zh) 用于检索图数据库的方法和装置
US8140478B2 (en) Commit rate management with decoupled commit operations
JPH0962635A (ja) 疎結合並列処理環境においてトランザクション直列化制御機能を有する顧客情報制御システム及び方法
JPH0944461A (ja) 疎結合並列処理環境においてapiスタート及びキャンセルトランザクション機能を有する顧客情報制御システム及び方法
JP2006502651A (ja) キーイベント制御装置
JP5480046B2 (ja) 分散トランザクション処理システム、装置、方法およびプログラム
JP5884595B2 (ja) メッセージ通信方法,メッセージ通信プログラムおよびコンピュータ
Diaz et al. Working with NoSQL Alternatives

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160606

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160908

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170228

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170321

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170518

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20171024

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171106

R150 Certificate of patent or registration of utility model

Ref document number: 6248523

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150