以下、本発明の実施の形態について、図面を参照して詳細に説明する。
(第1の実施の形態)
本発明の第1の実施の形態としての情報処理システム1の構成を図1に示す。図1において、情報処理システム1は、複数のノード10からなる。複数のノード10は、内部ネットワーク105に接続されることにより、互いに通信可能となっている。各ノード10は、互いを識別可能なノード識別子を用いて、他のノード10と通信するものとする。また、複数のノード10は、外部ネットワーク106に接続されることにより、外部と通信可能になっている。情報処理システム1は、ネットワーク106を介して外部のクライアント9から指示される各種の処理を実行する。なお、図1には、3つのノード10を示したが、本発明の情報処理システムが備えるノードの数を限定するものではない。また、図1には、1つのクライアント9を示したが、本発明の情報処理システムを利用する装置の数を限定するものではない。
次に、ノード10の機能ブロック構成を図2に示す。図2において、ノード10は、ノード状態管理部11と、分割データ生成部12と、分割データ送信部13と、分割データ格納部14と、格納先ノード検索部15と、読み出しノード決定部16と、データ読み出し部17とを備える。
ここで、各ノード10は、図3に示すようなハードウェア要素によって構成可能である。図3において、ノード10は、CPU(Central Processing Unit)1001、メモリ1002、ネットワークインタフェース1005、および、ネットワークインタフェース1006を含む。メモリ1002は、RAM(Random Access Memory)、ROM(Read Only Memory)、補助記憶装置(ハードディスク等)等によって構成される。また、ネットワークインタフェース1005および1006は、それぞれ、内部ネットワーク105および106に接続するインタフェースである。この場合、ノード10の各機能ブロックは、メモリ1002に格納されるコンピュータ・プログラムを読み込んで実行するとともに各部を制御するCPU1001によって構成される。なお、ノード10およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
ノード状態管理部11は、分割数ノード一覧情報を保持する。分割数ノード一覧情報とは、複数のノード10のうち、任意のデータの分散格納先となり得る所定の分割数のノード10の一覧を表す。分割数は、データを分散格納させるノード10の数としてあらかじめ定められる。また、ノード状態管理部11は、分割数ノード一覧情報を、各ノード10の状態に応じて他のノード10と同期して更新する。
例えば、複数のノード10のうちいずれかのノード10のノード状態管理部11が、各ノード10の状態を表す情報を収集するようにしてもよい。そして、そのノード10のノード状態管理部11が、各ノード10の状態に基づいて、分散格納先となり得る分割数のノード10を決定し、その一覧を新たな分割数ノード一覧情報としてもよい。そしてこの場合、そのノード10のノード状態管理部11が、他のノード10のノード状態管理部11に対して更新した分割数ノード一覧情報を送信すればよい。他のノード10のノード状態管理部11は、自ノードの分割数ノード一覧情報を、受信した分割数ノード一覧情報で更新すればよい。
分割データ生成部12は、自ノードに関連する情報を表す対象データから、分割数の分割データを生成する。分割データの生成処理には、分割数の分割データのうち、分割数より少ない復元数の分割データを用いて元の対象データを復元可能な技術を採用する。例えば、そのような分割データ生成処理としては、消失訂正符号(erasure code)を付加して分割する技術が知られている。また、他のそのような分割データ生成処理としては、誤り訂正符号を用いてデータを分散配置するRAID(Redundant Arrays of Independent Disks)技術等が知られている。RAIDを採用する場合、分割数より2つ少ない復元数で復元可能なレベル6を採用することが望ましいが、他のレベルを採用することも可能である。
分割データ送信部13は、ノード状態管理部11に問い合わせることにより、分割数ノード一覧情報に示される分割数のノード10を格納先として決定する。そして、分割データ送信部13は、分割データ生成部12によって生成された分割数の分割データのおのおのを、分割数の格納先のノード10のおのおのに対して送信する。このとき、分割データ送信部13は、それぞれの格納先のノード10に対して、分割データに付随させて生成元ノード情報および格納先ノード一覧情報を送信してもよい。
生成元ノード情報とは、分割データの生成元のノード10を表す情報である。つまり、ここで送信する生成元ノード情報は、自ノードを表す情報である。また、格納先ノード一覧情報とは、これらの分割データの格納先となるノード10の一覧を表す情報である。つまり、ここで送信する格納先ノード一覧情報は、分割数ノード一覧情報に基づき決定した格納先のノード10の一覧を表す情報である。
また、分割データ送信部13は、この格納先ノード一覧情報と同一の情報を、送信履歴情報として保持する。つまり、送信履歴情報は、分割数の分割データの送信先(すなわち、格納先)を表している。
また、分割データ送信部13は、他のノード10における後述の格納先ノード検索部15から、送信履歴情報の取得要求を受信する。そして、分割データ送信部13は、送信履歴情報を、要求元のノード10に返信する。
分割データ格納部14は、他のノード10から受信した分割データを、格納履歴情報と共に格納する。格納履歴情報は、分割データの生成元ノード情報および格納先ノード一覧情報を含む。これらの情報は、前述のように、分割データの送信元(すなわち、生成元)から分割データと共に送信されたものである。つまり、格納履歴情報に含まれる格納先ノード一覧情報は、受信した分割データを含む分割数の分割データの格納先のノード10の一覧を表している。
また、分割データ格納部14は、他のノード10における後述の格納先ノード検索部15から、特定のノード10に関連する対象データの分割データを格納しているか否かの問い合わせを受信する。問い合わせ対象である特定のノード10に関連する対象データの分割データを格納しているか否かは、自ノードに格納している格納履歴情報に含まれる生成元ノード情報を参照することにより判断できる。そして、分割データ格納部14は、該当する分割データを格納している場合、その分割データと共に格納している格納履歴情報を、問い合わせ元のノード10に返信する。
また、分割データ格納部14は、他のノード10における後述のデータ読み出し部17から、特定のノード10に関連する対象データの分割データの取得要求を受信する。そして、分割データ格納部14は、該当する分割データを、要求元のノード10に返信する。
格納先ノード検索部15は、対象データの読み出し要求を入力として取得する。ここで、対象データの読み出し要求は、特定のノード10を指定する情報として入力される。つまり、読み出し要求は、指定されたノード10に関連する対象データの各分割データを収集して元の対象データを読み出す要求である。以降、読み出し要求において指定されるノード10を、「読み出し対象のノード10」とも記載する。
格納先ノード検索部15は、読み出し要求が入力されると、送信履歴情報、分割数ノード一覧情報、または、格納履歴情報を参照することにより、読み出し対象のノード10に関連する対象データの各分割データの格納先となっているノード10を検索する。そして、格納先ノード検索部15は、復元数以上の該当する格納先のノード10を特定する。ここで、参照する送信履歴情報としては、読み出し対象のノード10に保持される送信履歴情報が適用される。また、参照する分割数ノード一覧情報としては、自ノードのノード状態管理部11に保持される分割数ノード一覧情報が適用される。また、参照する格納履歴情報としては、先に検索されたノード10に、該分割データと共に保持される格納履歴情報が適用される。
具体的には、格納先ノード検索部15は、読み出し対象のノード10から送信履歴情報を取得することを試みる。読み出し対象のノード10から送信履歴情報を取得できる場合、格納先ノード検索部15は、その送信履歴情報に示される格納先ノード一覧を、読み出し対象のノード10に関連する対象データの各分割データの格納先のノード10を表す情報として特定する。
また、読み出し対象のノード10から送信履歴情報を取得できないケースも考えられる。例えば、読み出し対象のノード10がその時点でアクセス不可能となっている場合や、読み出し対象のノード10において障害やその他の理由により送信履歴情報が失われている場合等である。この場合、格納先ノード検索部15は、分割数ノード一覧情報に示される各ノード10に問い合わせることにより、読み出し対象のノード10に関連する対象データの各分割データを格納しているノード10を検索する。そして、問い合わせ先のノード10が、該当する分割データを保持している場合、格納先ノード検索部15は、検索したノード10から、問い合わせの返信として、該当する分割データと共に保持されている格納履歴情報を取得する。
格納先ノード検索部15は、上述の構成により、読み出し対象のノード10に関連する対象データの各分割データの所在(格納先)を全てまたは一部特定することになる。もし、復元数以上の分割データの所在が特定されていない場合、格納先ノード検索部15は、既に検索したノード10から取得された格納履歴情報を参照する。そして、格納先ノード検索部15は、その格納履歴情報に含まれる格納先ノード一覧に示される各ノード10に問い合わせることにより、読み出し対象のノード10に関連する対象データの分割データを格納しているノード10をさらに検索する。このようにして、格納先ノード検索部15は、復元数以上の分割データの所在を特定する。
なお、格納先ノード検索部15は、分割数の分割データの所在を全て特定することが望ましい。しかしながら、格納先のノード10の中には、アクセス不可能となっているノード10がある可能性もある。したがって、格納先ノード検索部15は、分割数の分割データのうち復元数以上のアクセス可能な全ての分割データの所在を特定するようにすればよい。
読み出しノード決定部16は、格納先ノード検索部15によって特定された格納先のノード10のうち、復元数のノード10を決定する。例えば、読み出しノード決定部16は、各ノード10の状態に基づいて、復元数のノード10を決定してもよい。なお、各ノード10の状態を表す情報は、ノード状態管理部11に問い合わせることにより取得可能である。
データ読み出し部17は、読み出しノード決定部16によって決定された復元数のノード10から、読み出し対象のノード10に関連する対象データの分割データを取得する。そして、データ読み出し部17は、取得した復元数の分割データを用いて対象データを復元する。
以上のように構成された情報処理システム1の動作について、図面を参照して説明する。
まず、情報処理システム1の対象データ格納動作を図4に示す。なお、図4において、左図は、書き込みを行うノード10の動作を表し、右図は、格納先となった各ノード10の動作を表す。また、ノード状態管理部11の分割数ノード一覧情報は、適宜更新されているものとする。また、書き込みを行うノード10は、任意のタイミングで、下記の動作を開始するものとする。任意のタイミングとは、定められたスケジュールにしたがったタイミング、対象データが所定条件を満たしたと判定したタイミング、または、外部からの入力に基づくタイミング等であってもよい。
まず、分割データ生成部12は、対象データから、分割数の分割データを生成する(ステップA1)。前述のように、ここでは、分割数より少ない復元数の分割データを用いて元の対象データを復元可能な分割データ生成技術が用いられる。
次に、分割データ送信部13は、ノード状態管理部11から分割数ノード一覧情報を取得し、取得した分割数ノード一覧情報の示す分割数のノード10を、格納先として決定する(ステップA2)。
次に、分割データ送信部13は、ステップA1で生成された分割数の分割データを、ステップA2で決定された分割数の格納先のノード10に対して、それぞれ送信する(ステップA3)。このとき、前述のように、分割データ送信部13は、生成元ノード情報および格納先ノード一覧情報を、分割データと共に格納先のノード10に対してそれぞれ送信する。
次に、分割データ送信部13は、ステップA3で分割データを送信した格納先ノード一覧を、送信履歴情報として保存する(ステップA4)。
次に、分割データを受信したノード10では、分割データ格納部14は、受信した分割データを格納履歴情報と共に格納する(ステップA5)。ここで、格納履歴情報は、分割データと共に受信した生成元ノード情報および格納先ノード一覧情報を含む。
以上で、情報処理システム1は、対象データ格納動作を終了する。
次に、情報処理システム1の対象データ読み出し動作を図5に示す。なお、図5において、中央の図は、読み出しを行うノード10の動作を示し、左図は、読み出し対象のノード10の動作を示し、右図は、対象の分割データを格納している各ノード10の動作を示す。また、読み出しを行うノード10は、読み出し対象のノード10を指定する情報が入力されると、下記の動作を開始するものとする。
まず、読み出しを行うノード10の格納先ノード検索部15は、読み出し対象のノード10がアクセス可能であるか否かを判断する(ステップB1)。
ここで、読み出し対象のノード10がアクセス可能である場合について説明する。この場合、読み出しを行うノード10の格納先ノード検索部15は、読み出し対象のノード10に対して、送信履歴情報の送信を要求する(ステップB2)。
次に、読み出し対象のノード10の分割データ送信部13は、送信履歴情報を、読み出しを行うノード10に対して送信する(ステップB3)。この送信履歴情報は、読み出し対象のノード10に関連する対象データの分割データを送信した際の送信履歴情報である。ただし、読み出し対象のノード10は、障害やその他の理由により、送信履歴情報を失い保持していない可能性もある。
そこで、次に、読み出しを行うノード10の格納先ノード検索部15は、読み出し対象のノード10から送信履歴情報を取得できたか否かを判断する(ステップB4)。
ここで、送信履歴情報を取得できた場合について説明する。この場合、読み出しを行うノード10の格納先ノード検索部15は、この送信履歴情報に含まれる格納先ノード一覧の示すノード10を特定する(ステップB5)。
一方、ステップB1で、読み出し対象のノード10がアクセス可能でなかった場合、または、ステップB4で、送信履歴情報を取得できなかった場合について説明する。この場合、読み出しを行うノード10の格納先ノード検索部15は、分割数ノード一覧情報の示す各ノード10に問い合わせを行い、読み出し対象のノード10に関連する対象データの各分割データを格納しているノード10を検索する(ステップB6)。
次に、検索されたノード10の分割データ格納部14は、その分割データに対応する格納履歴情報を、問い合わせ元のノード10に返信する(ステップB7)。
次に、読み出しを行うノード10の格納先ノード検索部15は、格納履歴情報に含まれる格納先ノード一覧の示す各ノード10に問い合わせを行い、読み出し対象のノード10に関連する対象データの各分割データを格納するノード10を検索する(ステップB8)。
なお、ステップB6の時点で復元数以上の分割データの所在が特定されていれば、ステップB8は省略可能である。
次に、検索されたノード10の読み出しノード決定部16は、ステップB5、または、B6およびB8で特定された格納先のノード10から、復元数のノード10を決定する(ステップB9)。
前述のように、読み出しノード決定部16は、ノード状態管理部11に問い合わせることにより、各ノード10の状態に基づいて、復元数のノード10を決定してもよい。
次に、読み出しを行うノード10のデータ読み出し部17は、ステップB9で決定された復元数のノード10に対して、読み出し対象のノード10に関連する対象データの分割データをそれぞれ要求する(ステップB10)。
次に、要求を受けたノード10の分割データ格納部14は、該当する分割データを要求元のノード10に送信する(ステップB11)。
次に、読み出しを行うノード10のデータ読み出し部17は、ステップB11で得られた復元数の分割データを用いて、元の対象データを復元する(ステップB12)。
以上で、情報処理システム1は、対象データ読み出し動作を終了する。
次に、本発明の第1の実施の形態の効果について述べる。
本発明の第1の実施の形態としての情報処理システムは、複数のノードからなる情報処理システムにおいて対象データを分散管理する際に、耐障害性を向上させながら、対象データの格納・読み出しによる性能低下を抑えることができる。
その理由について説明する。本実施の形態では、各ノードのノード状態管理部が、各ノードの状態に応じて任意のデータの分散格納先となり得る分割数のノードを表す分割数ノード一覧情報を、他のノードと同期して更新しながら保持している。
そして、対象データを格納する際には、対象データを保持するノードの分割データ生成部が、その対象データから分割数の分割データを生成する。このとき、分割数の分割データの生成処理には、分割数より少ない復元数の分割データを用いて元の対象データを復元可能な処理が適用される。そして、そのノードの分割データ送信部が、分割数ノード一覧情報の示す格納先ノードに分割データをそれぞれ送信し送信履歴情報を保持しておく。送信履歴情報には、格納先ノード一覧が含まれる。そして、分割データを受信したノードの分割データ格納部が、受信した分割データを格納履歴情報と共に格納する。格納履歴情報には、その分割データの元となる対象データの各分割データの格納先ノード一覧が含まれる。
また、対象データを読み出す際には、いずれかのノードが、読み出し要求として読み出し対象のノードを指定する情報を取得する。そして、読み出し要求を取得したノードの格納先ノード検索部が、読み出し対象のノードに保持される送信履歴情報、分割数ノード一覧情報、または、既に検索したノードに保持される格納履歴情報を参照する。そして、このノードの格納先ノード検索部が、送信履歴情報、分割数ノード一覧情報、または、格納履歴情報に基づいて、読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索する。これにより、このノードの格納先ノード検索部が、復元数以上までの該当する分割データの格納先ノードを特定する。そして、このノードの読み出しノード決定部が、特定された格納先ノードから復元数のノードを決定し、データ読み出し部が、決定された各格納先ノードから分割データを取得し対象データを復元するからである。
このように、本実施の形態は、対象データの分散格納先に分割データと共に格納履歴情報を格納するので、格納済みの対象データに関する情報を一元管理するノードを必要としない。そのため、本実施の形態は、情報処理システムに障害が発生した時でも、対象データを読み出せる可能性を大幅に高めている。例えば、本実施の形態は、元の対象データに関連するノードがアクセス不可能な場合でも、分割数ノード一覧情報を用いて、その対象データの各分割データを保持するノードを検索することができる。
さらに、本実施の形態は、既に検索したノードに該分割データと共に格納される格納履歴情報を用いて、その対象データの各分割データを保持するノードを検索することができる。これにより本実施の形態は、管理ノードを設けなくても、対象データの各分割データを保持するノードを、復元数以上まで特定することができる。
また、本実施の形態は、その対象データの各分割データの格納先ノードのうち一部がアクセス不可能となっていても、復元数の格納先ノードにアクセスできれば、対象データを復元可能である。
ここで、例えば、本実施の形態における対象データとしてログを適用する用途では、情報処理システムに障害が発生した時にログの読み出しが必要となることが多い。本実施の形態は、前述のように一元管理のノードを置かないことにより、データの読み出しの耐障害性を高めており、障害発生時に読み出しの必要性が高いという特性を持つデータの分散格納に適している。
また、本実施の形態は、対象データの分散格納の際に、格納した対象データに関する情報を一元管理せず、また、排他制御等の整合性維持のための制御を行わないので、格納処理を効率的に行うことができる。これにより、本実施の形態は、データ格納を効率的に行うことができ、データ格納による情報処理システムの他の機能の性能低下を抑えることができる。例えば、本実施の形態における対象データとしてログを適用する用途では、対象データは新規に書き込まれていき、格納済みの対象データが更新されることは基本的にない。この場合、整合性維持のための制御の多くは、省略しても問題ない。このように、本実施の形態は、基本的に更新されないという特性を持つデータの分散格納に適している。
また、本実施の形態は、対象データの分散格納を上述のように効率的に行うことにより、代償として対象データの読み出し処理のコストを若干増加させている。しかしながら、例えば、本実施の形態における対象データとしてログを適用する用途では、対象データの書き込み処理は頻繁に発生するが、読み出し処理の頻度は低いという特性がある。この場合、全体として効率は改善される。したがって、本実施の形態は、書き込み処理の頻度が高く読み出し処理の頻度が低いという特性を持つデータの分散格納に適している。
(第2の実施の形態)
次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。本実施の形態では、本発明における対象データとして、情報処理システムの動作状況や統計情報等が記録されるログを適用する例について説明する。また、本実施の形態では、本発明における分割データを、断片ログと呼ぶことにする。なお、本実施の形態の説明において参照する各図面において、本発明の第1の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
まず、本発明の第2の実施の形態としての情報処理システム2の構成を図6に示す。図6において、情報処理システム2は、複数のノード20からなる。本実施の形態では、複数のノード20のうち1つが、マスタノードとして機能する。ただし、任意のノード20が、マスタノードとして機能することができる。情報処理システム2は、自システムの状況に応じて、マスタノードとなるノード20を切り替えるように構成されていてもよい。
なお、複数のノード20は、本発明の第1の実施の形態と同様に、内部ネットワーク105を介して互いに通信可能であり、かつ、内部ネットワーク106を介して外部と通信可能になっている。また、情報処理システム2は、本発明の第1の実施の形態と同様に、外部のクライアント9から指示される各種の処理を実行する。また、図6には、3つのノード20を示したが、本発明の情報処理システムが備えるノードの数を限定するものではない。また、図6には、1つのクライアント9を示したが、本発明の情報処理システムを利用する装置の数を限定するものではない。
次に、ノード20の機能ブロック構成を図7に示す。図7において、ノード20は、ノード状態管理部21と、分割データ生成部22と、分割データ送信部23と、分割データ格納部24と、格納先ノード検索部25と、読み出しノード決定部26と、データ読み出し部27とを備える。さらに、ノード20は、ログバッファ28を備える。ここで、ノード20およびその各機能ブロックは、図3を参照して説明した本発明の第1の実施の形態と同一のハードウェア要素によって構成可能である。なお、ノード20およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
ノード状態管理部21は、ノード状態収集部211と、ノード選択部212とを有する。
ノード状態収集部211は、自ノードの状態として負荷を表す情報(ノード状態情報)を、所定のタイミング毎に収集して更新する。また、ノード状態収集部211は、自ノードがマスタノードである場合、さらに、所定のタイミング毎に、他の各ノード20から該ノード20で収集されたノード状態情報を収集する。
ノード選択部212は、自ノードがマスタノードである場合、自ノードおよび他の各ノード20のノード状態情報に基づいて、ログの分散格納先となり得る分割数のノード20を選択する。例えば、ノード選択部212は、ノード状態情報の示す負荷が少ないものから順に分割数のノード20を選択してもよい。そして、ノード選択部212は、選択した分割数のノード20を表すよう、分割数ノード一覧情報を更新する。そして、ノード選択部212は、更新した分割数ノード一覧情報を、他の各ノード20に送信する。
また、ノード選択部212は、自ノードがマスタノードである場合、自ノードおよび他の各ノード20のノード状態情報に基づいて、問い合わせ対象の複数のノード20の中から、ログの読み出し元となる復元数のノード20を選択する。なお、問い合わせ対象の複数のノード20の中から復元数のノード20を選択する処理は、各ノード20の後述する読み出し決定部26によって要求される。例えば、ノード選択部212は、ノード状態情報の示す負荷が少ないものから順に復元数のノード20を選択してもよい。そして、ノード選択部212は、選択した復元数のノード20を表す情報を、問い合わせ元に返信すればよい。
例えば、ノード選択部212は、自ノードがマスタノードである場合、次のようにして、情報処理システム2の特性に応じて、負荷のより低いノード20を選択する。例えば、情報処理システム2において、ノード20間での連携が必要な処理とノード20単体で実行する処理とが混在する場合を考える。このとき、ノード20間で連携が必要な処理のノード20内での残処理時間をTiとする(iはノード識別子)。また、ノード20単体で実行する処理の残処理時間をRiとする。この場合、ノード選択部212は、TiおよびRiがそれぞれ最大であるノード20を除いた残りのノード20から、αTi+βRi(α、βは係数)が小さいものから順に、分割数のノード20を選択してもよい。
また、ノード選択部212は、自ノードがマスタノードでない場合、マスタノードから分割数ノード一覧情報を受信する。そして、ノード選択部212は、受信した分割数ノード一覧更新情報で、自ノードの分割数ノード一覧情報を更新する。
ログバッファ28は、情報処理システム2の図示しない機能ブロックにより、その動作状況や統計情報等がログとして蓄積される領域である。また、ログは、時間を表す情報と共に蓄積される。
分割データ生成部22は、ログバッファ28に蓄積されたログがあらかじめ定められた量を超えると、ログバッファ28からログを取得する。取得したログは、前回ログを取得した時刻以降、今回取得時刻までの時間帯の情報を表すことになる。そして、分割データ生成部22は、取得したログから、分割数の断片ログを生成する。断片ログの生成処理には、本発明の第1の実施の形態と同様に、分割数の断片ログのうち、分割数より少ない復元数の断片ログを用いて元のログを復元可能な技術を採用する。
分割データ送信部23は、本発明の第1の実施の形態における分割データ送信部13と略同様に構成される。ただし、本実施の形態では、それぞれの格納先のノード20に対して断片ログに付随させて送信する情報の詳細と、送信履歴情報の詳細とが異なる。詳細には、分割データ送信部23は、それぞれの格納先のノード20に対して、断片ログに付随させて、生成元ノード情報および格納先ノード一覧情報に加えて、分割前のログの時間帯を表す情報を送信する。また、分割データ送信部23は、断片ログを送信した格納先ノード一覧を表す情報に加えて、分割前のログの時間帯を表す情報を含めて、送信履歴情報を保持する。
また、分割データ送信部23は、他のノード20における後述の格納先ノード検索部25から、指定された時間帯の送信履歴情報の取得要求を受信する。そして、分割データ送信部23は、指定された時間帯に対応する送信履歴情報を、要求元のノード20に返信する。ここで、指定された時間に対応する複数の送信履歴情報があるケースも考えられる。この場合、分割データ送信部23は、各送信履歴情報を、要求元のノード20に返信すればよい。複数の送信履歴情報があるケースの詳細については後述する。
分割データ格納部24は、本発明の第1の実施の形態における分割データ格納部14と略同様に構成される。ただし、本実施の形態では、断片ログと共に格納する格納履歴情報の詳細が異なる。分割データ格納部24は、格納履歴情報として、断片ログの生成元ノード情報、および、この断片ログに対応する格納先ノード一覧情報に加えて、分割前のログの時間帯を表す情報を、断片ログと共に格納する。これらの情報は、前述のように、断片ログの送信元から断片ログと共に送信されたものである。
また、分割データ格納部24は、他のノード20における後述の格納先ノード検索部25から、特定のノード20において特定の時間帯に対応する1つ以上の時間帯の各ログの断片ログを格納しているか否かの問い合わせを受信する。特定のノード20において特定の時間帯に対応する1つ以上の時間帯の各ログの断片ログを格納しているか否かは、自ノードに格納している格納履歴情報に含まれる生成元ノード情報および時間帯を参照することにより判断できる。そして、分割データ格納部24は、該当する断片ログを格納している場合、その断片ログと共に格納している格納履歴情報を、問い合わせ元のノード20に返信する。
格納先ノード検索部25は、ログの読み出し要求を入力として取得する。ここで、ログの読み出し要求は、ノード20および時間帯を指定する情報として入力される。つまり、読み出し要求は、指定されたノード20で記録された指定された時間帯の情報を含むログを読み出す要求である。以降、読み出し要求において指定されるノード20を、読み出し対象のノード20とも記載する。また、読み出し要求において指定される時間帯を、読み出し対象の時間帯とも記載する。
ここで、読み出し対象のノード20において、読み出し対象の時間帯の情報を含むログは、1つのログとして分散格納されているとは限らない。読み出し対象の時間帯の情報を含むログは、複数のログとしてそれぞれ分散格納されている可能性がある。例えば、読み出し対象の時間帯が「時刻t1〜t3」であったとする。また、読み出し対象のノード20において、ログバッファ28のログが所定量を超えて分散格納が行われた時刻が、t0、t2、t4であったとする。なお、t0<t1<t2<t3<t4である。この場合、ノード20には、時間帯t0〜t2のログを分散格納した際の送信履歴情報と、時間帯t2〜t4のログを分散格納した際の送信履歴情報とが保持されている。これらの送信履歴情報が、読み出し対象の時間帯t1〜t3に対応する各時間帯の送信履歴情報となる。
また、この場合、このノード20における時間帯t0〜t2のログと、時間帯t2〜t4のログとでは、それぞれの断片ログの格納先となったノード20の組合せが、同一であるとは限らない。これは、複数の時間帯のそれぞれのログが格納される時点において、格納先のノード20を決定するために用いられた分割数ノード一覧情報は、更新により異なる可能性があるためである。
このようなケースを考慮して、格納先ノード検索部25は、読み出し対象の時間帯に対応する1つ以上の時間帯のそれぞれのログについて、その断片ログの格納先となっているノード20を復元数以上まで検索する必要がある。この検索処理を、格納先ノード検索部25は、初期検索部251と、格納先推定部252と、格納先網羅部253とを用いて行う。
なお、格納先ノード検索部25は、初期検索部251を用いて、各時間帯のログについて復元数以上のノード20を特定できれば、格納先推定部252および格納先網羅部253を用いない。また、格納先ノード検索部25は、初期検索部251を用いても復元数以上のノード20を特定できない時間帯がある場合、格納先推定部252を用いて検索を行う。そして、格納先ノード検索部25は、格納先推定部252を用いて各時間帯のログについて復元数以上のノード20を特定できた場合、格納先網羅部253を用いない。また、格納先ノード検索部25は、初期検索部251および格納先推定部252を用いても復元数以上のノード20を特定できない時間帯がある場合、格納先網羅部253を用いて検索を行う。以下、初期検索部251、格納先推定部252、格納先網羅部253について、詳細を説明する。
初期検索部251は、読み出し対象のノード20にアクセス可能かつ読み出し対象の時間帯の送信履歴情報が保持されている場合、そのノード20から、読み出し対象の時間帯の送信履歴情報を取得する。なお、上述したように、読み出し対象のノード20において、読み出し対象の時間帯に対応する複数の時間帯に関する送信履歴情報が保持されている場合がある。この場合、初期検索部251は、各時間帯について送信履歴情報を取得する。そして、初期検索部251は、取得したそれぞれの送信履歴情報に含まれる格納先ノード一覧の示すノード20を、該当する断片ログの格納先として特定する。
また、初期検索部251は、読み出し対象のノード20にアクセス不可能または読み出し対象の時間帯の送信履歴情報が保持されていない場合、この時点での分割数ノード一覧情報が示す各ノード20に、該当する断片ログを格納しているか否かを順次問い合わせる。そして、初期検索部251は、該当する断片ログを格納しているノード20を特定する。なお、問い合わせに伴い、初期検索部251は、そのノード20において該当する断片ログと共に保持されている格納履歴情報を取得する。このとき、上述したように、該当するノード20において、読み出し対象の時間帯に対応する複数の時間帯の断片ログが格納されている場合がある。その場合、初期検索部251は、該当するノード20から、該当するそれぞれの断片ログと共に保持されている格納履歴情報を取得すればよい。
ここで、初期検索部251により、読み出し対象の時間帯に対応する1つ以上の全ての時間帯について、該当する断片ログの所在がそれぞれ復元数以上まで特定される可能性がある。この場合、格納先ノード検索部25は、格納先推定部252および格納先網羅部253を用いない。ただし、初期検索部251だけでは、読み出し対象の時間帯に対応する1つ以上の時間帯のうち、該当する断片ログの所在が復元数以上まで特定されない時間帯がある可能性も考えられる。この場合、格納先ノード検索部25は、格納先推定部252を用いて、該当するノード20の検索を続ける。
格納先推定部252は、初期検索部251により検索されたノード20から取得した格納履歴情報を参照する。そして、格納先推定部252は、検索されたノード20から取得した格納履歴情報に含まれる格納先ノード一覧の示す各ノード20のうち、まだ問い合わせを行っていない各ノード20に対して、該当する断片ログを格納しているか否かの問い合わせを順次行う。そして、格納先推定部252は、検索されたノード20から取得した格納履歴情報に基づいて、該当する断片ログを格納しているノード20を検索することを繰り返す。このようにして、格納先推定部252は、初期検索部251だけでは復元数以上の断片ログの所在が特定できていなかった時間帯について、復元数以上となるまで残りの断片ログの所在を特定する。
ここで、格納先推定部252により、読み出し対象の時間帯に対応する1つ以上の全ての時間帯について、該当する断片ログの所在がそれぞれ復元数以上まで特定される可能性がある。この場合、格納先ノード検索部25は、格納先網羅部253を用いない。ただし、初期検索部251および格納先推定部252だけでは、読み出し対象の時間帯に対応する1つ以上の時間帯のうち、該当する断片ログの所在が復元数以上まで特定されない時間帯がある可能性も考えられる。具体的には、既に検索された各ノード20から得られた格納履歴情報の示すノード20のうち、まだ問い合わせていないノード20が無いにも関わらず、復元数以上の断片ログの所在が特定できていない時間帯があるといったケースが考えられる。この場合、格納先ノード検索部25は、格納先網羅部253を用いて、該当するノード20の検索を続ける。
格納先網羅部253は、情報処理システム2を構成する各ノード20のうち、まだ問い合わせていない各ノード20に対して、該当する断片ログを格納しているか否かを、順次問い合わせる。このようにして、格納先網羅部253は、初期検索部251および格納先推定部252だけでは復元数以上の断片ログの所在が特定できていなかった時間帯について、復元数以上となるまで残りの断片ログの所在を特定する。
このようにして、格納先ノード検索部25は、初期検索部251、格納先推定部252、格納先網羅部253を用いて、読み出し対象の時間帯に対応する各時間帯について、復元数以上の分割データの所在を特定する。ここで、格納先ノード検索部25は、各時間帯について、分割数の分割データの所在を全て特定できることが望ましい。しかしながら、格納先のノード20の中には、アクセス不可能となっているノード20がある可能性もある。したがって、格納先ノード検索部25は、各時間帯について、分割数の分割データのうち復元数以上のアクセス可能な全ての分割データの所在を特定するようにしてもよい。
読み出しノード決定部26は、読み出し対象の時間帯に対応する各時間帯のログについて、格納先ノード検索部25によって特定された格納先のノード20のうち、復元数のノード20を決定する。具体的には、読み出しノード決定部26は、マスタノードとなっているノード20のノード状態管理部21に問い合わせることにより、各ノード20の状態に基づいて、復元数以上の格納先のノード20を決定する。
データ読み出し部27は、読み出し対象の時間帯に対応する各時間帯のログについて、読み出しノード決定部26によって決定された復元数のノード20から、該当する断片ログを取得する。取得する断片ログは、読み出し対象のノード20の指定された時間帯に対応する1つ以上の時間帯のログの断片ログである。そして、データ読み出し部27は、読み出し対象の時間帯に対応する1つ以上の各時間帯のログを、それぞれ復元数の断片ログを用いて復元する。
以上のように構成された情報処理システム2の動作について、図面を参照して説明する。
まず、情報処理システム2のデータ格納動作を図8に示す。なお、図8において、左図は、書き込みを行うノード20の動作を表し、右図は、格納先となった各ノード20の動作を表す。また、ノード状態管理部21の分割数ノード一覧情報は、マスタノードとなっているノード20により適宜更新されているものとする。また、書き込みを行うノード20は、ログバッファ28のログが所定量を超えたタイミングで、下記の動作を開始するものとする。
まず、分割データ生成部22は、ログバッファ28から、ログを取得する。また、分割データ生成部22は、取得したログの時間帯を求める(ステップA100)。なお、取得したログの時間帯は、前回取得した時刻から今回取得した時刻までである。あるいは、分割データ生成部22は、取得したログの内容を参照することにより、その時間帯を求めてもよい。
次に、分割データ生成部22は、取得したログから、分割数の断片ログを生成する(ステップA101)。ここでは、本発明の第1の実施の形態と同様に、分割数より少ない復元数の断片ログを用いて元のログを復元可能な分割データ生成技術が用いられる。
次に、分割データ送信部23は、ノード状態管理部21から分割数ノード一覧情報を取得し、取得した分割数ノード一覧情報の示す分割数のノード20を、格納先として決定する(ステップA102)。
次に、分割データ送信部23は、ステップA101で生成された分割数の断片ログを、ステップA102で決定された分割数の格納先のノード20に対して、それぞれ送信する(ステップA103)。このとき、前述のように、分割データ送信部23は、元のログの時間帯、生成元ノード情報および格納先ノード一覧情報を、断片ログと共に格納先のノード20に対してそれぞれ送信する。
次に、分割データ送信部23は、ステップA103で送信した断片ログの格納先ノード一覧および元のログの時間帯を表す情報を、送信履歴情報として保存する(ステップA104)。
次に、断片ログを受信したノード20では、分割データ格納部24は、受信した断片ログを格納履歴情報と共に格納する(ステップA105)。ここで、格納履歴情報は、断片ログと共に受信した時間帯を表す情報、生成元ノード情報および格納先ノード一覧情報を含む。
以上で、情報処理システム2は、データ格納動作を終了する。
次に、情報処理システム2のデータ読み出し動作を図9に示す。なお、図9において、中央の図は、読み出しを行うノード20の動作を示し、左図は、読み出し対象のノード20の動作を示し、右図は、対象の断片ログを格納している各ノード20の動作を示す。また、読み出しを行うノード20は、読み出し対象のノード20および読み出し対象の時間帯を指定する情報が入力されると、下記の動作を開始するものとする。
まず、読み出しを行うノード20の格納先ノード検索部25は、読み出し対象のノード20における読み出し対象の時間帯に対応する各時間帯のログについて、断片ログの格納先のノード20を復元数以上まで特定する(ステップB101)。このステップの詳細については後述する。
また、ステップB101の格納先検索動作に応じて、読み出し対象のノード20の分割データ送信部23は、読み出し対象の時間帯に対応する各時間帯の送信履歴情報を、読み出しを行うノード20に送信する(ステップB102)。
また、ステップB101の格納先検索動作に応じて、格納先のノード20の分割データ格納部24は、読み出し対象の時間帯に対応する各時間帯のログの断片ログと共に格納している格納履歴情報を、読み出しを行うノード20に送信する(ステップB103)。
次に、読み出しを行うノード20の読み出しノード決定部26は、読み出し対象の時間帯に対応する時間帯のそれぞれについて、特定された復元数以上の格納先のノード20から、復元数のノード20を決定する(ステップB104)。
前述のように、読み出しノード決定部26は、マスタノードのノード状態管理部21に問い合わせることにより、各ノード20の状態に基づいて、復元数のノード20を決定すればよい。
次に、読み出しを行うノード20のデータ読み出し部27は、各時間帯についてステップB104で決定された復元数のノード20に対して、それぞれ該当する断片ログを要求する(ステップB105)。該当する断片ログは、読み出し対象のノード20の読み出し対象の時間帯に対応する各時間帯のログから生成された断片ログである。
次に、要求を受けたノード20の分割データ格納部24は、該当する断片ログを要求元のノード20に返信する(ステップB106)。
次に、読み出しを行うノード20のデータ読み出し部27は、各時間帯について、復元数の断片ログを用いて元のログを復元する(ステップB107)。
以上で、情報処理システム2は、データ読み出し動作を終了する。
次に、ステップB101における格納先検索動作の詳細を、図10に示す。
図10では、まず、読み出しを行うノード20の初期検索部251は、読み出し対象のノード20がアクセス可能であるか否かを判断する(ステップB201)。
ここで、読み出し対象のノード20がアクセス可能である場合について説明する。この場合、読み出しを行うノード20の初期検索部251は、読み出し対象のノード20に対して、読み出し対象の時間帯に対応する1つ以上の各時間帯の送信履歴情報の送信を要求する(ステップB202)。
次に、読み出し対象のノード20の分割データ送信部23は、図9のステップB102で説明したように、読み出し対象の時間帯に対応する1つ以上の各時間帯の送信履歴情報を、読み出しを行うノード20に対して送信する。ここでは、1つまたは複数の時間帯についてそれぞれの送信履歴情報が送信される。ただし、読み出し対象のノード20が、障害やその他の理由により、読み出し対象の時間帯に対応する1つ以上の時間帯の一部または全ての送信履歴情報を失い保持していない可能性もある。
そこで、次に、読み出しを行うノード20の初期検索部251は、読み出し対象のノード20から、該当する各時間帯の送信履歴情報を取得できたか否かを判断する(ステップB203)。
ここで、該当する各時間帯の送信履歴情報を取得できた場合について説明する。この場合、読み出しを行うノード20の初期検索部251は、取得した各送信履歴情報に基づいて、各送信履歴情報に含まれる格納先ノード一覧の示すノード20を特定する(ステップB204)。
そして、読み出しを行うノード20の格納先ノード検索部25は、各時間帯について特定した格納先のノード20を表す情報を返却し(ステップB211)、格納先検索動作を終了する。
一方、ステップB201で、読み出し対象のノード20がアクセス可能でなかった場合、または、ステップB203で、少なくとも一部の時間帯の送信履歴情報を取得できなかった場合について説明する。この場合、読み出しを行うノード20の初期検索部251は、分割数ノード一覧情報の示す各ノード20を問い合わせ対象とする。そして、初期検索部251は、問い合わせ対象のノード20に対して、読み出し対象のノード20における読み出し対象の時間帯に対応する各時間帯のログについて、その断片ログを格納しているか否かを問い合わせる(ステップB205)。
次に、問い合わせを受けたノード20の分割データ格納部24は、図9のステップB103で説明したように、該当する断片ログを格納している場合、対応する格納履歴情報を、問い合わせ元のノード20に返信する。ここでは、1つまたは複数の時間帯のログの断片ログについてそれぞれの格納履歴情報が送信される。
なお、ステップB205において、初期検索部251は、送信履歴情報を取得できた時間帯については、その送信履歴情報に含まれる格納先ノード一覧の示すノード20を特定すればよい。
次に、読み出しを行うノード20の格納先ノード検索部25は、読み出し対象の時間帯に対応する各時間帯のログについて、格納先となる復元数以上のノード20を特定できたか否かを判断する(ステップB206)。
ここで、各時間帯について、格納先となる復元数以上のノード20を特定できていると判断した場合について説明する(ステップB206でYes)。この場合、読み出しを行うノード20の格納先ノード検索部25は、各時間帯について特定した格納先のノード20を表す情報を返却し(ステップB211)、格納先検索動作を終了する。
一方、格納先となる復元数以上のノード20を特定できていない時間帯があると判断した場合について説明する(ステップB206でNo)。
この場合、格納先推定部252は、既に検索されたノード20から得られた格納履歴情報に含まれる格納先ノード一覧の示す各ノード20のうち、まだ問い合わせを行っていない各ノード20を問い合わせ対象とする。そして、格納先推定部252は、問い合わせ対象のノード20に対して、読み出し対象のノード20における読み出し対象の時間帯に対応する各時間帯のログについて、その断片ログを格納しているか否かを問い合わせる(ステップB207)。
次に、問い合わせを受けたノード20の分割データ格納部24は、図9のステップB103で説明したように、該当する断片ログを格納している場合、対応する格納履歴情報を、問い合わせ元のノード20に返信する。ここでは、1つまたは複数の時間帯のログの断片ログについてそれぞれの格納履歴情報が送信される。
次に、読み出しを行うノード20の格納先ノード検索部25は、読み出し対象の時間帯に対応する各時間帯のログについて、格納先となる復元数以上のノード20を特定できたか否かを判断する(ステップB208)。
ここで、各時間帯について、格納先となる復元数以上のノード20を特定できていると判断した場合について説明する(ステップB208でYes)。この場合、読み出しを行うノード20の格納先ノード検索部25は、各時間帯について特定した格納先のノード20を表す情報を返却し(ステップB211)、格納先検索動作を終了する。
一方、格納先となる復元数以上のノード20を特定できていない時間帯があると判断した場合について説明する(ステップB208でNo)。
この場合、格納先ノード検索部25は、新たに検索されたノード20も含めて既に検索されたノード20から得られた格納履歴情報に含まれる格納先ノード一覧の示す各ノード20のうち、まだ問い合わせていないノード20があるかを判断する(ステップB209)。
ここで、まだ問い合わせていないノード20がある場合(ステップB209でYes)、格納先推定部252は、ステップB207からの動作を繰り返す。
一方、まだ問い合わせていないノード20がない場合(ステップB209でNo)、格納先網羅部253は、情報処理システム2を構成する各ノード20のうち、まだ問い合わせを行っていない各ノード20を問い合わせ対象とする。そして、格納先網羅部253は、問い合わせ対象のノード20に対して、読み出し対象のノード20における読み出し対象の時間帯に対応する各時間帯のログについて、その断片ログを格納しているか否かを問い合わせる(ステップB210)。
そして、格納先ノード検索部25は、各時間帯について特定した格納先のノード20を表す情報を返却し(ステップB211)、格納先検索動作を終了する。なお、格納先網羅部253によるステップB210の実行後も、格納先となる復元数以上のノード20を特定できていない時間帯がある場合も考えられる。この場合、格納先ノード検索部25は、その時間帯については、読み出し対象となるログが存在しない、もしくは、障害等により失われたと判断する。この場合、格納先ノード検索部25は、復元数以上の格納先ノードが特定できた時間帯について、特定したノード20を返却すればよい。なお、読み出し対象の時間帯に対応する全ての時間帯について復元数以上のノード20を特定できない場合、格納先ノード検索部25は、読み出し要求に対してエラーを返却する。
以上で、ステップB101における格納先検索動作の詳細な説明を終了する。
次に、本発明の第2の実施の形態の効果について述べる。
本発明の第2の実施の形態としての情報処理システムは、複数のノードからなる情報処理システムにおいてログを分散管理する際に、耐障害性を向上させ、ログの格納・読み出しによる性能低下を抑えることができる。
その理由について説明する。本実施の形態では、本発明の第1の実施の形態と同様の構成に加えて、次の構成を備える。すなわち、読み出し要求としてノードと時間帯の指定を受け付けたノードの格納先ノード検索部が、指定されたノードにおいて指定された時間帯に対応する各時間帯のログの断片ログについて、それぞれ復元数以上まで格納先ノードを特定するからである。具体的には、初期検索部が、読み出し対象のノードから各時間帯の送信履歴情報に基づいて各時間帯の格納先ノードを特定する。また、初期検索部が、読み出し対象のノードから各時間帯の送信履歴情報を取得できない場合、読み出し要求時点での分割数ノード一覧情報の示す各ノードに対して問い合わせることにより、該当する断片ログを格納しているノードを検索する。初期検索部を用いても復元数以上の格納先ノードを特定できない時間帯がある場合、格納先推定部が機能する。格納先推定部は、既に検索されたノードにおいて該当する断片ログと共に保持される格納履歴情報に含まれる格納先ノード一覧の示す各ノードに問い合わせることにより、該当する断片ログを格納しているノードを検索することを繰り返す。初期検索部と格納先推定部を用いても復元数以上の格納先ノードを特定できない時間帯がある場合、格納先網羅部が機能する。格納先網羅部は、情報処理システムを構成する各ノードのうち、まだ問い合わせていないノードに問い合わせることにより、該当する断片ログを格納しているノードを検索する。
このように、本実施の形態は、ログの読み出し要求時に、低コストで処理を行う初期検索部または格納先推定部により、できるだけ少ないコストで格納先ノードを復元数以上まで特定する。そして、本実施の形態は、初期検索部または格納先推定部を用いても復元数以上の格納先ノードが検索できない時間帯がある場合にのみ、コストのかかる網羅手段を機能させるようにしている。その結果、本実施の形態は、格納済みログに関する情報を一元管理するノードを置かないこと、および、整合性維持のための制御の多くを省略することにより、ログの分散格納を効率化しながらも、ログの読み出し時のコスト増加を抑えることができる。
また、ログは、頻繁に書き込まれるが滅多に読み出されないという特性がある。このため、本実施の形態は、上述のように格納時のコストを低減する代償として読み出し時のコストを若干増加させていても、全体としての効率を改善している。さらに、本実施の形態は、上述のように読み出し時のコスト増加を低減する構成のため、全体としての効率をさらに改善している。
また、ログ読み出しが必要な場面は、情報処理システムに異常がある場合が少なくない。本実施の形態は、このように、格納済みログに関する情報を一元管理するノードを置かないことにより、情報処理システムの障害時などにも、より確実にログを読み出すことを可能にする。
また、本実施の形態は、このように、ログを複数のノードに分散格納するので、ログを格納する専用の装置を必要としない。また、本実施の形態は、ログを生成するノードにログを保持させないので、ログを読み出したいノードへアクセスできない場合でも、ログ読み出しを可能とする。
なお、本実施の形態において、ノード状態管理部が、各ノードの状態として、負荷を表す情報を収集し、各ノードの負荷に基づいて分割数のノードを選択する例について説明した。ただし、ノードの状態は、負荷を表す情報に限らない。例えば、ノード状態管理部は、ノードの状態として、各ノードに格納される断片ログの容量を収集し、断片ログの容量に基づいて分割数のノードを選択してもよい。例えば、ノード状態管理部は、断片ログの容量が少ない順に、分割数のノードを選択してもよい。その他、ノード状態は、ノードの状態を表す状態であれば、他の情報であってもよい。
また、本実施の形態において、読み出しノード決定部は、マスタノードのノード状態管理部に問い合わせることにより、各ノードの状態に基づいて復元数の読み出しノードを決定する例について説明した。これに限らず、読み出しノード決定部は、読み出した断片ログから元のログを復元する際の計算コストがより少なくなるように、読み出しノードを決定してもよい。例えば、分割データ生成部がRADI6のようなデータ分割技術を採用している場合、読み出しノード決定部は、パリティではない断片ログを持っているノードを優先して読み出しノードとして選択してもよい。
また、本実施の形態において、格納先ノード検索部は、情報処理システム全体の負荷が所定の低負荷条件を満たす場合には、初期検索部および格納先推定部を用いずに、格納先網羅部を用いて格納先ノードを検索してもよい。この場合、マスタノードのノード状態管理部が、情報処理システム全体の負荷が所定の低負荷条件を満たすか否かを判断し、各ノードに通知してもよい。このように、情報処理システムが低負荷である場合には最初から格納先網羅部を用いて全ノードへの問い合わせを行う場合、本実施の形態は、より高速に該当する断片ログを格納しているノードを検索できる。
また、本実施の形態において、格納先ノード検索部が、読み出し対象の時間帯に対応する全ての時間帯についてそれぞれ復元数以上の格納先ノードを特定してから、読み出しノード決定部およびデータ読み出し部が動作するものとして説明した。さらなる改良として、本実施の形態において、格納先ノード検索部により、復元数以上の断片ログの所在を特定できた時間帯から順に、読み出しノード決定部およびデータ読み出し部が動作してもよい。これにより、本実施の形態は、読み出し対象の時間帯に対応する全ての時間帯についてそれぞれ復元数以上の断片ログの所在を特定してから読み出しを開始するよりも、高速に読み出しを行うことができる。また、ログを読み出す際には、読み出すログの示す時間帯の順序性は問われない。したがって、このように、読み出し要求に応じて、復元数以上の断片ログの所在が特定された時間帯から順次読み出しを開始することで、本実施の形態は、より効率的なログの読み出しを可能とする。
また、本実施の形態において、初期検索部は、読み出し対象のノードにアクセスできない場合、読み出し要求時点での分割数ノード一覧情報に基づいて、格納先ノードの検索を行っていた。これに限らず、初期検索部は、読み出し対象の該当するログが分散格納された時点での分割数ノード一覧情報に基づいて、格納先ノードの検索を行ってもよい。この場合、ノード状態管理部が、分割数ノード一覧情報の更新履歴を更新時刻と共に保持しておいてもよい。そして、初期検索部が、読み出し対象の時間帯に関連する更新時刻に対応する過去の分割数ノード一覧情報を参照すればよい。また、この場合、全てのノード状態管理部が、分割数ノード一覧情報の更新履歴を保持していなくてもよい。例えば、マスタノードのノード状態管理部が分割数ノード一覧情報の更新履歴を保持しておき、各ノードの格納先ノード検索部は、必要に応じて、マスタノードのノード状態管理部に、過去の分割数ノード一覧情報を問い合わせてもよい。ただし、この場合、マスタノードとなるノードの切り替えにより、問い合わせ先のマスタノードのノード状態管理部が、対象の時刻の分割数ノード一覧情報を保持していない場合も考えられる。その場合には、初期検索部は、その時点の分割数ノード一覧情報を用いて、格納先ノードの検索を行えばよい。
また、本実施の形態において、格納先推定部は、復元数以上の格納先ノードを特定できなかった時間帯がある場合に、さらに、ランダムに選択したノードに対して、順次問い合わせて検索を継続してもよい。この場合、問い合わせ先のノードは、情報処理システムを構成する他のノードのまだ問い合わせを行っていないノードからランダムに選択される。そして、これにより、各時間帯について復元数以上の格納先ノードを特定できた場合は、格納先ノード検索部は、格納先網羅部を用いなくてもよい。ただし、ランダムに選択したノードへの問い合わせを所定回数繰り返しても、復元数以上の格納先ノードを特定できなかった時間帯がある場合は、格納先ノード検索部は、格納先網羅部を用いて検索を継続すればよい。
また、本実施の形態は、情報処理システムを構成するノードがグループに分割されている場合にも、適用することができる。例えば、大規模なグリッドコンピューティングシステム等を、あらかじめグループ分割を行って適切な規模にしておくことが考えられる。この場合、各ノードの各機能ブロックは、自ノードが属するグループの各ノードを対象として機能すればよい。例えば、各グループにおいてマスタノードとして機能するノードのノード状態管理部は、グループ内の各ノードの状態を収集し、グループ内の各ノードの状態に基づいて、グループ内のノードから分割数のノードを選択すればよい。これにより、分割データ送信部は、自ノードのログの断片ログを、グループ内における分割数のノードの分割データ格納部に分散格納することになる。また、読み出し要求時には、格納先ノード検索部およびデータ読み出し部は、自ノードが属するグループ内のノードのみと通信を行うことにより、格納先ノードの検索およびログ読み出しを行うことができる。このように、本実施の形態は、ノード数が多い大規模な情報処理システムであっても、グループ分割して適切な規模で動作することにより、同様の効果を奏することができる。
また、本実施の形態において、分割データ格納部が、格納履歴情報を断片ログと共に格納する例について説明した。これに限らず、分割データ格納部は、格納履歴情報を断片ログのファイル名に含めてもよい。あるいは、分割データ格納部は、格納履歴情報を断片ログのファイルヘッダに格納してもよい。そして、この場合、分割データ送信部が、格納履歴情報をファイル名とする断片ログ、または、格納履歴情報をファイルヘッダに含む断片ログを、格納先ノードに送信すればよい。
また、上述した本発明の各実施の形態において、各ノードの各機能ブロックが、メモリに記憶されたコンピュータ・プログラムを実行するCPUによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した各ノードの動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置(記憶媒体)に格納しておく。そして、係るコンピュータ・プログラムを当該CPUが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
また、上述した各実施の形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)
複数のノードからなる情報処理システムにおける前記ノードであって、
前記複数のノードのうち、任意のデータの分散格納先となり得る所定の分割数のノード一覧を表す分割数ノード一覧情報を、前記各ノードの状態に応じて他ノードと同期して更新しながら保持するノード状態管理部と、
自ノードに関連する情報を表す対象データから前記分割数の分割データを、前記分割数より少ない復元数の分割データで復元可能に生成する分割データ生成部と、
前記分割数ノード一覧情報の示す前記分割数のノードを格納先ノードとして、前記分割データ生成部によって生成された前記分割数の分割データを、前記分割数の格納先ノードに対してそれぞれ送信するとともに、送信先の格納先ノード一覧を表す情報を、送信履歴情報として保持する分割データ送信部と、
他ノードから受信した前記分割データを、該分割データの生成元ノードを表す情報および該分割データの元となる対象データから分割された分割データの格納先ノード一覧を表す情報を含む格納履歴情報と共に格納する分割データ格納部と、
読み出し要求として指定されるノード(読み出し対象のノード)に保持される前記送信履歴情報、または、前記ノード状態管理部に保持される前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定する格納先ノード検索部と、
前記格納先ノード検索部によって特定された格納先ノードのうち、前記復元数の格納先ノードを決定する読み出しノード決定部と、
前記読み出しノード決定部によって決定された各格納先ノードから前記分割データを取得し、取得した復元数の分割データを用いて前記対象データを復元するデータ読み出し部と、
を備えたノード。
(付記2)
前記格納先ノード検索部は、前記検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照して前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードをさらに検索することを繰り返すことにより、前記読み出し対象のノードに関連する対象データ毎に、前記復元数以上の格納先ノードを特定することを特徴とする付記1に記載のノード。
(付記3)
前記格納先ノード検索部は、前記復元数以上の格納先ノードを特定できない場合、前記複数のノードのそれぞれに順次問い合わせることにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定することを特徴とする付記1または付記2に記載のノード。
(付記4)
前記格納先ノード検索部は、前記各ノードの状態が所定条件を満たす場合、前記送信履歴情報、前記分割数ノード一覧情報、および、前記格納履歴情報を参照せずに、前記複数のノードのそれぞれに問い合わせることにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを所定の復元数以上まで特定することを特徴とする付記1から付記3のいずれか1つに記載のノード。
(付記5)
前記対象データが、任意の時間帯に関連する情報を表すとき、
前記分割データ送信部は、前記送信履歴情報に、送信した前記分割データの元となる対象データに関連する時間帯を表す情報を含め、
前記分割データ格納部は、他ノードから受信した前記分割データと共に格納する格納履歴情報に、該分割データの元となる対象データに関連する時間帯を表す情報を含め、
前記格納先ノード検索部は、前記読み出し対象のノードに加えて読み出し対象の時間帯を指定されると、前記読み出し対象のノードに保持される前記読み出し対象の時間帯に対応する1つ以上の時間帯の送信履歴情報、または、前記ノード状態管理部に保持される前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードにおいて前記読み出し対象の時間帯に対応する1つ以上の時間帯に関連する各対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照して前記1つ以上の時間帯に関連する各対象データの各分割データの格納先ノードをさらに検索することを繰り返すことにより、前記1つ以上の時間帯に関連する対象データ毎に、前記復元数以上まで前記格納先ノードを特定することを特徴とする付記1から付記4のいずれか1つに記載のノード。
(付記6)
少なくとも一部のノードの前記ノード状態管理部は、前記分割数ノード一覧情報の更新履歴を保持し、
前記格納先ノード検索部は、前記読み出し対象のノードに関連する対象データの格納時点における前記分割数ノード一覧情報を、前記更新履歴を保持するノードから取得し、取得した分割数ノード一覧情報の示すノードの中から、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索することを特徴とする付記1から付記5のいずれか1つに記載のノード。
(付記7)
前記ノード状態管理部は、自ノードの状態を表す情報を取得して蓄積し、自ノードがマスタノードである場合、他の各ノードからその状態を表す情報を取得して、前記複数のノードそれぞれの状態に基づいて前記分割数のノードを決定して前記分割数ノード一覧情報を更新し、更新した分割数ノード一覧情報を他の各ノードに送信し、自ノードがマスタノードでない場合、前記マスタノードから受信する前記分割数ノード一覧情報を用いて自ノードの前記分割数ノード一覧情報を更新することを特徴とする付記1から付記6のいずれか1つに記載のノード。
(付記8)
前記読み出しノード決定部は、前記各ノードの状態に基づいて、前記格納先ノード検索部によって特定された格納先ノードのうち、前記復元数の格納先ノードを決定することを特徴とする付記1から付記7のいずれか1つに記載のノード。
(付記9)
前記読み出しノード決定部は、復元にかかる計算コストに基づいて、前記格納先ノード検索部によって特定された格納先ノードのうち、前記復元数の格納先ノードを決定することを特徴とする付記1から付記7のいずれか1つに記載のノード。
(付記10)
前記各ノードの状態として、前記各ノードの負荷を表す情報を適用することを特徴とする付記1から付記9のいずれか1つに記載のノード。
(付記11)
前記各ノードの状態として、前記各ノードに格納される前記分割データの量を適用することを特徴とする付記1から付記10のいずれか1つに記載のノード。
(付記12)
前記分割データ生成部は、前記対象データに消失訂正符号を付加して前記分割数に分割することを特徴とする付記1から付記11のいずれか1つに記載のノード。
(付記13)
前記分割データ生成部は、誤り訂正符号を用いてデータを分散配置する技術に基づき前記対象データから前記分割数の分割データを生成することを特徴とする付記1から付記11のいずれか1つに記載のノード。
(付記14)
前記分割データ送信部は、前記各分割データに前記格納履歴情報を含めて、前記格納先ノードに送信し、
前記分割データ格納部は、前記格納履歴情報を含む分割データを格納することを特徴とする付記1から付記13のいずれか1つに記載のノード。
(付記15)
前記情報処理システムを構成する複数のノードがグループに分割されているとき、
自ノードが属するグループ内の複数のノードを対象として機能することを特徴とする付記1から付記14のいずれか1つに記載のノード。
(付記16)
複数の付記1から付記15のいずれか1つに記載のノードからなる情報処理システム。
(付記17)
複数のノードからなる情報処理システムにおいて、前記ノードが、
前記複数のノードのうち、任意のデータの分散格納先となり得る所定の分割数のノード一覧を表す分割数ノード一覧情報を、前記各ノードの状態に応じて他ノードと同期して更新しながら保持し、
自ノードに関連する情報を表す対象データから前記分割数の分割データを、前記分割数より少ない復元数の分割データで復元可能に生成し、
前記分割数ノード一覧情報の示す前記分割数のノードを格納先ノードとして、前記分割数の分割データを、前記分割数の格納先ノードに対してそれぞれ送信するとともに、送信先の格納先ノード一覧を表す情報を、送信履歴情報として保持し、
他ノードから受信した前記分割データを、該分割データの生成元ノードを表す情報および該分割データの元となる対象データから分割された分割データの格納先ノード一覧を表す情報を含む格納履歴情報と共に格納し、
読み出し要求として指定されるノード(読み出し対象のノード)に保持される前記送信履歴情報、または、前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定し、
特定した格納先ノードのうち、前記復元数の格納先ノードを決定し、
決定した各格納先ノードから前記分割データを取得し、取得した復元数の分割データを用いて前記対象データを復元する方法。
(付記18)
複数のノードからなる情報処理システムにおける前記ノードに、
前記複数のノードのうち、任意のデータの分散格納先となり得る所定の分割数のノード一覧を表す分割数ノード一覧情報を、前記各ノードの状態に応じて他ノードと同期して更新しながら保持するノード状態管理ステップと、
自ノードに関連する情報を表す対象データから前記分割数の分割データを、前記分割数より少ない復元数の分割データで復元可能に生成する分割データ生成ステップと、
前記分割数ノード一覧情報の示す前記分割数のノードを格納先ノードとして、前記分割データ生成ステップで生成された前記分割数の分割データを、前記分割数の格納先ノードに対してそれぞれ送信するとともに、送信先の格納先ノード一覧を表す情報を、送信履歴情報として保持する分割データ送信ステップと、
他ノードから受信した前記分割データを、該分割データの生成元ノードを表す情報および該分割データの元となる対象データから分割された分割データの格納先ノード一覧を表す情報を含む格納履歴情報と共に格納する分割データ格納ステップと、
読み出し要求として指定されるノード(読み出し対象のノード)に保持される前記送信履歴情報、または、前記ノード状態管理ステップで保持される前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定する格納先ノード検索ステップと、
前記格納先ノード検索ステップで特定された格納先ノードのうち、前記復元数の格納先ノードを決定する読み出しノード決定ステップと、
前記読み出しノード決定ステップで決定された各格納先ノードから前記分割データを取得し、取得した復元数の分割データを用いて前記対象データを復元する分割データ読み出しステップと、
を実行させるプログラム。