以下、各実施例における実施形態について図面を参照して説明する。なお、以下の実施例に用いる図において、同一の符号を付した部分は同一物を表し、それらの構造および動作は同じである。
図1は、実施例1に係る情報処理システムの全体構成の例である。実施例1に係る情報システムは、クライアント端末101と、クライアント端末101とネットワーク102を介して接続されるリクエスト受付サーバ103、そしてネットワーク105を介してリクエスト受付サーバ103と接続されるデータ管理サーバ104、アプリ管理サーバ110、クラスタ管理サーバ120、複数の処理サーバ130を有する。図1ではクライアント端末101とそれ以外のサーバ(リクエスト受付サーバ103、データ管理サーバ104、アプリ管理サーバ110、クラスタ管理サーバ120、処理サーバ130)が異なるネットワーク(102,105)に接続されているが、クライアント端末101とそれ以外のサーバが同一ネットワークに接続されるように、情報処理システムが構成されていてもよい。
クライアント端末101は、アプリケーション利用者が使用する端末であり、アプリケーション利用者が、アプリケーションプログラム(以下、「アプリケーション」と略記する)に処理させるための入力データを作成して、リクエスト受付サーバ103にアプリケーションの処理要求を入力データとともに送信するために用いられる。クライアント端末101はたとえば、会社や工場内のパーソナルコンピュータやサーバである。あるいはクライアント端末101は、スマートフォンやタブレット端末などの、通信機能を有する通信デバイスであってもよい。
ネットワーク102は、通信キャリアなどによって提供される無線ネットワークまたは有線ネットワークである。ネットワーク102は、個別の会社などが所有するネットワークを、ネットワーク102の一部に含んでもよく、複数種類のプロトコルを通過させるネットワークであってもよい。
リクエスト受付サーバ103は、クライアント端末101からアプリ実行要求などの処理要求を受け付け、受け付けた処理要求に基づき、データ管理サーバ104、アプリ管理サーバ110、クラスタ管理サーバ120、処理サーバ130に処理依頼を行い、処理結果をクライアント端末101に返信する処理を実行するサーバである。
データ管理サーバ104は、アプリケーションの実行時に処理対象となるデータ(入力データ)を格納するサーバであり、入力データがファイルの場合は共有ファイルサーバ、レコードとして格納しておく場合は構造データベースサーバ、jsonなどの形式で格納しておく場合はキーバリューストアなどの非構造データベースなどのデータを格納するサーバである。
アプリ管理サーバ110は、処理サーバ130で実行されるアプリケーションの情報を管理するとともに、入力データや計算機リソースを設定することでアプリケーションの実行処理時間の見積もり値を計算するサーバである。アプリ管理サーバ110は、アプリケーションの情報を管理するアプリ管理記憶部111と、入力データと計算機リソース量に基づきアプリケーションの実行時間を事前に計算するアプリ実行時間計算部112と、を有する。詳細は、図4および図6で説明する。
クラスタ管理サーバ120は、各処理サーバ130の利用状態を管理して、クラスタの生成/破棄を動的に行うサーバであり、ノード-クラスタ管理情報記憶部121とクラスタ生成部122、クラスタ破棄部123、を有する。本実施例では、1つのアプリケーションを実行する際に使用される計算機リソースの集合(あるいはこの計算機リソースを有する処理サーバ130の集合)を「クラスタ」と呼ぶ。詳細は、図5および図7、図8で説明する。
処理サーバ130は、アプリ管理サーバ110が管理しているアプリケーションを実行するためのサーバであり、アプリケーションの実行コードを記憶するアプリケーション管理部131と、アプリケーションの並列処理を実現する並列処理管理部132と、を有する。アプリケーション管理部131には、複数のアプリケーションが登録されてもよい。複数のアプリケーションが登録されている場合、クラスタはアプリケーションの処理要求ごとに生成されるため、処理サーバ130は複数のクラスタに属していることとなり、それぞれのクラスタ内の処理サーバ130からアプリケーションの処理を割り振られることとなる。詳細は図3で説明する。
本実施例では、これらのサーバがそれぞれ物理的に異なる計算機である例を説明する。ただし必ずしもこれらのサーバが、異なる計算機である必要はなく、上で述べたいくつかのサーバが有する機能部が、単一の計算機上に実装されていてもよい。たとえば情報処理システム内に、上で述べたリクエスト受付サーバ103、データ管理サーバ104、アプリ管理サーバ110、クラスタ管理サーバ120に代えて、1台の計算機(仮に「管理サーバ」と呼ぶ)を設け、上で述べたリクエスト受付サーバ103、データ管理サーバ104、アプリ管理サーバ110、クラスタ管理サーバ120が有する機能部を、その管理サーバ上に設けてもよい。あるいは、処理サーバの1つ(または複数)が、管理サーバとして用いられてもよい。
さらに別の実施形態として、情報処理システム内に設けられた1台または複数台の計算機上で、いわゆる仮想計算機を提供するためのソフトウェア(一般的にハイパーバイザと呼ばれる)を実行させ、計算機上に、リクエスト受付サーバの役割を果たす仮想計算機、データ管理サーバの役割を果たす仮想計算機、アプリ管理サーバの役割を果たす仮想計算機、クラスタ管理サーバの役割を果たす仮想計算機を定義することで、情報処理システムが構成されてもよい。
図2は、図1で示したリクエスト受付サーバ103、データ管理サーバ104、アプリ管理サーバ110、クラスタ管理サーバ120、処理サーバ130、クライアント端末101の物理的な構成を示す図である。本実施例ではこれらのサーバ(またはクライアント端末)には、プロセッサ(CPU)201、メモリ202、補助記憶装置203及び通信インターフェース(通信I/F)204を有する計算機200が用いられる。この計算機は一例として、パーソナルコンピュータ(PC)等の汎用的な計算機でよい。
プロセッサ201は、メモリ202に格納されたプログラムを実行する。プロセッサ201の数は1とは限らない。計算機200は複数のプロセッサ201を有していてもよい。またプロセッサ201は複数のプロセッサコアを有する、いわゆるマルチコアプロセッサであってもよい。メモリ202は、不揮発性の記憶素子であるROM及び揮発性の記憶素子であるRAMを含む。ROMは、不変のプログラム(例えば、BIOS)などを格納する。RAMは、DRAM(Dynamic Random Access Memory)のような高速かつ揮発性の記憶素子であり、プロセッサ201が実行するプログラム及びプログラムの実行時に使用されるデータを一時的に格納する。
補助記憶装置203は、例えば、磁気記憶装置(HDD)、フラッシュメモリ(SSD)等の大容量かつ不揮発性の記憶装置であり、プロセッサ201が実行するプログラム及びプログラムの実行時に使用されるデータを格納する。すなわち、プログラムは、補助記憶装置203から読み出されて、メモリ202にロードされて、プロセッサ201によって実行される。
通信インターフェース204は、所定のプロトコルに従って、他の装置との通信を制御するネットワークインターフェース装置である。
計算機200はまた、入力インターフェース(入力I/F)205及び出力インターフェース(出力I/F)208を有してもよい。入力インターフェース205は、キーボード206やマウス207などが接続され、オペレータからの入力を受けるインターフェースである。出力インターフェース208は、ディスプレイ装置209やプリンタなどが接続され、プログラムの実行結果をオペレータが視認可能な形式で出力するインターフェースである。
なお、本実施例では、アプリ管理サーバ110、クラスタ管理サーバ120、処理サーバ130の有する各機能部は、ソフトウェア(プログラム)によって実装されるものとする。たとえばアプリ管理サーバ110では、アプリ管理サーバ110をアプリ管理記憶部111とアプリ実行時間計算部112として機能させるためのプログラムが、アプリ管理サーバ110(計算機200)のメモリ202上にロードされ、プロセッサ201により実行される。これによりアプリ管理サーバ110は、アプリ管理記憶部111とアプリ実行時間計算部112を有する装置として動作する。
クラスタ管理サーバ120や処理サーバ130でも同様に、計算機200(クラスタ管理サーバ120や処理サーバ130)のプロセッサ201で、上で述べた各機能部を実現するためのプログラムが実行される。これによってクラスタ管理サーバ120や処理サーバ130は、上で述べた各機能部を有する装置として動作する。以下では、アプリ管理サーバ110やクラスタ管理サーバ120、あるいは処理サーバ130等で実行される処理を説明する際に、アプリ実行時間計算部112やクラスタ生成部122等の機能部を主語とした説明を行うことがあるが、それは実際には、機能部を有する計算機200のプロセッサ201が処理を行うことを意味する。
また、プロセッサ201が実行するプログラムは、計算機が読み取り可能な記憶メディア又はネットワークを介して計算機200に提供され、非一時的記憶媒体である補助記憶装置203に格納される。計算機が読み取り可能な記憶メディアとは、非一時的なコンピュータ可読媒体で、たとえばCD−ROMやフラッシュメモリなどの、不揮発性のリムーバブルメディアである。このため計算機200は、リムーバブルメディアからデータを読み込むインターフェースを有するとよい。
また、別の実施形態として、各機能部の一部またはすべては、FPGAやASICなどのハードウェアを用いて実装されていてもよい。
図3は、処理サーバ130でアプリケーションが実行される時の仕組みを概説する図である。
処理サーバ130は先に述べたとおり、アプリケーションが配置されるアプリケーション管理部131と、同一クラスタ内の処理サーバ130を管理して、処理を各処理サーバ130に割り振りながらアプリケーションを並列実行することを管理する並列処理管理部132と、を有する。
アプリケーション管理部131はアプリケーションプログラムを格納する機能部で、メモリ202や補助記憶装置203の記憶領域を用いてアプリケーションプログラムを保持する。
並列処理管理部132は、アプリケーションを並列実行させるために必要な、各種機能を提供する。並列処理管理部132の説明の前に、処理サーバ130でアプリケーションがどのようにして並列実行されるか、概説する。
本実施例では一例として、アプリケーションがデータの分析を行うためのプログラムである例を説明する。アプリケーションは、1以上の処理を実行するためのプログラムコード(実行コード)を含む。図4の410は、アプリケーション(App A)の構成例を示している。図4の410に示されているように、App Aは複数の処理Aa,Ab,Acを含んでおり、App Aが処理サーバで実行される時、処理Aa,Ab,Acの順に実行される。ここで、たとえば処理Aaは入力データの正規化を行う処理、処理Abは正規化されたデータの分析を行う処理、そして処理Acは処理Abにて分析されたデータの統計処理である。
各処理の中には、複数の処理サーバ130(あるいは複数のプロセッサ201)で並列処理されてもよいものもある。本実施例では処理Aa,Abが、並列実行可能な処理である例を説明する。
アプリケーションは、これらの各処理(Aa,Ab,Ac)をプロセッサ201に実行させるための実行コードと、各処理の実行を各処理サーバ130に依頼する(振り分ける)処理をプロセッサ201に行わせる実行コードとを有し、前者の実行コードのことを「実行部」(図3の312)と呼び、後者の実行コードのことを「振分部」(図3の311)と呼ぶ。本実施例では、振分部311が各処理サーバ130に、実行部の処理を依頼するために送信される情報のことを「メッセージ」と呼ぶ。また、図3または図4に示されたApp Aのように、複数の処理(Aa,Ab,Ac)が実行されるアプリケーションでは、実行部312には処理Aaを行う実行コード,処理Abを行う実行コード,処理Acを行う実行コードが含まれる。以下では処理Aa,Ab,Acを行う実行コードをそれぞれ、「コードAa」,「コードAb」,「コードAc」と呼ぶ。
処理サーバ130の並列処理管理部132は、振分部311と実行部312の形で分離設計定義されたアプリケーションの並列実行の管理を行う。並列処理管理部132は、リクエスト受付サーバ103などの外部からアプリケーションの実行依頼を受け付けて、アプリケーションの振分部311の実行を開始するリクエスト受付部321と、振分部311が生成したメッセージを、処理サーバ(実行)130に送信するメッセージ振分部322、処理サーバ(振分)130から受信したメッセージを解析して、対象の実行部312に含まれる実行コード(コードAa,Ab,Ac)を呼び出すメッセージ受付部323により、アプリケーションの並列実行を行う。
また並列処理管理部132は、クラスタ管理サーバ120などからアプリケーションのデプロイまたはアンデプロイ依頼を受けとり、アプリケーション管理部310にアプリケーションの配置と削除を行うアプリ・デプロイ/アンデプロイ受付部324と、アプリケーション管理部310に配置されているアプリケーションが所属しているクラスタについてのクラスタ情報を管理するクラスタ情報記憶部325の機能も提供する。クラスタ情報については後述する。
並列処理管理部132は、このメッセージの送受信や、受信したメッセージに基づいて実行部に処理を実行させる等の処理を行う。以下では図3を参照しながら、App A310が実行される時の処理の流れを概説する。
以下では、処理AaがN個のプロセッサ201で並列処理され、処理AbがM個のプロセッサ201で並列処理される例を説明する(N,Mはいずれも1以上の整数で、NとMは等しい場合もある)。なお、アプリケーションが処理サーバ130で実行される前に、アプリケーションを実行するクラスタ内の各処理サーバ130にはアプリケーションが配布され、クラスタ内の各処理サーバ130のアプリケーション管理部131にはアプリケーションが格納された状態にある。この処理は後述する。
ここで、処理サーバ130のうち、メッセージを生成して振り分ける振分部311を担当する処理サーバ130を処理サーバ(振分)130、メッセージを受け取り、処理を実行する実行部312を担当する処理サーバ130を処理サーバ(実行)130と呼ぶ。処理サーバ(実行)130と処理サーバ(振分)130は同一サーバであってもよい。
アプリケーションAppA310の実行が開始されると、処理サーバ(振分)130の振分部311はまずメッセージAaをN個生成して、並列処理管理部132のメッセージ振分部322を介して、クラスタ内の各処理サーバ130にメッセージAaを送信する。メッセージAaの送信先となる処理サーバ130は、振分部311により決定される。メッセージAaを送信された処理サーバ130(実行)では、メッセージ受付部323がメッセージAaに対応した実行部312内の処理Aaを実行するコードを呼び出して、処理Aaを実行させる。処理Aaの実行後、メッセージ受付部323は処理サーバ(振分)130に、処理結果を返信する。
処理サーバ(振分)130の振分部311は、メッセージAaに対応する処理結果の返信をN個分受け取ると、次の処理としてメッセージAbをM個生成して、同様に並列処理管理部132のメッセージ振分部322を介して、メッセージAbをクラスタ内の処理サーバ(実行)130に送信する。振分部311は、各処理(Aa,Ab,Ac)について、メッセージの送信及び結果の受信を行い、メッセージAcに対応する結果を受信し終えると、アプリケーションは終了する。つまり、アプリケーションを、処理依頼となるメッセージを生成する振分部311と、メッセージを受け取る実行部312に分けて設計定義しておくことで、繰り返し処理部分を並列に処理させることができる。
並列処理管理部132により、処理サーバ130にアプリケーションを配置するだけで、クラスタ内の処理サーバ130のどれか1つに対して実行依頼を送信することで、処理サーバ130が自動で処理サーバ(振分)130と処理サーバ(実行)130に分かれて、アプリケーションの処理を処理サーバ(実行)130に振り分けながら並列に処理を実行することができる。これらの処理の流れについては、後で図9から図11のシーケンス図を用いて説明する。
図4は、アプリ管理サーバ110内に保持されているアプリ管理記憶部111のテーブルの例を示す図である。
アプリ管理記憶部111は、アプリケーションとして配置する実行コードや、アプリケーションの処理時間を計算するための処理フローの情報や、処理ごとの実行時間を計算するための計算ロジックの情報を格納する機能部で、これらの情報を格納するために、メモリ202や補助記憶装置203の記憶領域を用いる。アプリ管理記憶部111は一例として、公知のファイルシステムプログラムまたはデータベース管理システム(DBMS)のようなプログラムを用いて実装されて良い。本実施例ではアプリ管理記憶部111は、アプリケーションの実行コードや処理フローや計算ロジックの情報を、メモリ202や補助記憶装置203の記憶領域上に形成されたテーブルに記憶させる例を説明する。
アプリ管理記憶部111が有するテーブル400は、図4に示されるように6つのカラムを有する。以下、各カラムに格納される情報について説明する。アプリ名401には、アプリケーションの名称が格納される。アプリケーションの名称とは、アプリケーション利用者が、アプリケーションの実行を依頼する際に、アプリケーションを特定するために用いる名称である。実行コード402には、アプリ名401に対応したアプリケーションの実行コード(のファイル)が格納される。
並列度計算ロジック403には、入力データ量に応じてアプリケーションの各処理の繰り返し回数を算出するためのロジックが記述されたファイルが格納される。本実施例では、各処理の繰り返し回数を算出するためのロジックを「並列度計算ロジック」と呼ぶ。処理フロー404には、アプリケーションの処理実行手順が記録される。並列性405には、処理フロー404に記述されている各処理が、並列実行が可能か否かを表す情報が格納される。計算ロジック406には、処理フロー404内の各処理の1回の実行時間を算出するための計算ロジック(これを「実行時間計算ロジック」と呼ぶ)が記述されたファイルが格納される。
たとえば図4を参照しながら、各カラムに格納される情報の具体例を説明する。図4のテーブルの先頭行に格納されているアプリケーション(AppAと呼ぶ)が、図4の410に記述されているように、処理Aa、処理Ab、処理Acの3つの処理を含み、処理Aa、処理Ab、処理Acの順で処理を行うものとする。また処理Aa及び処理Abは並列実行可能で、与えられた入力データの量に応じて、繰り返し実行される回数が変動する処理とする。
この時並列度計算ロジック403には、入力データの量から処理Aa及び処理Abの繰り返し実行回数を算出するためのロジックが記述されたファイルのファイル名(図4の例では“AppA_message.py”)が記述される。また処理フロー404には“処理Aa,処理Ab,処理Ac”が記述される。以下では、処理フロー404のカラムに“処理Aa”が格納された行を“行407”,“処理Ab”が格納された行を“行408”,“処理Ac” が格納された行を“行409”と呼ぶ。
並列性405の欄には、行407及び行408には“○”が格納され、処理Aa及び処理Abは並列実行可能であることを表す。一方、行409には“×”、つまり処理Acは並列実行可能でないことを表す情報が格納される。
そして、処理Aaの実行時間計算ロジックが記述されたファイルが“AppA_calcAa.py”、処理Abの実行時間計算ロジックが記述されたファイルが“AppA_calcAb.py”、処理Acの実行時間計算ロジックが記述されたファイルが“AppA_calcAc.py”の場合、計算ロジック406の欄には、行407に“AppA_calcAa.py”、行408に“AppA_calcAb.py”、行409に“AppA_calcAc.py”が格納される。
アプリ管理記憶部111のテーブルに格納されるこれらの情報は、あらかじめ情報処理システムの管理者、またはアプリケーションの利用者によって、アプリ管理記憶部111に登録される。また並列度計算ロジックや実行時間計算ロジックは、あらかじめアプリケーションの開発者によって作成されたものである。
ただし別の実施形態として、実行時間計算ロジックを情報処理システムが自動作成する手段を備えていてもよい。たとえばデータ量と実行時間の因果関係を考慮して、入力データを統計的に処理して自動で計算ロジックを作成する機能,またデータ量以外に実行時間との因果関係のある項目を分析して自動で計算ロジックの予測モデルを構築する機能を、情報処理システムが備えており、アプリケーションがアプリ管理サーバ110に登録された時に、情報処理システムが実行時間計算ロジックを生成して、アプリ管理記憶部111に登録してもよい。
なお、図4では説明を分かりやすくするために、実行コード402、並列度計算ロジック403、計算ロジック406のカラムには、実行コードや計算ロジックのファイル名(AppA.appなど)のみが記載されているが、これらのカラムにファイルの実体も格納される。あるいは別の実施形態として、実行コードや計算ロジックのファイルの実体は、アプリ管理記憶部111(を構成する補助記憶装置203の記憶領域)に格納され、実行コード402、並列度計算ロジック403、計算ロジック406のカラムには、各ファイルのパス名が格納される形態であってもよい。
図5は、クラスタ管理サーバ120内に保持されているノード-クラスタ管理情報記憶部121のテーブルの例を示す図である。本実施例ではノード-クラスタ管理情報記憶部121はアプリ管理記憶部111と同様に、メモリ202や補助記憶装置203の記憶領域上に形成されたテーブルに、各種情報を記憶させる例を説明する。
ノード-クラスタ管理情報記憶部121は、アプリケーションを配置可能な全ての処理サーバ130の情報を管理しており、またこれらの処理サーバ130のうち、同一アプリケーションが配置されて、クラスタを形成している処理サーバ130の情報もテーブル500に格納して管理している。
ノード-クラスタ管理情報記憶部121が有するテーブル500の各行(レコード)は、図5に示す、6つのカラムを有し、各レコードには情報処理システム内の処理サーバ130についての情報が格納される。ノード名501には、処理サーバ130の名称を格納するための欄である。各処理サーバ130は情報処理システム内で一意な名称を有しており、本実施例ではその名称を「ノード名」と呼ぶ。IPアドレス502には、ノード名501で特定される処理サーバ130のIPアドレスが格納される。CPU Core数503には、処理サーバ130の有するプロセッサコア(CPU Core)の数が格納される。
クラスタ名504には、処理サーバ130がクラスタに属している場合、所属しているクラスタの名称が格納され、割り当てCPU Core数505には、クラスタに割り当てられているプロセッサコア数が格納される。そのため、CPU Core数503と割り当てCPU Core数505の差を算出することで、まだいずれのクラスタにも割り当てられていないプロセッサコア(「未使用コア」と呼ぶ)の数が求められる。またアプリ名506には、処理サーバ130に配置されているアプリケーションのアプリ名が格納される。
なお本実施例では、処理サーバ130がいわゆるマルチコアプロセッサを有する前提で説明しているが、処理サーバ130の有するプロセッサがシングルコアプロセッサの場合、CPU Core数503や割り当てCPU Core数505には、プロセッサコア数に代えてプロセッサ数が格納される。
また本実施例では、ノード-クラスタ管理情報記憶部121が有するテーブル500の各レコードのうち、クラスタ名504が同じレコードの集合に含まれる情報、特にこれらのレコードのカラム504〜506の情報を、「クラスタ情報」と呼ぶ。図5において、行510−1と行510−2のカラム504〜506がそれぞれ、クラスタ“User1-AppB-1”のクラスタ情報、クラスタ“User2-AppA-5”のクラスタ情報である。クラスタ情報を参照することで、クラスタに所属している処理サーバ130、CPU Core数を知ることができる。
後述するクラスタ管理サーバ120のクラスタ生成部122がクラスタを生成(定義)するとき、クラスタに所属させる処理サーバ130をテーブル500の中から選択する。そしてクラスタ生成部122は、選択された処理サーバ130に対応するレコードのカラム504〜506に、クラスタ名や使用するCPU Core数などの情報を格納する。本実施例ではクラスタ生成部122が、カラム504〜506に、クラスタ名等の情報を格納する処理を「クラスタ情報を作成する」処理と呼ぶ。クラスタ情報が作成されることにより、アプリケーションの実行に使用される計算機リソースが実質的に確保(予約)されることを意味する。また、クラスタ情報が作成されると、処理サーバ130のクラスタ情報記憶部325にも作成されたクラスタ情報が配置される。
逆に定義されたクラスタにおけるアプリケーションの実行が終了すると、クラスタ破棄部123がカラム504〜506からクラスタ名等の情報を削除する。この処理は「クラスタ情報を削除する」処理と呼ばれる。クラスタ情報の削除により、アプリケーションの実行のために確保されていた計算機リソースが実質的に解放され、解放された計算機リソースを他の用途に使用することができるようになる。
ここで、処理サーバ130としてクラウド(非図示)上の計算機リソースを使う場合、つまりクラスタ生成の要求ごとにクラウド上の計算機リソースを確保して使用する場合は、計算機リソースが確保されるたびにノード-クラスタ管理情報記憶部121のテーブルにレコードが追加され、アプリケーションの実行が終了してクラスタを削除すると、そのレコードが削除される。
また、処理サーバ130が複数のCPU Coreを保持しており、アプリケーションの並列度が、処理サーバ130の有するCPU Core数より少ない場合は、1つの処理サーバ130に複数のアプリケーションが配置されることもあり得る。その場合は、処理サーバ130は複数のクラスタに所属することになる。
また、本実施例では、処理サーバ130がn個のCPU Coreを有している場合、アプリケーションの実行コードをn個並列実行可能という前提で、計算機リソースの確保が行われる。そのため、アプリケーションの並列度が4の場合(アプリケーション利用者がアプリケーションを4並列実行させたい場合)、クラスタ管理サーバ120のクラスタ生成部122(後述)は、未使用コアを有する処理サーバ130を1または複数選択する。その際クラスタ生成部122は、選択された処理サーバ130が有する未使用コアの数が4つ(以上)になるように、処理サーバ130を選択する。
たとえば情報処理システム内に、図5のテーブル500に示されているように、Node1〜Node8の処理サーバ130が存在し、Node1〜Node5のCPU Coreが既に何らかのアプリケーションに割り当てられている場合、未使用コアを2以上有する処理サーバ130としてNode5,Node6が選択されるとよい。そしてこの場合、クラスタ生成部122はNode5とNode6の割り当てCPU Core505に2を加算することで、計算機リソース(CPU Core)を確保するとよい。
ただし、アプリケーションの特性によっては、CPU Coreの数以外に、メモリ量やCPUの処理性能を考慮して、1または複数の処理サーバ130が選択されてもよい。
図6は、アプリ管理サーバ110のアプリ実行時間計算部112の動作フローの例である。まず、アプリ実行時間計算部112は要求発行元から、アプリ名、入力データ、並列度を引数として指定した、アプリ実行時間計算依頼を受け付ける(ステップ601)。本実施例ではアプリ実行時間計算依頼の要求発行元は、リクエスト受付サーバ103とする。また並列度は、アプリケーションを構成する処理毎に指定されてもよい。たとえばアプリケーションが図4の410のように処理Aa,Ab,Acから構成されており、処理Aa,Abがそれぞれ並列実行可能な処理の場合、要求発行元は処理Aaの並列度と処理Abの並列度を引数として指定したアプリ実行時間計算依頼を、アプリ実行時間計算部112に発行してもよい。ただし以下の説明では、特に断りのない限り、並列度が1つだけ指定される例(並列実行可能な各処理がいずれも、同じ並列度で実行される例)を説明し、またここで指定される並列度をnとする。
次にアプリ実行時間計算部112は、アプリ管理記憶部111から、アプリ名に対応した並列度計算ロジック403と処理フロー404内の各処理に対応する計算ロジック406を取得する(ステップ602)。そしてアプリ実行時間計算部112は、並列度計算ロジック403を利用して、入力データ量からアプリケーションの各処理の繰り返し数を算出し(ステップ603)、次に各処理の計算ロジック406を利用して、各処理が入力データに対応した処理を1回実行する時の実行時間を算出する(ステップ604)。
次にアプリ実行時間計算部112は、ステップ603で求められた各処理の繰り返し数と、ステップ604で求められた各処理の1回の実行時間を用いて、アプリケーションの実行時間(並列処理を行わない場合の実行時間)を計算し(ステップ605)、さらに並列実行可能な処理群が並列実行された場合の、各処理の繰り返し回数、各処理の実行時間、アプリケーションの合計実行時間を算出し、実行結果を要求発行元に返信する(ステップ606)。各処理が並列実行される場合の、繰り返し回数や実行時間は、ステップ603で求められた各処理の繰り返し数と、ステップ604で求められた各処理の1回の実行時間をそれぞれ、並列度(n)で除算することにより求められる。
アプリ実行時間計算部112は上に述べたフローを実行することで、アプリケーションの実行時間を入力データと並列度から瞬時に計算して、アプリケーション利用者に対して計算時間に対する情報を提示する。これによりアプリケーション利用者は、許容可能な実行時間に対する並列度を試行錯誤しながら決定することができる。
図7は、クラスタ管理サーバ120のクラスタ生成部122の動作フローの例である。まず、クラスタ生成部122は要求発行元から発行されたクラスタ生成依頼を受け付ける(ステップ701)。本実施例では、クラスタ生成依頼の要求発行元は、リクエスト受付サーバ103とする。またクラスタ生成依頼には、アプリ名と並列度が引数として含まれている。
次にクラスタ生成部122は、ノード-クラスタ管理情報記憶部121を見て、まだノード-クラスタ管理情報記憶部121に記録されていない名称のクラスタ名を生成することで、今回生成されるクラスタに一意な名称を付す(ステップ702)。そしてクラスタ生成部122はノード-クラスタ管理情報記憶部121を参照することで、まだどのクラスタにも割り当てられていないプロセッサコアを有する処理サーバ130を1または複数選択して(ステップ703)、ノード-クラスタ管理情報記憶部121にクラスタ情報を作成する(ステップ704)。ステップ703における処理サーバ130の選択方法は、図5の説明で述べたため、ここでの説明は略す。
次にクラスタ生成部122は、選定した処理サーバ130にアプリケーションを配置するために、アプリ管理サーバ110からアプリ名に対応するアプリケーションの実行コード402を取得して、各処理サーバにアプリケーションの配置を依頼する(ステップ705、706)。アプリケーションの配置を依頼された処理サーバ130で行われる処理については、後で説明する。
続いてクラスタ生成部122は、アプリケーションの実行コード402を配置した処理サーバ130の中から、処理サーバ(振分)130となる処理サーバ130を選択して(ステップ707)、クラスタ名と処理サーバ(振分)130へのアクセスURL(Uniform Resource Locator)を、要求発行元に返信する(ステップ708)。
図8は、クラスタ管理サーバ120のクラスタ破棄部123の動作フローの例である。まず、クラスタ破棄部123は要求発行元から、クラスタ名が引数に指定されたクラスタ破棄依頼を受け付ける(ステップ801)。ここでも要求発行元はリクエスト受付サーバ103とする。次にクラスタ破棄部123は、ノード-クラスタ管理情報記憶部121からクラスタ内の処理サーバ130の情報を取得して(ステップ802)、各処理サーバ130にアプリケーションを削除させる(ステップ803)。削除が完了すると、クラスタ破棄部123はノード-クラスタ管理情報記憶部121のクラスタ情報を削除して(ステップ804)、完了通知を要求発行元に返信する(ステップ805)。
図9は、アプリケーション利用者が、本実施例に係る情報処理システムを用いてアプリケーションの実行を要求した時に、情報処理システム内の各サーバで行われる処理の流れを表したシーケンス図である。図9では、クライアント端末101がリクエスト受付サーバ103に要求を発行し、アプリケーションを実行するクラスタが生成されるまでの処理の流れが記述されている。
まずクライアント端末101はアプリケーション利用者から、アプリケーション利用者が利用するアプリケーションのアプリ名と入力データを受け付けると、リクエスト受付サーバ103にアプリケーションの登録依頼を送信する(901)。このアプリケーションの登録依頼には、アプリケーション名(たとえば“AppA”など)と入力データが含まれる。リクエスト受付サーバ103はこの登録依頼に応じて、まず入力データをデータ管理サーバ104に登録する(902、903)。データ管理サーバ104は入力データを受領すると、入力データへのアクセス方法であるアクセスURL(904)をリクエスト受付サーバ103に返送する。リクエスト受付サーバ103はアクセスURL(904)を受け取ると、クライアント端末101にOK(905)を返信する。この時、リクエスト受付サーバ103は、入力データへのURLとアプリ名とを対応付けて保持する。
次にアプリケーション利用者は、クライアント端末101を用いて並列度(906)を指定する。リクエスト受付サーバ103は並列度を受け取ると、アプリ管理サーバ110のアプリ実行時間計算部112に、繰り返し数と各処理の実行時間を計算させて(907、908、909)、その結果をクライアント端末101に返信する(910)。907、908、909でアプリ管理サーバ110で行われる処理は、図6の処理に相当する。
アプリケーション利用者は、アプリ実行時間計算部112によって算出されるアプリケーションの実行時間が、アプリケーション利用者の希望する時間に収まるようになるまで、並列度を変更しながら、906〜910の処理を繰り返す。たとえばある並列度(nとする)が指定された時に算出されたアプリケーションの実行時間が、アプリケーション利用者の希望する実行時間より長かった場合には、アプリケーション利用者は、nよりも高い並列度(たとえば(n+1)等)を指定して、アプリ実行時間計算部112にアプリケーションの実行時間を算出させるとよい。逆に算出されたアプリケーションの実行時間が、アプリケーション利用者の希望する時間よりも短かった場合、アプリケーション利用者は最初に指定した並列度(n)よりも低い並列度(たとえば(n−1)等)を指定して、アプリ実行時間計算部112にアプリケーションの実行時間を算出させてもよい。
アプリケーション利用者は上に述べた906〜910の処理を繰り返すことで、実際にアプリケーションを実行する時の並列度を決定する(以下では、ここでアプリケーション利用者が決定した並列度を「実行時並列度」と呼び、図9の906でアプリケーション利用者が指定する並列度とを区別する)。実行時並列度が決定されると、アプリケーション利用者はクライアント端末101から、実行時並列度とアプリケーション名を指定したクラスタ生成依頼をリクエスト受付サーバ103経由でクラスタ管理サーバ120に送信する(911,912)。ここの処理でアプリケーション利用者が並列度等を指定するための具体的な方法については、後で図12(または図13)を用いて説明する。
クラスタ管理サーバ120はクラスタ生成依頼(912)を受け取ると、クラスタ生成部122により、クラスタ名を作成し(913)、実行時並列度に応じた処理サーバ130の計算機リソース(CPU Core)の確保を行い(914)、ノード-クラスタ管理情報記憶部121にクラスタ情報を作成する(915)。912〜915の処理はそれぞれ、図7のステップ701〜704に相当する処理である。
続いてクラスタ生成部122は、アプリ管理サーバ110からアプリケーションの実行コード(916)を取得して(917)、各処理サーバ130にアプリケーションの配置を依頼する(918)。917〜918の処理はそれぞれ、図7のステップ705〜706に相当する処理である。クラスタ生成部122が処理サーバ130にアプリケーションの配置を依頼する際、アプリケーションの実行コード、そしてクラスタ情報を処理サーバ130に送信する。
アプリケーションの配置を依頼された処理サーバ130は、アプリケーションをインストールするとともに(919)、並列処理管理部132のクラスタ情報記憶部325にクラスタ情報を作成する(920)。クラスタに属する各処理サーバ130へのアプリケーションの配置が完了すると(921)、クラスタ管理サーバ120はクラスタに属する各処理サーバ130の中から、処理サーバ(振分)130となる処理サーバ130を1台選定して、リクエスト受付サーバ103にクラスタ名とともに、処理サーバ(振分)130へのアクセスURLを返信する(923)。
リクエスト受付サーバ103はクライアント端末101にOK(924)を返信して、処理が完了する。
図10は、図9の処理の続きで、図9の処理によって決定された処理サーバ130群を利用して、アプリケーションの処理を並列に実行する動作シーケンスの例である。
まず、アプリケーション利用者がクライアント端末101を用いてアプリケーション実行要求(1001)をリクエスト受付サーバ103に発行すると、リクエスト受付サーバ103は、処理サーバ(振分)130へのアクセスURLに対して、入力データのアクセスURLと合わせて実行依頼を送信する(1002)。
なお、図9(及び図10)のシーケンス図には、リクエスト受付サーバ103はクライアント端末101にOKを返送し(924)、その後アプリケーション利用者がアプリケーション実行要求(1001)を発行したことを契機に、処理サーバ(振分)130に実行依頼を送信(1002)する例を示している。ただし別の実施形態として、リクエスト受付サーバ103がクラスタ管理サーバ120から処理サーバ(振分)130へのアクセスURLを受領(923)した後、リクエスト受付サーバ103はクライアント端末101に返信(924)を行うことなく、処理サーバ(振分)130にアプリケーションの実行依頼を送信(1002)してもよい。
処理サーバ(振分)130では、アプリケーションの振分部311が、911で指定された並列度(実行時並列度)と同数のメッセージAaを生成して(1004)、メッセージAa(1005)を各処理サーバ(実行)130に送信する。メッセージAaを生成する際に、入力データを利用する場合は、処理サーバ(振分)130はデータ管理サーバ104から入力データを取得する(1003)。
処理サーバ(実行)130はメッセージAaを受け取ると、データ管理サーバ104に格納されている入力データの中から処理Aaに必要な対象データ(1006)を取得して、実行部312の処理Aaを実行して(1007)、処理結果(1008)をデータ管理サーバ104に書き込むとともに、処理の完了通知(1009)を処理サーバ(振分)130に返信する。
処理サーバ(振分)130は、メッセージを送信した全ての処理サーバ(実行)130から完了通知を受領すると(1009)、次のメッセージ(図10の例では“メッセージAb”)を生成して、各処理サーバ(実行)130に振り分ける。処理サーバ(振分)130はこのように、メッセージを生成して各処理サーバ(実行)130にメッセージを振り分け、各処理サーバ(実行)130から処理の完了通知を受領する、という処理を繰り返す。そして処理サーバ(振分)130は、最後のメッセージ(図10の例では“メッセージAc”)に対する処理の完了通知を処理サーバ(実行)139から受け取ると、最終結果をデータ管理サーバ104から取得し(1022)、アプリケーションとしての実行結果を生成して(1023)、リクエスト受付サーバ103経由で実行結果(1024,1025)をクライアント端末101に返信する。
図11は、図10の後に行われる処理、つまりアプリケーションの実行が終わってから、クラスタを破棄するまでの処理の例である。
まず、クライアント端末101からアプリケーションの実行完了通知(1101)をリクエスト受付サーバ103が受け取ると、リクエスト受付サーバ103は、クラスタ管理サーバ120に対して、クラスタ破棄依頼(1102)を送信し、クラスタ破棄部123はこのクラスタ破棄依頼を受け付ける。この処理は図8のステップ801に相当する処理である。先に述べたとおり、クラスタ破棄依頼には、破棄対象のクラスタ名が含まれている。
クラスタ破棄依頼を受け取ったクラスタ管理サーバ120では、クラスタ破棄部123がノード-クラスタ管理情報記憶部121を参照することで、クラスタ内の処理サーバ130とアプリ名を特定する(1103)。この処理はステップ802に相当する処理である。そしてクラスタ破棄部123は、特定された各処理サーバ130にアプリケーション破棄依頼(1104)を送信する(ステップ803に相当する処理である)。
アプリケーション破棄依頼を受領した各処理サーバ130は、アプリケーションのアンインストール(1105)、クラスタ情報記憶部325に記録されていたクラスタ情報の破棄(1106)を実施した後、完了通知をクラスタ管理サーバ120に返送する。クラスタ破棄部123が各処理サーバ130から完了通知(1107)を受け取ると、ノード-クラスタ管理情報記憶部121のクラスタ情報を削除して(1108)、リクエスト受付サーバ103経由でクライアント端末101に完了通知(1109,1101)を返信する。
図12は、アプリケーション利用者が実行要求毎に計算機リソース量を決定するための計算機リソース量設定画面イメージの例である。本実施例では、リクエスト受付サーバ103がこの設定画面1200を作成してクライアント端末101に提供する(クライアント端末101のディスプレイ装置209に表示させる)例を説明する。ただし、リクエスト受付サーバ103以外の計算機が、この設定画面1200を作成してもよい。
図12において、1201はアプリ名入力ボックス、1202はデータ名入力ボックス、1206は並列度設定欄である。アプリケーション利用者がアプリ名入力ボックス1201とデータ名入力ボックス1202のそれぞれに、アプリケーションの名称及び入力データの名称(ファイル名)を入力することで、リクエスト受付サーバ103は図9の901〜905を実行する。
その後リクエスト受付サーバ103は、アプリケーション利用者がアプリ名入力ボックス1201とデータ名入力ボックス1202に入力したアプリ名と登録した入力データを基に、まず並列処理を行わない場合の処理フロー内の各処理の繰り返し数、各処理の処理時間の予想値、各処理のトータルの実行時間の算出をアプリ実行時間計算部112に行わせる(図6のステップ605までの処理が行われる)。そしてリクエスト受付サーバ103は、算出されたこれらの情報(1204)をアプリケーションの処理フロー(1203)と対応付けて表示する画面を作成し、この画面をクライアント端末101のディスプレイ装置209に出力させる。
アプリケーション利用者が、この表示された情報を基に、並列度設定欄1206に並列度を入力すると、入力された並列度はアプリ管理サーバ110に送信される。先に図6や図9を用いて説明したとおり、アプリ管理サーバ110は、渡された並列度等を用いて並列処理を行った場合の、各処理の繰り返し数と処理時間の予想値およびアプリケーションの合計実行時間を求め、その結果を表示領域(1205)に表示した画面を作成し、クライアント端末101に表示させる。そのためアプリケーション利用者は、表示領域(1205)に表示されるアプリケーションの合計実行時間が、アプリケーション利用者の希望する実行時間以内になるまで、並列度設定欄1206に入力する並列度を少しずつ増やすことを繰り返すとよい。
また、使用する計算機リソースの量と計算機リソースの使用時間に応じて、アプリケーション利用者が情報処理システムの管理者(または所有者)に使用料金を支払うように、情報処理システムが運営されている場合、計算機リソース量の設定画面1200にコスト表示欄(1208)を設け、リクエスト受付サーバ103(またはアプリ管理サーバ110)はアプリケーションの並列度とアプリケーションの実行時間(アプリケーションが並列実行される場合の実行時間)に応じたコスト(情報処理システムの使用料金)を算出し、算出されたコストの情報をアプリケーション利用者に対して提供してもよい。これによりアプリケーション利用者は、アプリケーションを完了させたい実行時間と並列度に応じて掛かるコストのバランスを見ながら、今回の実行要求を満たす並列度(実行時並列度)を決定することができる。
アプリケーション利用者が実行時並列度を決定した後確定ボタン(1207)を押すと、図9の911,912の処理が行われる。つまりリクエスト受付サーバ103はクライアント端末101から、アプリケーション利用者がアプリ名入力ボックス1201と並列度設定欄1206に設定したアプリケーション名称と並列度(実行時並列度)とを受け取る。そしてリクエスト受付サーバ103はクラスタ管理サーバ120に対して、実行時並列度とアプリケーション名を指定したクラスタ生成依頼を送信する(図9の911,912の処理が行われる)。クラスタの生成が完了し、リクエスト受付サーバ103がクラスタ管理サーバ120からの返答を受領すると(図9 923)、リクエスト受付サーバ103は処理サーバ(振分)130にアプリケーションの実行依頼を送信する(図10 1002)。
本実施例に係る情報処理システムは、上で述べた機能を備えることにより、実行要求を満たす並列コンピューティングシステムの実行環境を実行要求毎に生成し、アプリケーションを並列実行させることができる。