以下、本発明をIoTシステムのデータ収集基盤が備える基盤管理部に適用した一実施形態について、図面を参照して詳細に説明する。
図1は、IoTシステムのデータ収集基盤の機能構成を示すブロック図である。同図では、IoTシステムが、その下層側から順に、センサ1,1,…、ゲートウェイ(IoT GW)2,2,…、エッジサーバ3,3,…、及びクラウドサーバ4の4層で構成される場合を例にとって示す。
中層のゲートウェイ2,2,…及びエッジサーバ3,3,…が、それぞれデータ処理ノードとして、後述する配置実行管理部15によって配備されたモジュールに基づいて直下層からの複数のデータを収集して、直上層に送る。
最上層のクラウドサーバ4は、割り当てられたアプリケーション5に従って、直下層のエッジサーバ3,3,…からのデータを収集、解析する。
上記アプリケーション5は、要件受付インタフェイス6を介して、IoTプラットフォームであるデータ収集基盤を構成する基盤管理部10に対して、必要とする要件の情報を予め伝送している。
基盤管理部10は、基盤管理部10内で実行する各種プログラムやデータ等を記憶するデータベース11と、要件管理部12、資源管理部13、配置計算部14、及び配置実行管理部15とを備える。
要件管理部12は、アプリケーション5が必要とする要件を要件受付インタフェイス6を介して受付ける。
資源管理部13は、データ処理ノードとなるゲートウェイ2,2,…やエッジサーバ3,3,…の配置、及びネットワークの帯域や、計算資源の上限等を把握する。
配置計算部14は、複数のアプリケーションの要件を基に、データ集計処理を行なうモジュールの構成、配置を計算する。
配置実行管理部15は、配置計算部14が計算したモジュールの構成、配置に基づいて、実際の各データ処理ノードにモジュールを配備させる。
図2は、主として上記配置計算部14が実行する処理の流れと、各種ヘルパープログラムの関係を示す図である。配置計算部14では、各アプリケーション毎に要求されている要件と、ここでは図示しない上記資源管理部13の資源情報とから、モジュール構成作成プログラム21が必要となるモジュール構成を作成する。これら複数のモジュール構成を取り纏めて初期モジュール構成とする。
この初期モジュール構成に対して、共有化判定プログラム22により同様の処理を実行するモジュールの共有化判定を行なって、必要なモジュールの構成を作成する。
こうして作成したモジュール構成に対し、さらに等価モジュール列算出プログラム23がその内容を精査し、より効率的なモジュール構成に組み替える。
そして、これらのモジュール構成が、割付け、収容可否判定、最適構成選択のためのプログラム24により再構成された上で、上記配置実行管理部15により実環境である各データ処理ノードに対して配備される。
図3及び図4は、アプリケーション要件の記載方法を例示する図である。
図3は、「SensingApp1」なる名前のアプリケーション要件を記載しており、図示する如く「data」なる名前のデータチャネルCH1と、「alert」なる名前のデータチャネルCH2の複数のデータチャネルを指定している。
データチャネルCH1においては、単一モジュールとしてのモジュール名(AlgorithmName)「AVG」とそのパラメータを記載すると共に、当該チャネルの優先度(Priority)情報が「1」であることを記載している。
同様に、データチャネルCH2においても、当該チャネルの優先度情報が「5」であることを記載している。この場合、優先度情報は数値の大きいものがより優先度が高いものとしている。
図4は、「Trigger」なる名前のアプリケーション要件を記載している。同図中に示す領域AR1では、スループット(Throughput)の性能に係る要件とそのパラメータを記載している。この記載に関しては、他にも、例えば
「BenefitFunction : function(t)‥‥
BenefitFunctionName : Myfunction‥‥ 」
のように記載することも考えられる。
次にアプリケーションの便益について説明する。
アプリケーションは、スループットやレイテンシの性能に関する要求条件を便益として記述できる。
図5(A)、図5(B)は共に、スループットに関するアプリケーションの便益を記載したモデルである。図5(A)では、スループットがx1以下では「0(ゼロ)」、x1からx2に至る間、便益がy1からy2まで増加し、x2以上は一定値y2となる。
図5(B)は、パラメータを3点に増やした場合を示す。
このように、アプリケーションはパラメータ列x1,y1,x2,y2,‥‥で便益を記述することができる。
またアプリケーションは、具体的な便益を求めるプログラム、あるいはそのプログラムの名称を与えるように構成しても良い。
便益の値としては、例えば「1」を受け入れられる最低限の値として取り決めて、例えば、
「Benefit:“function(t){if(t<100){return0}
else{return1}}”
あるいは、
「Benefit:“myOriginalBenefitFunction”」
のような記述により実現できる。
図5(C)は、性能に関するパラメータがレイテンシである場合を記載したモデルである。ここではレイテンシがx1以下では便益が一定値y1、x1からx2に至る間、便益がy1からy2まで減少し、レイテンシがx2以上は「0(ゼロ)」となる。
レイテンシの場合、レイテンシが小さい方が便益が高くなるもので、スループットの場合と同様に、アプリケーションはパラメータ列x1,y1,x2,y2,‥‥で便益を記述することができる。
以下、上記実施形態の具体的な動作について順次説明する。
図6は、IoTシステムで新たなアプリケーションを追加した際の処理内容を示すシーケンス図である。その当初、アプリケーション5が、要件受付インタフェイス6を介して基盤管理部10の要件管理部12に対し、上記図3及び図4で説明したような記載方法によるフォーマットの要件のデータを送信する(ステップS101)。
これを受けた要件管理部12は、配置計算部14に対してアプリケーション追加による要件変更が発生したことの通知を行なう(ステップS102)。
配置計算部14がこの通知に対応し、要件管理部12に対して要件の一覧を取得する要求を行ない(ステップS103)、要件管理部12からその応答情報を受信する(ステップS104)。
併せて配置計算部14は、資源管理部13に対して資源情報を取得する要求を行ない(ステップS105)、資源管理部13からその応答情報を受信する(ステップS106)。
配置計算部14は、こうして得られた最新の状況を示す要件の一覧情報と資源情報とにより配置計算の処理を実行する(ステップS200)。配置計算部14は、この配置計算により、新たに追加された要件を満たす配置構成が得られたかどうかを、再配置可否結果通知として要件管理部12に送信する(ステップS107)。
再配置可否結果通知を受けた要件管理部12では、当該通知に応じて要件の受付可否の回答を、要件受付インタフェイス6を介してアプリケーション5に返答する。
また配置計算部14は、上記配置計算で新たに追加された要件を満たす配置構成が得られた場合、さらに配置実行管理部15に対して算出した配置の指示を行なう(ステップS109)。
この配置計算部14からの配置の指示に従い、配置実行管理部15が複数のデータ処理ノード1,2に対してそのノード上で動作させるモジュールの配置指示を通知する(ステップS110)。
ここで通知される配置指示は、具体的には、モジュール起動、モジュール停止、及びモジュール設定変更の3種類の命令をセットにしたもので構成される。
次に上記配置計算部14が上記配置計算S200により実行する動作手順の詳細について説明する。
図7は、配置計算部14による処理内容を示すフローチャートである。その当初に配置計算部14では、アプリケーションの要求から、求められるチャネルを実現する最小構成のモジュール配置を求める。全てのアプリケーションの要求について同様に実行し、それらの結果すべてを足し合わせたモジュール構成C1を取得する(ステップS201)。
図8(A)は、このとき配置計算部14が配置したモジュール構成C1を例示する図である。3つのセンサ1,1,1の出力データをモジュールA,B,Bにより収集し、アプリケーション1,2にチャンネルCH1,CH2,CH3で取り纏めている状態を例示している。
このステップS201の処理を詳細に説明する。配置計算部14は、まずアプリケーションの要件に記載されているアルゴリズム名と、それに対応した、最小のモジュール構成を作成するプログラム名を、モジュール構成作成プログラム表として記載しておく。
図8(B)は、このとき作成されるモジュール構成作成プログラム表の内容を例示する図である。アルゴリズム名とプログラム名の対応表であり、アプリケーションの要求の、各チャネルの内部に記載されているアルゴリズム名を上記作成したプログラム表から検索し、対応するプログラム名を得る。ここでプログラム名が記述されているプログラムは、予め上記データベース11に格納されている。
すなわち、各プログラムは、上記のように得たプログラム名に対して、アプリケーション中の該当チャネル内のパラメータと、資源管理部13で管理しているデータ処理ノードの構成を追加して与えることで、最小のモジュール構成が取得できるように予め構成された状態で、データベース11に格納されている。
例えば、下記に示すようなアプリケーション要件
「{
name: sample_time_series
Processing: {
AlgorithmName: Time_Series_AVG,
AggretationUnit: 3,
targetSensors: [ “ID−1”]
}」
が与えられたものとする。
図9(A)は、センサ「ID−1」の出力するデータがノード1により収集され、その上位のノード3でさらに他のデータと取り纏められる場合の、データ処理ノードの構成を例示している。
上記図8(B)でも示した、この「Time_Series_AVG」という名前のアルゴリズムは、時系列データがセンサかに出力された際に、定期的な時間のデータの平均値を得るというものである。
上記定期的な時間は、パラメータとして設定でき、本例では「AggretationUnit」の場所に記載されている「3[秒]」が、時系列データの平均を算出する区間となる。
上記図8(B)で示したプログラム名「GEN_MODULE_TIME_SERIES_AVG」のプログラムに対して、上記のアプリケーション要件内のチャネル部分のデータ、データノード構成を与えることで、モジュール構成が作成されて返される。
図9(B)にそのモジュール構成を図示するように、返されたモジュール構成では、センサから始まり、1つ以上、上のモジュールを経由して、チャンネル名で指定されるノードまでの接続関係が情報として表現されている。
また異なる例として、例えば下記に示すアプリケーション要件
「{
name: Tokyo_temperature,
Processing: {
AlgorithmName: AVG_LATEST,
AggretationUnit: 60,
targetSensorsByType:
“&((type=temperature)(region=Tokyo)”
}」
が与えられたものとする。
図10(A)は、このときに渡されるデータ処理ノードの構成を例示するものである。アルゴリズム名「AVG_LATEST」は、複数のセンサの最新値の平均値を得るものであり、「AggretationUnit」に指定されている「60[秒]」毎に、各センサの最新値から平均値を算出して、アプリケーションに届けることを示している。
プログラム名「GEN_MODULE_AVG_LATEST」のプログラムに対して、上記のアプリケーション要件内のチャネル部分のデータ、データノード構成を与えることで、モジュール構成が作成されて返される。図10(B)にそのモジュール構成を図示する。
上記図9に示した例では、センサのIDを直接指定していたのに対し、ここでは要件をセンサの属性により指定している。ここでは、「LDAP Filter」の書式に基づいて記載されており、センサタイプが「温度センサ(temperature)」であり、且つ地域(リージョン)が「東京(Tokyo)」に配置されているセンサを指定している。
このような指定を可能にすることにより、IoTシステムで日々追加されていくセンサに対して、アプリケーションはそのアプリケーションを指定する必要がなくなり、なおかつ、新しく追加されたセンサの構成に対応して、モジュールの配置計算を実視できる、という利点が生じることになる。
上記図7のステップS201における最小モジュールの構成が終了すると、次に配置計算部14では第1のモジュール共有化処理として、モジュール共有化処理が実施できれば、そのまま実施してモジュール構成C2を取得する(ステップS202)。
図11(A)は、上記図8(A)で示したモジュール構成に対して、2つのモジュールBを共有化したモジュール構成C2を例示している。
このステップS202の処理内では、構成中のモジュールを共有化することで、
(1)処理内容に変更なくモジュール数を減らすことができる場合、及び(2)モジュールの数は減らないが、処理に用いられるリソースを削減できる可能性がある場合を探索する。
構成内の2つのモジュールに注目し、共有できるかどうかをチェックし、共有できる場合はその置換を行なう。さらに、共有化できるモジュールがあれば共有化を行なう、という処理を、それ以上の共有化が不可能であると判断するまで繰返し実行する。
ここであらためて共有化できる場合をケース分類化すると、
(1)同タイプ同設定
(2)同タイプ異設定
(3)上位互換モジュールとの共有化
(4)相互の上位互換モジュール
となる。
上記(1)の同タイプ同設定は、同一の入力を受け取っており、同一のタイプのモジュールで、設定が同一である場合を示す。
上記(2)の同タイプ異設定は、同一の入力を受け取っており、同一のタイプのモジュールで、設定が異なる場合を示す。この場合、図11(B)に示す共有化プログラム表で定義される、モジュール名に対応するプログラム名に対応したプログラムを用いて、異なる2種類の設定を渡すことで、当該プログラムにより変換可能な構造の集合が返されるので、返された構造に置換する。
置換の種類が複数可能である場合には、複数の結果が返される。複数ある場合には、それぞれの構造について処理を継続する。また、共有化が不可能な場合や、存在しても非効率な場合は、共有化は行なわないものとして、空集合が返される。
上記(3)の上位互換モジュールとの共有化は、図11(C)に示す上位互換共有化判定プログラム表を参照することで、そのモジュール名に対応する上位互換モジュール名と上位互換共有化判定プログラム名があるか否かにより、当該モジュールの上位互換モジュールの有無を判定できる。
注目する2つのモジュールにこの上位互換性の関係がある場合、共有化できる可能性がある。この上位互換共有化判定プログラム表で参照される上位互換共有化判定プログラムに対して、共有に関するモジュール名と設定をパラメータとして問い合わせることで、共有化した後の構造の集合が返される。返された構造の集合が複数ある場合には、それぞれの構造について処理を継続する。
例えば複数のモジュール中に、図11(C)に示す上位互換共有化判定プログラム表中の、5[秒]間毎の最大値を算出するモジュール「MAX」と、5[秒]間毎の統計を算出するモジュール「STAT」とが存在した場合、後者の上位互換モジュール「STAT」の方で共有化できる。
上記(4)の相互の上位互換モジュールは、注目する2つのモジュールに共通する上位互換モジュールが存在する場合に、その上位互換モジュールで共有化できる可能性がある場合を示す。上記(3)の上位互換モジュールとの共有化の場合と同様に、評価から検索した、上位互換共有化判定プログラムに問い合わせて、置換可能なモジュールの構成群を得る。
図12は、第1のモジュール共有化処理の第1の例を示す図であり、上記(1)の同タイプ同設定の場合を示す。図12(A)に示すようなモジュール構成があった場合、モジュールM102とモジュールM103に注目すると、同一の入力、同一のタイプ、且つ設定が同一であるため、図12(B)に示すように、モジュールM102に共有化できるものとして、モジュールM103の存在を廃することができる。
図13は、第1のモジュール共有化処理の第2の例を示す図であり、上記(2)の同タイプ異設定の場合を示す。図13(A)に示すようなモジュール構成があった場合、モジュールM202とモジュールM203に注目すると、同一の入力、同一のタイプ、で設定のみが異なる。ここで、上記図11(B)で示したプログラム「SHARE_MAX」に問い合わせることで、図13(B)中のモジュールM206に示すような構成が返却される。
すなわち、共有化処理によるモジュール数は変化していないものの、システムの消費リソース数が抑えられるものとなる。
例えば、図中のセンサID−1が、秒間に1000個の計測データを出力する場合、図13(A)に示す構成では、モジュールM204とモジュールM205でのメッセージ量は秒間2000個となる。
一方、図13(B)に示す共有化後の構成では、モジュールM207とモジュールM206の秒間合計のメッセージ量は1001個となり、概ね半減することが可能となる。
また計算量においても、共有化前のモジュールM202とモジュールM203で秒間2000回の処理を行なっていたのに対し、共有化後のモジュールM208とモジュールM210で秒間1001回の処理と、計算量も概ね半減できる。
なお上記プログラム「SHARE_MAX」は、MAXモジュールを習熟した開発者によって記載されたプログラムであることを前提とする。
図14は、第1のモジュール共有化処理の第3の例を示す図であり、上記(3)の上位互換モジュールとの共有化の場合を示す。図14(A)に示すようなモジュール構成があった場合、モジュールM302とモジュールM303に注目すると、上位互換モジュールとの共有化に該当する。ここで、上記図11(C)で示したプログラム「UP_SHARE_CHECK_STAT」に問い合わせることで、図14(B)中のモジュールM309に示すような構成が返却される。
ここでは共有化により、モジュール数が増加するものの、システムの消費リソース数が抑えられるものとなる。
図中のモジュールM302、モジュールM308に示す「STAT」は、入力されるデータの統計量を計算するモジュールであり、JSON(Java Script(登録商標) Object Notation)的な記述フォーマットでは、例えば
「{
“max”:120,
“min”:12,
“avg”:60,
“n”:1000
“sum”:64000,
“sum2”:5888800
}」
(但し、maxは最大値、minは最小値、avgは平均値、nはデータ個数、sumはデータの合計、sum2はデータの二乗和。)
のような記述内容となる。
また図14(B)中のモジュールM313「EXTRACT」は、「param」として指定されているデータを抽出するモジュールであり、上述したフォーマットを受けると「max」の値120を出力する。
例えば、図中のセンサID−1が、秒間に1000個の計測データを出力する場合、図14(A)に示す構成では、モジュールM304とモジュールM305でのメッセージ量は秒間2000個となる。
一方、図14(B)に示す共有化後の構成では、モジュールM307、モジュールM311、モジュールM312の秒間合計のメッセージ量は1002個となり、概ね半減することが可能となる。
また計算量においても、共有化前のモジュールM202とモジュールM203で秒間2000回の処理を行なっていたのに対し、共有化後のモジュールM308、モジュールM311、モジュールM312で秒間1002回の処理と、計算量も概ね半減できる。
図15は、第1のモジュール共有化処理の第4の例を示す図であり、上記(4)の相互の上位互換モジュールの場合を示す。図15(A)に示すようなモジュール構成があった場合、モジュールM402とモジュールM403に注目すると、相互の上位互換モジュールで共有化できる。ここで、上記図11(C)で示したプログラム「UP_SHARE_CHECK_STAT」に問い合わせることで、図15(B)中のモジュールM412に示すような構成が返却される。
ここで共有化により、モジュール数が増加するものの、システムの消費リソース数が抑えられるものとなる。
ここでは、上記図14に示した場合と同様に、簡単な統計量を得るモジュール構成の場合について説明したが、本実施形態はこれに限らず、データの例は画像、複合センサの値や、機械学習用に加工したデータなど、IoTシステム上で様々なものを取扱うことが可能であるものとする。
上記図7のステップS202における第1のモジュール共有化処理が終了すると、次に配置計算部14では等価モジュール展開処理として、上記モジュール構成C2に含まれる各モジュールについて、可能な置き換え処理を実行し、それをモジュール構成の集合C3として格納する(ステップS203)。
すなわち、上記モジュール構成C2に含まれるモジュールについて、等価なモジュール列を求めて、置き換えをおう。ここで等価なモジュールとは、置き換えたとしてもデータ処理上は同一の処理が行なえることを示す。各モジュールについて、置き換え対象が複数ある場合、それらすべてのパターンを置き換える。
例えば、上記図11(A)で示したモジュール構成C2で、モジュールAとモジュールBの2つのモジュールがあった場合、それぞれに2通りの置き換えパターンがあれば、9種類のモジュール構成をモジュール構成の集合C3として出力する。
図17は、この点をあらためて説明する図である。モジュールAの等価モジュールとしてモジュールA1とモジュールA2があり、モジュールBの等価モジュールとしてモジュールB1とモジュールB2があるものとする。この図17のモジュール構成の状態を[A,B]と記述すると、上記ステップS203での等価モジュール展開処理により、[A,B][A,B1][A,B2][A1,B][A1,B1][A1,B2][A2,B][A2,B1][A2,B2]の計9種類のモジュール構成が置き換え可能な等価のモジュール列として出力される。
実際に等価なモジュール列の集合を求める方法は2通り存在する。
第1の方法は、上記図1の基盤管理部10内のデータベース11に予め用意する等価モジュール表に記載されたモジュール列を検索することで、等価なモジュール列の集合C3を求める方法である。
図16(A)は、この等価モジュール表の内容を例示するものであって、データベース11を検索することで等価なモジュール列の算出が可能となる。なおこの図16(A)に示す表では、各モジュールの設定が1つである場合について説明しているが、2つ以上であっても良い。
また図17では、置換先のモジュールは2個である場合について説明したが、3個以上であっても良い。置換先モジュールが最大nとなるような表においても、n未満の数kの置換モジュール列を、置換先モジュールk+1の値を空白にすることで表現が可能となる。
また第2の方法は、等価なモジュール列を求めるプログラムが、上記図1の基盤管理部10内のデータベース11に予め用意する等価モジュール列算出プログラム表に登録されており、当該表を用いた問い合せを実行することで、等価なモジュール列の集合C3を得る方法である。
図16(B)は、この等価モジュール列算出プログラム表の内容を例示するものであって、ここで示されるプログラムに対して、置換元のモジュール名、及び置換元の設定パラメータを渡すことで、置換先モジュールの配列と、その設定とが当該プログラムから返される。
また上記等価モジュール列算出プログラム表で示されるプログラムに、生成するモジュール数の上限を与えることもできる。等価モジュール展開の目的としては、垂直方向に経由するデータ処理ノード数に対して処理を分散するための候補を得ることと、より基本的なロジックに分解することで、上述したモジュール共有化の実現角度を上げることにある。
したがって、垂直方向に経由するデータ処理ノードの数に対して大きい数の等価モジュールに展開したとしても大きな効用は得られず、無駄に計算時間を消費するという結果が得られるだけとなる。そのため、生成するモジュールの上限としては、垂直方向に並ぶデータ処理ノードの数の2倍程度を与えれば十分であると考えられる。
なお上記図16(B)で示した等価モジュール列算出プログラムは、対応するモジュールの性質を習熟した開発者によって記載されたプログラムであることを前提とする。
上記図7のステップS203における等価モジュール展開処理が終了すると、次に配置計算部14では第2のモジュール共有化処理として、上記モジュール構成の集合C3の各要素に対して、モジュール共有化処理が実施できれば、そのまま実施してモジュール構成の集合C4に加える(ステップS204)。
なお、上記ステップS202で説明した共有化処理とほぼ同様の手法で共有化処理を実行するが、上記ステップS202では見つけた順序に従って共有化処理を行なっていたのに対し、ここでは共有化を行なう順序もバリエーションとして考慮する点で相違する。
すなわち、モジュール構成C2に含まれるモジュールの内、共有可能なモジュールの組み合せを検索し、その候補毎に共有化した構成を得る。
図18(A)は、具体的なモジュール構成の例を示している。ここでは、モジュール構成C2が部分モジュール構成S301,S302を有し、部分モジュール構成S301のモジュールM1とモジュールM2を共有化してモジュール構成S304、同モジュールM2とモジュールM3を共有化してモジュール構成S303、モジュールM2とモジュールM3を共有化してモジュール構成S305をそれぞれ求めるものとする。
この手順を、モジュール構成C2内の別の部分モジュール構成S302や、上記新たに作成されたモジュール構成S303,S304,S305に適用し、さらに新たなモジュール構成で作成できなくなるまで繰返し実行することで、図18(B)に示すようなモジュール構成の集合S310が生成される。
上記ステップS204で作成するモジュール構成の集合C4としては、モジュール構成の集合S310に含まれるすべての構成を入れても良いし、また集合S310の端部側に存在する、それ以上共有化が進められない構成と311,312,S313,S314,S315のみをモジュール構成の集合C4に入れても良い。
これらは、配置計算部14による配置計算に要するコストと、最適解の探索の漏れをどの程度許容するかの兼ね合いにより決定される。
上記図7のステップS204における第2のモジュール共有化処理が終了すると、次に配置計算部14では実ノードデバイスへの割付処理を実行する(ステップS205)。
ここで配置計算部14では、上記モジュール構成の集合C4の要素である個々のモジュール構成に対して、モジュールを各データ処理ノードに割り付けて、その構成を集合C5に加えていく。割り当て方法が複数ある場合には、複数の要素として上記集合C5に加える。
より詳細には、まず注目する構成に対応して、データ処理ノードの構成への割り当てを行なう。図19(A)は、注目する構成であるモジュールA、モジュールBからなる2つのモジュールを示した例である。図中の「VL」は仮想的なリンクを意図する接頭語である。
これに対して、図19(B)は、データ処理ノードであるノード1〜ノード4の構成を例示している。図中の「PL」は物理的なリンクを意図する接頭語である。
基本的には、モジュール数とノード数との積の数だけ割付方法が存在するが、その中には明らかに非効率である方法、実行が困難である方法が含まれているので、それらの方法を除いていく。
一方のデータ処理ノードでは、用意されているリソース量や、その保持している特別な機能も管理している。また、例えばCPUのタイプなどのハードウェア上の特性なども管理している。
他方の、データ処理を行なうモジュールについても、最低限必要なリソースや、必要とする特別な機能、必要なCPUのタイプなどのハードウェア上の特性を管理している。
したがって、これらモジュールとデータ処理ノードの各情報に基づいて、割付可能なパターンを生成する。例えば、図19に示した各構成において、
ノード3←モジュールA、且つ
ノード1←モジュールB
のパターンと、
ノード3←モジュールA、且つ
ノード2←モジュールB
のパターンの計2種類のパターンを算出できる。
なお実際に実ノードデバイスへの割り付けを実行するに当たって、配置計算部14は図20(A)に示すような、資源管理部13で管理されるノード情報のテーブルを参照することで、割り付けが困難なモジュールを算出できる。
モジュールが対応しているCPUアーキテクチャでなければそのノードを配置することはできず、モジュールの必要とするリソースが当該データ処理ノードのリソース量を超えている場合も同様に配置は困難となる。
なお、1つのデータ処理ノードでは、共有化により複数のモジュールが動作することになるが、このステップS205では、他のモジュールに関しては考慮せず、単一のモジュールがそのデータ処理ノードのリソースを占有した場合に配置可能かどうかを判定する。
また資源管理部13には、図20(B)に示すモジュール情報と、図20(C)に示すセンサ情報とが併せて管理されている。
このモジュール情報における「1Eventに必要な処理ステップ数」「必要メモリ数」「必要ストレージ量」「データ出力頻度」「出力データサイズ」や、センサ情報における「Event発生頻度」「データサイズ」については、固定値のようにして記載しているが、統計的な数値、例えば最小値、最大値、平均値、標準偏差などを記載し、それらの記載内容に基づいて統計的な判断を実施して、割り付けの可否を判定しても良い。
なお、上述した如く、テーブルを探索することで必要なリソース量を見積もる構成とする以外にも、モジュールの開発者によって作成された、別の目的のプログラムであるモジュールのヘルパープログラムに対して、必要なリソース量を問い合わせる仕組みで実現するものとしても良い。
その場合、入力イベント頻度を引数として渡す構成とすることにより、必要リソースが、入力イベント頻度の関数となる場合でも、高い精度で近似することができる。
続いてネットワークのリソースを割り付ける場合について説明する。
ここでは、図21に示すように示すように、
モジュールA:ノード3、且つ
モジュールB:ノード1
に割り付ける場合を例にとって説明する。
前のステップS204で決定されたモジュール間のリンクをマッピングすることで、
PL4←VL3
PL5←VL4−1
PL3←VL4−2
PL2←VL4−3+VL2
PL1←VL1
となる構成を割り付けることができる。ここで、仮想的リンクVL4は、仮想的リンクVL4−1,VL4−2,VL4−3の連結として表されている。
上記図7のステップS205における実ノードデバイスへの割付処理が終了すると、次に配置計算部14では収容可否の判定処理を実行する(ステップS206)。
配置計算部14は、資源管理部13に問い合わせたリソース量に対して、上記モジュール構成の集合C5の要素が収容できるかどうかを判定し、可能であると判定した場合に集合C6に収容する。また、その際に、各リソースの利用率を合わせて算出しておく。
図22(A)は、資源管理部13に管理されるリンク情報のテーブルを例示する図である。上記モジュール構成の集合C5の要素には、物理的なリソースに対する割当構成が含まれている。例えば、
ノード1←モジュールB+モジュールC
ノード2←モジュールA
PL4←VL3
PL5←VL4−1
PL3←VL4−2
PL2←VL4−3+VL2
PL1←VL1
となる構成が挙げられる。上記記号「←」は、この記号を挟んで右辺側のモジュールあるいは仮想的リンクを左辺側の物理的リンクに割り当てることを示している。
ここで配置計算部14は、物理的な資源の各要素が、割り当てられる対象の該当要素の総和を上回っていることを確認する。
すべての物理的資源において、上記が満たされているならば割当可能であるものと判定して、上記集合C6の要素として格納する。
なお、安全係数(k)を「0.9」として、上記の比較を行なうこともできる。この場合、次式
物理的な資源の各要素*k<Σ(割当対象の該当する各要素)
が成立するか否かにより、物理的な資源の各要素が、割り当てられる対象の該当要素の総和を上回っていることを確認する。なお、上記安全係数(k)は、リソースの種別毎に異なるベクトルk=(k1,k2,‥‥,kn)を予め用意するものとしても良い。
さらに、上述した如く各要素のリソースの利用率も算出し、ベクトルとして保持しておく。ここで保持する内容は、次式
Σ(割当対象の該当の各要素/物理的資源の各要素*k)
で表される。図22(B)は、このとき配置計算部14により保持されるリソース使用率のベクトルを例示するものである。
なお、課金モデルも含めて計算を行なうことで、当該構成において一定期間、例えば1ヶ月間運用する場合のコストを算出することもできる。上記リソースの使用率、及びコストの情報を、集合C6に格納する際の付加情報として併せて格納する。
上記の処理を、上記集合C5に含まれるすべての要素について実施することで、新たなモジュール構成の集合C6が作成される。
なお、アプリケーション要件中に性能要件が記載されている場合には、そのアプリケーション要件中の性能要件への適合性の確認も、上記収容可否の判定処理の一部として実施する。
この場合、実際に割り当てられた構成に関して、各モジュールの処理ステップ数、格データ処理ノードの、単位時間当たりの演算可能ステップ数、及び各ネットワークの帯域から、スループットやレイテンシを算出できる。
これによって、各アプリケーションの便益と比較する。便益が1未満となるアプリケーションが存在した場合には、その構成は適合していないものと判断する。
また、アプリケーションの便益を、例えばベクトル「bapp1」「bapp2」‥‥「bappn」に対応するベクトル値「1.1」「1.2」‥‥「1.5」からなるベクトル列としておき、構成に付属した情報として保持しておくことで、後のステップで利用するものとしても良い。
上記図7のステップS206における収容可否の判定処理が終了すると、最後に配置計算部14では、最適構成の選択処理を実行して(ステップS207)、以上でこの配置計算の処理を終了する。
より詳細には、配置計算部14は集合C6の要素と、それに付加されているリソース使用率のベクトル、及び月間等のコストの情報により、最適な構成を判断する。
そのための手法としては、「1.リソース使用率の平均が低いもの」「2.リソース種別に応じて重みを変えたリソース使用率の平均が低いもの」「3.最大のリソース使用率が低いもの」「4.月間コストが最低のもの」「5.アプリケーションの便益が高いもの」のいずれかで判断することが考えられる。
以下、特に上記「1.」乃至「3.」の各手法に関しては、目的関数を例示する。
上記「1.リソース使用率の平均が低いもの」では、例えば目的関数として次式
avg(r1,r2,‥‥rn)
を用いる。
上記「2.リソース種別に応じて重みを変えたリソース使用率の平均が低いもの」では、目的関数
a=(r1,r2,‥‥rn),且つ Σan=1となるaをrに乗じた、
a・r=a1×r1+a2×r2+‥‥+an×rn)
を用いる
上記「3.最大のリソース使用率が低いもの」では、システム全体での安全係数に、目的関数
max(r1,r2,‥‥rn)
を用いる。
さらに、上記「1.」〜「5.」で示した手法を複数組み合わせて判断することによっても、上記ステップS207での最適構成の選択処理を容易に実現できる。
なお、上記図7以下で説明した配置計算部14による配置計算の方法では、可能な構成をすべて列挙した後に最良のものをそれらの中から選択する、という方法をとっていた。
一方で、局所探索法というアルゴリズムが知られており、この局所探索法を適用した方法でも最適な構成の配置構成を得ることができる。
図23は、その処理過程を簡略化して示すものである。上記ステップS202の第1のモジュール共有化処理で得られた初期構成(S501)を出発点として、等価モジュールの展開処理(E)や、共有モジュール化処理(S)の手順を1つずつ進めて、モジュール構成を増やしていく。
その構成について、実ノードデバイスへの割付処理と収容可否の判定処理とを行ない、上述した目的関数による演算を適宜実行して、その構成に対する評価を取得する。
それらの評価値の中で最も高い値となった構成から、さらに等価モジュールの展開処理(E)や、共有モジュール化処理(S)を進めるか、あるいは進めるケースが存在しない場合には一旦前のノードに戻り、あるいは、ある程度の目的関数の改悪を許容して、探索するノード構成を全ノード内から選択し直す、などの工程を順次実行する。
これらの手順を、ある程度の回数だけ繰返し実行することで、探索した中から最良の回を得るものである。上記した繰返しの程度としては、予め決められた回数を実行した場合、目的関数の向上が収束した場合、全部の可能な構成を探索した場合、アニーリング法と呼ばれる目的関数の改悪する遷移を許す温度パラメータを用いて判定する場合などのいずれかが選択可能となる。
さらに、上記図23で示した局所探索法では、一度割付可能な構成を求めた場合に、その構成で一旦データ処理ノードにモジュールを配備して機能提供を開始した後、並行して、より良い構成の探索を行ない、特定の時間が経過したタイミングで、より良い構成に変更する、という手法を採ることも可能となる。
また上記図6のステップS107において、配置計算部14から再配置の可否を示す結果の通知を受けた要件管理部12では、その通知の内容が、リソースが不足しており、割り当てるモジュール構成が存在しないものであった場合に、次の手順を実行するものとしても良い。
すなわち要件管理部12は、複数のアプリケーション要件のうちで、重要度の低いものを停止させることで、新規アプリケーションを受付けられるかを探索する。新規のアプリケーション要件のうち、最大の優先度となるアプリケーション要件を残して、その他のアプリケーション要件を除外した上で、配置計算部14に対して再度の配置計算を要求する。この要件を考慮する最低の優先度を「実行可能優先度」と呼称することとする。
例えば、既存のアプリケーション要件とその優先度が、
10:App_Critical
7:App_Important
4:App_soso
1:App_just_test
であり、新規のアプリケーション要件とその優先度が
8:App_Very_Important
5:App_just_for_fun
であった場合に、「実行可能優先度」として上記新規側の「8」のアプリケーション要件を選択する。
この状態で配置計算部14により再度の配置計算が行なわれ、アプリケーション要件を実行可能なモジュール構成が得られない場合は、その通知の内容に従って、上記ステップS108において、要件管理部12がアプリケーション5に対して要件受付の可否回答として不可である旨を通知する。
また再度の配置計算の結果、アプリケーション要件を実行可能なモジュール構成が得られた場合、配置計算部14では実行可能優先度を1減じた上で再度配置計算を実行する、という処理を、アプリケーション要件を実行可能なモジュール構成が得られなくなるまで繰返し実行する。
アプリケーションの示した新規の要件をすべて実行可能であると判定できた場合は全面的に可である旨の通知、一部分であるが実行可能であると判定できた場合は部分的に可である旨の通知を回答として通知する。
また、上記実施形態では説明しなかったが、データ処理ノードにおいて、リソースと動作させているモジュールを管理する小さなエージェントを、例えば利用資源管理部として動作させ、その利用資源管理部で測定された消費リソースを用いて、上記資源管理部13が管理するモジュール情報中のリソース量を更新設定することで、動的なモニタリングによる必要資源の算出が実現できる。
図24は、このときのシーケンス図を例示する。例えばデータ処理ノード1が有する利用資源測定部が、予め設定されたタイミングで配置実行管理部15に対してその時点での資源利用情報を通知する。
これを受けた配置実行管理部15が、同通知を資源管理部13に転送することで、資源管理部13ではモジュール構成に必要なリソース量を更新する処理を実行する。
なお上記の処理は、データ処理ノードでモジュールを1つだけ実行している場合に実行するものとする。
また、モジュールの「資源管理部13で管理されているモジュール情報」に「精度高く測定されているフラグ」を付与設定することも考えられる。その場合、1つのデータ処理ノードで複数のモジュールが実行されているが、「精度高く測定されているフラグ」が付与されていないモジュールが1つだけである場合は、当該データ処理ノードでの全体の使用量から、「精度高く測定されているフラグ」が付与されているモジュールのリソース量を減算した差を、上記フラグが付与されていないモジュールの使用リソース量と見做して、更新することもできる。
また、モジュールを切り替える際には、切り替え前後のモジュールを同時に配置し、センサデータに付与されている時刻、シーケンス番号に基づいてモジュールの切り替えを実行することにより、センサデータの欠落なしに、より効率的なモジュールへの切り替えを実施できる。
図25は、このモジュールの切り替え処理を例示する図である。
同図では、センサID−0からのセンサデータが最初はデータ処理ノードAを介して、切り替え後はデータ処理ノードBを介してチャンネル0に入力される場合を例示している。当該センサデータには、タイムスタンプやシーケンス番号が格納されている。
図25(A)において、配置実行管理部15はチャンネル0に対し、データ処理ノードBからの入力を指示があるまで無視するように伝える。
その後、図25(B)に示すように、データ処理ノードBを配備し、データ処理ノードBからも、直近で受信したセンサID-0からのデータ中のタイムスタンプ及びシーケンス番号を取得する。
ここで配置実行管理部15は、チャンネル0に対して、一定の余裕を持った時間、例えば1[秒]乃至5[秒]程度の後の、センサデータ中のタイムスタンプ及びシーケンス番号を通知して、そのタイムスタンプ及びシーケンス番号を越えてデータ処理ノードAから入力されるデータを無視すると共に、データ処理ノードBから入力されるデータを使うよう設定する。
このように、センサデータの入力が中断することなく、配置しているモジュールの切り替えを行なうことが可能となる。
次に異常状態でモジュールを停止させる場合について説明する。
上記したように各データ処理ノードが利用資源測定部を有しているものとした場合、当該利用資源測定部は、そのノードで許容する収容上限、例えばリソース容量の80[%]を越えているかどうかを監視しており、その上限を超えた場合に、利用するアプリケーションのモジュールの優先度が低いモジュールを停止させて、より優先度の高いアプリケーションに影響が出ないように制御する。
図26は、異常状態でのモジュール停止の実現方法を例示する図である。
図26(A)に示すように、データ処理ノードでは、利用資源測定部M601において、CPU、メモリなどのノード内のリソースを監視している。リソースの使用率が、予め設定された値、例えば80[%]を越えた場合、図26(B)に示すように、例えばデータ処理ノード1から配置実行管理部15に対して、現在のリソースの使用状況と共にリソースが枯渇した旨の通知を行なう(ステップS501)。
配置実行管理部15は、この通知に対応して実行可能優先度の計算と再設定処理を実行した上で(ステップS502)、各データ処理ノード1,2にモジュール停止命令を送信する(ステップS503,S504)。
一方で配置実行管理部15は、要件管理部12に対して実行可能優先度の変更通知を送信する(ステップS505)。これを受けた要件管理部12は、アプリケーション5に対して停止を通知する(ステップS506)。
上記配置実行管理部15が、実行可能優先度の計算を行なう方法はいくつかある。例えば、
1.当該データ処理ノードで動作する最低優先度のモジュールに設定されている優先度よりも1だけ高い優先度とする手法、
2.予め、実行可能優先度を変えた場合の、理論的な各リソースのリソース使用率を算出しておき、当該リソースの釣果を解消できるような、実行可能優先度を選択する手法、
等である。
図27は、配置実行管理部15による実行可能優先度とモジュールの管理の内容を例示する図である。
配置実行管理部15は、図示する如くデータ処理ノード毎の「モジュール名」と「対応するアプリケーションの最高優先度」、及び「実行状態」からなるテーブルを管理しており、モジュールが関係するアプリケーションのうち、最高の優先度のものを保持しておく。
システム全体の実行可能優先度が変更された場合、配置実行管理部15では、上記テーブル中の「対応するアプリケーションの最高優先度」が、「実行可能優先度」以上となるモジュールを起動するよう、各データ処理ノードに命令する。
次に安全係数の変更処理について説明する。
上記配置計算部14は、各データ処理ノード、各リンクに対して安全係数を設定しておき、全リソース容量に安全係数を乗じた積を越えないように、モジュールの配置を計画する。
また、実際にアプリケーションを実行中、上記安全係数を再設定することを可能とする。この場合、安全係数を変更したい場合には、動作が不可能となるアプリケーションの有無を検討し、そのようなアプリケーションがある場合には、その旨をシステム管理者に提示する。そして、提示した内容が了承される操作がなされた後に、当該アプリケーションに関するモジュールを停止し、実際に安全係数の変更設定に関する処理を実行する。
なお、上記安全係数を変更した後に、上述した実行可能優先度に基づくアプリケーションの選択処理と同様の手順によって配置計算を実行することで、実行可能優先度を算出することができる。
したがって、この実行可能優先度の値以下となるアプリケーションを選択し、システム管理者に提示して確認を求める。システム管理者により確認が得られた場合に、上記安全係数の変更、及び実行可能優先度の変更を実施し、それらに伴うモジュールの停止を実施する。
モジュール構成の配置を決定するタイミングとしては、新たなアプリケーションを追加する場合、及び安全係数を変更する場合を例にとって説明したが、これらの他にも、データ処理ノードが追加された場合、データ処理ノードが仮想化された計算機であって、割り当てられているリソースが変更された場合、ネットワークの容量が変更された場合、アプリケーションの要件が変更になった場合、センサの設置状況が変更された場合にも受信可能であり、これらの各タイミングにおいて同様の方法で実施できる。
また、上記図25を用いて説明した如く、無中断でデータ処理ノードの切り替えを行なう場合には、一時的に動作させるモジュールの数が多くなる場合がある。その際には、上述した安全係数の変更設定を併せて一時的に実施し、優先度の低いアプリケーションに関するモジュールを停止させて、その後に上記無中断でのデータ処理ノードの切り替えを行なって、切り替え後に再度安全係数を元に戻す変更設定を行なうことで、優先度の高いアプリケーションに関しても、無中断でのモジュールの切り替えを実施することが可能となる。
以下、図28乃至図32を用いて、これまでの説明を統括して、モジュール構成の再配置を行なう場合の動作について説明する。
図28は、モジュールのチェーン化と等価交換の例を示す。図28(A)に示す、6[秒]毎の統計化を行なうモジュール「データ処理1」は、図28(B)に示す、2[秒]毎の統計化を行なうモジュール「データ処理2」、及びデータ3つ単位で統計化を行なうモジュール「データ処理3」の2段構成の列(チェーン)に置換しても、等価交換が成立する。
上記図28(A)に示したモジュール構成から、図28(B)に示すモジュール構成へと配置を変更する場合を考える。
図29は、中間データモジュールの組み換えによるリソース削減の例を示す。
まず図29(A)に示すように、6[秒]毎の統計化情報が欲しいアプリケーション1が既存のアプリケーションとして動作しており、そこに、同一のセンサの4[秒]毎の統計化情報が欲しい、新規のアプリケーション2が起動されたものとする。
上述した「最小モジュールの取得」処理により、この図29(A)に示すような配置計画が実行される。また、上記図23を用いて説明した「局所探索法の適用」にて記述した方法で実施する場合で、且つ、後述する図29(B)の構成を取得するまでに時間を要する場合には、この図29(A)に示したモジュール構成で、とりあえず実際の運用が開始されるケースもあり得る。
これに対して図29(B)に示すように、上記図29(A)のモジュール構成と等価のモジュール構成に変換し、さらにモジュール構成の共有化を図ることで、センサに対して(最大公約数である)2[秒]毎の統計化を行なうモジュール「データ処理3」と、データ3つ単位で統計化を行なうモジュール「データ処理4」、及びデータ2つ単位で統計化を行なうモジュール「データ処理5」とによる構成に置換することで、所望のモジュール構成を得ることができる。
例えばセンサからのデータが秒間に100件あるような場合には、図29(B)に示すようなモジュール構成に変更することで、データ処理ノードの負荷を大幅に低減できる。
また、アプリケーション1,2には、上記図29(A)に示した場合と同様の内容の処理データが渡されている。
次に、図30により、上記図29で説明した手法に代わる、中間データモジュールの組み換えによるリソース削減の第2の例を示す。
図30(A)は、アプリケーション1に対して、全国に配置されたセンサからの統計情報を計算して提供している。そこに、特定地域に関する統計情報が欲しいアプリケーション2を新規に追加するものとする。
図30(B)は、「最小モジュールの取得」処理による配置変換により、上記図29(A)と同等のモジュール構成とした場合を示す。
このモジュール構成に対して、複数のセンサが設置された地域に対応して、特定地域の統計化情報が欲しいモジュール「データ処理2」と、それ以外の地域の統計化情報を処理するモジュール「データ処理1」とにセンサ/モジュール間の接続構成を変えた上で、それらの統計化情報を取り纏めて全国の統計化情報を取得するモジュール「データ処理3」を配置するモジュール構成となるように、上述した如く配置計算を行なうことにより、図30(C)に示すような、モジュール構成に変換することが可能となる。
なお、上記図30では、説明を簡略化するためにセンサが4個の場合について図示により説明したが、例えば100個程度のセンサがあった場合に、上記図30(B)で示したモジュール構成に比して、図30(C)で示したモジュール構成の方が、使用リソースの量を大幅に削減できることが容易に理解できる。
次に図31によりモジュール変換の例について説明する。
例えば、各地に配備されているカメラ画像の中から、顔検出処理を行ない、比較対象の顔画像との類似度を算出し、一定の値以上となった、類似度が高いと判断された場合に通知を行なうようなアプリケーションを例にとって説明する。
図31(A)は、センサであるカメラから得たセンサデータとしての画像データに対し、サーバで類似度比較(ステップE101)を行なうものとした場合に、カメラからサーバまでのネットワークが、律速段階となる可能性がある。
その場合、図31(B)に示すように、ゲートウェイ2上で、比較的軽量な事前処理、具体的には顔検出処理及び顔領域の切り出し処理(ステップE102)までを行ない、データ量やデータ頻度を下げた上で、上位のサーバによる類似度比較処理(ステップE103)を行なうものとするようにモジュール構成を変換する。
このようなモジュール構成の変換により、ネットワーク上の転送量を下げて、全体的に使用リソース量を削減できる可能性ができる。
上記類似度比較モジュールが、1つのクラウド上のインスタンスにおいて実行されているものとする。1つのデータ入力に対する実行処理が大きい場合、そのスループットがアプリケーションの要件を満たせなくなる場合もあり得る。
図32(A)は、上記図31(B)と同様のモジュール構成を示すもので、モジュール構成が1つである場合を示している。
このような構成に対して、図32(B)は、類似度比較処理(ステップE103)を複数のデータ処理ノードに分割するものとして、その前段に振り分け処理(ステップE104)を配置すると共に、その後段に結果集約処理(ステップE105)を配置して、類似度比較処理(ステップE103)を複数のノードに分散化して、スループットを改善できる可能性を得るようにした例を示す。
なおこの図32(B)に示すモジュール構成では、経由するモジュールの数が増えているため、レイテンシは増加するものと考えられる。
上記実施形態によれば、データをすべてクラウドに集めるのではなく、ネットワーク上の垂直に分散した処理ノードに適切に処理を分散することで、効率的にデータ処理を行なうことが可能となる。
また、モジュールの配置設計が、開発者や運用者ではなく、システムにより機械的に計算されるため、対応の稼働が小さくなると共に、新しいアプリケーションの配備が迅速化し、適時化できるようになる。
このことにより、同一の資源上で複数のアプリケーションを実行させることが容易となる。
さらに、アプリケーションの用件を書くことにより、管理者がモジュール配置の設計や実施を行なう必要がなく、管理コストを抑えて、迅速に対応させることができる。
加えて、トラフィックの増大や、異常プロセスの発生などがあった際に、優先度の低いアプリケーションに関するモジュールを止めることで、優先度の高いアプリケーションの動作を継続させることができる。
なお、以上の説明では、具体的なモジュールの例を用いて説明したが、本発明はモジュールの内容等を限定するものではなく、新たなデータ処理モジュールや、アプリケーション要件に記載される新たなアルゴリズムが導入されたとしても、これらに対して作用させることのできる「モジュール構成の作成プログラム」「共有化判定プログラム」「等価モジュール列の算出プログラム」が提供されれば、対応可能となる。
データ処理モジュールやアルゴリズムについては、アプリケーション側からの需要により非常に多岐にわたるものを作成することができる。また、その仕組みを知るものについては、そのヘルパープログラム(上記した「モジュール構成の作成プログラム」「共有化判定プログラム」「等価モジュール列の算出プログラム」)を作成することは容易に実現できる。
多くのデータ処理モジュールが追加された状況にあっても、上記したように本発明が依然として適用可能となることは勿論である。
その他、本発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、各実施形態は適宜組み合わせて実施してもよく、その場合組み合わせた効果が得られる。更に、上記実施形態には種々の発明が含まれており、開示される複数の構成要件から選択された組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、課題が解決でき、効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。