(57)【特許請求の範囲】
【請求項１】
１つ以上の計算ノード上で実行する複数の処理要素から構成されるストリーム・アプリケーションをデバッグする方法であって、前記複数の処理要素は前記ストリーム・アプリケーションのオペレータ・グラフに含まれており、前記方法は、
前記複数の処理要素のうちの第１の処理要素におけるデバッギング・ブレークポイントの指示を受信するステップと、
前記オペレータ・グラフを評価して、前記複数の処理要素のうちの１つ以上の他の処理要素に対する前記オペレータ・グラフ内の前記第１の処理要素の位置を識別するステップと、
前記識別された位置に基づいて前記オペレータ・グラフにおける処理要素の融合、非融合を実行し、または前記ブレークポイントを有する処理要素の複写を実行することによって、前記ストリーム・アプリケーションの状態を変更して、前記第１の処理要素をデバッグ可能にするステップと、
前記ストリーム・アプリケーションの前記第１の処理要素のためのデバッグ・セッションを開始するステップと、
前記ストリーム・アプリケーションの前記第１の処理要素の前記デバッグ・セッションに引き続いて、前記デバッギング・サポート変更を取り消すことによって前記ストリーム・アプリケーションの前記状態を復元するステップと
を含む、前記方法。
【請求項２】
各処理要素が、前記複数の計算ノードのうちの所与の１つ上でプロセスＩＤ（ＰＩＤ）を割り当てられたコンピューティング・プロセスとして実行する、請求項１に記載の方法。
【請求項３】
前記ストリーム・アプリケーションの前記第１の処理要素が、第１のＮタプルを受信し、前記第１のＮタプルを処理し、そして第２の処理要素に送出される第２のＮタプルを発生するように構成されている、請求項１に記載の方法。
【請求項４】
前記ストリーム・アプリケーションの前記クローニング命令が、
前記ストリーム・アプリケーションの前記第１の処理要素のデバッグ・クローンを発生するステップと、
前記デバッグ・クローンに前記ブレークポイントを挿入するステップと、
前記デバッグ・クローンを前記ストリーム・アプリケーションに挿入するステップと
を含む、請求項１に記載の方法。
【請求項５】
前記ストリーム・アプリケーションの前記融合命令が、
前記ストリーム・アプリケーションの少なくとも第２の処理要素の実行を止めるステップと、
前記ストリーム・アプリケーションの前記第１の処理要素及び前記ストリーム・アプリケーションの前記第２の処理要素から融合処理要素を発生するステップと、
前記融合処理要素に前記ブレークポイントを挿入するステップと、
前記融合処理要素を前記ストリーム・アプリケーションに挿入するステップと
を含む、請求項１に記載の方法。
【請求項６】
前記ストリーム・アプリケーションの前記非融合命令が、
前記ストリーム・アプリケーションの前記第１の処理要素及び前記ストリーム・アプリケーションの第２の処理要素を含む融合処理要素の実行を止めるステップと、
前記ストリーム・アプリケーションの前記第１の処理要素を含む第１の非融合処理要素を発生するステップと、
前記第１の非融合処理要素に前記ブレークポイントを挿入するステップと、
前記ストリーム・アプリケーションの少なくとも前記第２の処理要素を含む第２の非融合処理要素を発生するステップと、
前記第１の非融合処理要素および前記第２の非融合処理要素を前記ストリーム・アプリケーションに挿入するステップと
を含む、請求項１に記載の方法。
【請求項７】
１つ以上の計算ノード上で実行する複数の処理要素から構成されるストリーム・アプリケーションをデバッグするための動作を実行する為のコンピュータ・プログラムであって、前記複数の処理要素は前記ストリーム・アプリケーションのオペレータ・グラフに含まれており、前記動作は、請求項１〜６のいずれか一項に記載の方法の各ステップを含む、前記コンピュータ・プログラム。
【請求項８】
システムであって、
各々の計算ノードがプロセッサおよびメモリを含む複数の計算ノードであって、ストリーム・アプリケーションの複数の処理要素を実行するように構成され、前記複数の処理要素は前記ストリーム・アプリケーションのオペレータ・グラフに含まれている、前記計算ノードと、
少なくともプロセッサおよびメモリを備えている管理システムであって、前記メモリがストリーム・デバッギング・アプリケーションを記憶し、前記ストリーム・デバッギング・アプリケーションが、前記管理システム上で実行された場合に、前記複数の計算ノード上で実行する前記ストリーム・アプリケーションをデバッグするための動作を実行するように構成され、前記動作が、請求項１〜６のいずれか一項に記載の方法の各ステップを含む、前記管理システムと
を備えている、前記システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストリーム・ベースのデバッギング技法に関し、特にストリーム・ベースのアプリケーションにおいて処理要素をデバッグするための技法に関する。
【背景技術】
【０００２】
コンピュータ・データベースが極めて洗練されている一方で、データベース・システムに課されるコンピューティングの要求は急速に増している。データベース・システムは通常、データベース内に記憶されたデータのアクセス、操作、または使用から、データ記憶プロセスを分離するように構成されている。更に具体的には、データベースは、データをまず記憶し、次いで索引を付け、次いで照会するモデルを用いる。しかしながら、このモデルでは、いくつかのリアルタイム・アプリケーションの性能要件を満たすことができない。例えば、データベース・システムが入来データを受信し記憶することができる速度によって、処理または他の方法での評価を行うことができるデータ量が制限される可能性があり、これが、大量のデータをリアルタイムで処理するように構成されたデータベース・アプリケーションの有用性を制限することになる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
この問題に対処するために、データベース・システムのための開発途上の技術として、ストリーム・ベースのコンピューティングおよびストリーム・ベースのデータベース・コンピューティングが出現しつつある。また、ストリーミング・データがデータベース・ファイルに到達する前に処理し照会するアプリケーションをユーザが生成することができる製品が入手可能である。この新進の技術によって、ユーザは、受信データ・レコードが「飛行中」にこれに適用する処理論理を指定することができ、この結果はミリ秒単位で利用可能である。このタイプの処理を用いたアプリケーションの構築が新しいプログラミング・パラダイムを切り開いており、これによって、広範な革新的アプリケーション、システム、およびプロセスが開発可能となると共に、アプリケーション・プログラマーおよびデータベース開発者に新しい課題を投げかけることになる。
【課題を解決するための手段】
【０００４】
本発明の実施形態は、ストリーム・ベースのデータベース・アプリケーションにおいて処理要素（または複数の要素）をデバッグするための技法を提供する。例えば、本発明の一実施形態は、１つ以上の計算ノード上で実行する複数の処理要素から構成されたストリーム・アプリケーションをデバッグする方法を含む。この方法は、一般的に、複数の処理要素の最初の１つにおけるデバッギング・ブレークポイントについての位置の指示を受信することと、オペレータ・グラフを評価して、複数のうちの１つ以上の他の処理要素に対する第１の処理要素の位置を識別することと、を含むことができる。また、この方法は、ストリーム・アプリケーションの状態を変更して第１の処理要素のデバッグを可能とすることと、第１の処理要素のためのデバッグ・セッションを開始することと、を含むことができる。
【０００５】
本発明の別の実施形態は、実行された場合に、１つ以上の計算ノード上で実行する複数の処理要素から構成されたストリーム・アプリケーションをデバッグするための動作を実行するプログラムを含むコンピュータ読み取り可能記憶媒体を含む。この動作は、複数の処理要素の最初の１つにおけるデバッギング・ブレークポイントについての位置の指示を受信することと、オペレータ・グラフを評価して、複数のうちの１つ以上の他の処理要素に対する第１の処理要素の位置を識別することと、を含むことができる。この動作は、更に、ストリーム・アプリケーションの状態を変更して第１の処理要素のデバッグを可能とすることと、第１の処理要素のためのデバッグ・セッションを開始することと、を含むことができる。
【０００６】
本発明の更に別の実施形態は、各々がプロセッサおよびメモリを含む複数の計算ノードを有するシステムを含む。計算ノードは、ストリーム・アプリケーションの処理要素を実行するように構成されている。また、このシステムは、プロセッサおよびメモリを含む管理システムも含むことができる。このメモリはストリーム・デバッギング・アプリケーションを記憶し、このアプリケーションは、管理システム上で実行された場合に、複数の計算ノード上で実行するストリーム・アプリケーションをデバッグするための動作を実行するように構成されている。
この動作は、一般に、複数の処理要素の最初の１つにおけるデバッギング・ブレークポイントについての位置の指示を受信することと、オペレータ・グラフを評価して、複数のうちの１つ以上の他の処理要素に対する第１の処理要素の位置を識別することと、を含むことができる。更に、この動作は、ストリーム・アプリケーションの状態を変更して第１の処理要素のデバッグを可能とすることと、第１の処理要素のためのデバッグ・セッションを開始することと、を含むことができる。
【０００７】
上述の態様が達成され、詳細に理解可能となるように、先に簡単にまとめた本発明の実施形態のいっそう具体的な説明を、添付図面を参照して行うことができる。しかしながら、本発明は他の等しく有効な実施形態を認めることができるので、添付図面は本発明の典型的な実施形態を図示するだけであり、従ってその範囲を限定するものとは見なされないことに留意すべきである。
【図面の簡単な説明】
【０００８】
【図１】本発明の一実施形態に従った、ストリーム・データベース・アプリケーションを実行するように構成されたコンピューティング・インフラストラクチャを示す。
【図２】本発明の一実施形態に従った、ストリーム・データベース・アプリケーションを実行するように構成されたコンピューティング・インフラストラクチャを示す。
【図３】本発明の一実施形態に従った、図１の分散型コンピューティング・ノードの更に詳細な図である。
【図４】本発明の一実施形態に従った、ストリーム・データベース・アプリケーションにおける管理コンピューティング・システムの更に詳細な図である。
【図５】本発明の一実施形態に従った、ストリーム・データベース・アプリケーションにおける計算ノードの一例を示す。
【図６】本発明の一実施形態に従った、ストリーム・データベース・アプリケーションにおける処理要素をデバッグするための方法を示す。
【図７】本発明の実施形態に従った、ストリーム・アプリケーションをデバッグするための状況を図示するように変更した、最初に図５に示した計算ノードおよびストリーム・アプリケーションの例を示す。
【図８】本発明の実施形態に従った、ストリーム・アプリケーションをデバッグするための状況を図示するように変更した、最初に図５に示した計算ノードおよびストリーム・アプリケーションの例を示す。
【図９】本発明の実施形態に従った、ストリーム・アプリケーションをデバッグするための状況を図示するように変更した、最初に図５に示した計算ノードおよびストリーム・アプリケーションの例を示す。
【発明を実施するための形態】
【０００９】
ストリーム・アプリケーションにおいて、オペレータは相互に接続されて、ある処理要素から次のものへと（例えばＴＣＰ／ＩＰソケットを介して）データが流れるようになっている。多くの小さい実行可能コード・ピース（オペレータ）を生成することによってノード全体にアプリケーションを分散させ、多数のノード上に処理要素を複製し、それらの間で負荷バランスを取ることで、スケーラビリティを達成する。ストリーム・アプリケーションにおける複数の処理要素（および複数のオペレータ）を共に融合させて（fuse）、更に大きい処理要素を形成することができる。こうすることによって複数の処理要素が共通のプロセス空間を共有することができ、その結果、プロセス間通信技法を用いて（例えばＴＣＰ／ＩＰソケットを用いて）利用可能であるよりも著しく高速なオペレータ間通信が行われる。更に、処理要素は、ストリーム・アプリケーションを通るデータ・フローを表すオペレータ・グラフから動的に挿入または除去することができると共に、実行時にストリーム・アプリケーションから融合または非融合（un-fuse）とすることができる。
【００１０】
分散型ストリーム環境における処理要素は、動作中のコードによって発生したログ・ファイルを調べることでデバッグすることができるが、完全なデバッグ・セッションが必要となることが多い。しかしながら、デバッガを動作させると、ブレークポイントに達したか否かにはかかわらずデバッグ中のプロセスが減速し、更に、ブレークポイントをトリガすると、デバッグ対象のオペレータを通って流れているデータの（完全な停止ではないとしても）著しい減速が生じる恐れがある。このため、デバッグ対象の処理要素を動作させることが、「ストリーム停滞（backup）」を引き起こす可能性がある。その処理要素におけるオペレータに流れているデータ・ストリームは流れを止めないからである。更に一般的には、ストリーム・コンピューティングは、ストリームがオペレータを通って連続的に流れるという前提に基づいている。
【００１１】
多数の処理要素を共に融合させて単一の動作プロセスを形成する場合、その中の１つでブレークポイントをトリガすると、融合させた処理要素の全てが処理を停止し、場合によってはオペレータ・グラフの大部分がオフになる。一方で、１組の非融合処理要素は、第２および第３の処理要素から流れたデータを結合させるように構成された第１の処理要素を含む場合がある。第２または第３の処理要素のいずれかでブレークポイントがトリガされると、ストリーム処理の結果が混乱する可能性がある。
【００１２】
本発明の実施形態は、ストリーム・ベースのアプリケーションにおいて処理要素（または複数の要素）をデバッグするための技法を提供する。具体的には、本発明の実施形態は、動作中の環境全体に対する処理要素（または複数の要素）のデバッグの影響を軽減するように、処理要素のデバッグ中にストリーム・アプリケーションの状態を変更するための技法を提供する。例えば、２０のオペレータを含む融合処理要素内の１つのオペレータをデバッグする必要があると想定する。かかる場合、ストリーム・デバッガは、動作中のストリームから融合処理要素を取り除き、それらのオペレータを非融合とし、それらを動作中のストリームに再挿入するように構成することができる。そして、単一のオペレータをデバッグ中であるこの処理要素は、独立して動作中のプロセス（それ自身のプロセスＩＤ（ＰＩＤ）およびメモリ空間を有する）として実行することができ、これによって、そのオペレータを他の１９のオペレータから独立してデバッグすることができる。いったんデバッギング・セッションが完了すると、デバッガは非融合オペレータを再融合して、２０の融合オペレータを含む処理要素を、デバッグ・セッション前に存在した同一の実行状態に復元させることができる。
【００１３】
別の実施形態においては、デバッガは、多数の独立した処理要素を１つのデバッグ・セッションの一部として共に融合することができる。これは、１つのオペレータをデバッグしている場合にオペレータ・グラフの一部の動作を止めるのに有用である場合がある。例えば、こうすることによって処理要素間の依存性を満足させることができる。同様に、所与の処理要素がデバッグされている間に適宜、デバッガはデータがストリーム内に流れるのを防ぐことができる。これは、デバッグされているオペレータ・グラフ内の処理要素の上流（または下流）のいずれかのポイントで行うことができる。更に具体的には、デバッガは、データがオペレータ・グラフ内のソース・オペレータ（すなわちオペレータ・グラフを流れるデータのソース・ポイントである処理要素）に流れること、または特定の部分（または特定の処理要素）に流れるのを防ぐことができる。逆に、デバッガは、入来データのいくつかのタプルを、ブレークポイントから除外されているものとして認識するように構成することができる。
【００１４】
データの流れを防ぐことの代替案として、デバッグ対象の処理要素においてデータを「負荷制限（load shed）することも可能である（またはいくつかの条件のもとで流れることを選択的に可能とする）。こうすることによって、特に、データが迅速に処理されないと価値を持たないことがある場合に、デバッギング・セッションの完了時にシステムがデータで過負荷になることを回避するのに役立てることができる。更に別の実施形態においては、デバッガは、処理要素を複写して、その複製したものでデバッギングを行うように構成することができる。デバッグした処理要素から流れるデータは、リンクされた下流のオペレータに送出せずに、制限する（shed）ことができる。更に、デバッグ対象のオペレータが出力した結果を、実際のオペレータと比較して、デバッギング・プロセスの精度に関するチェックとすることができる。
【００１５】
以下では、本発明の実施形態を参照する。しかしながら、本発明はここに記載する特定の実施形態に限定されないことは理解されよう。以下の特徴および要素の組み合わせは、異なる実施形態に関連する場合もそうでない場合も、本発明を実施し実行するように想定されている。更に、本発明の実施形態は他の可能な解決策または従来技術あるいはその両方よりも優れた利点を達成可能であるが、所与の実施形態によって具体的な利点が達成されるか否かは、本発明を限定するものではない。このため、以下の態様、特徴、実施形態、および利点は単なる例示であり、特許請求の範囲の請求項（複数の請求項）に明示的に言及される場合を除いて、添付の特許請求の範囲の要素または限定とは見なされない。同様に、「本発明」に対する言及は、本明細書に開示する本発明の主題の一般化として解釈されるものではなく、請求項（複数の請求項）に明示的に言及される場合を除いて、添付の特許請求の範囲の要素または限定として見なされるものではない。
【００１６】
当業者には認められようが、本発明の態様は、システム、方法、またはコンピュータ・プログラムとして具現化することができる。従って、本発明の態様は、全体的にハードウェアの実施形態、全体的にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、または、ソフトウェアおよびハードウェアの態様を組み合わせた実施形態という形態を取ることができ、それらは全て本明細書において、「回路」、「モジュール」、または「システム」と一般的に称することができる。更に、本発明の実施形態は、具現化されたコンピュータ使用可能プログラム・コードを有する１つ以上のコンピュータ読み取り可能媒体（複数の媒体）において具現化されるコンピュータ・プログラムの形態を取ることも可能である。
【００１７】
１つ以上のコンピュータ読み取り可能媒体（複数の媒体）のあらゆる組み合わせを利用することができる。コンピュータ読み取り可能媒体は、コンピュータ読み取り可能信号媒体またはコンピュータ読み取り可能記憶媒体とすることができる。コンピュータ読み取り可能記憶媒体は、例えば、限定ではないが、電子、磁気、光、電磁気、赤外線、または半導体のシステム、装置、もしくはデバイス、または前述のもののいずれかの適切な組み合わせとすることができる。コンピュータ読み取り可能記憶媒体の更に具体的な例（非網羅的な列挙）は、以下を含む。すなわち、１本以上のワイヤを有する電気的接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）電気的プログラマブル読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、携帯型コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、光記憶デバイス、磁気記憶デバイス、または前述のもののいずれかの適切な組み合わせである。この文書の文脈において、コンピュータ読み取り可能記憶媒体は、命令実行システム、装置、またはデバイスによってまたはそれと接続して用いるためにプログラムを含有または記憶することができるいずれかのタンジブルな媒体とすることができる。
【００１８】
コンピュータ読み取り可能信号媒体は、例えばベースバンドにおいてまたは搬送波の一部として、具現化されたコンピュータ読み取り可能プログラム・コードを有する伝播データ信号を含むことができる。かかる伝播信号は、限定ではないが、電磁気、光、またはそれらのいずれかの適切な組み合わせを含む多種多様な形態のいずれかを取ることができる。コンピュータ読み取り可能信号媒体は、コンピュータ読み取り可能記憶媒体ではないいずれかのコンピュータ読み取り可能媒体とすることができ、これは、命令実行システム、装置、またはデバイスによってまたはそれと接続して用いるためのプログラムを伝達、伝播、または伝送することができるものである。
【００１９】
コンピュータ読み取り可能媒体上に具現化されたプログラム・コードは、限定ではないが、無線、有線、光ファイバ・ケーブル、ＲＦ等、または前述のもののいずれかの適切な組み合わせを含むいずれかの適切な媒体を用いて送信することができる。
【００２０】
本発明の態様の動作を実行するためのコンピュータ・プログラム・コードは、Java、Smalltalk、Ｃ＋＋等のオブジェクト指向プログラミング言語、および、「Ｃ」プログラミング言語または同様のプログラミング言語等の従来の手順プログラミング言語を含む１つ以上のプログラミング言語のいずれかの組み合わせにおいて記述することができる。プログラム・コードは、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンのソフトウェア・パッケージとして、部分的にユーザのコンピュータ上でおよび部分的に遠隔コンピュータ上で、または全体的に遠隔コンピュータもしくはサーバ上で、実行することができる。後者の状況では、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを介してユーザのコンピュータに接続することができ、または、接続は外部コンピュータに対して行うことができる（例えばインターネット・サービス・プロバイダを用いてインターネットを介して）。
【００２１】
以下に、本発明の実施形態に従った方法、装置（システム）、およびコンピュータ・プログラムのフローチャート図またはブロック図あるいはその両方を参照して、本発明の態様について説明する。フローチャート図またはブロック図あるいはその両方の各ブロックならびにフローチャート図またはブロック図あるいはその両方におけるブロックの組み合わせは、コンピュータ・プログラム命令によって実施可能であることは理解されよう。これらのコンピュータ・プログラム命令は、汎用コンピュータ、特殊目的コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて機械を生成することができ、これによって、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能／行為を実施するための手段を生成するようになっている。
【００２２】
また、これらのコンピュータ・プログラム命令はコンピュータ読み取り可能媒体に記憶することができ、これにより、コンピュータまたは他のプログラマブル・データ処理装置または他のデバイスに特定の方法で機能するように指示することができ、これによって、コンピュータ読み取り可能媒体に記憶された命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能／行為を実施する命令を含む製造品を生成するようになっている。
【００２３】
また、コンピュータ・プログラム命令を、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスにロードして、そのコンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させてコンピュータ実施プロセスを生成することができ、これによって、コンピュータまたは他のプログラマブル装置上で実行する命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能／行為を実施するためのプロセスを提供するようになっている。
【００２４】
本発明の実施形態は、クラウド・コンピューティング・インフラストラクチャを介してエンド・ユーザに提供することができる。一般的にクラウド・コンピューティングとは、スケーラブルなコンピューティング・リソースを、ネットワークを介したサービスとして提供することを指す。更に形式的には、クラウド・コンピューティングは、コンピューティング・リソースとその基礎にある技術的アーキテクチャ（例えばサーバ、記憶装置、ネットワーク）との間のアブストラクションを提供するコンピューティング機能として定義することができ、これによってコンフィギュレーション可能なコンピューティング・リソースの共有プールに対する便利なオンデマンドのネットワーク・アクセスを可能とし、これらのリソースを、管理労力またはサービス・プロバイダの相互作用を最小限に抑えつつ、迅速に供給し解放することができる。従って、クラウド・コンピューティングによってユーザは、「クラウド」における仮想コンピューティング・リソース（例えば記憶装置、データ、アプリケーション、更には完全な仮想化コンピューティング・システム）にアクセスすることができ、その上、これらのコンピューティング・リソースを提供するために用いられる基礎にある物理システム（またはそれらのシステムの位置）について考慮しなくても良い。
【００２５】
典型的に、クラウド・コンピューティング・リソースは従量料金制でユーザに提供され、この場合ユーザは実際に用いたコンピューティング・リソース（例えばユーザが消費した記憶空間量、またはユーザがインスタンス化した仮想化システムの数）のみの料金を課金される。ユーザは、クラウド内に常駐するリソースのいずれにも、いつでも、インターネットを介してどこからでもアクセスすることができる。本発明の文脈において、ユーザは、クラウド内で利用可能なアプリケーションまたは関連データにアクセスすることができる。例えば、ストリーム・データベース・アプリケーションを生成するために用いるノードは、クラウド・サービス・プロバイダがホストとなる仮想機械とすることができる。
【００２６】
図１から図２は、本発明の一実施形態に従ってストリーム・アプリケーションを実行するように構成されたコンピューティング・インフラストラクチャ１００を示す。図示のように、コンピューティング・インフラストラクチャ１００は、管理システム１０５および複数の計算ノード１３０１〜１３０４を含み、計算ノードの各々が通信ネットワーク１２０に接続されている。また、管理システム１０５は、オペレータ・グラフ１３２およびストリーム・マネージャ１３４を含む。以下で更に詳細に説明するが、オペレータ・グラフ１３２は、１つ以上のソース処理要素（ＰＥ）から開始して１つ以上のシンクＰＥまでのストリーム・アプリケーションを表す。データ要素は、ストリーム・アプリケーションのソースＰＥ内に流れて、そのＰＥによって処理される。通常、処理要素は、ストリームからデータ要素のＮタプルを受信すると共に、データ要素のＮタプルをストリーム内に送出する（ストリームが終端するシンクＰＥを除く）。むろん、処理要素が受信したＮタプルは、下流に送信されるのと同一のＮタプルである必要はない。また、処理要素は、Ｎタプル以外のフォーマットでデータを送受信するように構成することができる（例えば処理要素はＸＭＬ文書としてマークされたデータを交換することができる）。更に、各処理要素は、受信したタプルに対していずれかの形態のデータ処理機能を実行するように構成することができる。その処理機能は、例えば、データベース・テーブルへの書き込み、またはデータ結合、分割、読み取り等の他のデータベース動作の実行、ならびに他のデータ分析機能または動作の実行を含む。
【００２７】
ストリーム・マネージャ１３４は、計算ノード１３０１〜１３０４上で動作しているストリーム・アプリケーションを監視すると共に、オペレータ・グラフ１３２の構造を変更するように構成することができる。例えば、ストリーム・マネージャ１３４は、コンピューティング・インフラストラクチャ１００における計算ノード１３０の処理負荷を管理するために、ある計算ノード１３０から他のものに処理要素（ＰＥ）を移動させることができる。更に、ストリーム・マネージャ１３４は、計算ノード１３０１〜１３０４上で動作している処理要素（または処理要素に流れるデータ・タプル）の挿入、除去、融合、非融合、または他の方法の変更を行うことによって、ストリーム・アプリケーションを制御することができる。
【００２８】
図２は、計算ノード１３０１〜１３０４上で動作している処理要素（ＰＥ１〜ＰＥ１０と標示する）を含む例示的なオペレータ・グラフを示す。処理要素は独立して動作中のプロセスとして実行することができる（それ自身のプロセスＩＤ（ＰＩＤ）およびメモリ空間を有する）が、多数の処理要素を融合させて単一のプロセス（ＰＩＤおよびメモリ空間を有する）として動作することも可能である。２つ（またはそれ以上）の処理要素が独立して動作中の場合、ネットワーク・ソケット（例えばＴＣＰ／ＩＰソケット）を用いてプロセス間通信を行うことができる。しかしながら、プロセスを共に融合させた場合は、融合させた処理要素は、処理要素（および各処理要素におけるオペレータ）間でＮタプル（または他のデータ）を受け渡すための更に高速な通信技法を用いることができる。
【００２９】
図示のように、オペレータ・グラフは、ソースＰＥ１３５（ＰＥ１と標示する）で開始し、シンクＰＥ１４０１〜１４０２（ＰＥ６およびＰＥ１０と標示する）で終了する。計算ノード１３０１は、ＰＥ２およびＰＥ３と共にソースＰＥ１を含む。ソースＰＥ１が送出するタプルはＰＥ２およびＰＥ３によって受信される。例えばＰＥ１は、１タプルで受信されるデータ要素を分割し、いくつかのデータ要素をＰＥ２に、他のものをＰＥ３に渡すことができる。ＰＥ２に流れるデータは、計算ノード１３０２上のＰＥ４に送出されるタプルとなる。そして、ＰＥ４が送出するデータ・タプルはシンクＰＥ６  １４０１に流れる。同様に、ＰＥ３からＰＥ５に流れるデータ・タプルもシンクＰＥ６  １４０１に達する。このため、ＰＥ６は、この例のオペレータ・グラフのシンクであるのに加えて、結合動作を実行するように構成し、ＰＥ４およびＰＥ５から受信したタプルを組み合わせることができる。また、この例のオペレータ・グラフは、Ｐ３から計算ノード１３０３上のＰＥ７に流れるデータ・タプルも示すが、これはＰＥ８に流れてＰＥ７にループバックするデータ・タプルを示す。ＰＥ８から送出されたデータ・タプルは計算ノード１３０４上のＰＥ９に流れ、これが送出するタプルはシンクＰＥ１０  １４０２によって処理される。
【００３０】
図３は、本発明の一実施形態に従った、図１から図２の計算ノード１３０の更に詳細な図である。図示のように、計算ノード１３０は、中央演算処理装置（ＣＰＵ）２０５、ネットワーク・インタフェース２１５、相互接続２２０、メモリ２２５、および記憶装置２３０を含むが、これらは限定ではない。また、計算ノード１３０は、Ｉ／Ｏデバイス２１２（例えばキーボード、ディスプレイ、およびマウス・デバイス）を計算ノード１３０に接続するために用いられるＩ／Ｏデバイス・インタフェース２１０も含むことができる。
【００３１】
ＣＰＵ２０５は、メモリ２２５に記憶されたプログラミング命令を検索して実行する。同様に、ＣＰＵ２０５は、メモリ２２５に常駐するアプリケーション・データを記憶し検索する。相互接続２２０は、ＣＰＵ２０５、Ｉ／Ｏデバイス・インタフェース２１０、記憶装置２３０、ネットワーク・インタフェース２１５、およびメモリ２２５間でプログラミング命令およびアプリケーション・データを送信するために用いられる。ＣＰＵ２０５は、単一のＣＰＵ、多数のＣＰＵ、多数の処理コアを有する単一のＣＰＵ等を代表するものとして含まれる。また、メモリ２２５は、一般にランダム・アクセス・メモリを代表するものとして含まれる。ハード・ディスク・ドライブ、固体デバイス（ＳＳＤ）、またはフラッシュ・メモリ記憶ドライブ等の記憶装置２３０は、不揮発性データを記憶することができる。
【００３２】
この例では、メモリ２２５は、融合処理要素（ＰＥ）２３５、非融合ＰＥ２４５、デバッガ・アプリケーション２５０、およびストリーム接続データ２５５を含む。融合ＰＥ２３５はオペレータ２４０の集合を含む。上述のように、各オペレータ２４０は、処理要素（例えばＰＥ２３５）内に流れるデータを処理し、データをそのＰＥの他のオペレータ２４０およびストリーム・アプリケーションの他のＰＥに送出するように構成された小量の実行可能コードを提供することができる。かかるＰＥは、同一の計算ノード１３０上（例えば非融合ＰＥ２４５）またはデータ通信ネットワーク１２０を介してアクセスされる他の計算ノード上にある場合がある。ストリーム接続データ２５５は、計算ノード１３０上のＰＥ間の接続（例えば融合ＰＥ２４０と非融合ＰＥ２４５との間のＴＥＰ／ＩＰソケット接続）を表すと共に、ＴＣＰ／ＩＰソケット（または他のプロセス間データ通信機構）を介した他の計算ノード１３０に対する、ストリーム・アプリケーション内の上流または下流あるいはその両方のＰＥとの接続を表す。
【００３３】
バッファ・ストリーム・データ２６０は、上流処理要素から（またはストリーム・アプリケーションのためのデータ・ソースから）計算ノード１３０に内に流れるデータのための記憶空間を表す。例えば、バッファ・ストリーム・データは、ＰＥ２４０または２４５の１つによって処理されるのを待っているデータ・タプルを含むことができる。また、バッファ・ストリーム・データ２６０は、ＰＥ２４０または２４５が実行したデータ処理の結果を記憶することができる。この結果は後に下流の処理要素に送信される（または負荷制限される）。
【００３４】
デバッガ２５０は、計算ノード１３０上で動作中の処理要素２４５を開発者がデバッグすることを可能とするように構成されたソフトウェア・アプリケーションを提供する。例えばデバッガ２５０を用いて、ブレークポイントの設定、命令における関数呼び出しまでの（または関数呼び出しが終わるまでの）命令ステップの実行、変数の検査等を行うことができ、更に、処理要素２４５をデバッグするために用いられる多種多様な他の機能または特徴あるいはその両方を提供することができる。本発明の文脈において、デバッガ２５０は、ＰＥを選択的に融合または非融合として（または他の方法でストリーム・アプリケーションの状態を変更して）、デバッギング・プロセスを容易にするように構成することができる。一実施形態では、例えばデバッガは、開発者によって指定されたようにＰＥを融合または非融合とすることができる。あるいは、デバッガ２５０は、所与の処理要素（または複数の要素）をデバッグするためのストリーム状態を提案するように構成することができる。これを行うためデバッガ２５０は、ストリーム・アプリケーションに関連付けられたオペレータ・グラフをどのように変更するかを決定するために、管理システム１０５上のストリーム・デバッガとの相互作用によって、オペレータ・グラフを分析すると共に、計算ノード１３０の集合全体にわたる処理要素の分布を分析することができる。デバッガ２５０は、処理要素の融合および非融合に加えて、例えばデバッグしているＰＥを通るデータ・フローを止め（または制限し）、デバッギング・プロセスから除外するデータを指定し、ＰＥを複写してＰＥのデバッグ・コピーを生成し、または他のアクションを実行して処理要素（または複数の要素）をデバッグ可能とすることによって、ストリーム・アプリケーションの動作状態を変更することができる。
【００３５】
図４は、本発明の一実施形態に従った図１のサーバ・コンピューティング・システム１０５の更に詳細な図である。図示のように、サーバ・コンピューティング・システム１０５は、中央演算処理装置（ＣＰＵ）３０５、ネットワーク・インタフェース３１５、相互接続３２０、メモリ３２５、および記憶装置３３０を含むが、これらは限定ではない。また、サーバ・コンピューティング・システム１０５は、Ｉ／Ｏデバイス３１２（例えばキーボード、ディスプレイ、およびマウス・デバイス）をサーバ・コンピューティング・システム１０５に接続するＩ／Ｏデバイス・インタフェース３１０を含むことができる。
【００３６】
図３のＣＰＵ２０５と同様に、ＣＰＵ３０５は、メモリ３２５および記憶装置３３０に記憶されたプログラミング命令を検索して実行するように構成されている。同様に、ＣＰＵ３０５は、メモリ３２５および記憶装置３３０に常駐しているアプリケーション・データを記憶し検索するように構成されている。相互接続３２０は、プログラミング命令およびアプリケーション・データ等のデータを、ＣＰＵ３０５、Ｉ／Ｏデバイス・インタフェース３１０、記憶ユニット３３０、ネットワーク・インタフェース３１５、およびメモリ３２５間で移動させるように構成されている。ＣＰＵ２０５と同様に、ＣＰＵ３０５は、単一のＣＰＵ、多数のＣＰＵ、多数の処理コアを有する単一のＣＰＵ等を代表するものとして含まれる。メモリ３２５は、一般にランダム・アクセス・メモリを代表するものとして含まれる。ネットワーク・インタフェース３１５は、通信ネットワーク１２０を介してデータを送信するように構成されている。記憶装置３３０は、単一ユニットとして図示しているが、固定ディスク・ドライブ、着脱可能メモリ・カード、光記憶装置、ＳＳＤ、またはフラッシュ・メモリ・デバイス、ネットワーク接続ストレージ（ＮＡＳ）、またはストレージ・エリア・ネットワーク（ＳＡＮ）・デバイスに対する接続等、固定または着脱可能あるいはその両方の記憶デバイスの組み合わせとすることができる。
【００３７】
図示のように、メモリ３２５は、ストリーム・デバッガ３３５、ストリーム・コンパイラ３３０、およびストリーム・マネージャ１３２を記憶している。また、記憶装置３３０はオペレータ・グラフ１３４を含む。上述のように、ストリーム・デバッガを用いて、計算ノード１３０の１つ（またはそれ以上）の処理要素（ＰＥ）のデバッギングを管理することができる。例えばストリーム・デバッガ３３５は、ある処理ノードを他の複数のＰＥと融合させる（または非融合とする）ことを決定することができる。かかる場合、ストリーム・デバッガは、１つの計算ノード上で大きなＰＥ群が融合されているが、それらの処理要素のうち少数にしかデバッグ・ブレークポイントが含まれていないと（オペレータ・グラフから）判定することができる。かかる場合、ストリーム・デバッガ３３５は、この大きい群からブレークポイントを有するＰＥを非融合とさせると決定することができる。一実施形態では、ストリーム・デバッガ３３５は、ストリーム・コンパイラ３４０を呼び出して必要に応じてＰＥ／オペレータ・ソース・コードの要素を再コンパイルすることによって、ＰＥを非融合とする。本例では、ブレークポイントを有するＰＥを再コンパイルして第１のＰＥとすることができ、（融合ＰＥからの）残りのＰＥを再コンパイルして第２のＰＥとすることができる。いったん準備ができたら、ストリーム・マネージャ１３２は、動作中のストリームから融合ＰＥを除去し、これをストリーム・コンパイラ３４０が発生した第１および第２のＰＥで置換することができる。その後、第１のＰＥにおけるブレークポイントに達したら、第１のＰＥは実行を停止するが、第２のＰＥが実行する処理を混乱させることはない。
【００３８】
図５は、本発明の一実施形態に従ったストリーム・アプリケーションにおける計算ノードの一例を示す。図示のように、計算ノード１３０２上の融合処理要素４０５は３つの処理要素（ＰＥ１〜ＰＥ３と標示する）を含み、これはＮタプル・データ・ストリームを受信すると共に、計算ノード１３０３上の処理要素４１０（ＰＥ４と標示する）にＮタプルを送出する。この例では、融合処理要素４０５はソースＰＥ１３５（ＰＥ１と標示する）を含み、これは＜名前、部署、給料、性別＞を含むタプルを受信する。ＰＥ１は、このＮタプルを取得し、ＰＥ１が受信したタプルにおける性別値に基づいて、ＰＥ２に送信される１組のタプルおよびＰＥ３に送信される別の組のタプルを発生する。次いで、ＰＥ２およびＰＥ３は、ＰＥ１から受信した各タプルについてデータベース書き込みを実行し、ＰＥ４に送信される＜名前、部署、給料＞のタプルを発生する。受信したら、ＰＥ４は、サードパーティのウェブ・サービスにアクセスし、ストリーム・アプリケーションにおいて更に下流に送信されるタプルを発生する。
【００３９】
図６は、本発明の一実施形態に従った、ストリーム・データベース・アプリケーションにおいて処理要素をデバッグするための方法５００を示す。図示のように、この方法５００はステップ５０５で開始し、ここでデバッガ・アプリケーションは、ストリーム・アプリケーションのオペレータ・グラフに含まれる処理要素についてのブレークポイントの指示を受信する。ステップ５１０において、デバッガ・アプリケーションは、他の処理要素に対するオペレータ・グラフ内のこの処理要素の位置を識別することができる。この位置に基づいて、デバッガ・アプリケーションは、オペレータ・グラフにおける処理要素を融合（または非融合）とすることを決定することができる（ステップ５１５）。更に、デバッギング・アプリケーションは、例えばブレークポイントを有する処理要素を複写することによって、またはあるデータ・タプル（またはデータ・フロー）をデバッグから除外することによって、ストリーム・アプリケーションの動作に対して他の変更を加えることができる。同様に、デバッギング・アプリケーションは、ある処理要素についてデータ・タプルの送信（または受信）を阻止すべきこと、またはデバッギング・セッション中に発生したデータ処理の結果を負荷制限すべきことを指定することができる。
【００４０】
ステップ５２０において、融合または非融合としたＰＥを再開してアプリケーション・ストリームに展開することができる（ブレークポイントを有するＰＥを含む）。ステップ５２５において、いったんＰＥがアプリケーション・ストリームで動作（およびストリーム・アプリケーションに対してデバッガが行うと選択した他のいずれかの変更）すると、デバッグ対象のＰＥの動作を評価することができる。例えば、ブレークポイントがトリガされるとデバッグ対象のＰＥは実行を止めることができ、次いで開発者は、関数呼び出しまで（または関数呼び出しが終わるまで）１ステップずつ進むことによって段階的にＰＥを実行し、変数を検査し、他のいずれかのデバッギング機能を実行して処理要素を評価することができる。同時に、データ・タプルは、デバッグされているＰＥに流れ続け、バッファに記憶することができる。すなわち、いったんブレークポイントがトリガされると、デバッグされているＰＥに流れているタプルは、ＰＥが実行を再開するまでバッファすることができる。
【００４１】
ステップ５３０において、いったんデバッギング・セッションが完了すると、デバッギング・アプリケーションは、ストリーム・アプリケーションの状態を復元し、デバッギング・セッションをサポートするために行った変更を取り消すことができる。従って、デバッギング・セッションの一部として融合された（または非融合された）ＰＥは、非融合（または再融合）することができ、タプル・フローを復元することができ、またはバッファしたデータ結果を負荷制限することができ、複写した処理要素を除去することができる等となる。
【００４２】
図７から図９は、本発明の実施形態に従った、最初に図５に示した計算ノードおよびストリーム・アプリケーションの一例であるが、ストリーム・アプリケーションをデバッグするための状況を例示するように変更したものである。まず、図７は、図５の融合処理要素４０５の一例であるが、処理要素の１つのデバッグを可能とするために部分的に非融合とした後のものである。開発者がＰＥ２において１つ以上のブレークポイントを追加すると仮定する。かかる場合、デバッガ・アプリケーションは、ＰＥ１およびＰＥ３によって実行される処理から独立してＰＥ２のデバッグが可能であると判定し、融合処理要素４０５からＰＥ２を非融合とすることができる。従って、図示のように、融合ＰＥ４０５を変更してＰＥ２を除去し、結果として部分的に非融合のＰＥ４０５’を生じている。更に、ＰＥ２はここで非融合ＰＥ６０５として実行している。ＰＥ２を独立プロセスとして動作させることによって、アプリケーション・ストリームを減速させることなくＰＥ２をデバッグすることができる。データ・タプルは部分的に非融合のＰＥ４０５’を流れるからである。同時に、オペレータ・グラフの基本的な構造は不変のままである。すなわち、依然としてタプルは最初にＰＥ１に流れ、これがＰＥ２およびＰＥ３に送信されるタプルを発生する。
【００４３】
同様に、図８は図５の処理要素４１０の一例を示すが、追加のＰＥと融合した後のものである。この例では、ユーザがＰＥ４にブレークポイントを配置すると仮定する。かかる場合、デバッガ・アプリケーションは、ＰＥ４が実行を停止した場合に下流の処理要素（ＰＥ５）も実行を停止するような依存性をＰＥ５が有すると判定することができる。例えばＰＥ５は、規則的な指定された間隔でＰＥ４からデータを受信するように構成することができる。この依存性が与えられれば、ユーザがＰＥ４にブレークポイントを挿入した場合に、デバッガ・アプリケーションはＰＥ４およびＰＥ５を融合させて融合処理要素４１０’とすることができる。そうすることによって、ＰＥ４はＰＥ５の動作を混乱させることなくデバッグすることができる。ＰＥ４においてブレークポイントに達した場合、ＰＥ４およびＰＥ５の双方の動作が実行を停止するからである。
【００４４】
図９は、図５の処理要素４１０を変更する別の例を示す。この例でも、ユーザはＰＥ４１０（ＰＥ４と標示する）にブレークポイントを配置する。しかしながら、この場合、ＰＥ４１０をデバッグしてもストリームからＰＥ８０５（ＰＥ５と標示する）に流れるデータを混乱させないとデバッガ・アプリケーションが判定することを仮定する。かかる場合、デバッガ・アプリケーションはデバッグ・クローン４１０’を生成し、これをアプリケーション・ストリームに挿入することができる。この結果を図９に示す。ここで、ＰＥ４０５から流れるデータは複写され、ＰＥ４１０およびデバッグ・クローン４１０’の双方に送信される。このため、ＰＥ４１０はストリームの処理を続け、ＰＥ８０５によって受信されるタプルをストリーム内に送出する。同時に、ＰＥ４０５から流れるデータはデバッグ・クローン４１０にも送信され、タプルをデバッグ・ログに出力する。こうすることによって、デバッガは、アプリケーション・ストリームを混乱させることなくＰＥ４１０’のためのデバッギング・セッションを実行することができる。
【００４５】
好都合なことに、上述した本発明の実施形態は、ストリーム・ベースのアプリケーションにおいて処理要素（または複数の要素）をデバッグするための技法を提供する。特に、本発明の実施形態は、１群の計算ノード上で動作している処理要素を選択的に融合する（または非融合とする）ことによって、動作中の環境全体に対する処理要素（または複数の要素）のデバッグの影響を軽減するように処理要素をデバッグするための技法を提供する。処理要素を融合および非融合とすることに加えて、デバッギング・アプリケーションおよびストリーム・マネージャは、様々な方法でアプリケーション・ストリーム内のデータ・フローを変更して、デバッギング・セッションの結果として生じる何らかの混乱を最小限に抑えることができる。
【００４６】
図面におけるフローチャートおよびブロック図は、本発明の様々な実施形態に従ったシステム、方法、およびコンピュータ・プログラムの可能な実施のアーキテクチャ、機能性、および動作を示す。この点で、フローチャートまたはブロック図における各ブロックは、規定された論理機能（複数の機能）を実施するための１つ以上の実行可能命令を含むコードのモジュール、セグメント、または一部を表すことができる。また、いくつかの代替的な実施において、ブロックに明記した機能は、図面に明記した順序どおりでなく発生する場合があることに留意すべきである。例えば、関与する機能性に応じて、連続して示した２つのブロックは実際には実質的に同時に実行されることがあり、またはブロックは時に逆の順序で実行される場合がある。また、ブロック図またはフローチャートあるいはその両方の各ブロック、およびブロック図またはフローチャートあるいはその両方におけるブロックの組み合わせは、特殊目的ハードウェアおよびコンピュータ命令の規定された機能もしくは行為または組み合わせを実行する特殊目的ハードウェア・ベースのシステムによって実施可能であることに留意すべきである。
【００４７】
前述の説明は本発明の実施形態を対象とするが、その基本的な範囲から逸脱することなく本発明の他の実施形態および更に別の実施形態を考案することができ、その範囲は以下の特許請求の範囲によって決定される。
【符号の説明】
【００４８】
１０５  管理システム
１２０  ネットワーク
１３０１〜１３０４  計算ノード
１３２  オペレータ・グラフ
１３４  ストリーム・マネージャ
２２５  メモリ
２３０  記憶装置
２３５  融合処理要素
２４５  非融合処理要素
２５０  デバッガ
３２５  メモリ
３３０  記憶装置
３３５  ストリーム・デバッガ
３４０  ストリーム・コンパイラ
１３２  ストリーム・マネージャ
１３４  オペレータ・グラフ
３４５  ＰＥ／オペレータ・ソース・コード
【図１】
0005656781.tif 000002
【図２】
0005656781.tif 000003
【図３】
0005656781.tif 000004
【図４】
0005656781.tif 000005
【図５】
0005656781.tif 000006
【図６】
0005656781.tif 000007
【図７】
0005656781.tif 000008
【図８】
0005656781.tif 000009
【図９】
0005656781.tif 000010