以下、本実施形態に係る分散システムを説明する。以下の説明では、「xxxテーブル」又は「xxxリスト」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「xxxテーブル」又は「xxxリスト」を「xxx情報」と呼ぶことができる。
また、以下の説明において、プログラムは、プロセッサ(例えばCPU(Central Processing Unit))によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)及び通信インターフェイスデバイスのうちの少なくとも1つを用いながら行うため、処理の主語が、プロセッサ、そのプロセッサを有する装置とされてもよい。プロセッサが行う処理の一部又は全部が、ハードウェア回路で行われてもよい。コンピュータプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア(例えば可搬型の記憶メディア)であってもよい。
また、以下の説明では、同種の要素を区別して説明する場合には、「ノード102a」、「ノード102b」のように、参照符号を使用し、同種の要素を区別しないで説明する場合には、「ノード102」のように参照符号のうちの共通番号のみを使用することがある。
図1は、一実施形態に係る分散システム1の構成例を示す。
分散システム1は、計算機の一種である複数のノード102と、計算機の一種である管理装置103とを有する。各ノード102及び管理装置103は、通信ネットワーク101を通じて互いにメッセージ(データ)を送受信することができる。ノード102及び管理装置103の数は、幾つであってもよい。
通信ネットワーク101に接続されている各ノード102は、管理装置103へアクセスするための情報(例えば、管理装置103のIP(Internet Protocol)アドレスなど)を有してよい。通信ネットワーク101に接続されている所定のノード102及び管理装置103は、Pub/Sub通信を利用できてよい。Pub/Sub通信とは、或るノード102がメッセージを同報通知し、そのメッセージを受信した他ノード102は、そのメッセージに自分が受信待ちしていたトランザクションID(Identification)が含まれているならば、そのメッセージを取得する(受け入れる)という通信方法である。
図2は、ノード102の構成例を示す。
ノード102は、例えば、コントローラ(制御装置)、ワークステーション又はパーソナルコンピュータ等である。ノード102は、ハードウェア240を備える。ハードウェア240は、記憶部250と、処理部241と、通信I/F(Interface)242と、を備える。
記憶部250には、様々なデータが格納される。記憶部250は、例えば、揮発性メモリ、不揮発性メモリ又はハードディスク装置等で構成される。
処理部241は、コンピュータプログラムを実行し、ノード102の有する様々な機能を実現する。処理部241は、例えば、CPU(Central Processing Unit)等で構成される。
通信I/F242は、ノード102を通信ネットワーク101に接続するためのI/Fである。通信I/F242は、例えば、物理層、MAC(Media Access Control)層、IP層及びTCP(Transmission Control Protocol)/UDP(User Datagram Protocol)層などのプロトコルを制御する回路を有する。
ノード102のハードウェア240では、OS(Operating System)230と、アクセスミドルウェア220と、用途ごとに処理内容が異なり得る1又は2以上のアプリケーション210と、が実行される。
記憶部250には、データがリード及びライトされる記憶領域である内部メモリ251が構成される。そして、内部メモリ251内には、共有メモリ253が構成されてよい。内部メモリ251内の共有メモリ253の位置は、メモリアドレスによって特定されてよい。
共有メモリ253に格納されたデータは、複数のノード102からアクセス可能であってよい。例えば、或るノード102が、通信ネットワーク101を通じて同報通知されたデータを共有メモリ253に格納すると、他ノード102もその共有メモリ253に格納されたデータにアクセスできてよい。各ノード102は、メモリアドレスを指定して共有メモリ253内のデータにアクセスできてよい。共有メモリ253は複数存在してもよい。この場合、各ノード102は、それぞれの共有メモリ253に付与された共有メモリIDを用いて、アクセス先の共有メモリ253を指定してもよい。共有メモリ253内の各データは、そのデータの更新時刻を併せて有してよい。
図3は、アクセスミドルウェア220の機能構成の例を示す。
アプリケーション210は、コンピュータプログラムによって構成されており、用途に応じて異なる機能を有してよい。ノード102は、複数のアプリケーション210を実行してもよい。アプリケーション210は、アクセスミドルウェア220を通じてデータを取得してよい。また、アプリケーション210は、アクセスミドルウェア220を通して管理装置103から管理情報を取得してよい。
ノード102のアクセスミドルウェア220は、自ノード102が保持するデータに係る管理情報を管理装置103に登録する処理機能を有する。管理情報は、或るノード102が、他ノード102の保持するデータにアクセスするために必要な情報を有する。ノード102は、管理装置103から管理情報を取得し、その管理情報に基づいて他ノード102の保持するデータにアクセスする。すなわち、アクセスミドルウェア220は、アプリケーション210に代わって、他ノード102の保持するデータへアクセスする。これにより、アプリケーション210は、他ノード102の保持するデータにアクセスする方法を意識することなく、目的のデータを取得することができる。
管理情報は、取得対象のデータに対応するデータID、そのデータIDに対応するデータにアクセスするために必要な情報であるデータ取得方法、及びそのデータIDに対応するデータが存在する位置を表すデータ位置などの情報を有する。管理情報の詳細については後述する。
データの種類と、データ取得方法とは対応関係を有してもよい。例えば、他ノード102の内部メモリ251に格納されているデータと、Req/Rep通信によるデータ取得方法とは対応関係を有してよい。例えば、共有メモリ253に格納されているデータと、共有メモリ参照によるデータ取得方法とは対応関係を有してよい。例えば、他ノード102が同報通知(Publish)するメッセージに含まれるデータと、Pub/Sub通信によるデータ取得方法とは対応関係を有してよい。
アクセスミドルウェア220は、機能として、コマンド受付部221と、管理情報登録部222と、管理情報取得部223と、データ取得要求部224と、データ取得応答部225と、メッセージ送信部226と、メッセージ受信部227と、管理情報操作受付部228と、を有する。
アクセスミドルウェア220は、記憶部250の内部メモリ251に、管理情報テーブル342と、プロパティ情報410と、キャッシュテーブル252と、更新情報テーブル254と、を構成する。
管理情報342は、自ノード102が保持する各データにアクセスするために必要な情報を有する。管理情報342の詳細については後述する(図7参照)。
プロパティ情報410は、自ノード102が保持するデータの属性に関する情報を有する。1つの管理情報342に1つのプロパティ情報410が対応付けられてもよい。プロパティ情報410の詳細については後述する(図6参照)。
キャッシュテーブル252には、管理装置103から取得した管理情報が一時的に保持される。キャッシュテーブル252には、最後に取得した管理情報が優先的に保持されてもよい。キャッシュテーブル252の詳細については後述する(図9参照)。
更新情報テーブル254は、共有メモリ253のデータに関する更新情報を管理するためのテーブルである。データ取得要求部224は、共有メモリ253からデータを取得した際、その取得対象のデータ位置と、そのデータのサイズと、そのデータに付加されているタイムスタンプとを含む更新情報を生成し、その更新情報を更新情報テーブル254に登録してよい。これにより、データ取得要求部224は、次回以降、更新情報テーブル254を参照することにより、共有メモリ253から取得するデータが、前回取得したデータに対して更新されているか否かを判断することができる。例えば、データ取得要求部224は、取得対象のデータの更新時刻と、更新情報テーブル254においてその取得対象とデータ位置及びサイズの同じデータのタイムスタンプとが一致する場合、データが更新されていないと判断することができる。そして、データ取得要求部224は、更新されていないデータは共有メモリ253から取得しないという設定であってもよい。
メッセージ送信部226は、各部222、223、224、225から渡された情報及び指定されたフォーマットに従ってメッセージを生成し、そのメッセージを指定された宛先へ送信する。各部から渡される情報及びフォーマットなどは、処理毎に定められていてよい。詳細については後述する。
メッセージ受信部227は、受信したメッセージを解析し、そのメッセージに含まれるメッセージ種別などを抽出する。そして、メッセージ受信部227は、そのメッセージ種別に基づき、各部222、223、224、225へ必要な情報を渡す。メッセージ受信部227は、データ取得要求部224からトランザクションIDを受け取った場合、そのトランザクションIDを有するPub/Subメッセージ(同報通知)の受信を監視する。そして、メッセージ受信部227は、そのトランザクションIDを有するPub/Subメッセージの受信を検知すると、そのメッセージに含まれるデータなどをデータ取得要求部224へ渡す。
管理情報操作受付部228は、アプリケーション210から管理情報の登録指示又は削除指示などを受けると、その指示を管理情報登録部222へ渡す。又、管理情報操作受付部228は、ノード102の起動時に、自動的に管理情報426の登録指示を管理情報登録部222へ渡してもよい。分散システム1に新たに参加したノード102の管理情報426を、自動的に管理装置103に登録するためである。
管理情報登録部222は、管理装置103に対して管理情報の登録又は削除などを要求する。例えば、管理情報登録部222は、管理情報操作受付部228から登録指示を受けた場合、プロパティ情報410及び管理情報を含む管理情報の登録要求メッセージを生成し、メッセージ送信部226に対してその管理情報の登録要求メッセージを管理装置103へ送信するよう指示する。そして、管理情報登録部222は、管理情報の登録応答メッセージを受信したメッセージ受信部227から、その送信した管理情報に対応する管理情報IDを受け取る。管理情報IDは、管理装置103内の管理情報を識別するための情報である。例えば、管理情報登録部222は、管理情報操作受付部228から削除指示を受けた場合、管理情報IDを含む管理情報の削除要求メッセージを生成し、メッセージ送信部226に対してその管理情報の削除要求メッセージを管理装置103へ送信するよう指示する。
コマンド受付部221は、アプリケーション210とアクセスミドルウェア220とを結ぶインタフェースの役割を果たす。例えば、コマンド受付部221は、アプリケーション210からデータの取得コマンドを受信し、その受信した取得コマンドの中から必要な情報を抽出し、データ取得要求部224へ渡す。コマンド受付部221は、データ取得要求部224からデータの取得コマンド結果を受け、その受けた取得コマンド結果をアプリケーション210へ渡す。
データ取得要求部224は、データ取得に関する処理を行う。データ取得要求部224は、コマンド受付部221から、取得対象のデータIDを含む取得コマンドを受け取る。そして、データ取得要求部224は、管理情報取得部223に対して、データIDに関連する管理情報の取得を要求する。そして、データ取得要求部224は、管理情報に含まれるデータ取得方法及びデータ位置に基づき、データの取得方法を決定する。
例えば、データ取得方法が「Req/Rep通信」の場合、データ取得要求部224は、データ位置などの情報をメッセージ送信部226へ渡し、メッセージ送信部226に対してデータの取得要求メッセージをデータ位置の示す他ノード102へ送信するよう指示する。そして、メッセージ受信部226が他ノード102からデータの取得応答メッセージを受信した場合、データ取得要求部224は、メッセージ受信部227からデータの取得応答メッセージに含まれるデータ及び実行結果などを受け取る。
例えば、データ取得方法が「共有メモリ参照」の場合、データ取得要求部224は、データ位置の示す共有メモリのメモリアドレスから、データ及び実行結果などを取得する。
例えば、データ取得方法が「Pub/Sub通信」の場合、データ取得要求部224は、メッセージ受信部227に対して、データ位置の示すトランザクションIDを有するPub/Subメッセージの受信を監視するよう指示する。メッセージ受信部227は、そのトランザクションIDを有するメッセージを受信した場合、そのメッセージに含まれるデータ及びその実行結果などをデータ取得要求部224へ渡す。データ取得要求部224は、その取得したデータなどを、コマンド受付部221に渡す。
管理情報取得部223は、管理装置103から管理情報を取得する。管理情報取得部223は、メッセージ送信部226に対して、データ取得要求部224から受け取ったデータIDとノード102のバージョンとを渡し、管理情報の取得要求メッセージの送信を指示する。そして、管理情報取得部223は、メッセージ受信部227から、管理情報の取得応答メッセージ713に含まれる管理情報を受け取る。そして、管理情報取得部223は、その管理情報を、データ取得要求部224に渡す。管理情報取得部223は、その管理情報426を、キャッシュテーブル252に格納してもよい。
なお、管理情報取得部223は、データIDに対応する管理情報がキャッシュテーブル252に存在する場合、キャッシュテーブル252からその管理情報を取得してよい。つまり、この場合、管理情報取得部223は、通信ネットワーク101を通じて管理装置103から管理情報を取得する必要は無い。
データ取得応答部225は、自ノード102が、他ノードからデータの取得要求メッセージを受信した場合の応答に関する処理を行う。データ取得応答部225は、メッセージ受信部227からデータ位置を受け取ると、そのデータ位置に基づき、内部メモリ103からデータを取得する。そして、データ取得応答部225は、メッセージ送信部226に対して、そのデータを含むデータの取得応答メッセージを、データの取得要求メッセージの送信元(他ノード)へ返信するよう指示する。
図4は、管理装置103の構成例を示す。
管理装置103は、ハードウェア260を備える。ハードウェア260は、記憶部270と、処理部261と、通信I/F262とを備える。記憶部270、処理部261及び通信I/F262については、図2に示したノード102の記憶部250、処理部241及び通信I/F242と同様であるので、説明を省略する。管理装置103のハードウェア260では、OS231と、管理アプリケーション310と、が実行されてよい。
図5は、管理アプリケーション310の機能構成の例を示す。
記憶部270には、リンクテーブル341と、複数の管理情報342とが格納される。管理情報342は、各ノード102から送信されたものである。管理情報342の詳細については後述する(図7参照)。リンクテーブル341は、管理装置103の管理する管理情報342にアクセスするために必要な情報を有する。リンクテーブル341の詳細については後述する(図8参照)。
管理アプリケーション310は、機能として、登録応答部311と、取得応答部312と、メッセージ送信部226と、メッセージ受信部314とを有する。
メッセージ受信部314は、受信したメッセージを解析し、そのメッセージに含まれるメッセージ種別などを抽出する。そして、メッセージ受信部314は、そのメッセージ種別に基づき、各部311、312へ必要な情報に渡す。
登録応答部311は、ノード102から受信したプロパティ情報および管理情報の登録及び削除などを行う。登録応答部311は、メッセージ受信部314からプロパティ情報及び管理情報を受け取ると、それらを記憶部270に格納する。また、登録応答部311は、その格納された管理情報342にアクセスできるようにリンクテーブル341を更新する。そして、登録応答部311は、その格納された管理情報342に対応する管理情報IDを発行し、管理情報の送信元のノード102に対して、その管理情報IDを含む登録応答メッセージ512を送信する。
登録応答部311は、メッセージ受信部314から、管理情報の削除要求メッセージから抽出された管理情報IDを受け取る。そして、登録応答部311は、リンクテーブル341からその管理情報IDを有するリンク情報(レコ−ド)を削除すると共に、そのリンク情報(レコード)のリンク先の管理情報342を削除する。そして、登録応答部311は、削除要求メッセージの送信元のノード102に対して、管理情報の削除応答メッセージを返す。
取得応答部312は、管理情報の取得要求メッセージに対応する管理情報の取得応答メッセージを、その取得要求メッセージの送信元のノード102に返す。例えば、取得応答部312は、メッセージ受信部314から、管理情報の取得要求メッセージ712から抽出されたデータID及びバージョンを受け取ると、リンクテーブル341から、データID及びバージョンに対応するレコードを抽出する。そして、取得応答部312は、その抽出したレコードのリンク先から管理情報を取得する。そして、取得応答部312は、メッセージ送信部226に対して、その取得した管理情報を含む管理情報の取得応答メッセージを、取得要求メッセージの送信元のノード102へ返すよう指示する。
図6は、プロパティ情報410の構成例を示す。
プロパティ情報410は、管理情報テーブル342(図7参照)の付加情報の一種である。1つの管理情報テーブル342には、1つのプロパティ情報410が対応付けられてよい。プロパティ情報410は、管理情報テーブル342を生成したノード102に関する情報を含む。プロパティ情報410は、ノード名411と、バージョン412と、互換バージョン413とを情報として有してよい。
ノード名411は、プロパティ情報410が対応付けられている管理情報テーブル342を生成したノード102の名称を表す。バージョン412は、当該管理情報テーブル342を生成したときのノード102のバージョンを表す。互換バージョン413は、当該管理情報テーブル342を生成したときのノード102のバージョン412に対して下位互換が可能なもっとも古いバージョンを表す。
図7は、管理情報テーブル342の構成例を示す。
管理情報テーブル342は、1又は2以上の管理情報をレコードとして有する。管理情報テーブル342は、ノード102において管理されている各データにアクセスするために必要な管理情報を有する。各ノード102の管理情報テーブル342は、管理装置103に集約されてよい。管理情報テーブル342は、フィールド値として、データID421と、データ取得方法422と、データ位置423と、データ型424と、サイズ425とを有してよい。
データID421は、データを識別するための情報(例えば、ファイル名など)である。ノード102内において、1つのデータには1つのデータIDが対応付けられる。データ取得方法422は、データID421に対応するデータを取得するための方法を表す。データ位置423は、データ取得方法422の示す方法によってデータID421に対応するデータを取得する際に必要となる情報(パラメータ)を表す。データ型424は、データID421に対応するデータの型を表す。サイズ425は、データID421に対応するデータのサイズを表す。
例えば、図7においてレコード420aの管理情報は、データID「Temp」(421)に対応するデータを取得するためには、「Req/Rep通信」(422)によってIPアドレス「192.168.0.15」(423)のノード102にアクセスし、そのノード102の有するメモリのメモリアドレス「0x0001」(423)から、データ型「double」(424)で「4byte」(425)のデータを取得する必要があることを表す。
レコード420cの管理情報は、データID「Press」(421)に対応するデータを取得するためには、「共有メモリ参照」によって、共有メモリID「8」に対応する共有メモリのメモリアドレス「0x0010」から、データ型「double」で「4byte」のデータを取得する必要があることを表す。
レコード420dの管理情報は、データID「Alert」(421)に対応するデータを取得するためには、「Pub/Sub通信」によって、トランザクションID「125」に対応するPub/Subメッセージの受信を監視し、そのPub/Subメッセージを受信した場合、そのPub/Subメッセージからデータ型「char」で「60byte」のデータを抽出する必要があることを表す。
図8は、リンクテーブル341の構成例を示す。
リンクテーブル341は、それぞれの管理情報にアクセスするために必要なリンク情報をレコードとして有する。リンクテーブル341は、管理装置103が管理する。
リンクテーブル341は、フィールド値として、管理情報ID1706と、ノード名411と、バージョン412と、互換バージョン413と、リンク先431とを有する。
管理情報ID1706は、管理情報を識別するための情報である。1つの管理情報に1つの管理情報IDが付与されてよい。管理アプリケーション310は、管理情報を受信して管理する際に、その管理情報に対応する管理情報ID1706を発行してよい。ノード名411、バージョン412、及び互換バージョン413は、図6のプロパティ情報410で説明したとおりである。
リンク先431は、管理情報ID1706に対応する管理情報が格納されている位置を表す。リンク先431は、記憶部250における管理情報の格納先のメモリアドレスであってもよい。管理アプリケーション310は、リンクテーブル341を参照することにより、所望の管理情報にアクセスすることができる。
図9は、キャッシュテーブル252の構成例を示す。
キャッシュテーブル252には、ノード102のアクセスミドルウェア220が管理装置103から取得した管理情報が一時的に保持される。
アクセスミドルウェア220は、データID421に対応する管理情報を管理装置103から取得する際、キャッシュテーブル252に取得対象の管理情報が格納されているならば、キャッシュテーブル251からその管理情報を取得する。これにより、アクセスミドルウェア220は、管理装置103から通信ネットワーク101を通じて管理情報を取得する場合と比較して、短時間で管理情報を取得することができる。
キャッシュテーブル252は、フィールド値として、登録順441と、データID421と、データ取得方法422と、データ位置423と、データ型424と、サイズ425とを有する。
登録順441は、当該管理情報がキャッシュテーブル252に登録された順番を表す。例えば、登録順441が小さいほど、古い管理情報としてよい。また、アクセスされた管理情報の登録順441は、新しいものに更新されてもよい。
データID421、データ取得方法422、データ位置423、データ型424及びサイズ425は、図7の管理情報テーブル342で説明したとおりである。
キャッシュテーブル252に格納可能な管理情報の数には、上限が設定されてもよい。上限に達している状態で、キャッシュテーブル252に新たに管理情報を格納する場合は、登録順441の最も古い管理情報から削除されてよい。
図10は、更新情報テーブル254の構成例を示す。
更新情報テーブル254は、共有メモリ253に格納されている各データが更新されているか否かを判定するために必要な情報を有する。更新情報テーブル254は、フィールド値として、データ位置1712と、サイズ425と、タイムスタンプ432とを有する。
データ位置1712は、データの格納されている位置を表す。例えば、データ位置1712は、データの格納されている共有メモリのIDと、その共有メモリIDの示す共有メモリ上のデータが格納されているメモリアドレスと、によって表される。サイズ425は、データ位置1712に格納されているデータのサイズ(例えば、byte数)を表す。タイムスタンプ432は、データ位置1712に格納されているデータが生成又は更新された時刻を表す。
図11は、取得コマンド711の構成例を示す。
取得コマンド711は、アプリケーション210がデータを取得する際に使用するコマンドである。アプリケーション210は、データを取得する際、アクセスミドルウェア220に対して取得コマンド711を送信する。アクセスミドルウェア220は、取得コマンド711の内容を、API(Application Programming Interface)としてアプリケーション210に提供してもよい。
取得コマンド711は、パラメータとして、1又は2以上のデータID421と、エラー処理方法1710とを有してよい。
データID421は、取得対象のデータに対応するデータIDである。データID421は、ファイル名又はURI(Uniform Resource Identifier)などであってもよい。1つの取得コマンド711で複数のデータを取得する場合は、取得コマンド711に複数のデータID421を含めてよい。
エラー処理方法1710は、データID421に対応するデータの取得処理においてエラーが発生した場合の対応方法を表す。エラー処理方法1710は、エラーが発生した場合にどのような処理を行うかの判断に用いられる。
エラー処理方法1710は、例えば、再送フラグ752と、一時取得待ちフラグ753と、取得待ちフラグ754と、データ取得フラグ755との4ビットで構成されてもよい。
再送フラグ752は、Req/Rep通信によるデータ取得処理においてエラーが発生した場合に、データの取得要求メッセージを再送すべきか否かを表す。例えば、再送フラグ752「1」は、データの取得要求メッセージを再送すべきことを表す。再送フラグ752「0」は、データの取得要求メッセージの再送が不要であることを表す。再送回数は、別途、アプリケーション210又はアクセスミドルウェア220等で設定されてよい。
一時取得待ちフラグ753は、共有メモリ参照又はPub/Sub通信によるデータ取得処理においてエラーが発生した場合に、共有メモリ253における取得対象のデータの更新を所定時間待つべきか否か、又はPub/Subメッセージの受信を所定時間待つべきか否かを表す。例えば、一時取得待ちフラグ753「1」は、共有メモリ253における取得対象のデータの更新を所定時間待機すべき、又はPub/Subメッセージの受信を所定期間待機すべきことを表す。一時取得待ちフラグ753「0」は、共有メモリ253における取得対象のデータの更新を待機する必要が無いこと、又はPub/Subメッセージの受信を待機する必要が無いことを表す。待機すべき所定期間は、別途、アプリケーション210又はアクセスミドルウェア220等で設定されてよい。
取得待ちフラグ754は、共有メモリ参照又はPub/Sub通信によるデータ取得処理においてエラーが発生した場合に、共有メモリ253における取得対象のデータが更新されるまで待機すべきか否か、又はPub/Subメッセージを受信するまで待機すべきか否かを表す。例えば、取得待ちフラグ753「1」は、共有メモリ253における取得対象のデータが更新されるまで待機すべきこと、又はPub/Subメッセージを受信するまで待機すべきことを表す。取得待ちフラグ753「0」は、共有メモリ253における取得対象のデータが更新されるまで待機する必要は無いこと、又はPub/Subメッセージを受信するまで待機する必要が無いことを表す。取得待ちフラグ754は、一時取得待ちフラグ753と異なり、待機期間に期限を設けなくて良い。
データ取得フラグ755は、共有メモリ参照によるデータ取得処理においてデータが未更新である旨のエラーが発生した場合に、その未更新のデータを取得すべきか否かを表す。例えば、データ取得フラグ755「1」は、そのデータが未更新であってもデータを取得すべきことを表す。データ取得フラグ755「0」は、そのデータが未更新であった場合はデータを取得すべきでないことを表す。
アクセスミドルウェア220は、エラー処理方法の内容と、取得コマンド結果に含まれる実行結果とに基づき、適切なエラー処理を実行することができる。例えば、エラー処理方法の再送フラグ752が「1」であって、Req/Rep通信において接続エラーが発生した場合、アクセスミドルウェア220は、再接続を試みてよい。
図12は、取得コマンド結果716の構成例を示す。
取得コマンド結果716は、取得コマンド711の実行結果として返されるデータである。アプリケーション210は、アクセスミドルウェア220に対して取得コマンド711を送信し、その応答として取得コマンド結果716を受信する。アクセスミドルウェア220は、取得コマンド711の内容をAPIとして提供する場合は、APIの戻り値としてこの取得コマンド結果716の内容を提供してもよい。
取得コマンド結果716は、パラメータとして、データID421、実行結果1705及びデータ1711の1又は2以上のセットを有する。すなわち、取得コマンド結果716に含まれるセットの数は、取得コマンド711に含まれるデータID421の数に対応する。
データ1711は、そのセットに含まれるデータID421に対応するデータである。このデータ1711は、アクセスミドルウェア220が取得コマンド711に基づいて取得したものである。
実行結果1705は、そのセットに含まれるデータ1711の取得処理の結果を表す。実行結果1705は、アクセスミドルウェア220がデータの取得処理を実行した結果を表してよい。実行結果1706には、結果コード750と、取得時刻751とが含まれてよい。
結果コード750は、データの取得処理を実行した結果を識別するための情報(コード)である。結果コード750の具体的な例については後述する(図13参照)。取得時刻751は、データ1711の取得が完了した時刻を表す。
図13は、結果コード750の例を示す。
結果コード750とその意味とが、例えば以下の様に対応付けられてよい。
結果コード「0」は、「データ取得成功」を意味する。
結果コード「1」は、「Req/Rep通信に係る接続エラー」を意味する。
結果コード「2」は、「Req/Rep通信に係るタイムアウト」を意味する。
結果コード「3」は、「共有メモリ参照に係る未更新エラー」を意味する。
結果コード「4」は、「Pub/Sub通信に係るタイムアウト」を意味する。
結果コード「5」は、「データIDエラー」を意味する。
結果コード「6」は、「管理情報の取得エラー」を意味する。
結果コード「7」は、「管理情報エラー」を意味する。
図14は、クエリコマンド740の構成例を示す。
クエリコマンド740は、アクセスミドルウェア220がデータの取得処理を行う際に使用される。アクセスミドルウェア220は、1つのクエリコマンド740で1つのデータを取得してよい。クエリコマンド740は、パラメータとして、データ取得方法422と、データ位置342と、サイズ425と、回数制限742と、期限743と、エラー処理方法1710とを有してよい。データ取得方法422、データ位置342及びサイズ425は、図7において説明したとおりである。
回数制限742は、再送回数の上限を表す。期限743は、データの更新の待機時間の上限を表す。エラー処理方法1710は、図11において説明したとおりである。回数制限742及び期限743は、所定の設定値であってもよいし、クエリコマンド毎に指定されてもよい。
図15は、クエリコマンド結果741の構成例を示す。
クエリコマンド結果741は、クエリコマンド740の実行結果として返されるデータである。1つのクエリコマンド740に対して、1つのクエリコマンド結果741が返されるとしてよい。クエリコマンド結果741は、パラメータとして、データ取得方法422と、データ位置342と、サイズ425と、回数制限742と、期限743と、エラー処理方法1710と、データ1711と、実行結果1705とを有してよい。データ取得方法422、データ位置342及びサイズ425は、図7において説明したとおりである。回数制限742及び期限743は、図14において説明したとおりである。エラー処理方法1710は、図11において説明したとおりである。
データ1711は、クエリコマンド740に対応するデータである。実行結果1705は、クエリコマンド740を実行した結果を表す。
図16は、管理情報の登録要求メッセージ511の構成例を示す。
管理情報の登録要求メッセージ511は、ノード102が管理装置103に対して、管理情報の登録を要求する際に送信するメッセージである。管理情報の登録要求メッセージ511は、フィールド値として、ヘッダ1701と、メッセージ種別1703と、プロパティ情報513と、管理情報426とを有してよい。
ヘッダ1701は、通信ネットワーク101を通じて送信先へメッセージを送信するために必要な情報である。例えば、ヘッダ1701は、送信元及び送信先(宛先)のIPアドレス及びポート番号などを有してよい。
メッセージ種別1703は、このメッセージの種別を表す。例えば、メッセージ種別1703は、管理情報の登録要求メッセージ511、管理情報の登録応答メッセージ512。管理情報の取得要求メッセージ712、管理情報の応答要求メッセージ713、データの取得要求メッセージ714、データの取得応答メッセージ715、管理情報の削除要求メッセージ1611、管理情報の削除応答メッセージ1612などを区別できるように定義されてよい。
プロパティ情報513は、図8において説明したとおりである。管理情報426は、図7において説明したとおりである。管理情報の登録要求メッセージ511に含まれるプロパティ情報513と管理情報426とが、管理装置103に登録されてよい。管理情報426は複数であってもよい。
図17は、管理情報の登録応答メッセージ512の構成例を示す。
管理情報の登録応答メッセージ512は、管理情報の登録要求メッセージ713の応答として、管理装置103からノード102に返されるメッセージである。管理情報の登録応答メッセージ512は、ヘッダ1701と、メッセージ種別1703と、登録結果514と、管理情報ID1706とを有する。ヘッダ1701及びメッセージ種別1703は、図16で説明したとおりである。
登録結果514は、管理装置103は、管理情報の登録要求メッセージ511に含まれていた管理情報を登録する処理を実行した結果(例えば、成功又は失敗など)を表す情報である。
管理情報ID1706は、管理装置103が、管理情報の登録要求メッセージ511に含まれていた管理情報426に付与した管理情報IDを表す。管理情報ID1706は複数であってもよい。
図18は、管理情報の取得要求メッセージ712の構成例を示す。
管理情報の取得要求メッセージ712は、ノード102が管理装置103に対して、管理情報を要求する際に送信するメッセージである。管理情報の取得要求メッセージ712は、ヘッダ1701と、メッセージ種別1703と、1又は2以上のデータID421と、バージョン412とを有する。ヘッダ1701及びメッセージ種別1703は、図16で説明したとおりである。
データID421は、取得対象のデータのIDを表す。つまり、ノード102のアクセスミドルウェア220は、管理装置103に対して、管理情報の取得要求メッセージ712に含まれるデータID421に関する管理情報を要求する。複数の管理情報を取得する場合、アクセスミドルウェア220は、管理情報の取得要求メッセージ712に複数のデータID421を含めて良い。
バージョン412は、管理情報の取得要求メッセージ712を送信するノード102のバージョンを表す。すなわち、ノード102は、管理装置103に対して、当該バージョン412と互換性を有するバージョンの管理情報を要求する。
図19は、管理情報の取得応答メッセージ713の構成例を示す。
管理情報の取得応答メッセージ713は、管理情報の取得要求メッセージ712の応答として、管理装置103からノード102に返されるメッセージである。管理情報の取得応答メッセージ713は、フィールド値として、ヘッダ1701及びメッセージ種別1703に続いて、実行結果1705、データID421及び管理情報426の1又は2以上のセットを有してよい。
実行結果1705は、そのセットに含まれる管理情報426の取得処理の結果を表す。データID421は、そのセットに含まれる管理情報426に関するデータのIDを表す。すなわち、管理情報の取得要求メッセージ712に含まれるデータID421の数と、管理情報の取得応答メッセージ713に含まれるセットの数(データID421の数)とは一致する。
図20は、データの取得要求メッセージ714の構成例を示す。
データの取得要求メッセージ714は、ノード102が他ノードに対して、データを要求する際に送信するメッセージである。
データの取得要求メッセージ714は、フィールド値として、ヘッダ1701及びメッセージ種別1703に続いて、メモリアドレス1712及びサイズ425の1又は2以上のセットを有し、その後にエラー処理方法1710を有してよい。ヘッダ1701及びメッセージ種別1703は、図16で説明したとおりである。
メモリアドレス1712は、取得対象のデータの格納先のメモリアドレスを表す。サイズ425は、取得対象のデータのサイズを表す。複数のデータを要求する場合は、データの取得要求メッセージ714に複数のメモリアドレス1712及びサイズ425のセットを含めてよい。エラー処理方法1710は、図11で説明したとおりである。
図21は、データの取得応答メッセージ715の構成例を示す。
データの取得応答メッセージ715は、データの取得要求メッセージ714の応答として、他ノードからノード102に返されるメッセージである。データの取得応答メッセージ715は、フィールド値として、ヘッダ1701及びメッセージ種別1703に続いて、実行結果1705、メモリアドレス1712、サイズ425及びデータ1711の1又は2以上のセットを有してよい。ヘッダ1701及びメッセージ種別1703は、図16で説明したとおりである。
実行結果1705は、そのセットに含まれる他ノードにおけるデータの取得処理の結果を表す。メモリアドレス1712は、そのセットに含まれるデータ1711が格納されていたメモリアドレスを表す。サイズ425は、そのセットに含まれるデータ1711のサイズを表す。データ1711は、データの取得要求メッセージ714で要求されたデータである。すなわち、データの取得要求メッセージ714に含まれるセットの数と、データの取得応答メッセージ715に含まれるセットの数とは一致する。
図22は、Pub/Subメッセージ1520の構成例を示す。
Pub/Subメッセージ1520は、或るノード102が複数の他ノードに対して同報通知するメッセージである。Pub/Subメッセージ1520は、フィールド値として、ヘッダ1701と、トランザクションID1521と、サイズ425と、データ1711とを有してよい。ヘッダ1701は、図16で説明したとおりである。データ1711は、Pub/Subメッセージ1520で運ばれるデータであり、サイズ425は、そのデータ1711のサイズを表す。
トランザクションID1521は、Pub/Subメッセージ1520を識別するための情報である、同報通知されたPub/Subメッセージ1520を受信した他ノードは、そのメッセージ1520に含まれるトランザクションID1521が、自分が受信待機(購読)しているトランザクションIDと一致する場合、そのPub/Subメッセージ1520を取り込む。
図23は、管理情報の削除要求メッセージ1611の構成例を示す。
管理情報の削除要求メッセージ1611は、ノード102が管理装置103に対して、管理情報の削除を要求する際に送信するメッセージである。管理情報の削除要求メッセージ1611は、ヘッダ1701と、メッセージ種別1703と、管理情報ID1706とを有してよい。ヘッダ1701及びメッセージ種別1703は、図16で説明したとおりである。
管理情報ID1706は、削除対象の管理情報のIDを表す。すなわち、管理装置103は、管理情報の削除要求メッセージ1612を受信すると、この管理情報ID1706に対応する管理情報を削除する処理を行う。
図24は、管理情報の削除応答メッセージ1612の構成例を示す。
管理情報の削除応答メッセージ1612は、管理装置103がノード102に対して、管理情報の削除要求メッセージ1611の応答として返すメッセージである。管理情報の削除応答メッセージ1612は、ヘッダ1701と、メッセージ種別1703と、削除結果1613とを有してよい。ヘッダ1701及びメッセージ種別1703は、図16で説明したとおりである。削除結果1613は、管理装置103における管理情報の削除処理の結果(例えば成功又は失敗など)を表す。
図25は、ノード102bが管理装置103に管理情報の登録を要求する処理の一例を表すシーケンスチャートである。
ノード102bのアクセスミドルウェア220は、自ノード102bが分散システム1に参加するとき、以下の処理を開始する。例えば、ノード102bは、通信ネットワーク101に接続して管理装置103と通信可能となったこと契機として、以下の処理を開始する。
ノード102bの管理情報取得部223は、ノード102bに関する管理情報及びプロパティ情報を準備する(S501)。そして、ノード102bは、メッセージ送信部226に対して、管理情報の登録要求メッセージを管理装置103へ送信するよう指示する(S501)。
ノード102bのメッセージ送信部226は、ノード102bに関する管理情報426及びプロパティ情報513を含む管理情報の登録要求メッセージ511を生成し、その管理情報の登録要求メッセージ511を管理装置103へ送信する(S502)。
管理装置103の管理アプリケーション310は、ノード102bから管理情報の登録要求メッセージ511を受信すると、その登録要求メッセージ511に含まれる管理情報426及びプロパティ情報513について、管理情報の登録処理を実行する(S600)。この処理の詳細については後述する。
ノード102bの管理情報取得部223は、管理装置103から管理情報の登録応答メッセージ512を受信する(S504)。そして、管理情報取得部223は、その管理情報の登録応答メッセージ512に含まれる登録結果514に基づいて、登録処理の成否を判定する。ここで、登録結果514が「成功」である場合、管理情報取得部223は、管理情報の登録応答メッセージ512に含まれる管理情報ID1706を記憶する。登録結果514が「失敗」である場合、管理情報取得部223は、アプリケーション210へ「失敗」を通知する。
各ノード102が上述の処理を行うことで、分散システム1の各ノード102の管理情報が、管理装置103に集められる。
図26は、管理装置103における管理情報の登録処理の例を表すフローチャートである。この処理は、図22のS600の管理装置103側の処理に該当する。
管理装置103の管理アプリケーション310は、ノード102bから管理情報の登録要求メッセージ511を受信すると(S601)、その登録要求メッセージ511から管理情報426及びプロパティ情報513を抽出する(S602)。
管理アプリケーション310は、記憶部270の空き容量が不足しているか否かを判定する(S603)。記憶部270に管理情報などを格納する必要があるためである。
空き容量が不足していない場合(S603:NO)、管理アプリケーション310は、ノード102bから受信したプロパティ情報513と重複したものがリンクテーブル341に存在するか否かを判定する(S604)。すなわち、その受信したプロパティ情報513に含まれるノード名411及びバージョン412と重複するリンク情報(レコード)が、リンクテーブル341に存在するか否かを判定する。
重複したものがリンクテーブル341に存在しない場合(S604:NO)、管理アプリケーション310は、管理情報426を管理情報テーブル342に登録する(S605)。そして、管理アプリケーション310は、この登録した管理情報に対応する管理情報IDを発行する。
そして、管理アプリケーション310は、この管理情報IDと、プロパティ情報513に含まれるノード名411、バージョン412及び互換バージョン413と、管理情報426の登録先の管理情報テーブル342を示すリンク先とを有するリンク情報を生成し、リンクテーブル341に登録する(S606)。また、管理アプリケーション310は、「成功」の登録結果514と、管理情報ID1706とを含む管理情報の登録応答メッセージ512を生成する。そして、管理アプリケーション310は、S610の処理へ進む。
空き容量が不足している場合(S603:YES)、又は重複したものがリンクテーブル341に存在する場合(S604:YES)、管理アプリケーション310は「失敗」の登録結果514を含む管理情報の登録応答メッセージ512を生成する(S608)。そして、管理アプリケーション310は、S610の処理へ進む。
S610として管理アプリケーション310は、上述で生成した管理情報の登録応答メッセージ512を、ノード102bへ送信する(S610)。
さらに、管理アプリケーション310は、その登録した管理情報に係るプロパティ情報(ノード名及びバージョン等)を、通信ネットワーク101上の各ノード102へ同報通知してもよい。この同報通知を受信した各ノード102は、この同報通知と同じノード名であり、且つ、同報通知されたものよりも古いバージョンの管理情報を、キャッシュテーブル251から削除してもよい(S611)。
以上の処理により、管理装置103は、管理情報の登録要求メッセージ511に対する応答メッセージ512を、ノード102bに返すことができる。
図27は、ノード102aがノード102bからデータを取得する処理の例を表すシーケンスチャートである。
ノード102aのアプリケーション210は、取得対象のデータID421と、所望のエラー処理方法1710とを含む取得コマンド711を生成する。そして、アプリケーション210は、その取得コマンド711をアクセスミドルウェア220aへ渡す(S701)。
ノード102aのアクセスミドルウェア220aは、この取得コマンド711に基づき、管理情報の取得処理を実行する(S800)。この処理の詳細については後述する。
アクセスミドルウェア220aは、管理情報の取得処理によって取得した管理情報に基づき、クエリコマンド740を生成する(S720)。そして、アクセスミドルウェア220aは、このクエリコマンド740に基づき、データ取得処理を実行する(S700)。この処理の詳細については後述する。
アクセスミドルウェア220aは、データ取得処理によって得られたクエリコマンド結果741に基づき、取得コマンド結果716を生成する(S730)。そして、アクセスミドルウェア220aは、この取得コマンド結果716を、アプリケーション210へ返す(S731)。
このとき、アクセスミドルウェア220aは、データ取得処理の対象のクエリコマンド740がまだ残っているか否かを判定する(S732)。この判定が肯定的な場合(S732:YES)、アクセスミドルウェア220aは、その残っているクエリコマンド740について、データ取得処理(S700)を実行する。この判定が否定的な場合(S732:NO)、アクセスミドルウェア220aは、本処理を終了する。
以上の処理により、ノード102aのアプリケーション210は、ノード102bからデータ1711を取得することができる。なおアプリケーション210は、取得コマンド711に対する取得コマンド結果716を受け取る前に、次の取得コマンド711をアクセスミドルウェア220へ渡してもよい。すなわち、アクセスミドルウェア220は、複数の取得コマンド711を並列に処理してもよい。
図28は、アクセスミドルウェア220aにおける管理情報の取得処理の例を表すフローチャートである。この処理は、図27のS800に該当する。
ノード102aのアクセスミドルウェア220aは、アプリケーション210から渡された取得コマンド711から、データID421を抽出する(S801)。アクセスミドルウェア220aは、キャッシュテーブル252から、データID421に対応する管理情報の取得を試みる(S802)。そして、アクセスミドルウェア220aは、キャッシュテーブル252から取得できなかった管理情報が存在するか否かを判定する(S803)。
キャッシュテーブル252から取得できなかった管理情報が存在しない場合(S803:NO)、アクセスミドルウェア220aは、本処理を終了する。
キャッシュテーブル252から取得できなかった管理情報が存在する場合(S803:YES)、アクセスミドルウェア220aは、その取得できなかったデータID421に関連する管理情報の取得要求メッセージ712を生成する。そして、アクセスミドルウェア220aは、その管理情報の取得要求メッセージ712を、管理装置103へ送信する(S804)。そして、アクセスミドルウェア220aは、タイムアウトが発生するまで、管理情報の取得応答メッセージ713の受信を待機する(S807:NO、S808:NO)。
タイムアウトが発生した場合(S808:YES)、アクセスミドルウェア220aは、結果コード750「6」(管理情報取得エラー)の実行結果1705を含む取得コマンド結果716を生成する。そして、アクセスミドルウェア220aは、その取得コマンド結果716をアプリケーション210に返し(S809)、本処理を終了する。
タイムアウトが発生する前に管理情報の取得応答メッセージ713を受信した場合(S807:YES)、アクセスミドルウェア220aは、その管理情報の取得応答メッセージ713から管理情報426を抽出する(S805)。アクセスミドルウェア220aは、この抽出した管理情報を、キャッシュテーブル251に登録し(S806)、本処理を終了する。
以上の処理により、アクセスミドルウェア220aは、データの取得に必要な管理情報を取得することができる。
図29は、管理情報の取得要求メッセージ712を受けた管理装置103の処理の例を表すフローチャートである。この処理は、図27のS800に該当する。
管理アプリケーション310は、ノード102aから管理情報の取得要求メッセージ712を受信すると(S901)、その取得要求メッセージ712からデータID421及びバージョン412を抽出する。
管理アプリケーション310は、リンクテーブル341から、その抽出したバージョンと同一または互換性を有するバージョンを有し、且つ、その抽出したデータIDと同一のデータIDを有する管理情報426を検索する(S902)。
このような管理情報を発見できた場合(S903:YES)、管理アプリケーション310は、この発見した管理情報と、実行結果の結果コード「0」(成功)とをセットにした情報を一時的に保持し(S904)、S906の処理へ進む。
このような管理情報を発見できなかった場合(S903:NO)、管理アプリケーション310は、「NULL」の管理情報と、実行結果の結果コード「5」(データIDエラー)とをセットにした情報を一時的に保持し(S905)、S906の処理へ進む。
S906において管理アプリケーション310は、ノード102aから受信した全てのデータID421の内、未処理のデータIDが存在するか否かを判定する(S906)。未処理のデータIDが存在する場合(S906:YES)、管理アプリケーション310は、S902に戻り、未処理のデータIDについて上記と同様の検索を行う。
未処理のデータIDが存在しない場合(S906:NO)、管理アプリケーション310は、ノード102aから受信したデータID421と、一時的に保持していた実行結果と、管理情報426とを含む管理情報の取得応答メッセージ713を生成する。そして、管理アプリケーション310は、その管理情報の取得応答メッセージ713を、ノード102aへ返し(S907)、本処理を終了する。
以上の処理により、管理装置103は、管理情報の取得要求メッセージ712に対する応答メッセージ713をノード102aに返すことができる。
図30は、ノード102aにおけるデータ取得処理の例を表すフローチャートである。この処理は、図27のS700の処理に該当する。
ノード102aのアクセスミドルウェア220aは、図27のS720で生成したクエリコマンド740について次の処理を行う。すなわち、アクセスミドルウェア220aは、クエリコマンド740をデータ取得方法422で分類する(S1101)。そして、アクセスミドルウェア220aは、データ取得方法に対応する処理を実行する。このとき、アクセスミドルウェア220aは、複数のクエリコマンド740を並列に処理してよい。
アクセスミドルウェア220aは、データ取得方法422が「Req/Rep通信」であるクエリコマンド740について、Req/Rep通信によるデータ取得処理(S1200)を実行する。この処理の詳細については後述する。
アクセスミドルウェア220aは、データ取得方法が「共有メモリ参照」であるクエリコマンド740について、共有メモリからのデータ取得処理(S1400)を実行する。この処理の詳細については後述する。
アクセスミドルウェア220aは、データ取得方法が「Pub/Sub通信」であるクエリコマンド740について、Pub/Sub通信によるデータ取得処理(S1500)を実行する。この処理の詳細については後述する。
アクセスミドルウェア220aは、データ取得方法が未知のもの又は未対応のものであるクエリコマンド740について、結果コード「7」(管理情報エラー)の実行結果を生成する(S1107)。
上記S1200、S1400、S1500又はS1107の処理を完了したアクセスミドルウェア220aは、それぞれのデータ取得処理の実行結果を参照する(S1102)。
アクセスミドルウェア220aは、実行結果にエラーが含まれているか否かを判定する(S1103)。実行結果にエラーが含まれていない場合(S1103:NO)、アクセスミドルウェア220aは、S1108の処理へ進む。
実行結果にエラーが含まれている場合(S1103:YES)、アクセスミドルウェア220aは、次のエラー処理を行う。アクセスミドルウェア220aは、実行結果の結果コードと、エラー処理方法1710とを照らし合わせて、データ取得処理の継続が必要な組み合わせが存在するか否かを判断する(S1104)。
データ取得処理の継続が必要な組み合わせとは、例えば、結果コードが「1」(Req/Rep通信:接続エラー)、且つ、再送フラグ752が「1」の組み合わせの場合である。又は、結果コードが「2」(Req/Rep通信:タイムアウトエラー)、且つ、再送フラグ752が「1」の組み合わせの場合である。又は、結果コードが「3」(共有メモリ参照:未更新エラー)、且つ、一時取得待ちフラグ753若しくは取得待ちフラグ754が「1」の組み合わせの場合である。又は、結果コードが「4」(Pub/Sub通信:タイムアウトエラー)、且つ、一時取得待ちフラグ753若しくは取得待ちフラグ754が「1」の組み合わせの場合である。
次に、アクセスミドルウェア220aは、再送フラグ752が「1」の場合に再送回数が回数制限742を超えていないか、及び、一時取得待ちフラグ753が「1」の場合に待機時間が期限743を超えていないかなどを判断する(S1105)。これらの制限を超えている場合(S1105:NO)、アクセスミドルウェア220aは、S1108の処理へ進む。
これらの制限を超えていない場合(S1105:YES)、アクセスミドルウェア220aは、クエリコマンド740を再生成する(S1106)。このとき、再送回数や待機時間の加算などを行ってよい。ここで再生成されたクエリコマンド740は、図27のS731の残りのクエリコマンド740として追加され、再実行される。
S1108としてアクセスミドルウェア220aは、未処理のデータ取得結果が存在するか否かを判定する(S1108)。未処理のデータ取得結果が存在する場合(S1108:YES)、アクセスミドルウェア220aは、その未処理のデータ取得結果について、S1102からの処理を実行する。未処理のデータ取得結果が存在しない場合(S1108:NO)、アクセスミドルウェア220aは、本処理を終了する。
以上の処理により、ノード102aは、クエリコマンド740に含まれるデータ取得方法422及びエラー処理方法1710に従ってデータを取得することができる。
図31は、ノード102aにおけるReq/Rep通信によるデータ取得処理の例を表すフローチャートである。この処理は、図27のS1200のデータの取得要求メッセージ713を送信する側のノード102aの処理に該当する。
ノード102aのアクセスミドルウェア220aは、クエリコマンド740のデータ位置342から、データの取得先である他ノード102bのIPアドレス及びメモリアドレスを抽出する。そして、アクセスミドルウェア220aは、他ノード102bのIPアドレスに接続を試みる(S1201)、
接続が成功した場合(S1201:YES)、アクセスミドルウェア220aは、データの取得要求メッセージ714を、他ノード102bへ送信する(S1202)。そして、アクセスミドルウェア220aは、S1210の処理へ進む。
接続が失敗した場合(S1201:NO)、アクセスミドルウェア220aは、結果コード「1」(リクエスト/レスポンス通信:接続エラー)の実行結果を一時的に保持する(S1205)。そして、アクセスミドルウェアは、S1210の処理へ進む。
S1210としてアクセスミドルウェア220aは、未処理のクエリコマンド740が存在するか否かを判定する(S1210)。未処理のクエリコマンド740が存在する場合(S1210:YES)、アクセスミドルウェア220aは、未処理のクエリコマンド740について、S1201からの処理を実行する。未処理のクエリコマンド740が存在しない場合(S1210:NO)、アクセスミドルウェア220aは、次のS1212の処理へ進む。
ノード102aのアクセスミドルウェア220aは、タイムアウトが発生するまで、他ノード102bからのデータの取得応答メッセージ715の受信を待機する(S1212:NO、S1218:NO)。
データの取得応答メッセージ715を受信した場合(S1212:YES)、アクセスミドルウェア220aは、そのデータの取得応答メッセージ715からデータ1711及び実行結果1705を抽出する。そして、アクセスミドルウェア220aは、その抽出したデータ1711及び実行結果1705を含むクエリコマンド結果741を生成し、一時的に保持する(S1215)。
アクセスミドルウェア220aは、未受信のデータの取得応答メッセージ715が存在するか否かを判定する(S1220)。未受信のデータの取得応答メッセージ715が存在する場合(S1220:YES)、アクセスミドルウェア220aは、S1212の処理に戻り、残りの受信を待機する。未受信のデータの取得応答メッセージ712が存在しない場合(S1220:NO)、アクセスミドルウェア220aは、本処理を終了する。
データの取得応答メッセージ712の受信待機において、タイムアウトが発生した場合(S1218:YES)、アクセスミドルウェア220aは、次の処理を行う。すなわち、アクセスミドルウェア220aは、結果コード「2」(リクエスト/レスポンス通信:タイムアウトエラー)の実行結果を有するクエリコマンド結果741を生成し、一時的に保持する(S1219)。そして、アクセスミドルウェア220aは、本処理を終了する。
上述における一時的に保持されたクエリコマンド結果741は、図27のS731においてアプリケーション210に返される。
図32は、ノード102bにおけるReq/Rep通信によるデータ取得処理の例を表すフローチャートである。この処理は、図27のS1200のデータの取得要求メッセージ713を受信する側のノード102bの処理に該当する。
ノード102bのアクセスミドルウェア220bは、ノード102aからのデータの取得要求メッセージ714を受信すると(S1301)、以下の処理を実行する。すなわち、アクセスミドルウェア220bは、そのデータの取得要求メッセージ714からメモリアドレス1712及びサイズ425を抽出する。
アクセスミドルウェア220bは、その抽出したメモリアドレス1712及びサイズ425の示す位置にデータが存在するか否かを判定する(S1302)。データが存在しない場合(S1302:NO)、アクセスミドルウェア220bは、データが存在しない旨を表す実行結果を一時的に保持し(S1320)、S1306の処理へ進む。
データが存在する場合(S1302:YES)、アクセスミドルウェア220aは、その位置からデータを取得する(S1303)。そして、アクセスミドルウェア220aは、データIDと結果コード「0」(成功)と現在時刻の取得時刻とを含む実行結果、並びに、その取得したデータを、一時的に保持する(S1304)。
アクセスミドルウェア220aは、未取得のデータが存在するか否かを判定する(S1305)。未取得のデータが存在する場合(S1305:YES)、アクセスミドルウェア220aは、S1203の処理に戻り、未取得のデータを取得する。
未取得のデータが存在しない場合(S1305:NO)、アクセスミドルウェア220aは、上述において一時的に保持した実行結果等を含むデータの取得応答メッセージ715を生成し、そのメッセージ715をノード102aへ返す(S1306)。そして、アクセスミドルウェア220aは、本処理を終了する。
以上の処理により、データの取得要求メッセージ713を受信したノード102aは、その取得要求メッセージ713に対応する取得応答メッセージ714を返すことができる。
なお、上述の処理例では、S1302の判定によって、データの取得要求メッセージ中に存在しないデータが1つでも含まれる場合は、その旨を示す実行結果を含むデータの取得応答メッセージを返している。しかし、取得要求メッセージ中の個々のデータに関して存在の有無の判定を行い、個々のデータに関しての判定結果を実行結果として含むデータの取得応答メッセージを返しても良い。
図33は、ノード102aにおける共有メモリ参照によるデータ取得処理の一例を表すフローチャートである。この処理は、図27のS1400の処理に該当する。
ノード102aのアクセスミドルウェア220aは、管理情報から、データ位置423(共有メモリID及びメモリアドレス)、データ型及びサイズを取得する。そして、アクセスミドルウェア220aは、これらの情報を用いて共有メモリ253からデータを取得する(S1401)。
アクセスミドルウェア220aは、この取得したデータの更新時刻を確認し(S1402)、このデータが更新されているか否かを判定する(S1403)。例えば、アクセスミドルウェア220aは、この取得したデータの更新時刻が、更新情報テーブル254におけるこのデータに対応するレコードのタイムスタンプ432よりも新しい場合(又は、このデータが初めて取得したものである場合)、更新されていると判定してよい。
この取得したデータが更新されていると判定した場合(S1403:YES)、アクセスミドルウェア220aは、この取得したデータと、現在時刻を取得時刻751とする実行結果1705とを一時的に保持する(S1408)。そして、アクセスミドルウェア220aは、S1410の処理に進む。
この取得したデータが更新されていないと判定した場合(S1403:NO)、アクセスミドルウェア220aは、エラー処理方法1710のデータ取得フラグ755が「1」(未更新であってもデータを取得すべき)であるか否かを判定する(S1404)。
データ取得フラグ755が「1」(未更新であってもデータを取得すべき)である場合(S1404:YES)、アクセスミドルウェア220aは、この取得したデータと、結果コードを「3」(共有メモリ参照:未更新エラー)とし且つこの取得したデータの更新時刻を取得時刻751とした実行結果1705とを一時的に保持する(S1405、S1408)。そして、アクセスミドルウェア220aは、S1410の処理に進む。
データ取得フラグ755が「0」(未更新の場合はデータを取得すべきでない)の場合(S1404:NO)、アクセスミドルウェア220aは、「NULL」のデータと、結果コードを「3」(共有メモリ参照:未更新エラー)とした実行結果1705とを一時的に保持する(S1406)。そして、アクセスミドルウェア220aは、S1410の処理に進む。
S1410としてアクセスミドルウェア220aは、未取得のデータが残っているか否かを判定する(S1410)。未取得のデータが残っている場合(S1410:YES)、アクセスミドルウェア220aは、S1401の処理に戻り、未取得のデータを取得する。未取得のデータが残っていない場合(S1410:NO)、アクセスミドルウェア220aは、本処理を終了する。
以上の処理により、ノード102aは、エラー処理方法に基づいて共有メモリからデータを取得することができる。
図34は、ノード102aにおけるPub/Sub通信によるデータ取得処理の例を表すフローチャートである。この処理は、図27のS1500の同報通知(Pub/Subメッセージ)を受信(購読)する側のノード102aの処理に該当する。
ノード102aのアクセスミドルウェア220aは、管理装置103から取得した管理情報のデータ取得方法422がPub/Sub通信の場合(S1501:YES)、以下の処理を実行する。
ノード102aのアクセスミドルウェア220aは、管理情報のデータ位置423から、トランザクションIDを抽出する。そして、アクセスミドルウェア220aは、その抽出したトランザクションIDを有するPub/Subメッセージ1520の受信待機を開始する(S1502)。そして、アクセスミドルウェア220aは、タイムアウトが発生するまでこのPub/Subメッセージの受信待機を行う(S1503:NO、S1510:NO)。
その抽出したトランザクションIDを有するPub/Subメッセージ1520を受信した場合(S1503:YES)、アクセスミドルウェア220aはPub/Subメッセージ1520からデータ1711を取得する(S1504、S1505)。そして、アクセスミドルウェア220aは、その取得したデータと、結果コード750を「0」(成功)とし且つ取得時刻751を現在時刻とする実行結果1705とを一時的に保持する(S1506)。
そして、アクセスミドルウェア220aは、未受信データが存在するか否かを判定する(S1520)。未受信データが存在する場合(S1520:YES)、アクセスミドルウェア220aは、S1503に戻り、再び受信待機を行う。未受信データが存在しない場合(S1520:NO)、本処理を終了する。
タイムアウトが発生した場合(S1510:YES)、アクセスミドルウェア220aは、「NULL」のデータと、結果コード750を「4」(Pub/Sub通信:タイムアウトエラー)とする実行結果1705とを一時的に保持する(S1511)。そして、アクセスミドルウェア220aは、本処理を終了する。
以上の処理により、ノード102aは、購読対象のトランザクションIDを有するPub/Subメッセージ1520から、データ1711を取得することができる。
図35は、ノード102bが管理装置103に対して管理情報の削除要求を行う処理の一例を表すシーケンスチャートである。
ノード102bのアクセスミドルウェア220bは、自ノード102bが分散システム1から離脱するときなどに、以下の処理を開始する。
ノード102bのアクセスミドルウェア220bは、削除対象の管理情報IDを含めた管理情報の削除要求メッセージ1611を、管理装置103へ送信する(S1601)。
管理装置103の管理アプリケーション310は、管理情報の削除要求メッセージ1611を受信すると、そのメッセージ1611に含まれる管理情報ID1706を特定し、その特定した管理情報ID1706に対応する管理情報426を削除する。また、管理アプリケーション310は、リンクテーブル341から、その特定した管理情報ID1706を有するリンク情報(レコード)を削除する。そして、管理アプリケーション310は、削除処理の成功又は失敗の削除結果1613を含む管理情報の削除応答メッセージ1612をノード102bに送信する(S1700)。ノード102bは、管理情報の削除応答メッセージ1612を受信し(S1603)、処理を終了する。
以上の処理により、ノード102bが削除要求した管理情報IDに対応する管理情報が、管理装置103から削除される。
図36は、管理情報の削除要求メッセージを受信した管理装置103の削除処理を表すフローチャートである。この処理は、図35のS1700の管理装置103側の処理に該当する。
管理装置103の管理アプリケーション310は、管理情報の削除要求メッセージ1611を受信すると、その削除要求メッセージ1611を解析する(S1701)。
管理アプリケーション310は、リンクテーブル341に、管理情報の削除要求メッセージ1611に含まれる管理情報ID1706と一致する管理情報IDを有するリンク情報(レコード)が存在するか否かを判定する(S1702、S1703)。
リンクテーブル341に一致する管理情報IDを有するリンク情報(レコード)が存在する場合(S1703:YES)、管理アプリケーション310は、そのリンク情報(レコード)のリンク先430に格納されている管理情報を削除する。また、管理アプリケーション310は、リンクテーブル341からそのリンク情報(レコード)を削除する(S1704)。そして、管理アプリケーション310は、「成功」を表す削除結果1613を含む管理情報の削除応答メッセージ1612を生成し(S1705)、S1707の処理へ進む。
リンクテーブル341に一致する管理情報IDを有するリンク情報(レコード)が存在しない場合(S1703:NO)、管理アプリケーション310は、「失敗」を表す削除結果1613を含む管理情報の削除応答メッセージ1612を生成し(S1706)、S1707の処理へ進む。
S1707として管理アプリケーション310は、上述で生成した管理情報の削除応答メッセージ1612を、ノード102bへ返し(S1707)、本処理を終了する。
以上の処理により、管理装置103は、ノード102bから削除要求された管理情報の削除処理を実行し、その結果をノード102bに返すことができる。
上述した実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。例えば、本実施形態を以下の様に表現してもよい。
(表現1)
コンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体であって、分散システムを構成するノードの有するプロセッサにおいて前記コンピュータプログラムが実行されると、
前記プロセッサで実行されるアプリケーションプログラムから、データ識別子と、そのデータ識別子に対応するデータの取得処理においてエラーが発生した場合対応方法を表すエラー処理方法とを含む、データの取得を要求する取得コマンドを、メモリを介して受け取ると、
前記取得コマンドに含まれるデータ識別子に関連する管理情報を、通信インタフェースを介して所定の管理装置から取得し、その取得した管理情報を前記メモリに格納し、前記管理情報には、データ識別子と、そのデータ識別子に対応するデータのデータ取得方法とが含まれており、
その取得した管理情報に含まれるデータ取得方法に基づき、前記データ識別子に対応するデータの取得処理を実行し、
その取得処理においてエラーが発生した場合、前記取得コマンドに含まれる前記エラー処理方法に基づいてエラー処理を実行し、
前記取得処理又は前記エラー処理によって前記データ識別子に対応するデータを取得した場合、その取得したデータを、前記メモリを介して前記アプリケーションプログラムに返す
コンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体。
(表現2)
複数のノードによって構成される分散システムに属する管理装置であって、
データを識別するためのデータ識別子と、そのデータ識別子に対応するデータのデータ取得方法とを含む、複数の管理情報を管理し、
前記ノードから、データ識別子を含む管理情報の取得要求メッセージを受信すると、
前記管理情報の取得要求メッセージに含まれるデータ識別子に対応する管理情報を特定し、
その特定した管理情報を含む管理情報の取得応答メッセージを、前記ノードに返す
管理装置。
(表現3)
分散システムを構成するノードであって、
アプリケーションプログラムから、データ識別子と、そのデータ識別子に対応するデータの取得処理においてエラーが発生した場合の対応方法を表すエラー処理方法とを含む、データの取得を要求する取得コマンドを受け取ると、
前記取得コマンドに含まれるデータ識別子に関連する管理情報を前記管理装置から取得し、
その取得した管理情報に含まれるデータ取得方法に基づき、前記データ識別子に対応するデータの取得処理を実行し、
その取得処理においてエラーが発生した場合、前記取得コマンドに含まれる前記エラー処理方法に基づいてエラー処理を実行し、
前記取得処理又は前記エラー処理によって前記データ識別子に対応するデータを取得した場合、その取得したデータを前記アプリケーションプログラムに返す
ノード。