(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-01-16
(45)【発行日】2023-01-24
(54)【発明の名称】ストリーム処理パイプラインの自動生成方法、データストリーム処理プログラムおよびデータストリーム処理システム
(51)【国際特許分類】
G06F 8/20 20180101AFI20230117BHJP
G06F 8/77 20180101ALI20230117BHJP
G06F 9/50 20060101ALI20230117BHJP
【FI】
G06F8/20
G06F8/77
G06F9/50 150B
(21)【出願番号】P 2018228761
(22)【出願日】2018-12-06
【審査請求日】2021-09-09
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】山岡 久俊
(72)【発明者】
【氏名】松井 一樹
(72)【発明者】
【氏名】松本 達郎
(72)【発明者】
【氏名】岡林 美和
(72)【発明者】
【氏名】西口 直樹
【審査官】武田 広太郎
(56)【参考文献】
【文献】米国特許出願公開第2016/0110228(US,A1)
【文献】米国特許出願公開第2016/0269247(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00-8/38
G06F 8/60-8/77
G06F 9/44-9/445
G06F 9/451
G06F 9/50
(57)【特許請求の範囲】
【請求項1】
コンピュータが
ストリーム処理基盤における処理をノードとし、ノード間のデータの入出力関係をエッジとした有向グラフを生成し、
該生成した前記有向グラフを構成するそれぞれのエッジの
通信量を重みとして用いて、前記有向グラフの各ノードに繋がるエッジの流入数と流出数との差分を各ノードの次数として計算し、
該計算した各ノードの次数
が小さい程前段のステージになるように、ノードが示す処理をパイプラインのステージに配備する
処理を実行するストリーム処理パイプラインの自動生成方法。
【請求項2】
前記ストリーム処理基盤に対して、処理間のデータの通信量を観測し、
該観測した処理間のデータの通信量から、前記有向グラフを構成するそれぞれのエッジの重みを計算し、
該次数を計算する処理は、前記有向グラフの各ノードについて、ノードに入力するエッジの重みと、当該ノードから出力するエッジの重みとを用いて、重み付きの次数を計算し、
該配備する処理は、各ノードの重み付きの次数が小さい程、前段のステージとなるように、ノードが示す処理をパイプラインのステージに配備する
処理を実行することを特徴とする請求項1に記載のストリーム処理パイプラインの自動生成方法。
【請求項3】
該次数を計算する処理は、前記ノードに入力するエッジの重みから当該ノードから出力するエッジの重みを差し引いた値を重み付きの次数として計算する
処理を実行することを特徴とする請求項2に記載のストリーム処理パイプラインの自動生成方法。
【請求項4】
該次数を計算する処理は、前記有向グラフのいずれかのエッジの重みに変化が生じたタイミングで、各ノードについて、前記重み付きの次数を再計算し、
該配備する処理は、特定のタイミングで、前記重み付きの次数を用いて、前記パイプラインを再構築する
処理を実行することを特徴とする請求項2または請求項3に記載のストリーム処理パイプラインの自動生成方法。
【請求項5】
コンピュータが
ストリーム処理基盤における処理をノードとし、ノード間のデータの入出力関係をエッジとした有向グラフを生成し、
該生成した前記有向グラフを構成するそれぞれのエッジの
通信量を重みとして用いて、前記有向グラフの各ノードに繋がるエッジの流入数と流出数との差分を各ノードの次数として計算し、
該計算した各ノードの次数
が小さい程前段のステージになるように、ノードが示す処理をパイプラインのステージに配備する
処理をコンピュータに実行させるデータストリーム処理プログラム。
【請求項6】
情報処理装置と、
ストリーム処理基盤と、を有し、
前記情報処理装置は、
ストリーム処理基盤における処理をノードとし、ノード間のデータの入出力関係をエッジとした有向グラフを構成するそれぞれのエッジの
通信量を重みとして用いて、前記有向グラフの各ノード
に繋がるエッジの流入数と流出数との差分を各ノードの次数として計算する計算部と、
前記計算部によって計算された各ノードの次数
が小さい程前段のステージになるように、ノードが示す処理をパイプラインのステージに配備する配備部と、
を有することを特徴とするデータストリーム処理システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストリーム処理パイプラインの自動生成方法などに関する。
【背景技術】
【0002】
ストリーム処理パイプラインを自動生成する技術が開示されている(例えば、特許文献1参照)。かかるストリーム処理パイプラインでは、ストリーム処理基盤は、データをパイプラインの上流ステージから下流ステージへ流す。ストリーム処理基盤には、例えば、Apache Flink(登録商標)が挙げられる。
【0003】
図11は、ストリーム処理基盤におけるパイプラインの参考例を示す図である。
図11に示すように、ストリーム処理基盤は、データをパイプラインの上流ステージの処理から下流ステージの処理へ流す。サービスの設計者が、各処理の前後関係を考慮し、処理が所属するステージを決定する。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2017-142798号公報
【文献】特開2004-178270号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、ストリーム処理基盤は、データをパイプラインの上流ステージから下流ステージへ流すが、データをパイプラインの下流ステージから上流ステージへ流すことが難しいことが知られている。そこで、ストリーム処理基盤では、データを最後段の下流ステージから初段の上流ステージへ再入力することが想定される。
【0006】
しかしながら、単にデータを最後段の下流ステージから初段の上流ステージへ再入力すると、再入力するデータの量が多くなる場合があり、性能低下の原因となるという問題がある。また、どの処理をどのステージに配置すれば性能低下とならず、効率的であるのかもわからない。
【0007】
本発明は、1つの側面では、ストリーム処理基盤において、効率的なパイプラインのデータフローを自動構築することを目的とする。
【課題を解決するための手段】
【0008】
1つの態様では、ストリーム処理パイプラインの自動生成方法は、ストリーム処理基盤における処理をノードとし、ノード間のデータの入出力関係をエッジとした有向グラフを生成し、該生成した前記有向グラフを構成するそれぞれのエッジの所定の重みを用いて、前記有向グラフの各ノードの次数を計算し、該計算した各ノードの次数に基づき、ノードが示す処理をパイプラインのステージに配備する、処理をコンピュータが実行する。
【発明の効果】
【0009】
1実施態様によれば、ストリーム処理基盤において、効率的なパイプラインのデータフローを自動構築できる。
【図面の簡単な説明】
【0010】
【
図1】
図1は、実施例に係るデータストリーム処理システムの構成を示す機能ブロック図である。
【
図2A】
図2Aは、実施例に係るストリーム処理フローの構築の概要を示す図(1)である。
【
図2B】
図2Bは、実施例に係るストリーム処理フローの構築の概要を示す図(2)である。
【
図3】
図3は、実施例に係るサービス構成情報の一例を示す図である。
【
図4】
図4は、実施例に係る次数付き有向グラフの一例を示す図である。
【
図5】
図5は、実施例に係るエッジ重み情報の一例を示す図である。
【
図6】
図6は、実施例に係る重み次数付き有向グラフの一例を示す図である。
【
図7】
図7は、実施例に係る配備部の一例を示す図である。
【
図8】
図8は、実施例に係るグラフ管理処理のフローチャートの一例を示す図である。
【
図9】
図9は、実施例に係る観測処理のフローチャートの一例を示す図である。
【
図10】
図10は、データストリーム処理プログラムを実行するコンピュータの一例を示す図である。
【
図11】
図11は、ストリーム処理基盤におけるパイプラインの参考例を示す図である。
【
図12】
図12は、ストリーム処理基盤におけるデータ送受信の参考例を示す図(1)である。
【
図13】
図13は、ストリーム処理基盤におけるデータ送受信の参考例を示す図(2)である。
【発明を実施するための形態】
【0011】
以下に、本願の開示するストリーム処理パイプラインの自動生成方法、データストリーム処理プログラムおよびデータストリーム処理システムの実施例を図面に基づいて詳細に説明する。なお、本発明は、実施例により限定されるものではない。
【実施例】
【0012】
まず、ストリーム処理基盤におけるデータ送受信の参考例を、
図12および
図13を参照して説明する。
図12および
図13は、ストリーム処理基盤におけるデータ送受信の参考例を示す図である。
【0013】
図12上図には、エンティティ(Entity)間のデータ送受信関係が示されている。ここでいうエンティティとは、例えば「処理名」であり、一例として、車処理やサービス処理のことをいう。ここでは、複数の車処理は、緯度経度、速度等の走行データを受信し、経度緯度をサービス処理に送信する。サービス処理は、緯度経度を用いて位置に応じたお勧め情報を車処理に通知する。
【0014】
図12下図には、
図12上図で示したエンティティ間のデータ送受信関係における各処理をストリーム処理基盤で実現したものである。ストリーム処理基盤では、上流のステージ1に車処理を配備し、下流のステージ2にサービス処理を配備する。そして、ストリーム処理基盤に入力された走行データをステージ1の車処理が受信し、緯度経度をステージ2のサービス処理に送信する。ステージ2のサービス処理は、緯度経度を用いて位置に応じたお勧め情報を上流のステージの車処理に通知する。ストリーム処理基盤では、データをパイプラインの下流のステージから上流のステージへ流すことができない。これは、例えば、仮にデータを下流のステージから上流のステージへ流すと、バリアマーカの挙動により性能に影響が生じてしまうからである。そこで、ストリーム処理基盤では、ストリーム処理基盤から出力されたデータをストリーム処理基盤の初段のステージへ再入力する。
【0015】
次に、
図13上図には、
図12とは別のエンティティ(Entity)間のデータ送受信関係が示されている。ここでいうエンティティは、対象物が実行する処理であり、例えば、車が実行する車処理、人が実行する人処理、スマホが実行するスマホ処理やサービス処理を示す。ここでは、各種処理を、単に、車、人、スマホ、サービスと表すものとする。矢印は、データの流れる方向であるとする。
図13上図では、車、人、スマホ、サービスの各処理の接続関係を有向グラフで表わしている。
【0016】
図13下図には、
図14上図で示した有向グラフにおける各処理をストリーム処理基盤で実現したものである。ここでは、ストリーム処理基盤では、単にデータを直接受信する処理を初段のステージ1に配備し、サービス処理を後段のステージ2に配備する。ストリーム処理基盤では、サービス処理から出力されたデータをストリーム処理基盤の初段のステージへ再入力する。すると、初段のステージへ再入力するデータの量が多くなり、性能の低下の原因となる。ここでは、6本の通信経路<1>~<6>のうち、4本の通信経路<3>,<4>~<6>がストリーム処理基盤から出力され、ストリーム処理基盤の初段のステージへ再入力されることとなる。すると、再入力されるデータの量が多くなり、性能低下の原因となる。ストリーム処理基盤の外側を経由した通信は、第1に、ネットワークの負荷の増大となる。また、第2に、ストリーム処理基盤に再入力される際に内部のデータに変換するパース処理の負荷の増大となる。また、第3に、データがストリーム処理基盤の外側に出ているときにバックアップ信号が来ると、外側のデータは管轄外となり耐障害能力の低下となる。また、第4に、ストリーム処理基盤の外側では、分散処理がされないので、分散効率の低下となる。すなわち、データがストリーム処理基盤から出力されると、性能低下の原因となる。
【0017】
性能低下の原因とならないように、サービス設計者が、エンティティ間のデータ送受信関係を定義すれば良いが、エンティティ間のデータ送受信関係を、ステージを意識しないで効率的に定義するのは難しい。
【0018】
そこで、以降では、ストリーム処理基盤において、効率的なパイプラインのデータフローを自動構築するデータストリーム処理システムについて説明する。
【0019】
[データストリーム処理システムの構成]
図1は、実施例に係るデータストリーム処理システムの構成を示す機能ブロック図である。
図1に示すように、データストリーム処理システム9は、情報処理装置1およびストリーム処理基盤2を有する。
【0020】
データストリーム処理システム9では、情報処理装置1が、サービス設計者によって定義された処理の接続関係を有向グラフで表し、各処理が示す各ノードの次数を計算し、次数の順にノードが示す処理を並び替えてパイプラインのステージに配備する。次数とは、ノードが関与しているデータの送受信関係に関する数のことをいう。なお、次数の具体例は、後述する。
【0021】
ストリーム処理基盤2は、複数のステージで形成されるパイプラインで実行される分散ストリーム処理のプラットフォームを示す。ストリーム処理基盤2には、例えば、Apache Flinkが挙げられる。
【0022】
ここで、実施例に係る情報処理装置1が実行するストリーム処理フロー(パイプラインフロー)の構築の概要を、
図2Aおよび
図2Bを参照して説明する。
図2Aおよび
図2Bは、実施例に係るストリーム処理フローの構築の概要を示す図である。
【0023】
図2A上図に示すように、情報処理装置1は、サービス設計者によって定義される処理の接続関係を有向グラフで表現する。ここでは、一例として、車、人、スマホ、サービスの各処理の接続関係を有向グラフで表わしている。そして、情報処理装置1は、各ノードの次数を計算する。ノードの次数とは、ノードが関与しているデータの送受信関係に関する数のことをいう。例えば、ノードの次数は、ノードに対して、入力する向きのエッジの数(流入数)から出力する向きのエッジの数(流出数)を差し引くことによって計算される。
【0024】
図2A下図に示すように、情報処理装置1は、計算した各ノードの次数の小さい順から、ノードが示す処理をストリーム処理基盤2のパイプラインのステージに配備する。言い換えれば、情報処理装置1は、データの流入数が小さい程、データを流入するノードが示す処理(タスク)を、前段のステージに配備する。これは、初段のステージへ再入力される通信経路の数が減るからであり、効率的なデータフローを構築できるからである。
【0025】
ここでは、最も次数が小さいノードが示すサービスの処理がステージ1に配備される。次に次数が小さいノードが示す人の処理および車の処理がステージ2に配備される。そして、最も次数が大きいノードが示すスマホの処理がステージ3に配備される。ここでは、6本の通信経路<1>~<6>のうち、2本の通信経路<1>,<2>がストリーム処理基盤から出力され、ストリーム処理基盤の初段のステージへ再入力されることとなる。
【0026】
同じ有向グラフに対して、当該有向グラフをそのままストリーム処理基盤で実現した場合には、ストリーム処理基盤2に再入力される通信経路の数は、「4」である(
図13参照)。これに対して、次数に基づいてストリーム処理基盤に配備する場合には、ストリーム処理基盤2に再入力される通信経路の数は「2」である。これにより、情報処理装置1は、ストリーム処理基盤2の初段のステージへ再入力される通信経路の数を減らすことにより、ストリーム処理基盤2の性能低下を防止できる。すなわち、情報処理装置1は、ストリーム処理基盤2において、効率的なパイプラインのデータフローを自動構築することができる。
【0027】
ここで、
図2Aでは、情報処理装置1は、エッジの入出力の向きに基づいた流入数から流出数を差し引いた数を次数として、各ノードの次数を計算する場合を説明した。
図2Bでは、情報処理装置1は、さらに、ノードごとに、実際の通信量を重みとして、次数を計算する場合を説明する。
【0028】
図2B上図に示すように、情報処理装置1は、サービス設計者によって定義される処理の接続関係を有向グラフで表現する。ここでは、一例として、車両、人、スマホ、バス、タクシー、カメラの各処理(タスク)の接続関係を有向グラフで表わしている。
【0029】
図2B中図に示すように、情報処理装置1は、タスク間のデータの通信量を観測する。情報処理装置1は、タスク間のデータの通信量に応じて有向グラフを構成するそれぞれのエッジの重みを計算する。そして、情報処理装置1は、エッジの重みを考慮して、各ノードの次数を計算する。エッジの重みを考慮した次数のことを「重み付き次数」というものとする。ノードの重み付き次数は、ノードに対して、入力する向きのエッジの重みから出力する向きのエッジの重みを差し引くことによって計算される。
【0030】
図2B下図に示すように、情報処理装置1は、計算した各ノードの重み付き次数の小さい順から、ノードが示す処理をストリーム処理基盤2のパイプラインのステージに配備する。言い換えれば、情報処理装置1は、流入するデータの通信量が小さい程、データが流入するノードが示す処理(タスク)を、前段のステージに配備する。これは、初段のステージへ再入力される通信経路の通信量が減ることで、効率的なデータフローを構築できるからである。
【0031】
これにより、情報処理装置1は、ストリーム処理基盤2の初段のステージへ再入力される通信経路の通信量を減らすことにより、ストリーム処理基盤2の性能低下を防止できる。すなわち、情報処理装置1は、ストリーム処理基盤2において、効率的なパイプラインのデータフローを自動構築することができる。
【0032】
図1に戻って、情報処理装置1は、グラフ管理部11,観測部12および配備部13を有する。これらの機能部は、図示しない制御部に含まれる。制御部は、CPU(Central Processing Unit)などの電子回路に対応する。そして、制御部は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。なお、グラフ管理部11は、計算部の一例である。配備部13は、配備部の一例である。
【0033】
また、情報処理装置1は、サービス構成情報21,次数付き有向グラフ22,エッジ重み情報23および重み次数付き有向グラフ24を有する。これらの機能部は、図示しない記憶部に含まれる。記憶部は、例えば、RAM、フラッシュメモリ(Flash Memory)などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。
【0034】
サービス構成情報21は、ストリーム処理基盤2を利用するサービスの構成情報であり、処理の接続関係を示す有向グラフを2次元のテーブルで表わしたものである。なお、有向グラフは、サービス設計者によって生成される。サービス構成情報21は、有向グラフに基づいて生成される。
【0035】
ここで、サービス構成情報21の一例を、
図3を参照して説明する。
図3は、実施例に係るサービス構成情報の一例を示す図である。
図3では、処理として車処理,バス処理,スマートフォン処理およびサービス処理が存在する場合とする。
図3左図には、
図3右図で示される有向グラフのサービス構成情報が表わされている。データを出力する処理からデータを入力する処理への接続関係の有無が設定される。処理から処理への接続関係が有る場合には、接続関係が有ることを示す「1」が設定される。処理から処理への接続関係が無い場合には、接続関係が無いことを示す「0」が設定される。
【0036】
一例として、車処理からサービス処理への接続関係が有るので、データを出力する処理としての車処理とデータを入力する処理としてのサービス処理とが交差する行列に「1」が設定される。サービス処理からスマートフォン処理への接続関係が有るので、データを出力する処理としてのサービス処理とデータを入力する処理としてのスマートフォン処理とが交差する行列に「1」が設定される。サービス処理から車処理への接続関係が無いので、データを出力する処理としてのサービス処理とデータを入力する処理としての車処理とが交差する行列に「0」が設定される。
【0037】
図1に戻って、次数付き有向グラフ22は、有向グラフの各ノードにそれぞれ次数が付いた有向グラフの情報である。なお、次数付き有向グラフ22は、グラフ管理部11によって生成される。
【0038】
ここで、次数付き有向グラフ22の一例を、
図4を参照して説明する。
図4は、実施例に係る次数付き有向グラフの一例を示す図である。
図4左図に係る次数は、
図3右図の有向グラフの場合の次数である。車処理の次数は、車処理のノードに対して、入力する向きのエッジの数「0」から出力する向きのエッジの数「1」を差し引いた「-1」を示す。バス処理の次数は、バス処理のノードに対して、入力する向きのエッジの数「0」から出力する向きのエッジの数「2」を差し引いた「-2」を示す。スマートフォン処理の次数は、スマートフォン処理のノードに対して、入力する向きのエッジの数「2」から出力する向きのエッジの数「0」を差し引いた「2」を示す。サービス処理の次数は、サービス処理のノードに対して、入力する向きのエッジの数「2」から出力する向きのエッジの数「1」を差し引いた「1」を示す。
【0039】
図4右図に示す次数付き有向グラフ22は、有向グラフについて、各ノードに対して計算される各次数を各ノードに対応して付けたものである。ここでは、処理の上部または下部に付けられた数がノードの次数である。
【0040】
図1に戻って、エッジ重み情報23は、有向グラフを構成するそれぞれのエッジの重みの情報である。なお、エッジ重み情報23は、観測部12によって生成される。
【0041】
ここで、エッジ重み情報23の一例を、
図5を参照して説明する。
図5は、実施例に係るエッジ重み情報の一例を示す図である。
図5左図に係るエッジ重み情報は、
図3右図の有向グラフの場合の情報である。データを出力する処理からデータを入力する処理への向きのエッジの重みが計算される。エッジの重みは、エッジの向きに流れるデータの通信量に応じて計算される。
【0042】
一例として、車処理からサービス処理への向きに流れるデータの通信量に応じた重みとして「0.32」が計算される。サービス処理からスマートフォン処理への向きに流れるデータの通信量に応じた重みとして「0.19」が計算される。
【0043】
なお、
図3右図の有向グラフのそれぞれのエッジに重みを付けたものが、
図5右図の有向グラフである。
【0044】
図1に戻って、重み次数付き有向グラフ24は、有向グラフの各ノードにそれぞれ重み付き次数が付いた有向グラフの情報である。なお、重み次数付き有向グラフ24は、グラフ管理部11によって生成される。
【0045】
ここで、重み次数付き有向グラフ24の一例を、
図6を参照して説明する。
図6は、実施例に係る重み次数付き有向グラフの一例を示す図である。
図6左図に係る重み付き次数は、
図5右図の有向グラフのそれぞれのエッジに付いた重みから計算されるとする。車処理の重み付き次数は、車処理のノードに対して、入力する向きのエッジの重み「0」から出力する向きのエッジの重み「0.32」を差し引いた「-0.32」を示す。バス処理の重み付き次数は、バス処理のノードに対して、入力する向きのエッジの重み「0」から出力する向きのエッジの重み「0.24」および「0.59」を差し引いた「-0.83」を示す。スマートフォン処理の重み付き次数は、スマートフォン処理のノードに対して、入力する向きのエッジの重み「0.59」および「0.19」から出力する向きのエッジの重み「0」を差し引いた「0.78」を示す。サービス処理の重み付き次数は、サービス処理のノードに対して、入力する向きのエッジの重み「0.32」および「0.24」から出力する向きのエッジの重み「0.19」を差し引いた「0.37」を示す。
【0046】
図6右図に示す重み次数付き有向グラフ24は、有向グラフについて、各ノードに対して計算される各重み付き次数が各ノードに対応して付けられたものである。ここでは、処理の上部または下部に付けられた数がノードの重み付き次数である。
【0047】
図1に戻って、グラフ管理部11は、第1のタイミングで、サービス構成情報21から次数付き有向グラフ22を生成する。第1のタイミングには、一例として、サービス構成情報21に変化が生じた場合が挙げられる。例えば、グラフ管理部11は、第1のタイミングで、サービス構成情報21を取得する。グラフ管理部11は、取得したサービス構成情報21から得られる有向グラフを生成する。グラフ管理部11は、有向グラフの各ノードの次数を計算する。一例として、グラフ管理部11は、有向グラフの各ノードに対して、入力する向きのエッジの数(流入数)から出力する向きのエッジの数(流出数)を差し引き、差し引いた結果を次数として計算する。グラフ管理部11は、計算した各ノードの次数を有向グラフに付けた次数付き有向グラフ22を生成する。そして、グラフ管理部11は、生成した次数付き有向グラフ22を図示せぬ記憶部に保存する。
【0048】
また、グラフ管理部11は、第2のタイミングで、エッジ重み情報23から重み次数付き有向グラフ24を生成する。第2のタイミングには、エッジ重み情報23に変化が生じた場合が挙げられる。例えば、グラフ管理部11は、第2のタイミングで、エッジ重み情報23を取得する。グラフ管理部11は、エッジ重み情報23を参照して、有向グラフの各ノードの重み付き次数を計算する。一例として、グラフ管理部11は、エッジ重み情報23を参照して、有向グラフの各ノードに対して、入力する向きのエッジの重みから出力向きのエッジの重みを差し引き、差し引いた結果を重み付き次数として計算する。グラフ管理部11は、計算した各ノードの重み付き次数を有向グラフに付けた重み次数付き有向グラフ24を生成する。そして、グラフ管理部11は、生成した重み次数付き有向グラフ24を記憶部に保存する。
【0049】
観測部12は、ストリーム処理基盤2に対して、処理間のデータの通信量を観測する。例えば、観測部12は、所定期間ごとに、ストリーム処理基盤2に対して、サービス構成情報21から得られる接続関係が有る処理同士の処理間のデータの通信量を問い合わせる。観測部12は、処理間のデータの通信量に応じて、対応するノード間のエッジの重みを計算する。すなわち、観測部12は、処理間のデータの通信量に関する情報を、有向グラフのエッジの重みとして反映する。そして、観測部12は、ノード間のエッジの重みをエッジ重み情報23に保存する。なお、通信量から重みを計算する手法は、いかなる従来技術を用いても構わない。
【0050】
配備部13は、ストリーム処理基盤2にステージ数を設定する。例えば、配備部13は、次数付き有向グラフ22から必要なステージ数を求める。配備部13は、必要なステージ数をストリーム処理基盤2に設定する。一例として、
図4右図の次数付き有向グラフ22の場合には、配備部13は、異なる次数が4個あるので、必要なステージ数「4」を求める。そして、配備部13は、必要なステージ数「4」をストリーム処理基盤2に設定する。
【0051】
また、配備部13は、各ノードの次数の順に、ノードが示す処理をパイプラインのステージに配備する。例えば、配備部13は、重み次数付き有向グラフ24が記憶部に保存されていない場合には、次数付き有向グラフ22の各ノードの次数の小さいノード程、前段のステージになるように、ノードが示す処理をストリーム処理基盤2のステージに配備する。また、配備部13は、重み次数付き有向グラフ24が記憶部に保存されている場合には、重み次数付き有向グラフ24の各ノードの重み付き次数の小さいノード程、前段のステージになるように、ノードが示す処理をストリーム処理基盤2のステージに配備する。
【0052】
なお、配備部13は、状況変化に応じて、重み次数付き有向グラフ24に基づいたパイプラインを動的に再配備すれば良い。一例として、配備部13は、特定の契機で、最新の重みを反映した重み次数付き有向グラフ24に基づいたパイプラインをストリーム処理基盤2に再配備すれば良い。特定の契機とは、定時方式、閾値方式またはパーシャル方式が挙げられる。定時方式とは、例えば毎日0時などの予め定められた時刻に再配備する方式である。閾値方式とは、最新パイプライン適用によるリソースの消費軽減効果の予測値が閾値を上回ったときに再配備する方式である。パーシャル方式とは、一括に配備するのではなく、重み次数付き有向グラフ24を分割して部分的に改善が見込める箇所を個別に再配備する方式である。
【0053】
ここで、実施例に係る配備部13の一例を、
図7を参照して説明する。
図7は、実施例に係る配備部の一例を示す図である。
図7では、
図7左図の重み次数付き有向グラフ24の配備について説明する。なお、ストリーム処理基盤2には、ステージ数「4」が設定されているものとする。
【0054】
図7に示すように、配備部13は、重み次数付き有向グラフ24の各ノードの重み付き次数の小さいノード程、前段のステージになるように、ノードが示す処理をストリーム処理基盤2のステージへ追加する。ここでは、重み次数付き有向グラフ24について、車処理が示すノードの重み付き次数が「-0.32」、バス処理が示すノードの重み付き次数が「-0.83」を示す。また、サービス処理が示すノードの重み付き次数が「0.13」、スマートフォン処理が示すノードの重み付き次数が「0.78」を示す。したがって、配備部13は、重み付き次数の最も小さいノードが示すバス処理(F1)をストリーム処理基盤2のステージ1へ追加する。配備部13は、重み付き次数の次に小さいノードが示す車処理(F2)をストリーム処理基盤2のステージ2へ追加する。配備部13は、重み付き次数の次に小さいノードが示すサービス処理(F3)をストリーム処理基盤2のステージ3へ追加する。そして、配備部13は、重み付き次数の最も大きいノードが示すスマートフォン処理(F4)をストリーム処理基盤2のステージ4へ追加する。そして、配備部13は、F1のデータ送信先をF3およびF4へ設定する。配備部13は、F2のデータ送信先をF3へ設定する。配備部13は、F3のデータ送信先をF4へ設定する。
【0055】
これにより、配備部13は、重み付き次数が示すデータの通信量が小さい程、対応するノードが示す処理を前段のステージに配備することで、初段のステージへ再入力される通信経路の通信量が減ることとなり、ストリーム処理基盤2の性能低下を防止できる。すなわち、配備部13は、ストリーム処理基盤2において、効率的なパイプラインのデータフローを自動構築することができる。
【0056】
[グラフ管理処理のフローチャート]
図8は、実施例に係るグラフ管理処理のフローチャートの一例を示す図である。
【0057】
図8に示すように、グラフ管理部11は、サービス構成情報21に変化が生じたか否かを判定する(ステップS11)。サービス構成情報21に変化が生じたと判定した場合には(ステップS11;Yes)、グラフ管理部11は、サービス構成情報21を取得する(ステップS12)。
【0058】
グラフ管理部11は、サービス構成情報21から得られる有向グラフの各ノードの次数を計算する(ステップS13)。例えば、グラフ管理部11は、有向グラフの各ノードに対して、入力する向きのエッジの数(流入数)から出力する向きのエッジの数(流出数)を差し引き、差し引いた結果を次数として計算する。
【0059】
そして、グラフ管理部11は、次数付き有向グラフ22を出力する(ステップS14)。そして、グラフ管理部11は、グラフ管理処理を終了する。
【0060】
一方、サービス構成情報21に変化が生じていないと判定した場合には(ステップS11;No)、グラフ管理部11は、エッジ重み情報23に変化が生じたか否かを判定する(ステップS15)。エッジ重み情報23に変化が生じたと判定した場合には(ステップS15;Yes)、グラフ管理部11は、エッジ重み情報23を取得する(ステップS16)。
【0061】
グラフ管理部11は、エッジ重み情報23を参照して、有向グラフの各ノードの思児付き次数を計算する(ステップS17)。例えば、グラフ管理部11は、エッジ重み情報23を参照して、有向グラフの各ノードに対して、入力する向きのエッジの思児から出力する向きのエッジの重みを差し引き、差し引いた結果を重み付き次数として計算する。
【0062】
そして、グラフ管理部11は、重み次数付き有向グラフ24を出力する(ステップS18)。そして、グラフ管理部11は、グラフ管理処理を終了する。
【0063】
[観測処理のフローチャート]
図9は、実施例に係る観測処理のフローチャートの一例を示す図である。なお、観測部12は、予め定められた期間ごとに、観測処理を実行する。
【0064】
図9に示すように、観測部12は、サービス構成情報21に変化が生じたか否かを判定する(ステップS21)。サービス構成情報21に変化が生じていないと判定した場合には(ステップS21;No)、観測部12は、ステップS23に移行する。
【0065】
一方、サービス構成情報21に変化が生じたと判定した場合には(ステップS21;Yes)、観測部12は、サービス構成情報21を取得する(ステップS22)。観測部12は、ストリーム処理基盤2に対して、処理間の通信量を問い合わせる(ステップS23)。例えば、観測部12は、サービス構成情報21から、接続関係がある処理同士を取得する。観測部12は、接続関係が有る処理同士の処理間のデータの通信量を、ストリーム処理基盤2に対して問い合わせる。
【0066】
観測部12は、処理間の通信量に応じて、対応するノード間のエッジの重みを更新する(ステップS24)。そして、観測部12は、更新されたエッジ重み情報23を出力する(ステップS25)。
【0067】
[実施例の効果]
上記実施例によれば、情報処理装置1は、ストリーム処理基盤2における処理をノードとし、ノード間のデータの入出力関係をエッジとした有向グラフを生成する。情報処理装置1は、生成した有向グラフを構成するそれぞれのエッジの所定の重みを用いて、有向グラフの各ノードの次数を計算する。情報処理装置1は、計算した各ノードの次数に基づき、ノードが示す処理をパイプラインのステージに配備する。かかる構成によれば、情報処理装置1は、ストリーム処理基盤2において、効率的なパイプラインのデータフローを自動構築できる。例えば、情報処理装置1は、パイプラインの初段のステージへの不要な再入力の数を減らすことで、ストリーム処理基盤2の性能低下を防止することが可能となる。また、情報処理装置1は、サービス設計者がストリーム処理基盤2を意識しないで生成した有向グラフから、パイプラインのデータフローを自動構築できる。
【0068】
また、情報処理装置1は、ストリーム処理基盤2に対して、処理間のデータの通信量を観測する。情報処理装置1は、観測した処理間のデータの通信量から、有向グラフを構成するそれぞれのエッジの重みを計算する。情報処理装置1は、有向グラフの各ノードについて、ノードに入力するエッジの重みと、当該ノードから出力するエッジの重みとを用いて、重み付きの次数を計算する。情報処理装置1は、各ノードの重み付きの次数が小さい程、前段のステージとなるように、ノードが示す処理をパイプラインのステージに配備する。かかる構成によれば、情報処理装置1は、データの通信量から計算されるエッジの重みからノードの重み付き次数を計算し、重み付き次数が小さい程、前段となるように、ノードが示す処理をステージに配備することで、初段のステージへの不要な再入力のデータの数を減らすことができる。この結果、情報処理装置1は、ストリーム処理基盤2の性能低下を防止することが可能となる。
【0069】
また、情報処理装置1は、ノードに入力するエッジの重みから当該ノードから出力するエッジの重みを差し引いた値を重み付きの次数として計算する。かかる構成によれば、情報処理装置1は、重み付き次数が小さい程、前段となるように、ノードが示す処理をステージに配備することで、初段のステージへの不要な再入力のデータの数を減らすことができる。この結果、情報処理装置1は、ストリーム処理基盤2の性能低下を防止することが可能となる。
【0070】
また、情報処理装置1は、有向グラフのいずれかのエッジの重みに変化が生じたタイミングで、各ノードについて、重み付きの次数を再計算する。情報処理装置1は、特定のタイミングで、重み付きの次数を用いて、パイプラインを再構築する。かかる構成によれば、情報処理装置1は、パイプラインを自動的に再構築することができる。
【0071】
[その他]
なお、実施例では、データストリーム処理システム9が、情報処理装置1とストリーム処理基盤2とを有すると説明した。しかしながら、データストリーム処理システム9は、これに限定されない。データストリーム処理システム9を、ストリーム処理基盤2を含む情報処理装置1としても良い。また、データストリーム処理システム9は、サービス構成情報21を生成する装置と、観測部12を含む装置と、グラフ管理部11および配備部13を含む装置と、ストリーム処理基盤2とを有しても良い。かかる場合には、各装置間は、互いにネットワークで接続されれば良い。
【0072】
また、図示した情報処理装置1の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、情報処理装置1の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、グラフ管理部11を、次数付き有向グラフ22を生成する第1のグラフ管理部と、重み次数付き有向グラフ24を生成する第2のグラフ管理部とに分離しても良い。また、図示しない記憶部を情報処理装置1の外部装置としてネットワーク経由で接続するようにしても良い。
【0073】
また、上記実施例で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、
図1に示した情報処理装置1と同様の機能を実現するデータストリーム処理プログラムを実行するコンピュータの一例を説明する。
図10は、データストリーム処理プログラムを実行するコンピュータの一例を示す図である。
【0074】
図10に示すように、コンピュータ200は、各種演算処理を実行するCPU203と、ユーザからのデータの入力を受け付ける入力装置215と、表示装置209を制御する表示制御部207とを有する。また、コンピュータ200は、記憶媒体からプログラムなどを読取るドライブ装置213と、ネットワークを介して他のコンピュータとの間でデータの授受を行う通信制御部217とを有する。また、コンピュータ200は、各種情報を一時記憶するメモリ201と、HDD(Hard Disk Drive)205を有する。そして、メモリ201、CPU203、HDD205、表示制御部207、ドライブ装置213、入力装置215、通信制御部217は、バス219で接続されている。
【0075】
ドライブ装置213は、例えばリムーバブルディスク210用の装置である。HDD205は、データストリーム処理プログラム205aおよびデータストリーム処理関連情報205bを記憶する。
【0076】
CPU203は、データストリーム処理プログラム205aを読み出して、メモリ201に展開し、プロセスとして実行する。かかるプロセスは、情報処理装置1の各機能部に対応する。データストリーム処理関連情報205bは、サービス構成情報21、エッジ重み情報23、次数付き有向グラフ22および重み次数付き有向グラフ24に対応する。そして、例えばリムーバブルディスク210が、データストリーム処理プログラム205aなどの各情報を記憶する。
【0077】
なお、データストリーム処理プログラム205aについては、必ずしも最初からHDD205に記憶させておかなくても良い。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD-ROM(Compact Disk Read Only Memory)、DVD(Digital Versatile Disk)、光磁気ディスク、IC(Integrated Circuit)カードなどの「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ200がこれらからデータストリーム処理プログラム205aを読み出して実行するようにしても良い。
【符号の説明】
【0078】
1 情報処理装置
2 ストリーム処理基盤
9 データストリーム処理システム
11 グラフ管理部
12 観測部
13 配備部
21 サービス構成情報
22 次数付き有向グラフ
23 エッジ重み情報
24 重み次数付き有向グラフ