(58)【調査した分野】(Int.Cl.,DB名)
前記同期モジュールとして、配備時にレスポンダにメッセージを送信するイニシエータと配備時に前記イニシエータからの前記メッセージを待ち受ける前記レスポンダとが用いられ、
前記スクリプト生成手段は、第1の処理装置に配備される第1のソフトウェアコンポーネントが第2の処理装置に配備される第2のソフトウェアコンポーネントに依存する場合、前記第1の処理装置の前記スクリプトにおける前記第1のソフトウェアコンポーネントを配備するための処理の前に、前記レスポンダを配備するための処理を挿入し、前記第2の処理装置の前記スクリプトにおける前記第2のソフトウェアコンポーネントを配備するための処理の後に、前記イニシエータを配備するための処理を挿入する、
請求項1に記載の情報処理装置。
前記同期モジュールとして、配備時にレスポンダにメッセージを送信するイニシエータと配備時に前記イニシエータからの前記メッセージを待ち受ける前記レスポンダとが用いられ、
前記スクリプトの生成において、第1の処理装置に配備される第1のソフトウェアコンポーネントが第2の処理装置に配備される第2のソフトウェアコンポーネントに依存する場合、前記第1の処理装置の前記スクリプトにおける前記第1のソフトウェアコンポーネントを配備するための処理の前に、前記レスポンダを配備するための処理を挿入し、前記第2の処理装置の前記スクリプトにおける前記第2のソフトウェアコンポーネントを配備するための処理の後に、前記イニシエータを配備するための処理を挿入する、
請求項5に記載の配備方法。
前記同期モジュールとして、配備時にレスポンダにメッセージを送信するイニシエータと配備時に前記イニシエータからの前記メッセージを待ち受ける前記レスポンダとが用いられ、
前記スクリプトの生成において、第1の処理装置に配備される第1のソフトウェアコンポーネントが第2の処理装置に配備される第2のソフトウェアコンポーネントに依存する場合、前記第1の処理装置の前記スクリプトにおける前記第1のソフトウェアコンポーネントを配備するための処理の前に、前記レスポンダを配備するための処理を挿入し、前記第2の処理装置の前記スクリプトにおける前記第2のソフトウェアコンポーネントを配備するための処理の後に、前記イニシエータを配備するための処理を挿入する、
処理を実行させる請求項7に記載のプログラム。
前記同期モジュールとして、配備時にレスポンダにメッセージを送信するイニシエータと配備時に前記イニシエータからの前記メッセージを待ち受ける前記レスポンダとが用いられ、
前記コンピュータに配備される第1のソフトウェアコンポーネントが他のコンピュータに配備される第2のソフトウェアコンポーネントに依存する場合、前記第1のソフトウェアコンポーネントを配備するための処理の前に、前記他のコンピュータにおいて前記第2のソフトウェアコンポーネントの後に配備される前記イニシエータからの前記メッセージを待ち受ける前記レスポンダを配備するための処理を実行させ、前記第2のソフトウェアコンポーネントが前記第1のソフトウェアコンポーネントに依存する場合、前記第1のソフトウェアコンポーネントを配備するための処理の後に、前記他のコンピュータにおいて前記第2のソフトウェアコンポーネントの前に配備される前記レスポンダへ前記メッセージを送信する前記イニシエータを配備するための処理を実行させる、
請求項9に記載のプログラム。
【発明を実施するための形態】
【0017】
(第1の実施の形態)
本発明の第1の実施の形態について説明する。
【0018】
はじめに、本発明の第1の実施の形態の構成について説明する。
【0019】
図2は、本発明の第1の実施の形態における、情報処理システム(以下、配備システムとも言う)の構成を示すブロック図である。
【0020】
図2を参照すると、配備システムは、配備装置100、複数の処理装置200、及び、構成部品リポジトリ300を含む。配備装置100は、本発明の情報処理装置の一実施形態である。
【0021】
配備装置100は、ITシステムを構成する、複数のソフトウェアコンポーネント(以下、単に、コンポーネントとする)の各々を、複数の処理装置200のいずれかに配備することにより、システムを構築する。ここで、コンポーネントは、オペレーティングシステム(OS)、ミドルウェア(MW)、アプリケーション(AP)等のプログラムモジュールである。
【0022】
処理装置200は、システムを構成する各コンポーネントの処理を実行するコンピュータである。処理装置200は、エージェント210を含む。エージェント210は、配備装置100から受信したスクリプト131に従って、配備すべきコンポーネントを構成部品リポジトリ300から取得し、当該コンポーネントの配備(インストール、及び、初期化処理の起動)を行う。処理装置200は、コンピュータ上に構築される仮想マシン(Virtual Machine:VM)であってもよい。
【0023】
構成部品リポジトリ300は、システムを構成するためのコンポーネントを記憶する。
【0024】
配備装置100は、論理構成記憶部110、物理構成記憶部120、スクリプト生成部130、スクリプト配布部140、及び、スクリプトリポジトリ150を含む。
【0025】
論理構成記憶部110は、論理構成情報111を記憶する。論理構成情報111は、システムを構成するコンポーネント間の依存関係を示す。論理構成情報111は、管理者等により予め設定される。また、図示しない論理構成取得部が、配備装置100の外部から論理構成情報111を取得し、論理構成記憶部110に保存してもよい。
【0026】
図3は、本発明の第1の実施の形態における、論理構成情報111の例を示す図である。
図3の例では、論理構成情報111は、XML(Extensible Markup Language)形式で記述されている。なお、以降の説明において、XMLに付与された行番号は、説明の便宜上付与されたものであり、実際の行数とは異なる。
図3における論理構成情報111は、右側に示した論理構成に対応する。
【0027】
図3の論理構成において、点線の矢印は依存関係を示す。ここで、点線の矢印の元のコンポーネントは、矢印の先のコンポーネントに依存していることを示す。また、実線の矢印は配備の順序を示す。ここで、実線の矢印の元のコンポーネントは、矢印の先のコンポーネントより前に配備される必要があることを示す。
【0028】
図3の例では、システムは、コンポーネント「A1」、「A2」、「B」、「C1」、「C2」から構成される。コンポーネント「C1」、「C2」はコンポーネント「B」に依存するため、コンポーネント「B」は、コンポーネント「C1」、「C2」より前に配備される必要がある。また、コンポーネント「B」はコンポーネント「A1」、「A2」に依存するため、コンポーネント「A1」、「A2」は、コンポーネント「B」より前に配備される必要がある。なお、コンポーネント「C1」、「C2」は、コンポーネント「B」の配備後に、いずれかが先に配備されても、同時に配備されてもよい。
【0029】
論理構成情報111は、システムを構成する各コンポーネントについて、コンポーネントの実体(ファイル等)の識別子(例えば、
図3の論理構成情報111、13行目)、依存する他のコンポーネントの識別子(14、15行目)を含む。コンポーネントの実体の識別子をもとに、スクリプトリポジトリ150、及び、構成部品リポジトリ300から、当該コンポーネントを配備するためのスクリプト部品、及び、コンポーネントが取得される。
【0030】
物理構成記憶部120は、物理構成情報121を記憶する。物理構成情報121は、システムを構成するコンポーネントの各々を配備すべき処理装置200を示す。物理構成情報121は、管理者等により予め設定される。また、図示しない物理構成取得部が、配備装置100の外部から物理構成情報121を取得して、物理構成記憶部120に保存してもよい。
【0031】
図4は、本発明の第1の実施の形態における、物理構成情報121の例を示す図である。
図4の例では、物理構成情報121はXML形式で記述されている。
図4における物理構成情報121は、右側に示した物理構成に対応する。
【0032】
図4の物理構成では、システムを構成するコンポーネント「A1」、「A2」、「B」、「C1」、「C2」は、仮想マシン「VM1」〜「VM4」に分散して配備される。
【0033】
物理構成情報121は、処理装置200ごとに、当該処理装置200に配備すべきコンポーネントを含む(例えば、
図4の物理構成情報121、1〜4行目、5〜7行目、8〜10行目、11行目〜13行目)。
【0034】
スクリプト生成部130は、各処理装置200が当該処理装置200のコンポーネントを配備するための処理が記述されたプログラムである、スクリプト131を生成する。
【0035】
ここで、スクリプト生成部130は、はじめに、非特許文献2に記載されているようなスクリプトと同様な、同じ処理装置200のコンポーネント間の配備順序を考慮したスクリプト131を生成する。さらに、スクリプト生成部130は、生成したスクリプト131に、同期モジュールのスクリプト部品を挿入する。同期モジュールは、他の処理装置200に配備される同期モジュールとの間でスクリプト131の処理の同期をとるためのプログラムモジュールである。
【0036】
図5は、本発明の第1の実施の形態における、スクリプト131(131a〜d)(同期モジュール挿入前)の例を示す図である。
図5の例では、スクリプト131はXML形式で記述されている。
【0037】
スクリプト131には、処理装置200に配備される各コンポーネントのスクリプト部品が配置される。
【0038】
例えば、
図5の仮想マシン「VM1」のスクリプト131aには、コンポーネント「A1」を配備するためのスクリプト部品(2〜8行目)、及び、コンポーネント「B」を配備するためのスクリプト部品(10〜16行目)が配置されている。
【0039】
各スクリプト部品は、コンポーネントをインストールするためのコマンド(例えば、
図5のスクリプト131a、3行目)、コンポーネントの初期化時のパラメータ(4、5行目)、コンポーネントの初期化処理を起動するためのコマンド(7行目)を含む。これらの記述に従って、コンポーネントのインストール、及び、初期化処理が行われることにより、コンポーネントの配備が行われる。
【0040】
また、コンポーネント間で配備順序に制約がある場合、後に配備すべきコンポーネントのスクリプト部品には、先に配備すべき他のコンポーネント(必要コンポーネント)のリストが追加される(例えば、
図5のスクリプト131a、11行目)。
【0041】
例えば、
図5のスクリプト131aにおいて、コンポーネント「B」の必要コンポーネントとして、コンポーネント「A1」が指定されている。
【0042】
なお、配備順序に制約がないコンポーネントは、並列に配備されてもよい。
【0043】
図6は、本発明の第1の実施の形態における、スクリプト131(131a〜d)(同期モジュール挿入後)の例を示す図である。
【0044】
本発明の第1の実施の形態では、同期モジュールとして、イニシエータ501とレスポンダ511とが用いられる。イニシエータ501は、指定されたレスポンダ511に、処理装置200間でのスクリプト131の処理の同期を行うためのメッセージを送信するコンポーネントである。また、レスポンダ511は、指定されたイニシエータ501からのメッセージを待ち受けるコンポーネントである。
【0045】
例えば、
図6の仮想マシン「VM1」のスクリプト131aには、
図5のスクリプト131aに対して、レスポンダ511「Xr」を配備するためのスクリプト部品(5〜8行目)が挿入されている。さらに、イニシエータ501「Yi」を配備するためのスクリプト部品(13〜17行目)、及び、イニシエータ501「Zi」を配備するためのスクリプト部品(18〜22行目)が挿入されている。
【0046】
レスポンダ511のスクリプト部品は、レスポンダ511の識別子(例えば、
図6のスクリプト131a、5行目)、レスポンダ511がメッセージを待ち受けるイニシエータ501の識別子のリスト(送信元イニシエータリスト)(6行目)を含む。レスポンダ511の初期化処理において、レスポンダ511は、送信元イニシエータリストに含まれるイニシエータ501からのメッセージを待ち受ける。
【0047】
例えば、
図6のスクリプト131aにおいて、レスポンダ511「Xr」は、仮想マシン「VM2」に配備されるイニシエータ501「Xi」からのメッセージを待ち受ける。
【0048】
また、レスポンダ511が配備された後に配備すべきコンポーネントの必要コンポーネントには、当該レスポンダ511が追加される(例えば、
図6のスクリプト131a、10行目)。
【0049】
例えば、
図6のスクリプト131aにおいて、コンポーネント「B」の必要コンポーネントに、レスポンダ511「Xr」が追加されている。
【0050】
イニシエータ501のスクリプト部品は、イニシエータ501の識別子(例えば、
図6のスクリプト131a、13行目)、必要コンポーネントの識別子(14行目)を含む。さらに、イニシエータ501のスクリプト部品は、イニシエータ501がメッセージを送信するレスポンダ511の識別子のリスト(宛先レスポンダリスト)(15行目)を含む。イニシエータ501の初期化処理において、イニシエータ501は、宛先レスポンダリストに含まれるレスポンダ511にメッセージを送信し、メッセージの受信確認を待ち受ける。
【0051】
例えば、
図6のスクリプト131aにおいて、イニシエータ501「Yi」、「Zi」の必要コンポーネントには、コンポーネント「B」が設定されている。また、イニシエータ501「Yi」の宛先レスポンダリストには、仮想マシン「VM3」に配備されるレスポンダ511「Yr」が設定されている。イニシエータ501「Zi」の宛先レスポンダリストには、仮想マシン「VM4」に配備されるレスポンダ511「Zr」が設定されている。
【0052】
図7は、本発明の第1の実施の形態における、同期モジュールの構成を示す図である。
図7の例では、同期モジュールとして、2つのイニシエータ501(501a、501b)と1つのレスポンダ511が示されている。
【0053】
イニシエータ501は、レスポンダリスト502、及び、メッセージ送信部503を含む。レスポンダリスト502は、イニシエータ501がメッセージを送信するレスポンダ511の識別子のリストである。レスポンダリスト502には、イニシエータ501の初期化処理の起動時の引数等により、スクリプト部品の宛先レスポンダリストの内容が設定される。メッセージ送信部503は、レスポンダリスト502に含まれるレスポンダ511にメッセージを送信する。
【0054】
レスポンダ511は、イニシエータリスト512、メッセージ受信部513、及び、受信メッセージ記憶部514を含む。イニシエータリスト512は、レスポンダ511がメッセージを待ち受けるイニシエータ501の識別子のリストである。イニシエータリスト512には、レスポンダ511の初期化処理の起動時の引数等により、スクリプト部品の送信元イニシエータリストの内容が設定される。メッセージ受信部513は、イニシエータ501からのメッセージを受信する。受信メッセージ記憶部514は、受信したメッセージを記憶する。
【0055】
スクリプト配布部140は、スクリプト生成部130により生成されたスクリプト131を、各処理装置200に配布する。
【0056】
スクリプトリポジトリ150は、各コンポーネントの配備処理を記述したスクリプト部品を記憶する。
【0057】
なお、配備装置100はCPU(Central Processing Unit)とプログラムを記憶した記憶媒体を含み、プログラムに基づく制御によって動作するコンピュータであってもよい。また、論理構成記憶部110と、物理構成記憶部120と、スクリプトリポジトリ150とは、それぞれ個別の記憶媒体でも、1つの記憶媒体によって構成されてもよい。
【0058】
また、論理構成情報111、物理構成情報121、スクリプト131は、XML以外の他の形式で記述されてもよい。
【0059】
次に、本発明の第1の実施の形態の動作について説明する。
【0060】
はじめに、本発明の第1の実施の形態における、スクリプト131の生成処理、及び、同期モジュールのスクリプト部品の挿入処理を説明する。
【0061】
図8は、本発明の第1の実施の形態における、スクリプト131の生成処理を示すフローチャートである。また、
図9は、本発明の第1の実施の形態における、同期モジュールのスクリプト部品の挿入処理を示すフローチャートである。
【0062】
スクリプト生成部130は、スクリプト131の生成処理(
図8)により、スクリプト131を生成する。そして、スクリプト生成部130は、同期モジュールのスクリプト部品の挿入処理(
図9)により、生成したスクリプト131に、同期モジュールのスクリプト部品を挿入する。
【0063】
ここでは、論理構成記憶部110、物理構成記憶部120に、それぞれ、
図4の論理構成情報111、
図5の物理構成情報121が記憶されていると仮定する。
【0064】
スクリプト生成部130は、物理構成情報121から、システムを構成するコンポーネントが配備される処理装置200(対象処理装置)を1つ選択する(ステップS101)。スクリプト生成部130は、物理構成情報121を参照し、対象処理装置に配備すべきコンポーネントのリストを抽出する(ステップS102)。スクリプト生成部130は、スクリプトリポジトリ150から、抽出した各コンポーネントを配備するためのスクリプト部品を取得し、配置することにより、対象処理装置で実行すべきスクリプト131を生成する(ステップS103)。
【0065】
例えば、スクリプト生成部130は、
図4の物理構成情報121から、仮想マシン「VM1」について、コンポーネント「A1」、「B」を配備するためのスクリプト部品を、
図5のスクリプト131aのように配置する。
【0066】
スクリプト生成部130は、スクリプト131内のコンポーネント(対象コンポーネント)を1つ選択する(ステップS104)。スクリプト生成部130は、論理構成情報111を参照する。スクリプト生成部130は、対象コンポーネントが依存するコンポーネント(依存コンポーネント)の内、対象コンポーネントと同じ処理装置200(対象処理装置)に配備される依存コンポーネントのリストを抽出する(ステップS105)。対象処理装置に配備される依存コンポーネントがある場合(ステップS106/Y)、スクリプト生成部130は、当該依存コンポーネントを、対象コンポーネントの必要コンポーネントに設定する(ステップS107)。
【0067】
例えば、スクリプト生成部130は、
図3の論理構成情報111をもとに、コンポーネント「B」の依存コンポーネントの内、仮想マシン「VM1」に配備されるコンポーネント「A1」を、
図5のようにコンポーネント「B」の必要コンポーネントに設定する。
【0068】
スクリプト生成部130は、スクリプト131内の全てのコンポーネントについて、ステップS104〜S107の処理を繰り返す(ステップS108)。
【0069】
また、スクリプト生成部130は、システムを構成するコンポーネントが配備される全ての処理装置200について、ステップS101〜S108の処理を繰り返す(ステップS109)。
【0070】
この結果、仮想マシン「VM1」〜「VM4」について、
図5のスクリプト131a〜dがそれぞれ生成される。
【0071】
次に、スクリプト生成部130は、論理構成情報111から、システムを構成するコンポーネント(対象コンポーネント)を1つ選択する(ステップS201)。スクリプト生成部130は、論理構成情報111を参照し、対象コンポーネントの依存コンポーネントの内、対象コンポーネントとは異なる処理装置200に配備される依存コンポーネントのリストを抽出する(ステップS202)。異なる処理装置200に配備される依存コンポーネントがある場合(ステップS203/Y)、スクリプト生成部130は、以下の処理を行う。スクリプト生成部130は、対象コンポーネントが配備される処理装置200のスクリプト131に、レスポンダ511を配備するためのスクリプト部品を挿入する(ステップS204)。そして、スクリプト生成部130は、対象コンポーネントの必要コンポーネントにステップS204で挿入したレスポンダ511の識別子を追加する(ステップS205)。
【0072】
例えば、スクリプト生成部130は、
図3の論理構成情報111をもとに、コンポーネント「B」の依存コンポーネントに、仮想マシン「VM1」とは異なる仮想マシン「VM2」に配備されるコンポーネント「A2」があると判断する。スクリプト生成部130は、
図6のように、仮想マシン「VM1」のスクリプト131aにレスポンダ511「Xr」のスクリプト部品を挿入し、コンポーネント「B」の必要コンポーネントにレスポンダ511「Xr」を追加する。
【0073】
次に、スクリプト生成部130は、ステップS202で抽出された異なる処理装置200に配備される依存コンポーネントのリストから依存コンポーネント(対象依存コンポーネント)を1つ選択する(ステップS206)。スクリプト生成部130は、対象依存コンポーネントが配備される処理装置200のスクリプト131に、イニシエータ501を配備するためのスクリプト部品を挿入する(ステップS207)。スクリプト生成部130は、イニシエータ501の必要コンポーネントに対象依存コンポーネントの識別子、宛先レスポンダリストにステップS204で挿入したレスポンダ511の識別子を設定する(ステップS208)。スクリプト生成部130は、ステップS204で挿入したレスポンダ511の送信元イニシエータリストに、ステップS207で挿入したイニシエータ501の識別子を設定する(ステップS209)。
【0074】
例えば、スクリプト生成部130は、
図6のように、コンポーネント「A2」が配備される仮想マシン「VM2」のスクリプト131bにイニシエータ501「Xi」のスクリプト部品を挿入する。スクリプト生成部130は、イニシエータ501「Xi」の必要コンポーネントにコンポーネント「A2」、宛先レスポンダリストにレスポンダ511「Xr」をそれぞれ設定する。また、スクリプト生成部130は、
図6のように、レスポンダ511「Xr」の送信元イニシエータリストにイニシエータ501「Xi」を設定する。
【0075】
スクリプト生成部130は、ステップS202で抽出された異なる処理装置200に配備される依存コンポーネントのリスト内の全ての依存コンポーネントについて、ステップS206〜S209の処理を繰り返す(ステップS210)。
【0076】
また、スクリプト生成部130は、システムを構成する全てのコンポーネントについて、ステップS201〜S210の処理を繰り返す(ステップS211)。
【0077】
この結果、仮想マシン「VM1」〜「VM4」のスクリプト131a〜dに対して、
図6のように、同期モジュールのスクリプト部品が挿入される。
【0078】
同期モジュールのスクリプト部品が挿入されたスクリプト131は、スクリプト配布部140により、各処理装置200に配布される。各処理装置200上のエージェント210は、配布されたスクリプト131を実行し、コンポーネント、及び、同期モジュール(イニシエータ501、レスポンダ511)を配備する。
【0079】
次に、本発明の第1の実施の形態における、イニシエータ501、及び、レスポンダ511の初期化処理を説明する。
【0080】
図10は、本発明の第1の実施の形態における、イニシエータ501、及び、レスポンダ511の初期化処理を示すフローチャートである。
【0081】
エージェント210は、スクリプト131に従ってイニシエータ501をインストールした後に、イニシエータ501の初期化処理(
図10)を起動する。スクリプト131の処理は、イニシエータ501の初期化処理が完了するまでブロックされる。
【0082】
イニシエータ501は、レスポンダリスト502に含まれるレスポンダ511に同期のためのメッセージを送信する(ステップS301)。イニシエータ501は、レスポンダ511からメッセージの受信確認を受信するまで、ステップS301を繰り返す(ステップS302)。そして、イニシエータ501は、レスポンダ511からメッセージの受信確認を受信すると(ステップS302/Y)、自身の配備解除(アンインストール)を行う(ステップS303)。
【0083】
また、エージェント210は、スクリプト131に従ってレスポンダ511をインストールした後に、レスポンダ511の初期化処理(
図10)を起動する。スクリプト131の処理は、レスポンダ511の初期化処理が完了するまでブロックされる。
【0084】
レスポンダ511は、イニシエータ501からメッセージを受信すると(ステップS401)、メッセージの送信元のイニシエータ501に、メッセージの受信確認を送信する(ステップS402)。レスポンダ511は、イニシエータリスト512に含まれる全てのイニシエータ501からメッセージを受信するまで、ステップS401、S402の処理を繰り返す(ステップS403)。全てのイニシエータ501からメッセージを受信した場合(ステップS403/Y)、レスポンダ511は、自身の配備解除(アンインストール)を行う(ステップS404)。
【0085】
イニシエータ501、及び、レスポンダ511は、システムの動作には必要がないため、このように、初期化処理の完了とともにアンインストールされてもよい。
【0086】
次に、システムの配備の具体例を説明する。ここでは、
図4の論理構成情報111、
図5の物理構成情報121に対して、
図6のスクリプト131a〜dが生成され、仮想マシン「VM1」〜「VM4」に配布されていると仮定する。
【0087】
仮想マシン「VM2」のエージェント210は、
図6のスクリプト131bに従って、コンポーネント「A2」、イニシエータ501「Xi」を順番に配備する。イニシエータ501「Xi」の初期化処理において、イニシエータ501「Xi」は、レスポンダ511「Xr」へメッセージを送信する。
【0088】
仮想マシン「VM1」のエージェント210は、
図6のスクリプト131aに従って、コンポーネント「A1」、レスポンダ511「Xr」を配備する。レスポンダ511「Xr」の初期化処理において、レスポンダ511「Xr」は、イニシエータ501「Xi」からのメッセージを待ち受ける。イニシエータ501「Xi」からのメッセージを受信するまで、レスポンダ511「Xr」の配備処理(初期化処理)はブロックされる。
【0089】
仮想マシン「VM1」のエージェント210は、コンポーネント「A1」、レスポンダ511「Xr」の配備が完了すると、コンポーネント「B」を配備する。そして、仮想マシン「VM1」のエージェント210は、コンポーネント「B」の配備が完了すると、イニシエータ501「Yi」、「Zi」を配備する。
【0090】
仮想マシン「VM3」のエージェント210は、
図6のスクリプト131cに従って、レスポンダ511「Yr」を配備する。レスポンダ511「Yr」の初期化処理において、レスポンダ511「Yr」は、イニシエータ501「Yi」からのメッセージを待ち受ける。イニシエータ501「Yi」からのメッセージを受信するまで、レスポンダ511「Yr」の配備処理(初期化処理)はブロックされる。仮想マシン「VM3」のエージェント210は、レスポンダ511「Yr」の配備が完了すると、コンポーネント「C1」を配備する。
【0091】
仮想マシン「VM4」のエージェント210は、
図6のスクリプト131dに従って、レスポンダ511「Zr」を配備する。レスポンダ511「Zr」の初期化処理において、レスポンダ511「Zr」は、イニシエータ501「Zi」からのメッセージを待ち受ける。イニシエータ501「Zi」からのメッセージを受信するまで、レスポンダ511「Zr」の配備処理(初期化処理)はブロックされる。仮想マシン「VM4」のエージェント210は、レスポンダ511「Zr」の配備が完了すると、コンポーネント「C2」を配備する。
【0092】
また、イニシエータ501「Xi」、「Yi」、「Zi」、レスポンダ511「Xr」、「Yr」、「Zr」は、配備の完了とともにアンインストールされる。
【0093】
このように、
図4の論理構成情報111に従ったコンポーネント間の配備順序の制御が、異なる処理装置200間で実行される。
【0094】
以上により、本発明の第1の実施の形態の動作が完了する。
【0095】
次に、本発明の第1の実施の形態の特徴的な構成を説明する。
図1は、本発明の第1の実施の形態の特徴的な構成を示すブロック図である。
【0096】
図1を参照すると、配備装置100は、論理構成記憶部110、物理構成記憶部120、及び、スクリプト生成部130を含む。
【0097】
論理構成記憶部110は、システムを構成する複数のソフトウェアコンポーネント間の依存関係を示す論理構成情報111を記憶する。
【0098】
物理構成記憶部120は、複数の処理装置200の内、システムを構成する複数のソフトウェアコンポーネントの各々が配備される処理装置200を示す物理構成情報121を記憶する。
【0099】
スクリプト生成部130は、論理構成情報111と物理構成情報121とをもとに、複数の処理装置200の各々について、当該処理装置200上で実行されるスクリプト131を生成する。ここで、スクリプト131には、当該処理装置200に配備される各ソフトウェアコンポーネントを配備するための処理と、同期モジュールを配備するための処理と、が実行順序とともに記述される。同期モジュールは、他の処理装置200に配備される同期モジュールとの間でスクリプト131の処理の同期をとる。
【0100】
本発明の第1の実施の形態によれば、異なる処理装置のコンポーネント間に依存関係があるような分散システムの構築に対しても、コンポーネントの分散配備を行うことができる。その理由は、スクリプト生成部130が、以下のようなスクリプト131を生成するためである。スクリプト131には、処理装置200に配備される各コンポーネントを配備するための処理と、同期モジュールを配備するための処理と、が実行順序とともに記述される。ここで、同期モジュールは、他の処理装置200に配備される同期モジュールとの間でスクリプト131の処理の同期をとる。
【0101】
これにより、異なる処理装置のコンポーネント間に依存関係があるような分散システムの構築において、中央管理型の配備サーバは不要であり、配備サーバに制御通信が集中しない。したがって、大規模な分散システムであっても、短時間で構築できる。
【0102】
また、本発明の第1の実施の形態によれば、処理装置が特別な手段を備えることなく、異なる処理装置のコンポーネント間の配備順序を制御できる。その理由は、処理装置200において、スクリプト131に従って同期モジュールを配備することで、他の処理装置200に配備される同期モジュールとの間でスクリプト131の処理の同期が行われるためである。
【0103】
また、本発明の第1の実施の形態によれば、コンポーネント毎に同期をとる他の処理装置を、処理装置に対して指定することなく、異なる処理装置のコンポーネント間の配備順序を制御できる。その理由は、スクリプト生成部130が、論理構成情報111と物理構成情報121とをもとに、同期をとるべきスクリプト131の組に対して、同期モジュールを配備するための処理を挿入するためである。
【0104】
(第2の実施の形態)
次に、本発明の第2の実施の形態について説明する。
【0105】
本発明の第1の実施の形態では、
図6のコンポーネント「B」とコンポーネント「C1」、「C2」のように、同じコンポーネントに複数のコンポーネントが依存する場合、複数の異なるイニシエータ501(「Yi」、「Zi」)のスクリプト部品が挿入される。このため、同じコンポーネントに依存するコンポーネントの数が多くなると、イニシエータ501の配備処理が増え、システム構築に要する時間が長くなる。
【0106】
本発明の第2の実施の形態では、同じコンポーネントに複数のコンポーネントが依存する場合、共通のイニシエータ501を用いる。
【0107】
次に、本発明の第2の実施の形態について説明する。
【0108】
はじめに、本発明の第2の実施の形態の構成について説明する。
【0109】
本発明の第2の実施の形態の配備システムの構成、及び、同期モジュールの構成は、本発明の第1の実施の形態(
図2、
図7)と同様である。
【0110】
図11は、本発明の第2の実施の形態における、スクリプト131(131a〜d)(同期モジュール挿入後)の例を示す図である。
【0111】
図11の仮想マシン「VM1」のスクリプト131aには、
図5のスクリプト131aに対して、イニシエータ501「Yi」を配備するためのスクリプト部品(13〜17行目)が挿入されている。イニシエータ501「Yi」の宛先レスポンダリストには、仮想マシン「VM3」に配備されるレスポンダ511「Yr」、及び、仮想マシン「VM4」に配備されるレスポンダ511「Zr」が設定されている。
【0112】
次に、本発明の第2の実施の形態の動作について説明する。
【0113】
本発明の第2の実施の形態におけるスクリプト131の生成処理は、本発明の第1の実施の形態(
図8)と同様となる。
【0114】
本発明の第2の実施の形態における同期モジュールのスクリプト部品の挿入処理は、本発明の第1の実施の形態(
図9)と、以下の点で異なる。
【0115】
図9のステップS207において、次の場合、スクリプト生成部130は、新たなイニシエータ501のスクリプト部品の挿入を行わない。対象依存コンポーネントが配備される処理装置200のスクリプト131に、対象依存コンポーネントが必要コンポーネントとして設定されているイニシエータ501のスクリプト部品が既に存在する場合、スクリプト生成部130は、挿入を行わない。
【0116】
そして、ステップS208において、スクリプト生成部130は、既に存在するイニシエータ501のスクリプト部品における宛先レスポンダリストに、レスポンダ511の識別子を追加する。
【0117】
また、ステップS209において、スクリプト生成部130は、レスポンダ511の送信元イニシエータリストに、既に存在するイニシエータ501の識別子を追加する。
【0118】
例えば、コンポーネント「B」とコンポーネント「C1」、「C2」について、スクリプト生成部130は、以下のような処理を行う。はじめに、スクリプト生成部130は、
図11のように、コンポーネント「C1」が配備される仮想マシン「VM3」のスクリプト131cにレスポンダ511「Yr」のスクリプト部品を挿入する。また、スクリプト生成部130は、コンポーネント「B」が配備される仮想マシン「VM1」のスクリプト131aにイニシエータ501「Yi」のスクリプト部品を挿入する。スクリプト生成部130は、イニシエータ501「Yi」の必要コンポーネントにコンポーネント「B」、宛先レスポンダリストにレスポンダ511「Yr」を設定する。
【0119】
次に、スクリプト生成部130は、コンポーネント「C2」が配備される仮想マシン「VM3」のスクリプト131dにレスポンダ511「Zr」のスクリプト部品を挿入する。この場合、仮想マシン「VM1」のスクリプト131aに、必要コンポーネントがコンポーネント「B」であるイニシエータ501「Yi」のスクリプト部品が既に存在する。したがって、スクリプト生成部130は、イニシエータ501「Yi」の宛先レスポンダリストにレスポンダ511「Zr」を追加する。また、スクリプト生成部130は、レスポンダ511「Zr」の送信元イニシエータリストにイニシエータ501「Yi」を設定する。
【0120】
この結果、仮想マシン「VM1」〜「VM4」のスクリプト131a〜dに対して、
図11のように、同期モジュールのスクリプト部品が挿入される。
【0121】
次に、本発明の第2の実施の形態における、イニシエータ501、及び、レスポンダ511の初期化処理を説明する。
【0122】
本発明の第2の実施の形態におけるイニシエータ501、及び、レスポンダ511の初期化処理は、本発明の第1の実施の形態(
図10)と、以下の点で異なる。
【0123】
図10のステップS301において、イニシエータ501は、レスポンダリスト502に含まれるレスポンダ511の内、メッセージの受信確認を受信していない全レスポンダ511に同期のためのメッセージを送信する。
【0124】
また、ステップS302において、イニシエータ501は、レスポンダリスト502に含まれる全レスポンダ511からメッセージの受信確認を受信するまで、ステップS301を繰り返す。
【0125】
以上により、本発明の第2の実施の形態の動作が完了する。
【0126】
本発明の第2の実施の形態によれば、本発明の第1の実施の形態に比べて、より短時間でシステムを構築できる。その理由は、同じコンポーネントに複数のコンポーネントが依存する場合、共通のイニシエータ501を用いることで、イニシエータ501の配備処理を減らし、システム構築に要する時間を短くできるためである。
【0127】
(第3の実施の形態)
次に、本発明の第3の実施の形態について説明する。
【0128】
本発明の第1の実施の形態では、イニシエータ501とレスポンダ511との間で直接メッセージを送受信することにより、処理装置200間での配備順序を制御する。この場合、制御の分散化が図れる一方で、レスポンダ511が受信可能状態になるまでイニシエータ501が通知を再送し続けるため、無駄な通信が発生する可能性がある。
【0129】
本発明の第3の実施の形態では、イニシエータ601とレスポンダ611との間のメッセージの送受信を、メッセージキュー621を介して行う。
【0130】
はじめに、本発明の第3の実施の形態の構成について説明する。
【0131】
本発明の第3の実施の形態の配備システムの構成は、本発明の第1の実施の形態(
図2)と同様である。
【0132】
図12は、本発明の第3の実施の形態における、同期モジュールの構成を示す図である。本発明の第3の実施の形態では、本発明の第1の実施の形態におけるイニシエータ501とレスポンダ511が、イニシエータ601(601a、601b)とレスポンダ611に置き換えられる。
【0133】
イニシエータ601は、レスポンダリスト602、及び、メッセージ送信部603を含む。レスポンダリスト602は、レスポンダリスト502と同様である。メッセージ送信部603は、レスポンダリスト602に含まれるレスポンダ611へのメッセージをメッセージキュー621に送信する。
【0134】
レスポンダ611は、イニシエータリスト612、及び、メッセージ確認部613を含む。イニシエータリスト612は、イニシエータリスト512と同様である。メッセージ確認部613は、イニシエータ601からレスポンダ611宛のメッセージの受信を、メッセージキュー621に確認する。
【0135】
メッセージキュー621は、例えば、処理装置200のいずれかに配置される。メッセージキュー621は、メッセージ受信部622、受信メッセージ記憶部623、及び、メッセージ検索部624を含む。メッセージ受信部622は、イニシエータ601からのメッセージを受信する。受信メッセージ記憶部623は、受信したメッセージを記憶する。メッセージ検索部624は、レスポンダ611からの要求に応じて、イニシエータ601からのメッセージを検索する。
【0136】
次に、本発明の第3の実施の形態の動作について説明する。
【0137】
本発明の第3の実施の形態における、スクリプト131の生成処理、及び、同期モジュールのスクリプト部品の挿入処理は、本発明の第1の実施の形態(
図8、
図9)と同様である。
【0138】
次に、本発明の第3の実施の形態における、イニシエータ601、及び、レスポンダ611の初期化処理を説明する。
【0139】
図13は、本発明の第3の実施の形態におけるイニシエータ601、及び、レスポンダ611の初期化処理を示すフローチャートである。
【0140】
イニシエータ601は、レスポンダリスト602に含まれるレスポンダ611あてのメッセージを、メッセージキュー621に送信する(ステップS501)。イニシエータ601は、自身の配備解除(アンインストール)を行う(ステップS502)。
【0141】
メッセージキュー621のメッセージ受信部622は、イニシエータ601からメッセージを受信すると、受信メッセージ記憶部623に保存する。
【0142】
レスポンダ611のメッセージ確認部613は、イニシエータリスト612に含まれるイニシエータ601からレスポンダ611宛のメッセージの受信の有無を、メッセージキュー621に問い合わせる(ステップS601)。メッセージ検索部624は、レスポンダ611からの要求に応じて、イニシエータ601からレスポンダ611宛のメッセージを検索し、結果をレスポンダ611へ応答する。レスポンダ611は、イニシエータリスト612に含まれる全てのイニシエータ601からのメッセージの受信を確認するまで、ステップS601の処理を繰り返す(ステップS602)。全てのイニシエータ601からのメッセージの受信を確認した場合(ステップS602/Y)、レスポンダ611は、自身の配備解除(アンインストール)を行う(ステップS603)。
【0143】
本発明の第3の実施の形態によれば、本発明の第1の実施の形態に比べて、イニシエータ501とレスポンダ511との間の無駄な通信を低減できる。その理由は、イニシエータ601とレスポンダ611との間のメッセージの送受信を、メッセージキュー621を介して行うためである。
【0144】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【0145】
この出願は、2013年4月11日に出願された日本出願特願2013−083085を基礎とする優先権を主張し、その開示の全てをここに取り込む。