<システム構成例>
図1は、サービス提供システムのシステム構成例を示す説明図である。サービス提供システム100は、Local Area Network(LAN)、Wide Area Network(WAN)、インターネットのようなネットワーク103を介して、サービスの提供を受けるユーザの端末102と通信可能に接続される。
サービス提供システム100は、上述したように、複数の仮想マシン、複数のコンテナ、または、複数の仮想マシンおよびコンテナが、ハードウェアリソースを共有する環境を構築する。サービス提供システム100は、複数のプロセスを連携させて各種サービスを提供する。
サービス提供システム100は、具体的には、たとえば、互いに通信可能な複数のノードN0〜Nm(mは整数)により構成される。管理ノードN0は、実行ノードN1〜Nmを管理する管理装置である。実行ノードNi(1≦i≦m)はそれぞれ、1以上のプロセスを有する。いずれかの実行ノードNiは、端末102とのユーザインタフェースを提供する。なお、「実行ノードNi」と表記した場合は、実行ノードN1〜Nmのいずれかを指すが、「ノードNi」と表記した場合は、管理ノードN0および実行ノードN1〜Nmのいずれかを指す。また、実行ノードN1〜Nmの集合をクラスタ101と称す。
ここで、サービス提供システム100でのサービス提供例について説明する。たとえば、商品の発注サービスは、ユーザ認証を実行するプロセスAと、ユーザ認証後に在庫を確認するプロセスBと、在庫確認後に商品について決済するプロセスDと、により構成されているものとする。端末102からのリクエストにより商品の発注サービスの利用を受け付けると、サービス提供システム100は、プロセスAでユーザ認証し、プロセスBでユーザが指定した商品についての在庫を確認し、プロセスDでユーザが指定した商品の在庫があれば決済を実行する。
また、動画コンテンツの無料配信サービスは、ユーザ認証を実行するプロセスAと、ユーザ認証後に動画コンテンツを端末102に配信するプロセスCと、により構成されているものとする。このように、プロセスAのように複数のサービスで共有されるプロセスが存在する。当該プロセスは利用頻度が高いため、停止されないように優先度を高く設定しておく必要がある。また、プロセスの利用頻度は、サービスの提供時間帯やユーザの種別、サービス内容により変動する。
また、プロセスAのように複数のサービス間で共有されるプロセスについては、あるサービスでの利用頻度が高いが他のサービスでの利用頻度が低くなるといったケースも存在する。したがって、本実施例のサービス提供システム100では、プロセスの利用状況を監視して、優先度を動的に変化させる。そして、停止してもよいプロセスの優先度を下げて、クラスタ101のハードウェアリソース不足が発生した場合に、優先度が低いプロセスから停止する。
<プロセス間の関係>
図2は、プロセス間の関係を示す説明図である。各プロセスは、その実行ノードまたは他の実行ノードに存在する他のプロセスと連携して実行される。これにより、商品の発注サービス201や動画コンテンツの無料配信サービス202が実現される。プロセス間の関係を規定する情報は、プロセスの実行順序を示すトレースとして、管理ノードN0によって管理される。
<コンピュータのハードウェア構成例>
図3は、コンピュータ(ノードNi、端末102の総称)のハードウェア構成例を示すブロック図である。コンピュータ300は、プロセッサ301と、記憶デバイス302と、入力デバイス303と、出力デバイス304と、通信インタフェース(通信IF)305と、を有する。プロセッサ301、記憶デバイス302、入力デバイス303、出力デバイス304、および通信IF305は、バス306により接続される。プロセッサ301は、コンピュータ300を制御する。記憶デバイス302は、プロセッサ301の作業エリアとなる。また、記憶デバイス302は、各種プログラムやデータを記憶する非一時的なまたは一時的な記録媒体である。記憶デバイス302としては、たとえば、ROM(Read Only Memory)、RAM(Random Access Memory)、HDD(Hard Disk Drive)、フラッシュメモリがある。入力デバイス303は、データを入力する。入力デバイス303としては、たとえば、キーボード、マウス、タッチパネル、テンキー、スキャナがある。出力デバイス304は、データを出力する。出力デバイス304としては、たとえば、ディスプレイ、プリンタがある。通信IF305は、ネットワークと接続し、データを送受信する。
<サービス提供システム100の機能的構成例>
図4は、サービス提供システム100の機能的構成例を示すブロック図である。まず、実行ノードNiについて説明する。実行ノードNiは、1以上のプロセスと、ログ記録部401と、ノード管理部402と、を有する。なお、サービス提供部400は、いずれかのノードNiにのみ実装される。プロセス、ログ記録部401、ノード管理部402、およびサービス提供部400は、具体的には、たとえば、図2に示した記憶デバイス302に記憶されたプログラムを、プロセッサ301に実行させることにより実現する機能である。
ログ記録部401は、その実行ノードNiで実行されるプロセスのログを記録する。具体的には、たとえば、ログ記録部401は、ログとして、たとえば、プロセスを実行したユーザのユーザID、プロセスの実行開始時刻および実行終了時刻(実行開始時刻からの実行時間でもよい)、実行されたプロセスのプロセスID、実行されたプロセスを利用したサービスのサービスIDを含む。ユーザIDは、端末102のユーザを一意に特定する識別情報である。サービスIDは、サービス提供システム100が提供するサービスを一意に特定する識別情報である。
ノード管理部402は、その実行ノードNiを管理する。具体的には、たとえば、ノード管理部402は、オペレーションシステムその他各種ライブラリによりプロセスを実行する仮想マシンを、ハイパーバイザ上に構築する。また、ノード管理部402は、コンテナ管理ソフトウェアその他各種ライブラリによりプロセスを実行するコンテナを、オペレーションシステム上に構築する。
サービス提供部400は、端末102とのインタフェースを提供する。具体的には、たとえば、サービス提供部400は、端末102からのサービスのリクエストを受け付けて、当該リクエストに応じたサービスを構成するプロセス群を特定して、特定したプロセスを有する実行ノードNiにプロセスを実行させ、端末102に実行結果を出力する。
つぎに、管理ノードN0について説明する。管理ノードN0は、ログ情報テーブル411と、トレース情報テーブル412と、トレース別アクセス数情報テーブル413と、優先度情報テーブル414と、プロセス別アクセス数情報テーブル415と、動的優先度情報テーブル416と、を有する。これらテーブルは、具体的には、たとえば、図2に示した記憶デバイス302により実現される。
ログ情報テーブル411は、ログ情報を管理するテーブルである。詳細は図5で後述する。トレース情報テーブル412は、トレース情報を管理するテーブルである。詳細は図6で後述する。トレース別アクセス数情報テーブル413は、トレース別アクセス数情報を管理するテーブルである。詳細は図7で後述する。優先度情報テーブル414は、優先度情報を管理するテーブルである。詳細は図8で後述する。プロセス別アクセス数情報テーブル415は、プロセス別アクセス数情報を管理するテーブルである。詳細は図9で後述する。動的優先度情報テーブル416は、動的優先度情報を管理するテーブルである。詳細は図10で後述する。
また、管理ノードN0は、ログ収集部421と、トレース管理部422と、プロセス別アクセス数計算部423と、優先度算出部424と、クラスタ管理部425と、停止対象決定部426と、を有する。ログ収集部421と、トレース管理部422、プロセス別アクセス数計算部423、優先度算出部424、クラスタ管理部425、および停止対象決定部426は、具体的には、たとえば、図2に示した記憶デバイス302に記憶されたプログラムを、プロセッサ301に実行させることにより実現する機能である。
ログ収集部421は、クラスタ101からログを収集してログ情報を生成し、ログ情報テーブル411に格納する。トレース管理部422は、ログ情報からトレース情報を生成し、トレース情報テーブル412に格納する。また、トレース管理部422は、トレース別アクセス数情報を生成し、トレース別アクセス数情報テーブル413に格納する。
プロセス別アクセス数計算部423は、トレース別アクセス数情報からプロセス別アクセス数情報を計算し、プロセス別アクセス数情報テーブル415に格納する。優先度算出部424は、優先度情報から動的優先度を計算し、動的優先度情報テーブル416に格納する。クラスタ管理部425は、動的優先度から停止対象の候補となるプロセス(停止対象候補プロセス)を決定し、停止対象決定部426に出力する。
また、クラスタ管理部425は、停止対象決定部426から停止対象プロセスが指定されると、停止対象プロセスを有する実行ノードNiのノード管理部402に、停止対象プロセスを停止させる。停止対象決定部426は、ログ情報、トレース情報、トレース別アクセス数情報、動的優先度情報、および停止対象候補プロセスを用いて、停止対象プロセスを決定し、クラスタ管理部425に通知する。
<各種テーブルの具体例>
図5は、ログ情報テーブル411の記憶内容例を示す説明図である。ログ情報テーブル411は、フィールドとして、プロセス501、ノードID502、プロセスID503、トレースID504、親ID505、共有FDID506、シグナル送信先プロセスID507を有する。各行の各フィールドの値の組み合わせが、それぞれログ情報となるエントリを示す。ログ情報は、プロセスが実行された時系列順に、1から始まる昇順のエントリ番号#でログ情報テーブル411に登録される。
プロセス501は、値としてプロセスの一意の識別情報である。ノードID502は、プロセス501を有するノードを一意に特定する識別情報である。プロセスID503は、端末102へのサービス提供ごとにプロセス501を一意に特定する識別情報である。したがって、同一のプロセス501が同一または異なるサービスで実行されている場合、そのプロセス501には別のプロセスID501が付与される。
たとえば、エントリ#1では、ノードN1が商品の発注サービス201でプロセスAを実行したことを示すが、エントリ#3では、ノードN1が動画コンテンツの無料配信サービス202でプロセスAを実行したことを示す。プロセス501、ノードID502、およびプロセスID503は、プロセス501を実行した実行ノードNiで生成される。
トレースID504は、トレースを一意に特定する識別情報である。トレースとは、サービスでのプロセス501の実行順序である。たとえば、トレースID504の値が「100」であるプロセス501は、エントリ#1の「A」、エントリ#2の「B」およびエントリ#4の「D」である。すなわち、トレースID504が同一のプロセス501は、ある端末102に提供されたサービスで実行されたプロセスである。トレースID504は、たとえば、サービス提供部400を有する実行ノードNiによってサービスごとに付与される。
親ID505は、トレースID504が共通するプロセス群において実行位置を規定する識別情報である。親ID505は、0から始まる昇順の整数である。トレースID504の値が「100」であるプロセス501は、エントリ#1の「A」、エントリ#2の「B」およびエントリ#4の「D」である。エントリ#1のプロセスAの親ID505は「0」、エントリ#2のプロセスBの親ID505は「1」、エントリ#4のプロセスDの親ID505は「2」である。したがって、トレースID504の値が「100」であるプロセス群は、プロセスA→プロセスB→プロセスDの順に実行されたことを示す。親ID505は、たとえば、サービス提供部400を有する実行ノードNiまたはログ収集部421によって付与される。
共有FDID506は、共有するファイルディスクリプタ(ファイル記述子)を一意に特定する識別情報である。ファイルディスクリプタには、識別情報のほか、アクセス先のファイル名、ファイルサイズ、ファイル内のプロセスの操作位置、ファイルの作成日時や更新日時が含まれる。共有FDID506が存在する複数のプロセスは、同一のファイルにアクセスしたことがわかる。
シグナル送信先プロセスID507は、シグナル送信先となるプロセス501のプロセスID503である。たとえば、エントリ#WのプロセスBは、シグナル送信先プロセスID507の値が「1002」であるため、プロセスID503の値が「1002」であるエントリ#6のプロセスEに信号を送信したことになる。共有FDID506およびシグナル送信先プロセスID507は、プロセス501を実行した実行ノードNiで生成される。
図6は、トレース情報テーブル412の記憶内容例を示す説明図である。トレース情報テーブル412は、フィールドとして、トレースID504およびトレース600を有する。各行の各フィールドの値の組み合わせが、それぞれトレース情報となるエントリを示す。
トレース600は、プロセス501の実行順序である。たとえば、エントリ#1は、プロセスA→プロセスB→プロセスDの順に実行される商品の発注サービス201を示すトレース情報であり、エントリ#2は、プロセスA→プロセスCの順に実行される動画コンテンツの無料配信サービス202を示すトレース情報である。なお、トレースID504が異なれば、同一トレース600のエントリが複数記録される。
図7は、トレース別アクセス数情報テーブル413の記憶内容例を示す説明図である。トレース別アクセス数情報テーブル413は、フィールドとして、トレース600およびアクセス数700−1〜700−nを有する。各行の各フィールドの値の組み合わせが、それぞれトレース別アクセス数情報となるエントリを示す。
アクセス数700−1〜700−nは、トレース管理部422によって計測された1回目の計測期間Δ1からn(1以上の整数)回目の計測期間Δnまでのトレース別のアクセス数である。計測期間Δnは、前回の計測期間Δn−1の計測時から今回の計測期間Δnの計測時までの間の期間である。トレース別のアクセス数とは、端末102がサービスの提供を受けるためにそのサービスであるトレース600にアクセスした回数である。サービスの提供回数とも言える。
図8は、優先度情報テーブル414の記憶内容例を示す説明図である。優先度情報テーブル414は、フィールドとして、ランク800と、プロセス501と、優先度801を有する。各行の各フィールドの値の組み合わせが、それぞれ優先度情報となるエントリを示す。ランク800は、優先度801の順位を示す。ランク800の値が小さいほど優先度801が高い順位を示す。優先度801は、停止対象を決定するための優先順位を規定する情報である。具体的には、たとえば、優先度の値が小さいほど(ランク800が低いほど)停止対象に選ばれやすいプロセス501である。優先度の値自体は固定値である。
図9は、プロセス別アクセス数情報テーブル415の記憶内容例を示す説明図である。プロセス別アクセス数情報テーブル415は、フィールドとして、プロセス501およびアクセス数900−1〜900−nを有する。各行の各フィールドの値の組み合わせが、それぞれ優先度情報となるエントリを示す。
アクセス数900−1〜900−nは、プロセス別アクセス数計算部423によって計測された計測期間Δ1から計測期間Δnまでのプロセス別のアクセス数である。プロセス別のアクセス数とは、端末102がサービスの提供を受けるためにそのサービスであるトレース600内のプロセス501にアクセスした回数である。プロセス501の実行回数とも言える。
図10は、動的優先度情報テーブル416の記憶内容例を示す説明図である。動的優先度情報テーブル416は、フィールドとして、プロセス501および動的優先度1000−1〜1000−nを有する。各行の各フィールドの値の組み合わせが、それぞれ動的優先度情報となるエントリを示す。
動的優先度1000−nは、計測期間Δnでのプロセス501に関する一時的な優先度である。動的優先度1000−nは、プロセス501別のアクセス数が加算された値である。
<停止対象プロセスの停止制御処理手順例>
図11は、停止対象プロセスの停止制御処理手順例を示すフローチャートである。トレース管理部422は、トレース情報およびトレース別アクセス数情報作成処理を実行する(ステップS1101)。トレース情報およびトレース別アクセス数情報作成処理(ステップS1101)は、トレース管理部422がトレース情報およびトレース別アクセス数情報を作成する処理であり、図12で後述する。
プロセス別アクセス数計算部423は、プロセス別アクセス数計算処理を実行する(ステップS1102)。プロセス別アクセス数計算処理(ステップS1102)は、プロセス別アクセス数計算部423がプロセス別アクセス数を計算する処理であり、図13で後述する。
優先度算出部424は、動的優先度算出処理を実行する(ステップS1103)。動的優先度算出処理(ステップS1103)は、優先度算出部424が動的優先度を計算する処理であり、図14で後述する。
優先度算出部424は、優先度情報テーブル414を更新するか否かを判断する(ステップS1104)。具体的には、たとえば、管理ノードN0は、前回の優先度算出処理(ステップS1105)から、動的優先度情報テーブル416の更新が所定回数実行されたか否かを判断する。所定回数実行されていない場合、優先度算出部424は、優先度情報テーブル414の更新タイミングではないと判断し(ステップS1104:No)、ステップS1106に移行する。
一方、所定回数実行された場合、優先度算出部424は、優先度情報テーブル414の更新タイミングであると判断する(ステップS1104:Yes)。この場合、優先度算出部424は、優先度算出処理を実行する(ステップS1105)。優先度算出処理(ステップS1105)は、優先度算出部424が優先度を計算する処理であり、図15で後述する。
ステップS1106では、優先度算出部424は、ステップS1105で計算された動的優先度(Δn)1000−nをクラスタ管理部425に送信する(ステップS1106)。
クラスタ管理部425は、動的優先度(Δn)1000−nから停止対象候補プロセスを決定し、停止対象決定部426に送信する(ステップS1107)。停止対象候補プロセスの決定は、動的優先度(Δn)1000−nを用いて既存技術で実行可能である。たとえば、クラスタ管理部425は、動的優先度(Δn)1000−nが所定優先度よりも低いプロセス501を、停止対象候補プロセスに決定する。
クラスタ管理部425は、動的優先度(Δn)1000−nが相対的に低いプロセス501を、停止対象候補プロセスに決定する。クラスタ管理部425は、停止すればハードウェアリソース不足が解消されてより動的優先度(Δn)1000−nが高い他のプロセス501がデプロイ可能となるプロセス501を、停止対象候補プロセスに決定する。
停止対象決定部426は、停止対象プロセス決定処理を実行する(ステップS1108)。停止対象プロセス決定処理(ステップS1108)は、停止対処決定部が、停止対象プロセスを決定する処理であり、図16で後述する。停止対象決定部426は、決定した停止対象プロセスをクラスタ管理部425に通知する(ステップS1109)。
このあと、クラスタ管理部425は、通知を受けた停止対象プロセスを有する実行ノードNiに、停止対象プロセスを停止するよう指示する。これにより、指示された実行ノードNiは、停止対象プロセスを停止し、これにともない、停止対象プロセスを含むサービスも停止する。
<トレース情報およびトレース別アクセス数情報作成処理(ステップS1101)>
図12は、図11に示したトレース情報およびトレース別アクセス数情報作成処理(ステップS1101)の詳細な処理手順例を示すフローチャートである。
なお、運用開始時では、たとえば、トレース情報テーブル412およびトレース別アクセス数情報テーブル413は、空のテーブルである。ただし、あらかじめ、トレース600およびトレースID504が登録されている場合もある。また、運用中では、トレース別アクセス数情報テーブル413のアクセス数(Δn)700−nの列は空であり、トレース情報およびトレース別アクセス数情報作成処理(ステップS1101)の実行によりアクセス数(Δn)700−nの値が記録される。
トレース管理部422は、ログ情報テーブル411からトレースID504が同一のログ情報を選択する(ステップS1201)。具体的には、たとえば、ログ情報テーブル411のエントリ#1、#2、#4のトレースID504の値はいずれも「100」であるため、トレース管理部422は、エントリ#1、#2、#4を同一のログ情報として選択する。ステップS1201で取り出された1以上のエントリ群を「対象エントリ群」と称す。
つぎに、トレース管理部422は、親ID505の変数NをN=0に設定する(ステップS1202)。トレース管理部422は、親ID505の値がNであるプロセス501が対象エントリ群に存在するか否かを判断する(ステップS1203)。存在する場合(ステップS1203:Yes)、親ID505の値がNであるプロセス501をトレース600の最後尾に追加する(ステップS1204)。トレース管理部422は、Nに1加算して(ステップS1205)、ステップS1203に戻る。上記の対象エントリ群(#1、#2、#4)の場合、親ID505の値NがN=0のプロセスA、親ID505の値NがN=1のプロセスB、親ID505の値NがN=2のプロセスDの順に追加されて、トレースとして「A→B→D」が生成される。
トレース管理部422は、親ID505がNのプロセス501が存在しない場合(ステップS1203:No)、ステップS1206に移行する。上記の対象エントリ群(#1、#2、#4)の場合、親ID505の値NがN=3のエントリは存在しないため、ステップS1206に移行する。ステップS1203〜S1205で作成されたトレース600を「対象トレース600」と称す。
ステップS1203:Noのあと、トレース管理部422は、対象トレース600がすでにトレース情報テーブル412に存在するか否かを判断する(ステップS1206)。存在しない場合(ステップS1206:No)、トレース管理部422は、対象エントリ群が共有するトレースID504および対象トレース600を新規のトレース情報のエントリとしてトレース情報テーブル412に登録する。また、トレース管理部422は、対象トレース600を、トレース別アクセス数情報テーブル413に新規のトレース別アクセス数情報のエントリとしてトレース別アクセス数情報に登録し、当該エントリの現在のアクセス数(Δn)700−nの値を「1」に設定する(ステップS1207)。そして、ステップS1209に移行する。
一方、対象トレースがトレース情報テーブル412にすでに存在する場合(ステップS1206:Yes)、トレース管理部422は、トレース別アクセス数情報テーブル413において、対象トレース600のエントリの現在のアクセス数(Δn)700−nの値を1加算して、ステップS1209に移行する。
ステップS1209では、トレース管理部422は、ステップS1201で未選択のトレースID504が存在するか否かを判断し(ステップS1209)、未選択のトレースID504が存在する場合(ステップS1209:Yes)、ステップS1201に戻る。一方、未選択のトレースID504が存在しない場合(ステップS1209:No)、トレース管理部422は、トレース情報およびトレース別アクセス数情報作成処理(ステップS1101)を終了して、ステップS1102に移行する。これにより、トレース情報テーブル412およびトレース別アクセス数情報テーブル413が更新される。
<プロセス別アクセス数計算処理(ステップS1102)>
図13は、図11に示したプロセス別アクセス数計算処理(ステップS1102)の詳細な処理手順例を示すフローチャートである。なお、運用開始時および運用中では、たとえば、プロセス別アクセス数情報テーブル415のアクセス数(Δn)900−nの列は空であり、プロセス別アクセス数計算処理(ステップS1102)の実行によりアクセス数(Δn)900−nの値が記録される。
プロセス別アクセス数計算部423は、優先度情報テーブル414から未選択のプロセス501を1つ選択する(ステップS1301)。プロセス別アクセス数計算部423は、後述するステップS1303での選択トレースのアクセス数の合計値Tに0を設定する(ステップS1302)。
プロセス別アクセス数計算部423は、ステップS1101で更新されたトレース別アクセス数情報テーブル413からトレース600を1つ選択する(ステップS1303)。プロセス別アクセス数計算部423は、ステップS1303での選択トレース600に選択プロセス501が含まれているか否かを判断する(ステップS1304)。たとえば、選択トレース600が「A→B→D」で、かつ、選択プロセス501が「A」であれば、選択トレース600に選択プロセス501が含まれており、選択プロセス501が「C」であれば、選択トレース600に選択プロセス501が含まれていない。
選択トレース600に選択プロセス501が含まれている場合(ステップS1304:Yes)、プロセス別アクセス数計算部423は、プロセス別アクセス数情報テーブル415において選択トレース600のエントリのアクセス数(Δn)900−nの値を、合計値Tに加算して(ステップS1305)、ステップS1306に移行する。一方、選択トレース600に選択プロセス501が含まれていない場合(ステップS1304:No)、プロセス別アクセス数計算部423は、ステップS1306に移行する。
ステップS1306において、プロセス別アクセス数計算部423は、ステップS1303で未選択トレース600が存在するか否かを判断する(ステップS1306)。未選択トレース600が存在する場合(ステップS1306:Yes)、ステップS1303に戻る。一方、未選択トレース600が存在しない場合(ステップS1306:No)、プロセス別アクセス数計算部423は、プロセス別アクセス数情報テーブル415において、合計値Tを選択プロセス501のプロセス別アクセス数として、選択プロセス501のエントリのアクセス数(Δn)900−nに記録する(ステップS1307)。
そして、プロセス別アクセス数計算部423は、ステップS1308で未選択プロセス501が存在するか否かを判断する(ステップS1308)。未選択プロセス501が存在する場合(ステップS1308:Yes)、ステップS1301に戻る。一方、未選択プロセス501が存在しない場合(ステップS1308:No)、プロセス別アクセス数計算部423は、プロセス別アクセス数計算処理(ステップS1102)を終了して、ステップS1103に移行する。これにより、トレース情報テーブル412およびプロセス別アクセス数情報テーブル415が更新される。
<動的優先度算出処理(ステップS1103)>
図14は、図11に示した動的優先度算出処理(ステップS1103)の詳細な処理手順例を示すフローチャートである。なお、運用開始時および運用中では、たとえば、動的優先度情報テーブル416のアクセス数(Δn)1000−nの列は空であり、動的優先度算出処理(ステップS1103)の実行によりアクセス数(Δn)1000−nの値が記録される。
優先度算出部424は、変数Nを1に設定する(ステップS1401)。優先度算出部424は、ステップS1102で更新されたプロセス別アクセス数情報テーブル415からアクセス数(Δn)900−nがN番目に多いプロセス501を選択する(ステップS1402)。n=2の場合、N=1であれば、アクセス数(Δ2)900−2で1番目に多い値「140」のエントリ#1のプロセス501として「A」が選択される。
優先度算出部424は、アクセス数(Δn)900−nがN番目に多い選択プロセス501が複数存在するか否かを判断する(ステップS1403)。複数存在しない場合(ステップS1403:No)、優先度算出部424は、動的優先度情報テーブル416において、アクセス数(Δn)900−nがN番目に多い選択プロセス501のエントリの今回の動的優先度(Δn)1000−nに、優先度情報テーブル414においてN番目に高い優先度801の値を記録する(ステップS1404)。
たとえば、上記の例で、動的優先度情報テーブル416において、アクセス数(Δn)900−nがN番目に多い選択プロセス501である「A」のエントリ#1の今回の動的優先度(Δn)1000−2に、優先度情報テーブル414において1番目に高い優先度801の値「90」を記録する。このあと、優先度算出部424は、Nに1を加算して(ステップS1405)、ステップS1411に移行する。
一方、アクセス数(Δn)900−nがN番目に多い選択プロセス501が複数存在する場合(ステップS1403:Yes)、当該複数の選択プロセス501間で優劣をつける必要がある。この場合、優先度算出部424は、変数Mに0を設定し(ステップS1406)、Mに1を加算する(ステップS1407)。優先度算出部424は、アクセス数(Δn)900−nがN番目に多い複数の選択プロセス501のうち、優先度801がM番目に高い選択プロセス501のエントリの今回の動的優先度(Δn)1000−nに、優先度情報テーブル414において(N+M−1)番目に高い優先度801の値を記録する(ステップS1408)。
このあと、優先度算出部424は、アクセス数(Δn)900−nがN番目に多い選択プロセス501がまだ存在するか否かを判断する(ステップS1409)。存在する場合(ステップS1409:Yes)、ステップS1407に戻る。一方、存在しない場合(ステップS1409:No)、優先度算出部424は、変数Nに変数Mを加算して(ステップS1410)、ステップS1411に移行する。
たとえば、n=2の場合、N=4のときに、プロセス別アクセス数情報テーブル415において、N=4番目に多いアクセス数(Δ2)900−2の値「30」となるプロセスB,Eが、ステップS1402で選択される。優先度情報テーブル414を参照すると、プロセスBの優先度は「70」であり、プロセスEの優先度は「20」である。したがって、M=1のときに、選択プロセス501が「B」のエントリ#2の今回の動的優先度(Δn)1000−2に、4(=4+1−1)番目に高い優先度801の値「40」が記録される。
同様に、M=2のときに、選択プロセス501が「E」のエントリ#5の今回の動的優先度(Δn)1000−2に、5(=4+2−1)番目に高い優先度801の値「20」が記録される。
ステップS1411において、優先度算出部424は、プロセス別アクセス数情報テーブル415に未選択プロセス501が存在するか否かを判断する(ステップS1411)。そんざいする場合(ステップS1411:Yes)、ステップS1402に戻る。一方、存在しない場合(ステップS1411:No)、優先度算出部424は、動的優先度算出処理(ステップS1103)を終了し、ステップS1104に移行する。これにより、動的優先度情報テーブル416が更新される。
<優先度算出処理(ステップS1104)>
図15は、図11に示した優先度算出処理(ステップS1104)の詳細な処理手順例を示すフローチャートである。優先度算出部424は、動的優先度情報テーブル416において、直近k(≦n)回の動的優先度(Δ(n−k+1))1000−(n−k+1)〜動的優先度(Δn)1000−nでアクセス数の最高値を記録した回数が最も多いプロセスを選択する(ステップS1501)。
図10を参照して、n=k=2とする。n−k+1=1となる。動的優先度(Δ1)1000−1における最高値は、エントリ#1のプロセスAの90回である。動的優先度(Δ2)1000−2における最高値は、エントリ#1のプロセスAの90回である。したがって、動的優先度(Δ1)1000−1〜動的優先度(Δ2)1000−2で動的優先度の最高値を記録した回数が最も多いプロセスは、最高値を2回記録したプロセスAである。したがって、ステップS1501では、「A」が選択される。
なお、ステップS1501では、直近k回で動的優先度の最高値を記録した回数が最も多いプロセス501を選択することとしたが、直近k回での動的優先度の合計が最高値を記録したプロセス501を選択してもよい。また、直近k回での動的優先度の平均値が最高値を記録したプロセス501を選択してもよい。
優先度算出部424は、優先度情報テーブル414を参照して、ステップS1501の選択プロセス501の優先度801よりも1つランク800が上のプロセス501が存在するか否かを判断する(ステップS1502)。選択プロセス501のランク800が「2」以下であれば、1つランク800が上のプロセス501が存在する。上記の例の場合、プロセスAが最上位ランク800の「1」であるため、1つ上のランク800のプロセスは存在しない。
1つ上のランク800のプロセス501が存在しない場合(ステップS1502:No)、ステップS1504に移行する。1つ上のランク800のプロセス501が存在する場合(ステップS1502:Yes)、優先度算出部424は、優先度情報テーブル414において、1つ上のランク800のプロセス501と選択プロセス501とを入れ替えて(ステップS1503)、ステップS1504に移行する。
たとえば、ランク800が2位のプロセスB(優先度が「70」)とランク800が3位のプロセスC(優先度が「50」)とを入れ替えると、プロセスCのランク800が2位に上がり、かつ、優先度が「70」に上がる。同様に、プロセスBのランク800が3位に下がり、かつ、優先度が「50」に下がる。
このあと、優先度算出部424は、動的優先度情報テーブル416において、直近k(≦n)回の動的優先度(Δ(n−k+1))1000−(n−k+1)〜動的優先度(Δn)1000−nで動的優先度の最高値を記録した回数が最も少ないプロセス501を選択する(ステップS1504)。最高値を記録した回数が最も少ないプロセス501が複数存在する場合、優先度算出部424は、たとえば、直近k(≦n)回の動的優先度(Δ(n−k+1))1000−(n−k+1)〜動的優先度(Δn)1000−nの合計値が最小のプロセス501を選択してもよく、優先度801が最も低いプロセス501を選択してもよい。
上記の例の場合、「A」以外の他のプロセス「B」〜「E」の最高値の記録回数が0である。したがって、優先度算出部424は、たとえば、「B」〜「E」のうち、1回の動的優先度(Δ1)1000−1〜動的優先度(Δ2)1000−2の合計値が最小のプロセス501を選択する。この場合、当該合計値が最小なプロセス501は、合計値が40(=20+20)であるプロセスEである。したがって、優先度算出部424は、「E」を選択する。また、「B」〜「E」のうち、優先度801が最も低いプロセス501は、優先度801の値が「20」である「E」である。この場合も、優先度算出部424は、「E」を選択する。
なお、ステップS1504では、直近k回で動的優先度の最高値を記録した回数が最も少ないプロセス501を選択することとしたが、直近k回での動的優先度の合計が最低値を記録したプロセス501を選択してもよい。また、直近k回での動的優先度の平均値が最低値を記録したプロセス501を選択してもよい。
優先度算出部424は、優先度情報テーブル414を参照して、ステップS1504の選択プロセス501の優先度801よりも1つランク800が下のプロセス501が存在するか否かを判断する(ステップS1505)。選択プロセス501のランク800が最下位よりも1つ上であれば、1つランク800が下のプロセス501が存在する。
1つ下のランク800のプロセス501が存在しない場合(ステップS1505:No)、優先度算出部424は、優先度算出処理(ステップS1104)を終了して、ステップS1106に移行する。一方、1つ下のランク800のプロセス501が存在する場合(ステップS1505:Yes)、優先度算出部424は、優先度情報テーブル414において、1つ下のランク800のプロセス501と選択プロセス501とを入れ替える(ステップS1506)。
たとえば、ランク800が4位のプロセスD(優先度が「40」)とランク800が5位のプロセスE(優先度が「20」)とを入れ替えると、プロセスDのランク800が5位に下がり、かつ、優先度が「20」に下がる。同様に、プロセスEのランク800が4位に上がり、かつ、優先度が「40」に上がる。このあと、優先度算出部424は、優先度算出処理(ステップS1104)を終了して、ステップS1106に移行する。
<停止対象プロセス決定処理(ステップS1108)>
図16は、停止対象プロセス決定処理(ステップS1108)の詳細な処理手順例を示すフローチャート1である。停止対象決定部426は、変数Nに1を設定し(ステップS1601)、トレース別アクセス数情報テーブル413において、アクセス数(Δn)700−nがN番目に少ないトレース600を選択する(ステップS1602)。
停止対象決定部426は、変数Mに1を設定する(ステップS1603)。停止対象決定部426は、動的優先度情報テーブル416において、停止対象候補プロセスのうち、動的優先度(Δn)1000−nがM番目に低いプロセス501を選択する(ステップS1604)。
なお、停止対象候補プロセスの決定は、クラスタ管理部425により、動的優先度情報テーブル416を参照して既存技術で実行可能である。たとえば、クラスタ管理部425は、動的優先度(Δn)1000−nが所定優先度よりも低いプロセス501を、停止対象候補プロセスに決定する。クラスタ管理部425は、動的優先度(Δn)1000−nが相対的に低いプロセス501を、停止対象候補プロセスに決定する。クラスタ管理部425は、停止すればハードウェアリソース不足が解消されてより動的優先度(Δn)1000−nが高い他のプロセス501がデプロイ可能となるプロセス501を、停止対象候補プロセスに決定する。
停止対象決定部426は、ステップS1602の選択トレース600に、ステップS1604の選択プロセス501が含まれているか否かを判断する(ステップS1605)。ステップS1602の選択トレース600に、ステップS1604の選択プロセス501が含まれている場合(ステップS1605:Yes)、図17のステップS1701に移行する。
一方、ステップS1602の選択トレース600に、ステップS1604の選択プロセス501が含まれていない場合(ステップS1605:No)、停止対象決定部426は、トレース別アクセス数情報テーブル413において未選択プロセス501が存在するか否かを判断する(ステップS1606)。未選択プロセス501が存在する場合(ステップS1606:Yes)、停止対象決定部426は、変数Mに1を加算して(ステップS1607)、ステップS1604に戻る。一方、未選択プロセス501が存在する場合(ステップS1606:Yes)、停止対象決定部426は、変数Nに1を加算して(ステップS1608)、ステップS1602に戻る。
図17は、停止対象プロセス決定処理(ステップS1108)の詳細な処理手順例を示すフローチャート2である。図17のステップS1701は、図16においてステップS1602の選択トレース600に、ステップS1604の選択プロセス501が含まれている場合(ステップS1605:Yes)に実行される。
停止対象決定部426は、ステップS1602の選択トレース600とプロセスの実行順序が同一のトレース600をトレース情報テーブル412から選択し、当該選択トレース600のトレースID504を持つプロセス501をログ情報テーブル411から選択する(ステップS1701)。プロセス501の実行順序が同一のトレース600とは、トレースID504が選択プロセス501のトレースID504と一致しなくてもよいが、プロセス501の実行順序が一致するトレース600である。
停止対象決定部426は、ログ情報テーブル411において、ステップS1701の選択プロセス501の各々について、ノードID502および共有FDID506が一致する他のプロセス501が存在するか否かを判断する(ステップS1702)。選択プロセス501と他のプロセス501とでノードID502が一致しているということは、選択プロセス501と他のプロセス501は、同一の実行ノードNiで実行されるプロセス501である。
また、選択プロセス501と他のプロセス501とで共有FDID506が一致しているということは、選択プロセス501と他のプロセス501は、ファイルにアクセスする経路が一致するプロセス501である。したがって、選択プロセス501を停止してしまうと、他のプロセス501の実行に影響を及ぼすため、停止対象から外れやすくする必要がある。
ステップS1702では、ステップS1701の複数の選択プロセス501のうちいずれか1つでも充足する(ステップS1702:Yes)と、ステップS1706に移行する。ステップS1701の複数の選択プロセス501のうちいずれも充足しない(ステップS1702:No)と、ステップS1703に移行する。
ステップS1702:Noの場合、停止対象決定部426は、ログ情報テーブル411において、ステップS1701の選択プロセス501の各々について、選択プロセス501とノードID502が一致し、かつ、選択プロセス501のシグナル送信先プロセスID507と一致するプロセスID503を有する他のプロセス501が存在するか否かを判断する(ステップS1703)。
選択プロセス501のシグナル送信先プロセスID507と一致するプロセスID503を有する他のプロセス501は、選択プロセス501から送信されるシグナルの送信先プロセス501である。したがって、選択プロセス501を停止してしまうと、他のプロセス501の実行に影響を及ぼすため、停止対象から外れやすくする必要がある。
ステップS1703では、ステップS1701の複数の選択プロセス501のうちいずれか1つでも充足する(ステップS1703:Yes)と、ステップS1706に移行する。ステップS1701の複数の選択プロセス501のうちいずれも充足しない(ステップS1703:No)と、ステップS1704に移行する。
ステップS1703:Noの場合、停止対象決定部426は、ログ情報テーブル411において、ステップS1701の選択プロセス501の各々について、選択プロセス501とノードID502が一致し、かつ、選択プロセス501のプロセスID503と一致するシグナル送信先プロセスID507を有する他のプロセス501が存在するか否かを判断する(ステップS1703)。
選択プロセス501のプロセスID503と一致するシグナル送信先プロセスID507を有する他のプロセス501は、選択プロセス501が受信するシグナルの送信元プロセス501である。したがって、選択プロセス501を停止してしまうと、他のプロセス501の実行に影響を及ぼすため、停止対象から外れやすくする必要がある。
ステップS1704では、ステップS1701の複数の選択プロセス501のうちいずれか1つでも充足する(ステップS1704:Yes)と、ステップS1706に移行する。ステップS1701の複数の選択プロセス501のうちいずれも充足しない(ステップS1703:No)と、停止対象決定部426は、ステップS1701の選択プロセス501を停止対象プロセスに決定する(ステップS1705)。これにより、停止対象決定部426は、停止対象決定処理(ステップS1108)を終了して、ステップS1109に移行する。
ステップS1706では、停止対象決定部426は、ステップS1702〜S1704で存在すると判断された他のプロセス501を含むトレース600を、トレース情報テーブル412から取得する(ステップS1706)。停止対象決定部426は、トレース別アクセス数情報テーブル413を参照して、ステップS1706の取得トレース600のアクセス数(Δn)700−nがステップS1602の選択トレース600のアクセス数(Δn)700−nよりも少ないか否かを判断する(ステップS1707)。
少ない場合(ステップS1707:Yes)、取得トレース600内のプロセス501を停止しても影響は少ないため、停止対象決定部426は、ステップS1701の選択プロセス501を停止対象プロセスに決定する(ステップS1705)。これにより、停止対象決定部426は、停止対象決定処理(ステップS1108)を終了して、ステップS1109に移行する。
一方、少なくない場合(ステップS1707:No)、停止対象決定部426は、ステップS1701での未選択トレース600のトレースID504が存在するか否かを判断する(ステップS1708)。未選択トレース600が存在する場合(ステップS1708:Yes)、ステップS1701に移行する。一方、未選択トレース600が存在しない場合(ステップS1709:No)、停止対象決定部426は、変数Nに1加算して(ステップS1709)、図16のステップS1602に移行する。
(1)このように、上述した管理ノードN0は、実行ノード群(N1〜Nm)により構成され実行ノード群のうち1以上の実行ノードNiの複数のプロセスにより構成されるトレースを実行するクラスタ101を管理する。管理ノードN0は、プログラムを実行するプロセッサ301と、プログラムを記憶する記憶デバイス302と、を有する。記憶デバイス302は、実行ノード群が有するプロセス群の各プロセスに関する優先度(優先度情報テーブル414)を記憶する。プロセッサ301は、トレースへのアクセス数700−nとプロセスに関する優先度とに基づいて、トレースを構成する複数のプロセスの各々について、プロセスに関する一時的な優先度である動的優先度1000−nを算出する動的優先度算出処理(424)と、動的優先度算出処理によって算出された動的優先度1000−nに基づいて、プロセス群の中から停止対象プロセスを決定する停止対象プロセス決定処理と、を実行する。
このように、管理ノードN0は、複数のプロセスの関係性と利用状況を考慮して、プロセスに関する優先度を変化させ停止対象プロセスを決定する。これにより、サービス提供に必要なプロセスが変化した場合でも、リソースが不足した際に、サービスをスローダウンさせずに優先度の高いプロセスをデプロイできるようになる。したがって、たとえば、マイクロサービスのような、複数のプロセスが連携し、状況に応じて必要なプロセスが変化する環境においても、サービスをスローダウンさせずにコストの抑制とサービスの負荷に合わせた対応が可能になる。
(2)上記(1)の管理ノードN0において、プロセッサ301は、トレースへのアクセス数を複数のプロセスの各々に加算することにより、複数のプロセスの各々について、当該プロセスへのアクセス数を算出し、プロセスへのアクセス数とプロセスに関する優先度に基づいて、動的優先度1000−nを算出する。
これにより、トレースでの実行履歴を考慮して、動的優先度を算出することができる。したがって、サービスとして利用頻度が高いトレースを構成するプロセスほど動的優先度が高くなる。したがって、動的優先度が高いプロセスほど停止対象プロセスに選ばれにくくなる。
(3)上記(1)の管理ノードN0において、プロセッサ301は、動的優先度に基づいて、優先度を更新し、トレースへのアクセス数とプロセスに関する更新後の優先度とに基づいて、動的優先度を再算出する。これにより、プロセスに関する優先度をプロセスの利用状況に応じて適切に変更することができる。
(4)上記(3)の管理ノードN0において、プロセッサ301は、プロセス群の中の第1プロセスに関する第1優先度が第2プロセスに関する第2優先度よりも低いが、第1プロセスに関する第1動的優先度が第2プロセスに関する第2動的優先度よりも高い場合、第1プロセスに関する優先度を第1優先度から前記第2優先度に変更し、第2プロセスに関する優先度を第2優先度から第1優先度に変更する。
これにより、動的優先度が高いプロセスほど優先度が高くなり、動的優先度が低いプロセスほど優先度が低くなる。
(5)上記(1)の管理ノードN0において、プロセッサ301は、第1トレースのアクセス数よりも少ない第2トレースを構成する特定のプロセスに関する動的優先度に基づいて、前記第2トレースの中から前記停止対象プロセスを決定する。
これにより、停止対象プロセスの候補となるプロセスをアクセス数がより少ないトレースを構成するプロセスに絞り込むことができる。
(6)上記(5)の管理ノードN0において、プロセッサ301は、特定のプロセスと連携して実行される第3トレースを構成する他のプロセスに基づいて、特定のプロセスを停止対象プロセスに決定する。
これにより、サービス提供に必要なプロセスの誤停止を抑制することができる。
(7)上記(6)の管理ノードN0において、他のプロセスは、特定のプロセスと同一の実行ノードで実行され、かつ、データへのアクセス経路が一致するプロセスである。
これにより、停止対象プロセスの候補となるプロセスであってもサービス提供に必要なプロセスであれば、当該プロセスの誤停止を抑制することができる。
(8)上記(6)の管理ノードN0において、前記他のプロセスは、特定のプロセスと同一の実行ノードで実行され、特定のプロセスからの信号を受信するプロセスである。
これにより、特定のプロセスに関連して実行される送信先のプロセスの誤停止を抑制することができる。
(9)上記(6)の管理ノードN0において、他のプロセスは、特定のプロセスと同一の実行ノードで実行され、特定のプロセスに信号を送信するプロセスである。
これにより、特定のプロセスに関連して実行される送信元のプロセスの誤停止を抑制することができる。
(10)上記(6)の管理ノードN0において、プロセッサ301は、第3トレースのアクセス数が第2トレースのアクセス数よりも少ない場合、特定のプロセスを停止対象プロセスに決定する。
これにより、アクセス数の少ないトレースに属するプロセスほど停止対象プロセスに決定し易くすることができる。
(11)上記(1)の管理ノードN0において、プロセッサ301は、停止対象プロセス決定処理によって決定された停止対象プロセスを有する実行ノードに対し、停止対象プロセスを停止するように制御する制御処理(425)を実行する。
これにより、停止対象プロセスを自動停止することができる。
なお、本発明は前述した実施例に限定されるものではなく、添付した特許請求の範囲の趣旨内における様々な変形例及び同等の構成が含まれる。例えば、前述した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに本発明は限定されない。また、ある実施例の構成の一部を他の実施例の構成に置き換えてもよい。また、ある実施例の構成に他の実施例の構成を加えてもよい。また、各実施例の構成の一部について、他の構成の追加、削除、または置換をしてもよい。
また、前述した各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等により、ハードウェアで実現してもよく、プロセッサ301がそれぞれの機能を実現するプログラムを解釈し実行することにより、ソフトウェアで実現してもよい。
各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、SSD(Solid State Drive)等の記憶装置、又は、IC(Integrated Circuit)カード、SDカード、DVD(Digital Versatile Disc)の記録媒体に格納することができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、実装上必要な全ての制御線や情報線を示しているとは限らない。実際には、ほとんど全ての構成が相互に接続されていると考えてよい。