(57)【要約】【課題】ストリーム処理基盤において、効率的なパイプラインのデータフローを自動構築する。【解決手段】情報処理装置１は、サービス設計者がストリーム処理基盤２を意識せずに生成した有向グラフを受け付けて、当該有向グラフを構成するそれぞれのエッジの所定の重みを用いて、有向グラフの各ノードの重み付き次数を計算する。情報処理装置１は、計算した各ノードの重み付き次数に基づき、ノードが示す処理をパイプラインのステージに配備する。【選択図】図２Ｂ
2020091680.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが
ストリーム処理基盤における処理をノードとし、ノード間のデータの入出力関係をエッジとした有向グラフを生成し、
該生成した前記有向グラフを構成するそれぞれのエッジの所定の重みを用いて、前記有向グラフの各ノードの次数を計算し、
該計算した各ノードの次数に基づき、ノードが示す処理をパイプラインのステージに配備する
処理を実行するストリーム処理パイプラインの自動生成方法。
【請求項２】
前記ストリーム処理基盤に対して、処理間のデータの通信量を観測し、
該観測した処理間のデータの通信量から、前記有向グラフを構成するそれぞれのエッジの重みを計算し、
該次数を計算する処理は、前記有向グラフの各ノードについて、ノードに入力するエッジの重みと、当該ノードから出力するエッジの重みとを用いて、重み付きの次数を計算し、
該配備する処理は、各ノードの重み付きの次数が小さい程、前段のステージとなるように、ノードが示す処理をパイプラインのステージに配備する
処理を実行することを特徴とする請求項１に記載のストリーム処理パイプラインの自動生成方法。
【請求項３】
該次数を計算する処理は、前記ノードに入力するエッジの重みから当該ノードから出力するエッジの重みを差し引いた値を重み付きの次数として計算する
処理を実行することを特徴とする請求項２に記載のストリーム処理パイプラインの自動生成方法。
【請求項４】
該次数を計算する処理は、前記有向グラフのいずれかのエッジの重みに変化が生じたタイミングで、各ノードについて、前記重み付きの次数を再計算し、
該配備する処理は、特定のタイミングで、前記重み付きの次数を用いて、前記パイプラインを再構築する
処理を実行することを特徴とする請求項２または請求項３に記載のストリーム処理パイプラインの自動生成方法。
【請求項５】
コンピュータが
ストリーム処理基盤における処理をノードとし、ノード間のデータの入出力関係をエッジとした有向グラフを生成し、
該生成した前記有向グラフを構成するそれぞれのエッジの所定の重みを用いて、前記有向グラフの各ノードの次数を計算し、
該計算した各ノードの次数に基づき、ノードが示す処理をパイプラインのステージに配備する
処理をコンピュータに実行させるデータストリーム処理プログラム。
【請求項６】
情報処理装置と、
ストリーム処理基盤と、を有し、
前記情報処理装置は、
ストリーム処理基盤における処理をノードとし、ノード間のデータの入出力関係をエッジとした有向グラフを構成するそれぞれのエッジの所定の重みを用いて、前記有向グラフの各ノードの次数を計算する計算部と、
前記計算部によって計算された各ノードの次数に基づき、ノードが示す処理をパイプラインのステージに配備する配備部と、
を有することを特徴とするデータストリーム処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストリーム処理パイプラインの自動生成方法などに関する。
【背景技術】
【０００２】
ストリーム処理パイプラインを自動生成する技術が開示されている（例えば、特許文献１参照）。かかるストリーム処理パイプラインでは、ストリーム処理基盤は、データをパイプラインの上流ステージから下流ステージへ流す。ストリーム処理基盤には、例えば、Ａｐａｃｈｅ  Ｆｌｉｎｋ（登録商標）が挙げられる。
【０００３】
図１１は、ストリーム処理基盤におけるパイプラインの参考例を示す図である。図１１に示すように、ストリーム処理基盤は、データをパイプラインの上流ステージの処理から下流ステージの処理へ流す。サービスの設計者が、各処理の前後関係を考慮し、処理が所属するステージを決定する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１７−１４２７９８号公報
【特許文献２】特開２００４−１７８２７０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、ストリーム処理基盤は、データをパイプラインの上流ステージから下流ステージへ流すが、データをパイプラインの下流ステージから上流ステージへ流すことが難しいことが知られている。そこで、ストリーム処理基盤では、データを最後段の下流ステージから初段の上流ステージへ再入力することが想定される。
【０００６】
しかしながら、単にデータを最後段の下流ステージから初段の上流ステージへ再入力すると、再入力するデータの量が多くなる場合があり、性能低下の原因となるという問題がある。また、どの処理をどのステージに配置すれば性能低下とならず、効率的であるのかもわからない。
【０００７】
本発明は、１つの側面では、ストリーム処理基盤において、効率的なパイプラインのデータフローを自動構築することを目的とする。
【課題を解決するための手段】
【０００８】
１つの態様では、ストリーム処理パイプラインの自動生成方法は、ストリーム処理基盤における処理をノードとし、ノード間のデータの入出力関係をエッジとした有向グラフを生成し、該生成した前記有向グラフを構成するそれぞれのエッジの所定の重みを用いて、前記有向グラフの各ノードの次数を計算し、該計算した各ノードの次数に基づき、ノードが示す処理をパイプラインのステージに配備する、処理をコンピュータが実行する。
【発明の効果】
【０００９】
１実施態様によれば、ストリーム処理基盤において、効率的なパイプラインのデータフローを自動構築できる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例に係るデータストリーム処理システムの構成を示す機能ブロック図である。
【図２Ａ】図２Ａは、実施例に係るストリーム処理フローの構築の概要を示す図（１）である。
【図２Ｂ】図２Ｂは、実施例に係るストリーム処理フローの構築の概要を示す図（２）である。
【図３】図３は、実施例に係るサービス構成情報の一例を示す図である。
【図４】図４は、実施例に係る次数付き有向グラフの一例を示す図である。
【図５】図５は、実施例に係るエッジ重み情報の一例を示す図である。
【図６】図６は、実施例に係る重み次数付き有向グラフの一例を示す図である。
【図７】図７は、実施例に係る配備部の一例を示す図である。
【図８】図８は、実施例に係るグラフ管理処理のフローチャートの一例を示す図である。
【図９】図９は、実施例に係る観測処理のフローチャートの一例を示す図である。
【図１０】図１０は、データストリーム処理プログラムを実行するコンピュータの一例を示す図である。
【図１１】図１１は、ストリーム処理基盤におけるパイプラインの参考例を示す図である。
【図１２】図１２は、ストリーム処理基盤におけるデータ送受信の参考例を示す図（１）である。
【図１３】図１３は、ストリーム処理基盤におけるデータ送受信の参考例を示す図（２）である。
【発明を実施するための形態】
【００１１】
以下に、本願の開示するストリーム処理パイプラインの自動生成方法、データストリーム処理プログラムおよびデータストリーム処理システムの実施例を図面に基づいて詳細に説明する。なお、本発明は、実施例により限定されるものではない。
【実施例】
【００１２】
まず、ストリーム処理基盤におけるデータ送受信の参考例を、図１２および図１３を参照して説明する。図１２および図１３は、ストリーム処理基盤におけるデータ送受信の参考例を示す図である。
【００１３】
図１２上図には、エンティティ（Ｅｎｔｉｔｙ）間のデータ送受信関係が示されている。ここでいうエンティティとは、例えば「処理名」であり、一例として、車処理やサービス処理のことをいう。ここでは、複数の車処理は、緯度経度、速度等の走行データを受信し、経度緯度をサービス処理に送信する。サービス処理は、緯度経度を用いて位置に応じたお勧め情報を車処理に通知する。
【００１４】
図１２下図には、図１２上図で示したエンティティ間のデータ送受信関係における各処理をストリーム処理基盤で実現したものである。ストリーム処理基盤では、上流のステージ１に車処理を配備し、下流のステージ２にサービス処理を配備する。そして、ストリーム処理基盤に入力された走行データをステージ１の車処理が受信し、緯度経度をステージ２のサービス処理に送信する。ステージ２のサービス処理は、緯度経度を用いて位置に応じたお勧め情報を上流のステージの車処理に通知する。ストリーム処理基盤では、データをパイプラインの下流のステージから上流のステージへ流すことができない。これは、例えば、仮にデータを下流のステージから上流のステージへ流すと、バリアマーカの挙動により性能に影響が生じてしまうからである。そこで、ストリーム処理基盤では、ストリーム処理基盤から出力されたデータをストリーム処理基盤の初段のステージへ再入力する。
【００１５】
次に、図１３上図には、図１２とは別のエンティティ（Ｅｎｔｉｔｙ）間のデータ送受信関係が示されている。ここでいうエンティティは、対象物が実行する処理であり、例えば、車が実行する車処理、人が実行する人処理、スマホが実行するスマホ処理やサービス処理を示す。ここでは、各種処理を、単に、車、人、スマホ、サービスと表すものとする。矢印は、データの流れる方向であるとする。図１３上図では、車、人、スマホ、サービスの各処理の接続関係を有向グラフで表わしている。
【００１６】
図１３下図には、図１４上図で示した有向グラフにおける各処理をストリーム処理基盤で実現したものである。ここでは、ストリーム処理基盤では、単にデータを直接受信する処理を初段のステージ１に配備し、サービス処理を後段のステージ２に配備する。ストリーム処理基盤では、サービス処理から出力されたデータをストリーム処理基盤の初段のステージへ再入力する。すると、初段のステージへ再入力するデータの量が多くなり、性能の低下の原因となる。ここでは、６本の通信経路＜１＞〜＜６＞のうち、４本の通信経路＜３＞，＜４＞〜＜６＞がストリーム処理基盤から出力され、ストリーム処理基盤の初段のステージへ再入力されることとなる。すると、再入力されるデータの量が多くなり、性能低下の原因となる。ストリーム処理基盤の外側を経由した通信は、第１に、ネットワークの負荷の増大となる。また、第２に、ストリーム処理基盤に再入力される際に内部のデータに変換するパース処理の負荷の増大となる。また、第３に、データがストリーム処理基盤の外側に出ているときにバックアップ信号が来ると、外側のデータは管轄外となり耐障害能力の低下となる。また、第４に、ストリーム処理基盤の外側では、分散処理がされないので、分散効率の低下となる。すなわち、データがストリーム処理基盤から出力されると、性能低下の原因となる。
【００１７】
性能低下の原因とならないように、サービス設計者が、エンティティ間のデータ送受信関係を定義すれば良いが、エンティティ間のデータ送受信関係を、ステージを意識しないで効率的に定義するのは難しい。
【００１８】
そこで、以降では、ストリーム処理基盤において、効率的なパイプラインのデータフローを自動構築するデータストリーム処理システムについて説明する。
【００１９】
［データストリーム処理システムの構成］
図１は、実施例に係るデータストリーム処理システムの構成を示す機能ブロック図である。図１に示すように、データストリーム処理システム９は、情報処理装置１およびストリーム処理基盤２を有する。
【００２０】
データストリーム処理システム９では、情報処理装置１が、サービス設計者によって定義された処理の接続関係を有向グラフで表し、各処理が示す各ノードの次数を計算し、次数の順にノードが示す処理を並び替えてパイプラインのステージに配備する。次数とは、ノードが関与しているデータの送受信関係に関する数のことをいう。なお、次数の具体例は、後述する。
【００２１】
ストリーム処理基盤２は、複数のステージで形成されるパイプラインで実行される分散ストリーム処理のプラットフォームを示す。ストリーム処理基盤２には、例えば、Ａｐａｃｈｅ  Ｆｌｉｎｋが挙げられる。
【００２２】
ここで、実施例に係る情報処理装置１が実行するストリーム処理フロー（パイプラインフロー）の構築の概要を、図２Ａおよび図２Ｂを参照して説明する。図２Ａおよび図２Ｂは、実施例に係るストリーム処理フローの構築の概要を示す図である。
【００２３】
図２Ａ上図に示すように、情報処理装置１は、サービス設計者によって定義される処理の接続関係を有向グラフで表現する。ここでは、一例として、車、人、スマホ、サービスの各処理の接続関係を有向グラフで表わしている。そして、情報処理装置１は、各ノードの次数を計算する。ノードの次数とは、ノードが関与しているデータの送受信関係に関する数のことをいう。例えば、ノードの次数は、ノードに対して、入力する向きのエッジの数（流入数）から出力する向きのエッジの数（流出数）を差し引くことによって計算される。
【００２４】
図２Ａ下図に示すように、情報処理装置１は、計算した各ノードの次数の小さい順から、ノードが示す処理をストリーム処理基盤２のパイプラインのステージに配備する。言い換えれば、情報処理装置１は、データの流入数が小さい程、データを流入するノードが示す処理（タスク）を、前段のステージに配備する。これは、初段のステージへ再入力される通信経路の数が減るからであり、効率的なデータフローを構築できるからである。
【００２５】
ここでは、最も次数が小さいノードが示すサービスの処理がステージ１に配備される。次に次数が小さいノードが示す人の処理および車の処理がステージ２に配備される。そして、最も次数が大きいノードが示すスマホの処理がステージ３に配備される。ここでは、６本の通信経路＜１＞〜＜６＞のうち、２本の通信経路＜１＞，＜２＞がストリーム処理基盤から出力され、ストリーム処理基盤の初段のステージへ再入力されることとなる。
【００２６】
同じ有向グラフに対して、当該有向グラフをそのままストリーム処理基盤で実現した場合には、ストリーム処理基盤２に再入力される通信経路の数は、「４」である（図１３参照）。これに対して、次数に基づいてストリーム処理基盤に配備する場合には、ストリーム処理基盤２に再入力される通信経路の数は「２」である。これにより、情報処理装置１は、ストリーム処理基盤２の初段のステージへ再入力される通信経路の数を減らすことにより、ストリーム処理基盤２の性能低下を防止できる。すなわち、情報処理装置１は、ストリーム処理基盤２において、効率的なパイプラインのデータフローを自動構築することができる。
【００２７】
ここで、図２Ａでは、情報処理装置１は、エッジの入出力の向きに基づいた流入数から流出数を差し引いた数を次数として、各ノードの次数を計算する場合を説明した。図２Ｂでは、情報処理装置１は、さらに、ノードごとに、実際の通信量を重みとして、次数を計算する場合を説明する。
【００２８】
図２Ｂ上図に示すように、情報処理装置１は、サービス設計者によって定義される処理の接続関係を有向グラフで表現する。ここでは、一例として、車両、人、スマホ、バス、タクシー、カメラの各処理（タスク）の接続関係を有向グラフで表わしている。
【００２９】
図２Ｂ中図に示すように、情報処理装置１は、タスク間のデータの通信量を観測する。情報処理装置１は、タスク間のデータの通信量に応じて有向グラフを構成するそれぞれのエッジの重みを計算する。そして、情報処理装置１は、エッジの重みを考慮して、各ノードの次数を計算する。エッジの重みを考慮した次数のことを「重み付き次数」というものとする。ノードの重み付き次数は、ノードに対して、入力する向きのエッジの重みから出力する向きのエッジの重みを差し引くことによって計算される。
【００３０】
図２Ｂ下図に示すように、情報処理装置１は、計算した各ノードの重み付き次数の小さい順から、ノードが示す処理をストリーム処理基盤２のパイプラインのステージに配備する。言い換えれば、情報処理装置１は、流入するデータの通信量が小さい程、データが流入するノードが示す処理（タスク）を、前段のステージに配備する。これは、初段のステージへ再入力される通信経路の通信量が減ることで、効率的なデータフローを構築できるからである。
【００３１】
これにより、情報処理装置１は、ストリーム処理基盤２の初段のステージへ再入力される通信経路の通信量を減らすことにより、ストリーム処理基盤２の性能低下を防止できる。すなわち、情報処理装置１は、ストリーム処理基盤２において、効率的なパイプラインのデータフローを自動構築することができる。
【００３２】
図１に戻って、情報処理装置１は、グラフ管理部１１，観測部１２および配備部１３を有する。これらの機能部は、図示しない制御部に含まれる。制御部は、ＣＰＵ（Central  Processing  Unit）などの電子回路に対応する。そして、制御部は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。なお、グラフ管理部１１は、計算部の一例である。配備部１３は、配備部の一例である。
【００３３】
また、情報処理装置１は、サービス構成情報２１，次数付き有向グラフ２２，エッジ重み情報２３および重み次数付き有向グラフ２４を有する。これらの機能部は、図示しない記憶部に含まれる。記憶部は、例えば、ＲＡＭ、フラッシュメモリ（Flash  Memory）などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。
【００３４】
サービス構成情報２１は、ストリーム処理基盤２を利用するサービスの構成情報であり、処理の接続関係を示す有向グラフを２次元のテーブルで表わしたものである。なお、有向グラフは、サービス設計者によって生成される。サービス構成情報２１は、有向グラフに基づいて生成される。
【００３５】
ここで、サービス構成情報２１の一例を、図３を参照して説明する。図３は、実施例に係るサービス構成情報の一例を示す図である。図３では、処理として車処理，バス処理，スマートフォン処理およびサービス処理が存在する場合とする。図３左図には、図３右図で示される有向グラフのサービス構成情報が表わされている。データを出力する処理からデータを入力する処理への接続関係の有無が設定される。処理から処理への接続関係が有る場合には、接続関係が有ることを示す「１」が設定される。処理から処理への接続関係が無い場合には、接続関係が無いことを示す「０」が設定される。
【００３６】
一例として、車処理からサービス処理への接続関係が有るので、データを出力する処理としての車処理とデータを入力する処理としてのサービス処理とが交差する行列に「１」が設定される。サービス処理からスマートフォン処理への接続関係が有るので、データを出力する処理としてのサービス処理とデータを入力する処理としてのスマートフォン処理とが交差する行列に「１」が設定される。サービス処理から車処理への接続関係が無いので、データを出力する処理としてのサービス処理とデータを入力する処理としての車処理とが交差する行列に「０」が設定される。
【００３７】
図１に戻って、次数付き有向グラフ２２は、有向グラフの各ノードにそれぞれ次数が付いた有向グラフの情報である。なお、次数付き有向グラフ２２は、グラフ管理部１１によって生成される。
【００３８】
ここで、次数付き有向グラフ２２の一例を、図４を参照して説明する。図４は、実施例に係る次数付き有向グラフの一例を示す図である。図４左図に係る次数は、図３右図の有向グラフの場合の次数である。車処理の次数は、車処理のノードに対して、入力する向きのエッジの数「０」から出力する向きのエッジの数「１」を差し引いた「−１」を示す。バス処理の次数は、バス処理のノードに対して、入力する向きのエッジの数「０」から出力する向きのエッジの数「２」を差し引いた「−２」を示す。スマートフォン処理の次数は、スマートフォン処理のノードに対して、入力する向きのエッジの数「２」から出力する向きのエッジの数「０」を差し引いた「２」を示す。サービス処理の次数は、サービス処理のノードに対して、入力する向きのエッジの数「２」から出力する向きのエッジの数「１」を差し引いた「１」を示す。
【００３９】
図４右図に示す次数付き有向グラフ２２は、有向グラフについて、各ノードに対して計算される各次数を各ノードに対応して付けたものである。ここでは、処理の上部または下部に付けられた数がノードの次数である。
【００４０】
図１に戻って、エッジ重み情報２３は、有向グラフを構成するそれぞれのエッジの重みの情報である。なお、エッジ重み情報２３は、観測部１２によって生成される。
【００４１】
ここで、エッジ重み情報２３の一例を、図５を参照して説明する。図５は、実施例に係るエッジ重み情報の一例を示す図である。図５左図に係るエッジ重み情報は、図３右図の有向グラフの場合の情報である。データを出力する処理からデータを入力する処理への向きのエッジの重みが計算される。エッジの重みは、エッジの向きに流れるデータの通信量に応じて計算される。
【００４２】
一例として、車処理からサービス処理への向きに流れるデータの通信量に応じた重みとして「０．３２」が計算される。サービス処理からスマートフォン処理への向きに流れるデータの通信量に応じた重みとして「０．１９」が計算される。
【００４３】
なお、図３右図の有向グラフのそれぞれのエッジに重みを付けたものが、図５右図の有向グラフである。
【００４４】
図１に戻って、重み次数付き有向グラフ２４は、有向グラフの各ノードにそれぞれ重み付き次数が付いた有向グラフの情報である。なお、重み次数付き有向グラフ２４は、グラフ管理部１１によって生成される。
【００４５】
ここで、重み次数付き有向グラフ２４の一例を、図６を参照して説明する。図６は、実施例に係る重み次数付き有向グラフの一例を示す図である。図６左図に係る重み付き次数は、図５右図の有向グラフのそれぞれのエッジに付いた重みから計算されるとする。車処理の重み付き次数は、車処理のノードに対して、入力する向きのエッジの重み「０」から出力する向きのエッジの重み「０．３２」を差し引いた「−０．３２」を示す。バス処理の重み付き次数は、バス処理のノードに対して、入力する向きのエッジの重み「０」から出力する向きのエッジの重み「０．２４」および「０．５９」を差し引いた「−０．８３」を示す。スマートフォン処理の重み付き次数は、スマートフォン処理のノードに対して、入力する向きのエッジの重み「０．５９」および「０．１９」から出力する向きのエッジの重み「０」を差し引いた「０．７８」を示す。サービス処理の重み付き次数は、サービス処理のノードに対して、入力する向きのエッジの重み「０．３２」および「０．２４」から出力する向きのエッジの重み「０．１９」を差し引いた「０．３７」を示す。
【００４６】
図６右図に示す重み次数付き有向グラフ２４は、有向グラフについて、各ノードに対して計算される各重み付き次数が各ノードに対応して付けられたものである。ここでは、処理の上部または下部に付けられた数がノードの重み付き次数である。
【００４７】
図１に戻って、グラフ管理部１１は、第１のタイミングで、サービス構成情報２１から次数付き有向グラフ２２を生成する。第１のタイミングには、一例として、サービス構成情報２１に変化が生じた場合が挙げられる。例えば、グラフ管理部１１は、第１のタイミングで、サービス構成情報２１を取得する。グラフ管理部１１は、取得したサービス構成情報２１から得られる有向グラフを生成する。グラフ管理部１１は、有向グラフの各ノードの次数を計算する。一例として、グラフ管理部１１は、有向グラフの各ノードに対して、入力する向きのエッジの数（流入数）から出力する向きのエッジの数（流出数）を差し引き、差し引いた結果を次数として計算する。グラフ管理部１１は、計算した各ノードの次数を有向グラフに付けた次数付き有向グラフ２２を生成する。そして、グラフ管理部１１は、生成した次数付き有向グラフ２２を図示せぬ記憶部に保存する。
【００４８】
また、グラフ管理部１１は、第２のタイミングで、エッジ重み情報２３から重み次数付き有向グラフ２４を生成する。第２のタイミングには、エッジ重み情報２３に変化が生じた場合が挙げられる。例えば、グラフ管理部１１は、第２のタイミングで、エッジ重み情報２３を取得する。グラフ管理部１１は、エッジ重み情報２３を参照して、有向グラフの各ノードの重み付き次数を計算する。一例として、グラフ管理部１１は、エッジ重み情報２３を参照して、有向グラフの各ノードに対して、入力する向きのエッジの重みから出力向きのエッジの重みを差し引き、差し引いた結果を重み付き次数として計算する。グラフ管理部１１は、計算した各ノードの重み付き次数を有向グラフに付けた重み次数付き有向グラフ２４を生成する。そして、グラフ管理部１１は、生成した重み次数付き有向グラフ２４を記憶部に保存する。
【００４９】
観測部１２は、ストリーム処理基盤２に対して、処理間のデータの通信量を観測する。例えば、観測部１２は、所定期間ごとに、ストリーム処理基盤２に対して、サービス構成情報２１から得られる接続関係が有る処理同士の処理間のデータの通信量を問い合わせる。観測部１２は、処理間のデータの通信量に応じて、対応するノード間のエッジの重みを計算する。すなわち、観測部１２は、処理間のデータの通信量に関する情報を、有向グラフのエッジの重みとして反映する。そして、観測部１２は、ノード間のエッジの重みをエッジ重み情報２３に保存する。なお、通信量から重みを計算する手法は、いかなる従来技術を用いても構わない。
【００５０】
配備部１３は、ストリーム処理基盤２にステージ数を設定する。例えば、配備部１３は、次数付き有向グラフ２２から必要なステージ数を求める。配備部１３は、必要なステージ数をストリーム処理基盤２に設定する。一例として、図４右図の次数付き有向グラフ２２の場合には、配備部１３は、異なる次数が４個あるので、必要なステージ数「４」を求める。そして、配備部１３は、必要なステージ数「４」をストリーム処理基盤２に設定する。
【００５１】
また、配備部１３は、各ノードの次数の順に、ノードが示す処理をパイプラインのステージに配備する。例えば、配備部１３は、重み次数付き有向グラフ２４が記憶部に保存されていない場合には、次数付き有向グラフ２２の各ノードの次数の小さいノード程、前段のステージになるように、ノードが示す処理をストリーム処理基盤２のステージに配備する。また、配備部１３は、重み次数付き有向グラフ２４が記憶部に保存されている場合には、重み次数付き有向グラフ２４の各ノードの重み付き次数の小さいノード程、前段のステージになるように、ノードが示す処理をストリーム処理基盤２のステージに配備する。
【００５２】
なお、配備部１３は、状況変化に応じて、重み次数付き有向グラフ２４に基づいたパイプラインを動的に再配備すれば良い。一例として、配備部１３は、特定の契機で、最新の重みを反映した重み次数付き有向グラフ２４に基づいたパイプラインをストリーム処理基盤２に再配備すれば良い。特定の契機とは、定時方式、閾値方式またはパーシャル方式が挙げられる。定時方式とは、例えば毎日０時などの予め定められた時刻に再配備する方式である。閾値方式とは、最新パイプライン適用によるリソースの消費軽減効果の予測値が閾値を上回ったときに再配備する方式である。パーシャル方式とは、一括に配備するのではなく、重み次数付き有向グラフ２４を分割して部分的に改善が見込める箇所を個別に再配備する方式である。
【００５３】
ここで、実施例に係る配備部１３の一例を、図７を参照して説明する。図７は、実施例に係る配備部の一例を示す図である。図７では、図７左図の重み次数付き有向グラフ２４の配備について説明する。なお、ストリーム処理基盤２には、ステージ数「４」が設定されているものとする。
【００５４】
図７に示すように、配備部１３は、重み次数付き有向グラフ２４の各ノードの重み付き次数の小さいノード程、前段のステージになるように、ノードが示す処理をストリーム処理基盤２のステージへ追加する。ここでは、重み次数付き有向グラフ２４について、車処理が示すノードの重み付き次数が「−０．３２」、バス処理が示すノードの重み付き次数が「−０．８３」を示す。また、サービス処理が示すノードの重み付き次数が「０．１３」、スマートフォン処理が示すノードの重み付き次数が「０．７８」を示す。したがって、配備部１３は、重み付き次数の最も小さいノードが示すバス処理（Ｆ１）をストリーム処理基盤２のステージ１へ追加する。配備部１３は、重み付き次数の次に小さいノードが示す車処理（Ｆ２）をストリーム処理基盤２のステージ２へ追加する。配備部１３は、重み付き次数の次に小さいノードが示すサービス処理（Ｆ３）をストリーム処理基盤２のステージ３へ追加する。そして、配備部１３は、重み付き次数の最も大きいノードが示すスマートフォン処理（Ｆ４）をストリーム処理基盤２のステージ４へ追加する。そして、配備部１３は、Ｆ１のデータ送信先をＦ３およびＦ４へ設定する。配備部１３は、Ｆ２のデータ送信先をＦ３へ設定する。配備部１３は、Ｆ３のデータ送信先をＦ４へ設定する。
【００５５】
これにより、配備部１３は、重み付き次数が示すデータの通信量が小さい程、対応するノードが示す処理を前段のステージに配備することで、初段のステージへ再入力される通信経路の通信量が減ることとなり、ストリーム処理基盤２の性能低下を防止できる。すなわち、配備部１３は、ストリーム処理基盤２において、効率的なパイプラインのデータフローを自動構築することができる。
【００５６】
［グラフ管理処理のフローチャート］
図８は、実施例に係るグラフ管理処理のフローチャートの一例を示す図である。
【００５７】
図８に示すように、グラフ管理部１１は、サービス構成情報２１に変化が生じたか否かを判定する（ステップＳ１１）。サービス構成情報２１に変化が生じたと判定した場合には（ステップＳ１１；Ｙｅｓ）、グラフ管理部１１は、サービス構成情報２１を取得する（ステップＳ１２）。
【００５８】
グラフ管理部１１は、サービス構成情報２１から得られる有向グラフの各ノードの次数を計算する（ステップＳ１３）。例えば、グラフ管理部１１は、有向グラフの各ノードに対して、入力する向きのエッジの数（流入数）から出力する向きのエッジの数（流出数）を差し引き、差し引いた結果を次数として計算する。
【００５９】
そして、グラフ管理部１１は、次数付き有向グラフ２２を出力する（ステップＳ１４）。そして、グラフ管理部１１は、グラフ管理処理を終了する。
【００６０】
一方、サービス構成情報２１に変化が生じていないと判定した場合には（ステップＳ１１；Ｎｏ）、グラフ管理部１１は、エッジ重み情報２３に変化が生じたか否かを判定する（ステップＳ１５）。エッジ重み情報２３に変化が生じたと判定した場合には（ステップＳ１５；Ｙｅｓ）、グラフ管理部１１は、エッジ重み情報２３を取得する（ステップＳ１６）。
【００６１】
グラフ管理部１１は、エッジ重み情報２３を参照して、有向グラフの各ノードの思児付き次数を計算する（ステップＳ１７）。例えば、グラフ管理部１１は、エッジ重み情報２３を参照して、有向グラフの各ノードに対して、入力する向きのエッジの思児から出力する向きのエッジの重みを差し引き、差し引いた結果を重み付き次数として計算する。
【００６２】
そして、グラフ管理部１１は、重み次数付き有向グラフ２４を出力する（ステップＳ１８）。そして、グラフ管理部１１は、グラフ管理処理を終了する。
【００６３】
［観測処理のフローチャート］
図９は、実施例に係る観測処理のフローチャートの一例を示す図である。なお、観測部１２は、予め定められた期間ごとに、観測処理を実行する。
【００６４】
図９に示すように、観測部１２は、サービス構成情報２１に変化が生じたか否かを判定する（ステップＳ２１）。サービス構成情報２１に変化が生じていないと判定した場合には（ステップＳ２１；Ｎｏ）、観測部１２は、ステップＳ２３に移行する。
【００６５】
一方、サービス構成情報２１に変化が生じたと判定した場合には（ステップＳ２１；Ｙｅｓ）、観測部１２は、サービス構成情報２１を取得する（ステップＳ２２）。観測部１２は、ストリーム処理基盤２に対して、処理間の通信量を問い合わせる（ステップＳ２３）。例えば、観測部１２は、サービス構成情報２１から、接続関係がある処理同士を取得する。観測部１２は、接続関係が有る処理同士の処理間のデータの通信量を、ストリーム処理基盤２に対して問い合わせる。
【００６６】
観測部１２は、処理間の通信量に応じて、対応するノード間のエッジの重みを更新する（ステップＳ２４）。そして、観測部１２は、更新されたエッジ重み情報２３を出力する（ステップＳ２５）。
【００６７】
［実施例の効果］
上記実施例によれば、情報処理装置１は、ストリーム処理基盤２における処理をノードとし、ノード間のデータの入出力関係をエッジとした有向グラフを生成する。情報処理装置１は、生成した有向グラフを構成するそれぞれのエッジの所定の重みを用いて、有向グラフの各ノードの次数を計算する。情報処理装置１は、計算した各ノードの次数に基づき、ノードが示す処理をパイプラインのステージに配備する。かかる構成によれば、情報処理装置１は、ストリーム処理基盤２において、効率的なパイプラインのデータフローを自動構築できる。例えば、情報処理装置１は、パイプラインの初段のステージへの不要な再入力の数を減らすことで、ストリーム処理基盤２の性能低下を防止することが可能となる。また、情報処理装置１は、サービス設計者がストリーム処理基盤２を意識しないで生成した有向グラフから、パイプラインのデータフローを自動構築できる。
【００６８】
また、情報処理装置１は、ストリーム処理基盤２に対して、処理間のデータの通信量を観測する。情報処理装置１は、観測した処理間のデータの通信量から、有向グラフを構成するそれぞれのエッジの重みを計算する。情報処理装置１は、有向グラフの各ノードについて、ノードに入力するエッジの重みと、当該ノードから出力するエッジの重みとを用いて、重み付きの次数を計算する。情報処理装置１は、各ノードの重み付きの次数が小さい程、前段のステージとなるように、ノードが示す処理をパイプラインのステージに配備する。かかる構成によれば、情報処理装置１は、データの通信量から計算されるエッジの重みからノードの重み付き次数を計算し、重み付き次数が小さい程、前段となるように、ノードが示す処理をステージに配備することで、初段のステージへの不要な再入力のデータの数を減らすことができる。この結果、情報処理装置１は、ストリーム処理基盤２の性能低下を防止することが可能となる。
【００６９】
また、情報処理装置１は、ノードに入力するエッジの重みから当該ノードから出力するエッジの重みを差し引いた値を重み付きの次数として計算する。かかる構成によれば、情報処理装置１は、重み付き次数が小さい程、前段となるように、ノードが示す処理をステージに配備することで、初段のステージへの不要な再入力のデータの数を減らすことができる。この結果、情報処理装置１は、ストリーム処理基盤２の性能低下を防止することが可能となる。
【００７０】
また、情報処理装置１は、有向グラフのいずれかのエッジの重みに変化が生じたタイミングで、各ノードについて、重み付きの次数を再計算する。情報処理装置１は、特定のタイミングで、重み付きの次数を用いて、パイプラインを再構築する。かかる構成によれば、情報処理装置１は、パイプラインを自動的に再構築することができる。
【００７１】
［その他］
なお、実施例では、データストリーム処理システム９が、情報処理装置１とストリーム処理基盤２とを有すると説明した。しかしながら、データストリーム処理システム９は、これに限定されない。データストリーム処理システム９を、ストリーム処理基盤２を含む情報処理装置１としても良い。また、データストリーム処理システム９は、サービス構成情報２１を生成する装置と、観測部１２を含む装置と、グラフ管理部１１および配備部１３を含む装置と、ストリーム処理基盤２とを有しても良い。かかる場合には、各装置間は、互いにネットワークで接続されれば良い。
【００７２】
また、図示した情報処理装置１の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、情報処理装置１の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、グラフ管理部１１を、次数付き有向グラフ２２を生成する第１のグラフ管理部と、重み次数付き有向グラフ２４を生成する第２のグラフ管理部とに分離しても良い。また、図示しない記憶部を情報処理装置１の外部装置としてネットワーク経由で接続するようにしても良い。
【００７３】
また、上記実施例で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図１に示した情報処理装置１と同様の機能を実現するデータストリーム処理プログラムを実行するコンピュータの一例を説明する。図１０は、データストリーム処理プログラムを実行するコンピュータの一例を示す図である。
【００７４】
図１０に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０３と、ユーザからのデータの入力を受け付ける入力装置２１５と、表示装置２０９を制御する表示制御部２０７とを有する。また、コンピュータ２００は、記憶媒体からプログラムなどを読取るドライブ装置２１３と、ネットワークを介して他のコンピュータとの間でデータの授受を行う通信制御部２１７とを有する。また、コンピュータ２００は、各種情報を一時記憶するメモリ２０１と、ＨＤＤ（Hard  Disk  Drive）２０５を有する。そして、メモリ２０１、ＣＰＵ２０３、ＨＤＤ２０５、表示制御部２０７、ドライブ装置２１３、入力装置２１５、通信制御部２１７は、バス２１９で接続されている。
【００７５】
ドライブ装置２１３は、例えばリムーバブルディスク２１０用の装置である。ＨＤＤ２０５は、データストリーム処理プログラム２０５ａおよびデータストリーム処理関連情報２０５ｂを記憶する。
【００７６】
ＣＰＵ２０３は、データストリーム処理プログラム２０５ａを読み出して、メモリ２０１に展開し、プロセスとして実行する。かかるプロセスは、情報処理装置１の各機能部に対応する。データストリーム処理関連情報２０５ｂは、サービス構成情報２１、エッジ重み情報２３、次数付き有向グラフ２２および重み次数付き有向グラフ２４に対応する。そして、例えばリムーバブルディスク２１０が、データストリーム処理プログラム２０５ａなどの各情報を記憶する。
【００７７】
なお、データストリーム処理プログラム２０５ａについては、必ずしも最初からＨＤＤ２０５に記憶させておかなくても良い。例えば、コンピュータ２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）、ＤＶＤ（Digital  Versatile  Disk）、光磁気ディスク、ＩＣ（Integrated  Circuit）カードなどの「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ２００がこれらからデータストリーム処理プログラム２０５ａを読み出して実行するようにしても良い。
【符号の説明】
【００７８】
１  情報処理装置
２  ストリーム処理基盤
９  データストリーム処理システム
１１  グラフ管理部
１２  観測部
１３  配備部
２１  サービス構成情報
２２  次数付き有向グラフ
２３  エッジ重み情報
２４  重み次数付き有向グラフ
【図１】
2020091680.tif 000003
【図２Ａ】
2020091680.tif 000004
【図２Ｂ】
2020091680.tif 000005
【図３】
2020091680.tif 000006
【図４】
2020091680.tif 000007
【図５】
2020091680.tif 000008
【図６】
2020091680.tif 000009
【図７】
2020091680.tif 000010
【図８】
2020091680.tif 000011
【図９】
2020091680.tif 000012
【図１０】
2020091680.tif 000013
【図１１】
2020091680.tif 000014
【図１２】
2020091680.tif 000015
【図１３】
2020091680.tif 000016