(57)【特許請求の範囲】
【請求項１】
複数のノードからなる情報処理システムにおける前記ノードであって、
前記複数のノードのうち、任意のデータの分散格納先となり得る所定の分割数のノード一覧を表す分割数ノード一覧情報を、前記各ノードの状態に応じて他ノードと同期して更新しながら保持するノード状態管理部と、
自ノードに関連する情報を表す対象データから前記分割数の分割データを、前記分割数より少ない復元数の分割データで復元可能に生成する分割データ生成部と、
前記分割数ノード一覧情報の示す前記分割数のノードを格納先ノードとして、前記分割データ生成部によって生成された前記分割数の分割データを、前記分割数の格納先ノードに対してそれぞれ送信するとともに、送信先の格納先ノード一覧を表す情報を、送信履歴情報として保持する分割データ送信部と、
他ノードから受信した前記分割データを、該分割データの生成元ノードを表す情報および該分割データの元となる対象データから分割された分割データの格納先ノード一覧を表す情報を含む格納履歴情報と共に格納する分割データ格納部と、
読み出し要求として指定されるノード（読み出し対象のノード）に保持される前記送信履歴情報、または、前記ノード状態管理部に保持される前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定する格納先ノード検索部と、
前記格納先ノード検索部によって特定された格納先ノードのうち、前記復元数の格納先ノードを決定する読み出しノード決定部と、
前記読み出しノード決定部によって決定された各格納先ノードから前記分割データを取得し、取得した復元数の分割データを用いて前記対象データを復元するデータ読み出し部と、
を備えたノード。
【請求項２】
前記格納先ノード検索部は、前記検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照して前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードをさらに検索することを繰り返すことにより、前記読み出し対象のノードに関連する対象データ毎に、前記復元数以上の格納先ノードを特定することを特徴とする請求項１に記載のノード。
【請求項３】
前記格納先ノード検索部は、前記復元数以上の格納先ノードを特定できない場合、前記複数のノードのそれぞれに順次問い合わせることにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定することを特徴とする請求項１または請求項２に記載のノード。
【請求項４】
前記格納先ノード検索部は、前記各ノードの状態が所定条件を満たす場合、前記送信履歴情報、前記分割数ノード一覧情報、および、前記格納履歴情報を参照せずに、前記複数のノードのそれぞれに問い合わせることにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを所定の復元数以上まで特定することを特徴とする請求項１から請求項３のいずれか1項に記載のノード。
【請求項５】
前記対象データが、任意の時間帯に関連する情報を表すとき、
前記分割データ送信部は、前記送信履歴情報に、送信した前記分割データの元となる対象データに関連する時間帯を表す情報を含め、
前記分割データ格納部は、他ノードから受信した前記分割データと共に格納する格納履歴情報に、該分割データの元となる対象データに関連する時間帯を表す情報を含め、
前記格納先ノード検索部は、前記読み出し対象のノードに加えて読み出し対象の時間帯を指定されると、前記読み出し対象のノードに保持される前記読み出し対象の時間帯に対応する１つ以上の時間帯の送信履歴情報、または、前記ノード状態管理部に保持される前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードにおいて前記読み出し対象の時間帯に対応する１つ以上の時間帯に関連する各対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照して前記１つ以上の時間帯に関連する各対象データの各分割データの格納先ノードをさらに検索することを繰り返すことにより、前記１つ以上の時間帯に関連する対象データ毎に、前記復元数以上まで前記格納先ノードを特定することを特徴とする請求項１から請求項４のいずれか1項に記載のノード。
【請求項６】
少なくとも一部のノードの前記ノード状態管理部は、前記分割数ノード一覧情報の更新履歴を保持し、
前記格納先ノード検索部は、前記読み出し対象のノードに関連する対象データの格納時点における前記分割数ノード一覧情報を、前記更新履歴を保持するノードから取得し、取得した分割数ノード一覧情報の示すノードの中から、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索することを特徴とする請求項１から請求項５のいずれか1項に記載のノード。
【請求項７】
前記情報処理システムを構成する複数のノードがグループに分割されているとき、
自ノードが属するグループ内の複数のノードを対象として機能することを特徴とする請求項１から請求項６のいずれか1項に記載のノード。
【請求項８】
複数の請求項１から請求項７のいずれか１項に記載のノードからなる情報処理システム。
【請求項９】
複数のノードからなる情報処理システムにおいて、前記ノードが、
前記複数のノードのうち、任意のデータの分散格納先となり得る所定の分割数のノード一覧を表す分割数ノード一覧情報を、前記各ノードの状態に応じて他ノードと同期して更新しながら保持し、
自ノードに関連する情報を表す対象データから前記分割数の分割データを、前記分割数より少ない復元数の分割データで復元可能に生成し、
前記分割数ノード一覧情報の示す前記分割数のノードを格納先ノードとして、前記分割数の分割データを、前記分割数の格納先ノードに対してそれぞれ送信するとともに、送信先の格納先ノード一覧を表す情報を、送信履歴情報として保持し、
他ノードから受信した前記分割データを、該分割データの生成元ノードを表す情報および該分割データの元となる対象データから分割された分割データの格納先ノード一覧を表す情報を含む格納履歴情報と共に格納し、
読み出し要求として指定されるノード（読み出し対象のノード）に保持される前記送信履歴情報、または、前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定し、
特定した格納先ノードのうち、前記復元数の格納先ノードを決定し、
決定した各格納先ノードから前記分割データを取得し、取得した復元数の分割データを用いて前記対象データを復元する方法。
【請求項１０】
複数のノードからなる情報処理システムにおける前記ノードに、
前記複数のノードのうち、任意のデータの分散格納先となり得る所定の分割数のノード一覧を表す分割数ノード一覧情報を、前記各ノードの状態に応じて他ノードと同期して更新しながら保持するノード状態管理ステップと、
自ノードに関連する情報を表す対象データから前記分割数の分割データを、前記分割数より少ない復元数の分割データで復元可能に生成する分割データ生成ステップと、
前記分割数ノード一覧情報の示す前記分割数のノードを格納先ノードとして、前記分割データ生成ステップで生成された前記分割数の分割データを、前記分割数の格納先ノードに対してそれぞれ送信するとともに、送信先の格納先ノード一覧を表す情報を、送信履歴情報として保持する分割データ送信ステップと、
他ノードから受信した前記分割データを、該分割データの生成元ノードを表す情報および該分割データの元となる対象データから分割された分割データの格納先ノード一覧を表す情報を含む格納履歴情報と共に格納する分割データ格納ステップと、
読み出し要求として指定されるノード（読み出し対象のノード）に保持される前記送信履歴情報、または、前記ノード状態管理ステップで保持される前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定する格納先ノード検索ステップと、
前記格納先ノード検索ステップで特定された格納先ノードのうち、前記復元数の格納先ノードを決定する読み出しノード決定ステップと、
前記読み出しノード決定ステップで決定された各格納先ノードから前記分割データを取得し、取得した復元数の分割データを用いて前記対象データを復元する分割データ読み出しステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを複数のノードに分散して格納する技術に関する。
【背景技術】
【０００２】
複数のノードからなる情報処理システムとして、例えば、グリッドコンピューティングシステム等が知られている。このような情報処理システムでは、システムの運用監視、運用管理、障害解析、または、性能チューニング等のため、システムの動作状況や統計情報等を、ログとして格納することが求められる。このようなログの格納と読み出しは、効率的かつ確実に実施できることが望ましい。
【０００３】
一般的なログの格納にはいくつかの方法があるが、それぞれ課題がある。各ノードによって自ノードのログを格納する方法は、該当ノードが障害となった場合、そのログを読み出せないという課題がある。ログ格納専用のノードを設ける方法は、ハードウェアのコスト・フットプリント・消費電力の増加を招くという課題がある。また、１台のノードを選びそのノードにログ格納機能をサブ機能として持たせる方法は、そのノードが情報処理システムのボトルネックとなる。そのため、この方法は、性能低下を招き、耐障害性に乏しいという課題がある。
【０００４】
そこで、ログの格納に、データを分散して格納する分散ファイルシステムを適用することが考えられる。
【０００５】
特許文献１には、分散ファイルシステムの一例が記載されている。特許文献１に記載された関連技術では、管理ノードが、格納するデータをｎ個に分割し、書き込み可能なＮ個の記録システムから任意のｎ個を選択して、ｎ個の分割データを格納させる。また、この関連技術では、管理ノードが、各データについて分割データの格納場所を記憶しておく。そして、管理ノードは、データを読み出す際に、記憶しておいた分割データの格納場所を用いる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第４８２０６２０号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１に記載された関連技術または一般的な分散ファイルシステムを用いて、複数のノードからなる情報処理システムにおいてログを格納する場合、以下の課題がある。
【０００８】
特許文献１に記載された関連技術では、データの分散格納処理を実行し分散格納場所を管理する管理ノードを設ける必要がある。ここで、ログは、システムがまさに障害になっている場面で必要とされることが少なくない。そのため、ログは、システム障害時でも読み出せる必要がある。しかしながら、この関連技術をログ格納に適用した場合、管理ノードに障害が発生すると、一切のログが読み出せなくなるという問題が生じる。
【０００９】
また、一般的な分散ファイルシステムは、データの更新を考慮して、データの分散格納時に整合性を保つための処理を行う。整合性を保つための処理とは、例えば、排他制御や、タイムスタンプの格納・確認等の処理である。ここで、ログは、基本的に上書きされない。つまり、新たなログは新たなデータとして格納され、ログを記録した既存のデータが更新されることはない。また、ログ格納は、情報処理システムの主機能ではないので、低負荷で格納されることが求められる。したがって、ログを分散格納する場合、整合性を保つための処理の多くは、省略可能である場合も多い。しかしながら、一般的な分散ファイルシステムをログ格納に適用した場合、整合性を保つための多くの処理を伴うため、情報処理システムの主機能の性能を低下させるという問題が生じる。
【００１０】
本発明は、上述の課題を解決するためになされたものである。すなわち、本発明は、複数のノードからなる情報処理システムにおいて対象データを分散管理する際に、耐障害性を向上させ、対象データの格納・読み出しによる性能低下を抑える技術を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明のノードは、複数のノードからなる情報処理システムにおける前記ノードであって、前記複数のノードのうち、任意のデータの分散格納先となり得る所定の分割数のノード一覧を表す分割数ノード一覧情報を、前記各ノードの状態に応じて他ノードと同期して更新しながら保持するノード状態管理部と、自ノードに関連する情報を表す対象データから前記分割数の分割データを、前記分割数より少ない復元数の分割データで復元可能に生成する分割データ生成部と、前記分割数ノード一覧情報の示す前記分割数のノードを格納先ノードとして、前記分割データ生成部によって生成された前記分割数の分割データを、前記分割数の格納先ノードに対してそれぞれ送信するとともに、送信先の格納先ノード一覧を表す情報を、送信履歴情報として保持する分割データ送信部と、他ノードから受信した前記分割データを、該分割データの生成元ノードを表す情報および該分割データの元となる対象データから分割された分割データの格納先ノード一覧を表す情報を含む格納履歴情報と共に格納する分割データ格納部と、読み出し要求として指定されるノード（読み出し対象のノード）に保持される前記送信履歴情報、または、前記ノード状態管理部に保持される前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定する格納先ノード検索部と、前記格納先ノード検索部によって特定された格納先ノードのうち、前記復元数の格納先ノードを決定する読み出しノード決定部と、前記読み出しノード決定部によって決定された各格納先ノードから前記分割データを取得し、取得した復元数の分割データを用いて前記対象データを復元するデータ読み出し部と、を備える。
【００１２】
また、本発明の情報処理システムは、複数の上述のノードからなる。
【００１３】
また、本発明の方法は、複数のノードからなる情報処理システムにおいて、前記ノードが、前記複数のノードのうち、任意のデータの分散格納先となり得る所定の分割数のノード一覧を表す分割数ノード一覧情報を、前記各ノードの状態に応じて他ノードと同期して更新しながら保持し、自ノードに関連する情報を表す対象データから前記分割数の分割データを、前記分割数より少ない復元数の分割データで復元可能に生成し、前記分割数ノード一覧情報の示す前記分割数のノードを格納先ノードとして、前記分割数の分割データを、前記分割数の格納先ノードに対してそれぞれ送信するとともに、送信先の格納先ノード一覧を表す情報を、送信履歴情報として保持し、他ノードから受信した前記分割データを、該分割データの生成元ノードを表す情報および該分割データの元となる対象データから分割された分割データの格納先ノード一覧を表す情報を含む格納履歴情報と共に格納し、読み出し要求として指定されるノード（読み出し対象のノード）に保持される前記送信履歴情報、または、前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定し、特定した格納先ノードのうち、前記復元数の格納先ノードを決定し、決定した各格納先ノードから前記分割データを取得し、取得した復元数の分割データを用いて前記対象データを復元する。
【００１４】
また、本発明のプログラムは、複数のノードからなる情報処理システムにおける前記ノードに、前記複数のノードのうち、任意のデータの分散格納先となり得る所定の分割数のノード一覧を表す分割数ノード一覧情報を、前記各ノードの状態に応じて他ノードと同期して更新しながら保持するノード状態管理ステップと、自ノードに関連する情報を表す対象データから前記分割数の分割データを、前記分割数より少ない復元数の分割データで復元可能に生成する分割データ生成ステップと、前記分割数ノード一覧情報の示す前記分割数のノードを格納先ノードとして、前記分割データ生成ステップで生成された前記分割数の分割データを、前記分割数の格納先ノードに対してそれぞれ送信するとともに、送信先の格納先ノード一覧を表す情報を、送信履歴情報として保持する分割データ送信ステップと、他ノードから受信した前記分割データを、該分割データの生成元ノードを表す情報および該分割データの元となる対象データから分割された分割データの格納先ノード一覧を表す情報を含む格納履歴情報と共に格納する分割データ格納ステップと、読み出し要求として指定されるノード（読み出し対象のノード）に保持される前記送信履歴情報、または、前記ノード状態管理ステップで保持される前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定する格納先ノード検索ステップと、前記格納先ノード検索ステップで特定された格納先ノードのうち、前記復元数の格納先ノードを決定する読み出しノード決定ステップと、前記読み出しノード決定ステップで決定された各格納先ノードから前記分割データを取得し、取得した復元数の分割データを用いて前記対象データを復元する分割データ読み出しステップと、を実行させる。
【発明の効果】
【００１５】
本発明は、複数のノードからなる情報処理システムにおいて対象データを分散管理する際に、耐障害性を向上させ、対象データの格納・読み出しによる性能低下を抑える技術を提供することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の第1の実施の形態としての情報処理システムの構成を示すブロック図である。
【図２】本発明の第1の実施の形態におけるノードの機能ブロック構成を示すブロック図である。
【図３】本発明の第1の実施の形態におけるノードのハードウェア構成の一例を示す図である。
【図４】本発明の第1の実施の形態としての情報処理システムのデータ格納動作を説明するフローチャートである。
【図５】本発明の第1の実施の形態としての情報処理システムのデータ読み出し動作を説明するフローチャートである。
【図６】本発明の第２の実施の形態としての情報処理システムの構成を示すブロック図である。
【図７】本発明の第２の実施の形態におけるノードの機能ブロック構成を示すブロック図である。
【図８】本発明の第２の実施の形態としての情報処理システムのデータ格納動作を説明するフローチャートである。
【図９】本発明の第２の実施の形態としての情報処理システムのデータ読み出し動作を説明するフローチャートである。
【図１０】本発明の第２の実施の形態としての情報処理システムの格納先ノード検索動作の詳細を説明するフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００１８】
（第１の実施の形態）
本発明の第１の実施の形態としての情報処理システム１の構成を図１に示す。図１において、情報処理システム１は、複数のノード１０からなる。複数のノード１０は、内部ネットワーク１０５に接続されることにより、互いに通信可能となっている。各ノード１０は、互いを識別可能なノード識別子を用いて、他のノード１０と通信するものとする。また、複数のノード１０は、外部ネットワーク１０６に接続されることにより、外部と通信可能になっている。情報処理システム１は、ネットワーク１０６を介して外部のクライアント９から指示される各種の処理を実行する。なお、図１には、３つのノード１０を示したが、本発明の情報処理システムが備えるノードの数を限定するものではない。また、図１には、１つのクライアント９を示したが、本発明の情報処理システムを利用する装置の数を限定するものではない。
【００１９】
次に、ノード１０の機能ブロック構成を図２に示す。図２において、ノード１０は、ノード状態管理部１１と、分割データ生成部１２と、分割データ送信部１３と、分割データ格納部１４と、格納先ノード検索部１５と、読み出しノード決定部１６と、データ読み出し部１７とを備える。
【００２０】
ここで、各ノード１０は、図３に示すようなハードウェア要素によって構成可能である。図３において、ノード１０は、ＣＰＵ（Central Processing Unit）１００１、メモリ１００２、ネットワークインタフェース１００５、および、ネットワークインタフェース１００６を含む。メモリ１００２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）等によって構成される。また、ネットワークインタフェース１００５および１００６は、それぞれ、内部ネットワーク１０５および１０６に接続するインタフェースである。この場合、ノード１０の各機能ブロックは、メモリ１００２に格納されるコンピュータ・プログラムを読み込んで実行するとともに各部を制御するＣＰＵ１００１によって構成される。なお、ノード１０およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００２１】
ノード状態管理部１１は、分割数ノード一覧情報を保持する。分割数ノード一覧情報とは、複数のノード１０のうち、任意のデータの分散格納先となり得る所定の分割数のノード１０の一覧を表す。分割数は、データを分散格納させるノード１０の数としてあらかじめ定められる。また、ノード状態管理部１１は、分割数ノード一覧情報を、各ノード１０の状態に応じて他のノード１０と同期して更新する。
【００２２】
例えば、複数のノード１０のうちいずれかのノード１０のノード状態管理部１１が、各ノード１０の状態を表す情報を収集するようにしてもよい。そして、そのノード１０のノード状態管理部１１が、各ノード１０の状態に基づいて、分散格納先となり得る分割数のノード１０を決定し、その一覧を新たな分割数ノード一覧情報としてもよい。そしてこの場合、そのノード１０のノード状態管理部１１が、他のノード１０のノード状態管理部１１に対して更新した分割数ノード一覧情報を送信すればよい。他のノード１０のノード状態管理部１１は、自ノードの分割数ノード一覧情報を、受信した分割数ノード一覧情報で更新すればよい。
【００２３】
分割データ生成部１２は、自ノードに関連する情報を表す対象データから、分割数の分割データを生成する。分割データの生成処理には、分割数の分割データのうち、分割数より少ない復元数の分割データを用いて元の対象データを復元可能な技術を採用する。例えば、そのような分割データ生成処理としては、消失訂正符号（erasure code）を付加して分割する技術が知られている。また、他のそのような分割データ生成処理としては、誤り訂正符号を用いてデータを分散配置するＲＡＩＤ（Redundant Arrays of Independent Disks）技術等が知られている。ＲＡＩＤを採用する場合、分割数より２つ少ない復元数で復元可能なレベル６を採用することが望ましいが、他のレベルを採用することも可能である。
【００２４】
分割データ送信部１３は、ノード状態管理部１１に問い合わせることにより、分割数ノード一覧情報に示される分割数のノード１０を格納先として決定する。そして、分割データ送信部１３は、分割データ生成部１２によって生成された分割数の分割データのおのおのを、分割数の格納先のノード１０のおのおのに対して送信する。このとき、分割データ送信部１３は、それぞれの格納先のノード１０に対して、分割データに付随させて生成元ノード情報および格納先ノード一覧情報を送信してもよい。
【００２５】
生成元ノード情報とは、分割データの生成元のノード１０を表す情報である。つまり、ここで送信する生成元ノード情報は、自ノードを表す情報である。また、格納先ノード一覧情報とは、これらの分割データの格納先となるノード１０の一覧を表す情報である。つまり、ここで送信する格納先ノード一覧情報は、分割数ノード一覧情報に基づき決定した格納先のノード１０の一覧を表す情報である。
【００２６】
また、分割データ送信部１３は、この格納先ノード一覧情報と同一の情報を、送信履歴情報として保持する。つまり、送信履歴情報は、分割数の分割データの送信先（すなわち、格納先）を表している。
【００２７】
また、分割データ送信部１３は、他のノード１０における後述の格納先ノード検索部１５から、送信履歴情報の取得要求を受信する。そして、分割データ送信部１３は、送信履歴情報を、要求元のノード１０に返信する。
【００２８】
分割データ格納部１４は、他のノード１０から受信した分割データを、格納履歴情報と共に格納する。格納履歴情報は、分割データの生成元ノード情報および格納先ノード一覧情報を含む。これらの情報は、前述のように、分割データの送信元（すなわち、生成元）から分割データと共に送信されたものである。つまり、格納履歴情報に含まれる格納先ノード一覧情報は、受信した分割データを含む分割数の分割データの格納先のノード１０の一覧を表している。
【００２９】
また、分割データ格納部１４は、他のノード１０における後述の格納先ノード検索部１５から、特定のノード１０に関連する対象データの分割データを格納しているか否かの問い合わせを受信する。問い合わせ対象である特定のノード１０に関連する対象データの分割データを格納しているか否かは、自ノードに格納している格納履歴情報に含まれる生成元ノード情報を参照することにより判断できる。そして、分割データ格納部１４は、該当する分割データを格納している場合、その分割データと共に格納している格納履歴情報を、問い合わせ元のノード１０に返信する。
【００３０】
また、分割データ格納部１４は、他のノード１０における後述のデータ読み出し部１７から、特定のノード１０に関連する対象データの分割データの取得要求を受信する。そして、分割データ格納部１４は、該当する分割データを、要求元のノード１０に返信する。
【００３１】
格納先ノード検索部１５は、対象データの読み出し要求を入力として取得する。ここで、対象データの読み出し要求は、特定のノード１０を指定する情報として入力される。つまり、読み出し要求は、指定されたノード１０に関連する対象データの各分割データを収集して元の対象データを読み出す要求である。以降、読み出し要求において指定されるノード１０を、「読み出し対象のノード１０」とも記載する。
【００３２】
格納先ノード検索部１５は、読み出し要求が入力されると、送信履歴情報、分割数ノード一覧情報、または、格納履歴情報を参照することにより、読み出し対象のノード１０に関連する対象データの各分割データの格納先となっているノード１０を検索する。そして、格納先ノード検索部１５は、復元数以上の該当する格納先のノード１０を特定する。ここで、参照する送信履歴情報としては、読み出し対象のノード１０に保持される送信履歴情報が適用される。また、参照する分割数ノード一覧情報としては、自ノードのノード状態管理部１１に保持される分割数ノード一覧情報が適用される。また、参照する格納履歴情報としては、先に検索されたノード１０に、該分割データと共に保持される格納履歴情報が適用される。
【００３３】
具体的には、格納先ノード検索部１５は、読み出し対象のノード１０から送信履歴情報を取得することを試みる。読み出し対象のノード１０から送信履歴情報を取得できる場合、格納先ノード検索部１５は、その送信履歴情報に示される格納先ノード一覧を、読み出し対象のノード１０に関連する対象データの各分割データの格納先のノード１０を表す情報として特定する。
【００３４】
また、読み出し対象のノード１０から送信履歴情報を取得できないケースも考えられる。例えば、読み出し対象のノード１０がその時点でアクセス不可能となっている場合や、読み出し対象のノード１０において障害やその他の理由により送信履歴情報が失われている場合等である。この場合、格納先ノード検索部１５は、分割数ノード一覧情報に示される各ノード１０に問い合わせることにより、読み出し対象のノード１０に関連する対象データの各分割データを格納しているノード１０を検索する。そして、問い合わせ先のノード１０が、該当する分割データを保持している場合、格納先ノード検索部１５は、検索したノード１０から、問い合わせの返信として、該当する分割データと共に保持されている格納履歴情報を取得する。
【００３５】
格納先ノード検索部１５は、上述の構成により、読み出し対象のノード１０に関連する対象データの各分割データの所在（格納先）を全てまたは一部特定することになる。もし、復元数以上の分割データの所在が特定されていない場合、格納先ノード検索部１５は、既に検索したノード１０から取得された格納履歴情報を参照する。そして、格納先ノード検索部１５は、その格納履歴情報に含まれる格納先ノード一覧に示される各ノード１０に問い合わせることにより、読み出し対象のノード１０に関連する対象データの分割データを格納しているノード１０をさらに検索する。このようにして、格納先ノード検索部１５は、復元数以上の分割データの所在を特定する。
【００３６】
なお、格納先ノード検索部１５は、分割数の分割データの所在を全て特定することが望ましい。しかしながら、格納先のノード１０の中には、アクセス不可能となっているノード１０がある可能性もある。したがって、格納先ノード検索部１５は、分割数の分割データのうち復元数以上のアクセス可能な全ての分割データの所在を特定するようにすればよい。
【００３７】
読み出しノード決定部１６は、格納先ノード検索部１５によって特定された格納先のノード１０のうち、復元数のノード１０を決定する。例えば、読み出しノード決定部１６は、各ノード１０の状態に基づいて、復元数のノード１０を決定してもよい。なお、各ノード１０の状態を表す情報は、ノード状態管理部１１に問い合わせることにより取得可能である。
【００３８】
データ読み出し部１７は、読み出しノード決定部１６によって決定された復元数のノード１０から、読み出し対象のノード１０に関連する対象データの分割データを取得する。そして、データ読み出し部１７は、取得した復元数の分割データを用いて対象データを復元する。
【００３９】
以上のように構成された情報処理システム１の動作について、図面を参照して説明する。
【００４０】
まず、情報処理システム１の対象データ格納動作を図４に示す。なお、図４において、左図は、書き込みを行うノード１０の動作を表し、右図は、格納先となった各ノード１０の動作を表す。また、ノード状態管理部１１の分割数ノード一覧情報は、適宜更新されているものとする。また、書き込みを行うノード１０は、任意のタイミングで、下記の動作を開始するものとする。任意のタイミングとは、定められたスケジュールにしたがったタイミング、対象データが所定条件を満たしたと判定したタイミング、または、外部からの入力に基づくタイミング等であってもよい。
【００４１】
まず、分割データ生成部１２は、対象データから、分割数の分割データを生成する（ステップＡ１）。前述のように、ここでは、分割数より少ない復元数の分割データを用いて元の対象データを復元可能な分割データ生成技術が用いられる。
【００４２】
次に、分割データ送信部１３は、ノード状態管理部１１から分割数ノード一覧情報を取得し、取得した分割数ノード一覧情報の示す分割数のノード１０を、格納先として決定する（ステップＡ２）。
【００４３】
次に、分割データ送信部１３は、ステップＡ１で生成された分割数の分割データを、ステップＡ２で決定された分割数の格納先のノード１０に対して、それぞれ送信する（ステップＡ３）。このとき、前述のように、分割データ送信部１３は、生成元ノード情報および格納先ノード一覧情報を、分割データと共に格納先のノード１０に対してそれぞれ送信する。
【００４４】
次に、分割データ送信部１３は、ステップＡ３で分割データを送信した格納先ノード一覧を、送信履歴情報として保存する（ステップＡ４）。
【００４５】
次に、分割データを受信したノード１０では、分割データ格納部１４は、受信した分割データを格納履歴情報と共に格納する（ステップＡ５）。ここで、格納履歴情報は、分割データと共に受信した生成元ノード情報および格納先ノード一覧情報を含む。
【００４６】
以上で、情報処理システム１は、対象データ格納動作を終了する。
【００４７】
次に、情報処理システム１の対象データ読み出し動作を図５に示す。なお、図５において、中央の図は、読み出しを行うノード１０の動作を示し、左図は、読み出し対象のノード１０の動作を示し、右図は、対象の分割データを格納している各ノード１０の動作を示す。また、読み出しを行うノード１０は、読み出し対象のノード１０を指定する情報が入力されると、下記の動作を開始するものとする。
【００４８】
まず、読み出しを行うノード１０の格納先ノード検索部１５は、読み出し対象のノード１０がアクセス可能であるか否かを判断する（ステップＢ１）。
【００４９】
ここで、読み出し対象のノード１０がアクセス可能である場合について説明する。この場合、読み出しを行うノード１０の格納先ノード検索部１５は、読み出し対象のノード１０に対して、送信履歴情報の送信を要求する（ステップＢ２）。
【００５０】
次に、読み出し対象のノード１０の分割データ送信部１３は、送信履歴情報を、読み出しを行うノード１０に対して送信する（ステップＢ３）。この送信履歴情報は、読み出し対象のノード１０に関連する対象データの分割データを送信した際の送信履歴情報である。ただし、読み出し対象のノード１０は、障害やその他の理由により、送信履歴情報を失い保持していない可能性もある。
【００５１】
そこで、次に、読み出しを行うノード１０の格納先ノード検索部１５は、読み出し対象のノード１０から送信履歴情報を取得できたか否かを判断する（ステップＢ４）。
【００５２】
ここで、送信履歴情報を取得できた場合について説明する。この場合、読み出しを行うノード１０の格納先ノード検索部１５は、この送信履歴情報に含まれる格納先ノード一覧の示すノード１０を特定する（ステップＢ５）。
【００５３】
一方、ステップＢ１で、読み出し対象のノード１０がアクセス可能でなかった場合、または、ステップＢ４で、送信履歴情報を取得できなかった場合について説明する。この場合、読み出しを行うノード１０の格納先ノード検索部１５は、分割数ノード一覧情報の示す各ノード１０に問い合わせを行い、読み出し対象のノード１０に関連する対象データの各分割データを格納しているノード１０を検索する（ステップＢ６）。
【００５４】
次に、検索されたノード１０の分割データ格納部１４は、その分割データに対応する格納履歴情報を、問い合わせ元のノード１０に返信する（ステップＢ７）。
【００５５】
次に、読み出しを行うノード１０の格納先ノード検索部１５は、格納履歴情報に含まれる格納先ノード一覧の示す各ノード１０に問い合わせを行い、読み出し対象のノード１０に関連する対象データの各分割データを格納するノード１０を検索する（ステップＢ８）。
【００５６】
なお、ステップＢ６の時点で復元数以上の分割データの所在が特定されていれば、ステップＢ８は省略可能である。
【００５７】
次に、検索されたノード１０の読み出しノード決定部１６は、ステップＢ５、または、Ｂ６およびＢ８で特定された格納先のノード１０から、復元数のノード１０を決定する（ステップＢ９）。
【００５８】
前述のように、読み出しノード決定部１６は、ノード状態管理部１１に問い合わせることにより、各ノード１０の状態に基づいて、復元数のノード１０を決定してもよい。
【００５９】
次に、読み出しを行うノード１０のデータ読み出し部１７は、ステップＢ９で決定された復元数のノード１０に対して、読み出し対象のノード１０に関連する対象データの分割データをそれぞれ要求する（ステップＢ１０）。
【００６０】
次に、要求を受けたノード１０の分割データ格納部１４は、該当する分割データを要求元のノード１０に送信する（ステップＢ１１）。
【００６１】
次に、読み出しを行うノード１０のデータ読み出し部１７は、ステップＢ１１で得られた復元数の分割データを用いて、元の対象データを復元する（ステップＢ１２）。
【００６２】
以上で、情報処理システム１は、対象データ読み出し動作を終了する。
【００６３】
次に、本発明の第１の実施の形態の効果について述べる。
【００６４】
本発明の第１の実施の形態としての情報処理システムは、複数のノードからなる情報処理システムにおいて対象データを分散管理する際に、耐障害性を向上させながら、対象データの格納・読み出しによる性能低下を抑えることができる。
【００６５】
その理由について説明する。本実施の形態では、各ノードのノード状態管理部が、各ノードの状態に応じて任意のデータの分散格納先となり得る分割数のノードを表す分割数ノード一覧情報を、他のノードと同期して更新しながら保持している。
【００６６】
そして、対象データを格納する際には、対象データを保持するノードの分割データ生成部が、その対象データから分割数の分割データを生成する。このとき、分割数の分割データの生成処理には、分割数より少ない復元数の分割データを用いて元の対象データを復元可能な処理が適用される。そして、そのノードの分割データ送信部が、分割数ノード一覧情報の示す格納先ノードに分割データをそれぞれ送信し送信履歴情報を保持しておく。送信履歴情報には、格納先ノード一覧が含まれる。そして、分割データを受信したノードの分割データ格納部が、受信した分割データを格納履歴情報と共に格納する。格納履歴情報には、その分割データの元となる対象データの各分割データの格納先ノード一覧が含まれる。
【００６７】
また、対象データを読み出す際には、いずれかのノードが、読み出し要求として読み出し対象のノードを指定する情報を取得する。そして、読み出し要求を取得したノードの格納先ノード検索部が、読み出し対象のノードに保持される送信履歴情報、分割数ノード一覧情報、または、既に検索したノードに保持される格納履歴情報を参照する。そして、このノードの格納先ノード検索部が、送信履歴情報、分割数ノード一覧情報、または、格納履歴情報に基づいて、読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索する。これにより、このノードの格納先ノード検索部が、復元数以上までの該当する分割データの格納先ノードを特定する。そして、このノードの読み出しノード決定部が、特定された格納先ノードから復元数のノードを決定し、データ読み出し部が、決定された各格納先ノードから分割データを取得し対象データを復元するからである。
【００６８】
このように、本実施の形態は、対象データの分散格納先に分割データと共に格納履歴情報を格納するので、格納済みの対象データに関する情報を一元管理するノードを必要としない。そのため、本実施の形態は、情報処理システムに障害が発生した時でも、対象データを読み出せる可能性を大幅に高めている。例えば、本実施の形態は、元の対象データに関連するノードがアクセス不可能な場合でも、分割数ノード一覧情報を用いて、その対象データの各分割データを保持するノードを検索することができる。
【００６９】
さらに、本実施の形態は、既に検索したノードに該分割データと共に格納される格納履歴情報を用いて、その対象データの各分割データを保持するノードを検索することができる。これにより本実施の形態は、管理ノードを設けなくても、対象データの各分割データを保持するノードを、復元数以上まで特定することができる。
【００７０】
また、本実施の形態は、その対象データの各分割データの格納先ノードのうち一部がアクセス不可能となっていても、復元数の格納先ノードにアクセスできれば、対象データを復元可能である。
【００７１】
ここで、例えば、本実施の形態における対象データとしてログを適用する用途では、情報処理システムに障害が発生した時にログの読み出しが必要となることが多い。本実施の形態は、前述のように一元管理のノードを置かないことにより、データの読み出しの耐障害性を高めており、障害発生時に読み出しの必要性が高いという特性を持つデータの分散格納に適している。
【００７２】
また、本実施の形態は、対象データの分散格納の際に、格納した対象データに関する情報を一元管理せず、また、排他制御等の整合性維持のための制御を行わないので、格納処理を効率的に行うことができる。これにより、本実施の形態は、データ格納を効率的に行うことができ、データ格納による情報処理システムの他の機能の性能低下を抑えることができる。例えば、本実施の形態における対象データとしてログを適用する用途では、対象データは新規に書き込まれていき、格納済みの対象データが更新されることは基本的にない。この場合、整合性維持のための制御の多くは、省略しても問題ない。このように、本実施の形態は、基本的に更新されないという特性を持つデータの分散格納に適している。
【００７３】
また、本実施の形態は、対象データの分散格納を上述のように効率的に行うことにより、代償として対象データの読み出し処理のコストを若干増加させている。しかしながら、例えば、本実施の形態における対象データとしてログを適用する用途では、対象データの書き込み処理は頻繁に発生するが、読み出し処理の頻度は低いという特性がある。この場合、全体として効率は改善される。したがって、本実施の形態は、書き込み処理の頻度が高く読み出し処理の頻度が低いという特性を持つデータの分散格納に適している。
【００７４】
（第２の実施の形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。本実施の形態では、本発明における対象データとして、情報処理システムの動作状況や統計情報等が記録されるログを適用する例について説明する。また、本実施の形態では、本発明における分割データを、断片ログと呼ぶことにする。なお、本実施の形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【００７５】
まず、本発明の第２の実施の形態としての情報処理システム２の構成を図６に示す。図６において、情報処理システム２は、複数のノード２０からなる。本実施の形態では、複数のノード２０のうち１つが、マスタノードとして機能する。ただし、任意のノード２０が、マスタノードとして機能することができる。情報処理システム２は、自システムの状況に応じて、マスタノードとなるノード２０を切り替えるように構成されていてもよい。
【００７６】
なお、複数のノード２０は、本発明の第１の実施の形態と同様に、内部ネットワーク１０５を介して互いに通信可能であり、かつ、内部ネットワーク１０６を介して外部と通信可能になっている。また、情報処理システム２は、本発明の第１の実施の形態と同様に、外部のクライアント９から指示される各種の処理を実行する。また、図６には、３つのノード２０を示したが、本発明の情報処理システムが備えるノードの数を限定するものではない。また、図６には、１つのクライアント９を示したが、本発明の情報処理システムを利用する装置の数を限定するものではない。
【００７７】
次に、ノード２０の機能ブロック構成を図７に示す。図７において、ノード２０は、ノード状態管理部２１と、分割データ生成部２２と、分割データ送信部２３と、分割データ格納部２４と、格納先ノード検索部２５と、読み出しノード決定部２６と、データ読み出し部２７とを備える。さらに、ノード２０は、ログバッファ２８を備える。ここで、ノード２０およびその各機能ブロックは、図３を参照して説明した本発明の第１の実施の形態と同一のハードウェア要素によって構成可能である。なお、ノード２０およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００７８】
ノード状態管理部２１は、ノード状態収集部２１１と、ノード選択部２１２とを有する。
【００７９】
ノード状態収集部２１１は、自ノードの状態として負荷を表す情報（ノード状態情報）を、所定のタイミング毎に収集して更新する。また、ノード状態収集部２１１は、自ノードがマスタノードである場合、さらに、所定のタイミング毎に、他の各ノード２０から該ノード２０で収集されたノード状態情報を収集する。
【００８０】
ノード選択部２１２は、自ノードがマスタノードである場合、自ノードおよび他の各ノード２０のノード状態情報に基づいて、ログの分散格納先となり得る分割数のノード２０を選択する。例えば、ノード選択部２１２は、ノード状態情報の示す負荷が少ないものから順に分割数のノード２０を選択してもよい。そして、ノード選択部２１２は、選択した分割数のノード２０を表すよう、分割数ノード一覧情報を更新する。そして、ノード選択部２１２は、更新した分割数ノード一覧情報を、他の各ノード２０に送信する。
【００８１】
また、ノード選択部２１２は、自ノードがマスタノードである場合、自ノードおよび他の各ノード２０のノード状態情報に基づいて、問い合わせ対象の複数のノード２０の中から、ログの読み出し元となる復元数のノード２０を選択する。なお、問い合わせ対象の複数のノード２０の中から復元数のノード２０を選択する処理は、各ノード２０の後述する読み出し決定部２６によって要求される。例えば、ノード選択部２１２は、ノード状態情報の示す負荷が少ないものから順に復元数のノード２０を選択してもよい。そして、ノード選択部２１２は、選択した復元数のノード２０を表す情報を、問い合わせ元に返信すればよい。
【００８２】
例えば、ノード選択部２１２は、自ノードがマスタノードである場合、次のようにして、情報処理システム２の特性に応じて、負荷のより低いノード２０を選択する。例えば、情報処理システム２において、ノード２０間での連携が必要な処理とノード２０単体で実行する処理とが混在する場合を考える。このとき、ノード２０間で連携が必要な処理のノード２０内での残処理時間をＴｉとする（ｉはノード識別子）。また、ノード２０単体で実行する処理の残処理時間をＲｉとする。この場合、ノード選択部２１２は、ＴｉおよびＲｉがそれぞれ最大であるノード２０を除いた残りのノード２０から、αＴｉ＋βＲｉ（α、βは係数）が小さいものから順に、分割数のノード２０を選択してもよい。
【００８３】
また、ノード選択部２１２は、自ノードがマスタノードでない場合、マスタノードから分割数ノード一覧情報を受信する。そして、ノード選択部２１２は、受信した分割数ノード一覧更新情報で、自ノードの分割数ノード一覧情報を更新する。
【００８４】
ログバッファ２８は、情報処理システム２の図示しない機能ブロックにより、その動作状況や統計情報等がログとして蓄積される領域である。また、ログは、時間を表す情報と共に蓄積される。
【００８５】
分割データ生成部２２は、ログバッファ２８に蓄積されたログがあらかじめ定められた量を超えると、ログバッファ２８からログを取得する。取得したログは、前回ログを取得した時刻以降、今回取得時刻までの時間帯の情報を表すことになる。そして、分割データ生成部２２は、取得したログから、分割数の断片ログを生成する。断片ログの生成処理には、本発明の第１の実施の形態と同様に、分割数の断片ログのうち、分割数より少ない復元数の断片ログを用いて元のログを復元可能な技術を採用する。
【００８６】
分割データ送信部２３は、本発明の第１の実施の形態における分割データ送信部１３と略同様に構成される。ただし、本実施の形態では、それぞれの格納先のノード２０に対して断片ログに付随させて送信する情報の詳細と、送信履歴情報の詳細とが異なる。詳細には、分割データ送信部２３は、それぞれの格納先のノード２０に対して、断片ログに付随させて、生成元ノード情報および格納先ノード一覧情報に加えて、分割前のログの時間帯を表す情報を送信する。また、分割データ送信部２３は、断片ログを送信した格納先ノード一覧を表す情報に加えて、分割前のログの時間帯を表す情報を含めて、送信履歴情報を保持する。
【００８７】
また、分割データ送信部２３は、他のノード２０における後述の格納先ノード検索部２５から、指定された時間帯の送信履歴情報の取得要求を受信する。そして、分割データ送信部２３は、指定された時間帯に対応する送信履歴情報を、要求元のノード２０に返信する。ここで、指定された時間に対応する複数の送信履歴情報があるケースも考えられる。この場合、分割データ送信部２３は、各送信履歴情報を、要求元のノード２０に返信すればよい。複数の送信履歴情報があるケースの詳細については後述する。
【００８８】
分割データ格納部２４は、本発明の第１の実施の形態における分割データ格納部１４と略同様に構成される。ただし、本実施の形態では、断片ログと共に格納する格納履歴情報の詳細が異なる。分割データ格納部２４は、格納履歴情報として、断片ログの生成元ノード情報、および、この断片ログに対応する格納先ノード一覧情報に加えて、分割前のログの時間帯を表す情報を、断片ログと共に格納する。これらの情報は、前述のように、断片ログの送信元から断片ログと共に送信されたものである。
【００８９】
また、分割データ格納部２４は、他のノード２０における後述の格納先ノード検索部２５から、特定のノード２０において特定の時間帯に対応する１つ以上の時間帯の各ログの断片ログを格納しているか否かの問い合わせを受信する。特定のノード２０において特定の時間帯に対応する１つ以上の時間帯の各ログの断片ログを格納しているか否かは、自ノードに格納している格納履歴情報に含まれる生成元ノード情報および時間帯を参照することにより判断できる。そして、分割データ格納部２４は、該当する断片ログを格納している場合、その断片ログと共に格納している格納履歴情報を、問い合わせ元のノード２０に返信する。
【００９０】
格納先ノード検索部２５は、ログの読み出し要求を入力として取得する。ここで、ログの読み出し要求は、ノード２０および時間帯を指定する情報として入力される。つまり、読み出し要求は、指定されたノード２０で記録された指定された時間帯の情報を含むログを読み出す要求である。以降、読み出し要求において指定されるノード２０を、読み出し対象のノード２０とも記載する。また、読み出し要求において指定される時間帯を、読み出し対象の時間帯とも記載する。
【００９１】
ここで、読み出し対象のノード２０において、読み出し対象の時間帯の情報を含むログは、１つのログとして分散格納されているとは限らない。読み出し対象の時間帯の情報を含むログは、複数のログとしてそれぞれ分散格納されている可能性がある。例えば、読み出し対象の時間帯が「時刻ｔ１〜ｔ３」であったとする。また、読み出し対象のノード２０において、ログバッファ２８のログが所定量を超えて分散格納が行われた時刻が、ｔ０、ｔ２、ｔ４であったとする。なお、ｔ０＜ｔ１＜ｔ２＜ｔ３＜ｔ４である。この場合、ノード２０には、時間帯ｔ０〜ｔ２のログを分散格納した際の送信履歴情報と、時間帯ｔ２〜ｔ４のログを分散格納した際の送信履歴情報とが保持されている。これらの送信履歴情報が、読み出し対象の時間帯ｔ１〜ｔ３に対応する各時間帯の送信履歴情報となる。
【００９２】
また、この場合、このノード２０における時間帯ｔ０〜ｔ２のログと、時間帯ｔ２〜ｔ４のログとでは、それぞれの断片ログの格納先となったノード２０の組合せが、同一であるとは限らない。これは、複数の時間帯のそれぞれのログが格納される時点において、格納先のノード２０を決定するために用いられた分割数ノード一覧情報は、更新により異なる可能性があるためである。
【００９３】
このようなケースを考慮して、格納先ノード検索部２５は、読み出し対象の時間帯に対応する１つ以上の時間帯のそれぞれのログについて、その断片ログの格納先となっているノード２０を復元数以上まで検索する必要がある。この検索処理を、格納先ノード検索部２５は、初期検索部２５１と、格納先推定部２５２と、格納先網羅部２５３とを用いて行う。
【００９４】
なお、格納先ノード検索部２５は、初期検索部２５１を用いて、各時間帯のログについて復元数以上のノード２０を特定できれば、格納先推定部２５２および格納先網羅部２５３を用いない。また、格納先ノード検索部２５は、初期検索部２５１を用いても復元数以上のノード２０を特定できない時間帯がある場合、格納先推定部２５２を用いて検索を行う。そして、格納先ノード検索部２５は、格納先推定部２５２を用いて各時間帯のログについて復元数以上のノード２０を特定できた場合、格納先網羅部２５３を用いない。また、格納先ノード検索部２５は、初期検索部２５１および格納先推定部２５２を用いても復元数以上のノード２０を特定できない時間帯がある場合、格納先網羅部２５３を用いて検索を行う。以下、初期検索部２５１、格納先推定部２５２、格納先網羅部２５３について、詳細を説明する。
【００９５】
初期検索部２５１は、読み出し対象のノード２０にアクセス可能かつ読み出し対象の時間帯の送信履歴情報が保持されている場合、そのノード２０から、読み出し対象の時間帯の送信履歴情報を取得する。なお、上述したように、読み出し対象のノード２０において、読み出し対象の時間帯に対応する複数の時間帯に関する送信履歴情報が保持されている場合がある。この場合、初期検索部２５１は、各時間帯について送信履歴情報を取得する。そして、初期検索部２５１は、取得したそれぞれの送信履歴情報に含まれる格納先ノード一覧の示すノード２０を、該当する断片ログの格納先として特定する。
【００９６】
また、初期検索部２５１は、読み出し対象のノード２０にアクセス不可能または読み出し対象の時間帯の送信履歴情報が保持されていない場合、この時点での分割数ノード一覧情報が示す各ノード２０に、該当する断片ログを格納しているか否かを順次問い合わせる。そして、初期検索部２５１は、該当する断片ログを格納しているノード２０を特定する。なお、問い合わせに伴い、初期検索部２５１は、そのノード２０において該当する断片ログと共に保持されている格納履歴情報を取得する。このとき、上述したように、該当するノード２０において、読み出し対象の時間帯に対応する複数の時間帯の断片ログが格納されている場合がある。その場合、初期検索部２５１は、該当するノード２０から、該当するそれぞれの断片ログと共に保持されている格納履歴情報を取得すればよい。
【００９７】
ここで、初期検索部２５１により、読み出し対象の時間帯に対応する１つ以上の全ての時間帯について、該当する断片ログの所在がそれぞれ復元数以上まで特定される可能性がある。この場合、格納先ノード検索部２５は、格納先推定部２５２および格納先網羅部２５３を用いない。ただし、初期検索部２５１だけでは、読み出し対象の時間帯に対応する１つ以上の時間帯のうち、該当する断片ログの所在が復元数以上まで特定されない時間帯がある可能性も考えられる。この場合、格納先ノード検索部２５は、格納先推定部２５２を用いて、該当するノード２０の検索を続ける。
【００９８】
格納先推定部２５２は、初期検索部２５１により検索されたノード２０から取得した格納履歴情報を参照する。そして、格納先推定部２５２は、検索されたノード２０から取得した格納履歴情報に含まれる格納先ノード一覧の示す各ノード２０のうち、まだ問い合わせを行っていない各ノード２０に対して、該当する断片ログを格納しているか否かの問い合わせを順次行う。そして、格納先推定部２５２は、検索されたノード２０から取得した格納履歴情報に基づいて、該当する断片ログを格納しているノード２０を検索することを繰り返す。このようにして、格納先推定部２５２は、初期検索部２５１だけでは復元数以上の断片ログの所在が特定できていなかった時間帯について、復元数以上となるまで残りの断片ログの所在を特定する。
【００９９】
ここで、格納先推定部２５２により、読み出し対象の時間帯に対応する１つ以上の全ての時間帯について、該当する断片ログの所在がそれぞれ復元数以上まで特定される可能性がある。この場合、格納先ノード検索部２５は、格納先網羅部２５３を用いない。ただし、初期検索部２５１および格納先推定部２５２だけでは、読み出し対象の時間帯に対応する１つ以上の時間帯のうち、該当する断片ログの所在が復元数以上まで特定されない時間帯がある可能性も考えられる。具体的には、既に検索された各ノード２０から得られた格納履歴情報の示すノード２０のうち、まだ問い合わせていないノード２０が無いにも関わらず、復元数以上の断片ログの所在が特定できていない時間帯があるといったケースが考えられる。この場合、格納先ノード検索部２５は、格納先網羅部２５３を用いて、該当するノード２０の検索を続ける。
【０１００】
格納先網羅部２５３は、情報処理システム２を構成する各ノード２０のうち、まだ問い合わせていない各ノード２０に対して、該当する断片ログを格納しているか否かを、順次問い合わせる。このようにして、格納先網羅部２５３は、初期検索部２５１および格納先推定部２５２だけでは復元数以上の断片ログの所在が特定できていなかった時間帯について、復元数以上となるまで残りの断片ログの所在を特定する。
【０１０１】
このようにして、格納先ノード検索部２５は、初期検索部２５１、格納先推定部２５２、格納先網羅部２５３を用いて、読み出し対象の時間帯に対応する各時間帯について、復元数以上の分割データの所在を特定する。ここで、格納先ノード検索部２５は、各時間帯について、分割数の分割データの所在を全て特定できることが望ましい。しかしながら、格納先のノード２０の中には、アクセス不可能となっているノード２０がある可能性もある。したがって、格納先ノード検索部２５は、各時間帯について、分割数の分割データのうち復元数以上のアクセス可能な全ての分割データの所在を特定するようにしてもよい。
【０１０２】
読み出しノード決定部２６は、読み出し対象の時間帯に対応する各時間帯のログについて、格納先ノード検索部２５によって特定された格納先のノード２０のうち、復元数のノード２０を決定する。具体的には、読み出しノード決定部２６は、マスタノードとなっているノード２０のノード状態管理部２１に問い合わせることにより、各ノード２０の状態に基づいて、復元数以上の格納先のノード２０を決定する。
【０１０３】
データ読み出し部２７は、読み出し対象の時間帯に対応する各時間帯のログについて、読み出しノード決定部２６によって決定された復元数のノード２０から、該当する断片ログを取得する。取得する断片ログは、読み出し対象のノード２０の指定された時間帯に対応する１つ以上の時間帯のログの断片ログである。そして、データ読み出し部２７は、読み出し対象の時間帯に対応する１つ以上の各時間帯のログを、それぞれ復元数の断片ログを用いて復元する。
【０１０４】
以上のように構成された情報処理システム２の動作について、図面を参照して説明する。
【０１０５】
まず、情報処理システム２のデータ格納動作を図８に示す。なお、図８において、左図は、書き込みを行うノード２０の動作を表し、右図は、格納先となった各ノード２０の動作を表す。また、ノード状態管理部２１の分割数ノード一覧情報は、マスタノードとなっているノード２０により適宜更新されているものとする。また、書き込みを行うノード２０は、ログバッファ２８のログが所定量を超えたタイミングで、下記の動作を開始するものとする。
【０１０６】
まず、分割データ生成部２２は、ログバッファ２８から、ログを取得する。また、分割データ生成部２２は、取得したログの時間帯を求める（ステップＡ１００）。なお、取得したログの時間帯は、前回取得した時刻から今回取得した時刻までである。あるいは、分割データ生成部２２は、取得したログの内容を参照することにより、その時間帯を求めてもよい。
【０１０７】
次に、分割データ生成部２２は、取得したログから、分割数の断片ログを生成する（ステップＡ１０１）。ここでは、本発明の第１の実施の形態と同様に、分割数より少ない復元数の断片ログを用いて元のログを復元可能な分割データ生成技術が用いられる。
【０１０８】
次に、分割データ送信部２３は、ノード状態管理部２１から分割数ノード一覧情報を取得し、取得した分割数ノード一覧情報の示す分割数のノード２０を、格納先として決定する（ステップＡ１０２）。
【０１０９】
次に、分割データ送信部２３は、ステップＡ１０１で生成された分割数の断片ログを、ステップＡ１０２で決定された分割数の格納先のノード２０に対して、それぞれ送信する（ステップＡ１０３）。このとき、前述のように、分割データ送信部２３は、元のログの時間帯、生成元ノード情報および格納先ノード一覧情報を、断片ログと共に格納先のノード２０に対してそれぞれ送信する。
【０１１０】
次に、分割データ送信部２３は、ステップＡ１０３で送信した断片ログの格納先ノード一覧および元のログの時間帯を表す情報を、送信履歴情報として保存する（ステップＡ１０４）。
【０１１１】
次に、断片ログを受信したノード２０では、分割データ格納部２４は、受信した断片ログを格納履歴情報と共に格納する（ステップＡ１０５）。ここで、格納履歴情報は、断片ログと共に受信した時間帯を表す情報、生成元ノード情報および格納先ノード一覧情報を含む。
【０１１２】
以上で、情報処理システム２は、データ格納動作を終了する。
【０１１３】
次に、情報処理システム２のデータ読み出し動作を図９に示す。なお、図９において、中央の図は、読み出しを行うノード２０の動作を示し、左図は、読み出し対象のノード２０の動作を示し、右図は、対象の断片ログを格納している各ノード２０の動作を示す。また、読み出しを行うノード２０は、読み出し対象のノード２０および読み出し対象の時間帯を指定する情報が入力されると、下記の動作を開始するものとする。
【０１１４】
まず、読み出しを行うノード２０の格納先ノード検索部２５は、読み出し対象のノード２０における読み出し対象の時間帯に対応する各時間帯のログについて、断片ログの格納先のノード２０を復元数以上まで特定する（ステップＢ１０１）。このステップの詳細については後述する。
【０１１５】
また、ステップＢ１０１の格納先検索動作に応じて、読み出し対象のノード２０の分割データ送信部２３は、読み出し対象の時間帯に対応する各時間帯の送信履歴情報を、読み出しを行うノード２０に送信する（ステップＢ１０２）。
【０１１６】
また、ステップＢ１０１の格納先検索動作に応じて、格納先のノード２０の分割データ格納部２４は、読み出し対象の時間帯に対応する各時間帯のログの断片ログと共に格納している格納履歴情報を、読み出しを行うノード２０に送信する（ステップＢ１０３）。
【０１１７】
次に、読み出しを行うノード２０の読み出しノード決定部２６は、読み出し対象の時間帯に対応する時間帯のそれぞれについて、特定された復元数以上の格納先のノード２０から、復元数のノード２０を決定する（ステップＢ１０４）。
【０１１８】
前述のように、読み出しノード決定部２６は、マスタノードのノード状態管理部２１に問い合わせることにより、各ノード２０の状態に基づいて、復元数のノード２０を決定すればよい。
【０１１９】
次に、読み出しを行うノード２０のデータ読み出し部２７は、各時間帯についてステップＢ１０４で決定された復元数のノード２０に対して、それぞれ該当する断片ログを要求する（ステップＢ１０５）。該当する断片ログは、読み出し対象のノード２０の読み出し対象の時間帯に対応する各時間帯のログから生成された断片ログである。
【０１２０】
次に、要求を受けたノード２０の分割データ格納部２４は、該当する断片ログを要求元のノード２０に返信する（ステップＢ１０６）。
【０１２１】
次に、読み出しを行うノード２０のデータ読み出し部２７は、各時間帯について、復元数の断片ログを用いて元のログを復元する（ステップＢ１０７）。
【０１２２】
以上で、情報処理システム２は、データ読み出し動作を終了する。
【０１２３】
次に、ステップＢ１０１における格納先検索動作の詳細を、図１０に示す。
【０１２４】
図１０では、まず、読み出しを行うノード２０の初期検索部２５１は、読み出し対象のノード２０がアクセス可能であるか否かを判断する（ステップＢ２０１）。
【０１２５】
ここで、読み出し対象のノード２０がアクセス可能である場合について説明する。この場合、読み出しを行うノード２０の初期検索部２５１は、読み出し対象のノード２０に対して、読み出し対象の時間帯に対応する１つ以上の各時間帯の送信履歴情報の送信を要求する（ステップＢ２０２）。
【０１２６】
次に、読み出し対象のノード２０の分割データ送信部２３は、図９のステップＢ１０２で説明したように、読み出し対象の時間帯に対応する１つ以上の各時間帯の送信履歴情報を、読み出しを行うノード２０に対して送信する。ここでは、１つまたは複数の時間帯についてそれぞれの送信履歴情報が送信される。ただし、読み出し対象のノード２０が、障害やその他の理由により、読み出し対象の時間帯に対応する１つ以上の時間帯の一部または全ての送信履歴情報を失い保持していない可能性もある。
【０１２７】
そこで、次に、読み出しを行うノード２０の初期検索部２５１は、読み出し対象のノード２０から、該当する各時間帯の送信履歴情報を取得できたか否かを判断する（ステップＢ２０３）。
【０１２８】
ここで、該当する各時間帯の送信履歴情報を取得できた場合について説明する。この場合、読み出しを行うノード２０の初期検索部２５１は、取得した各送信履歴情報に基づいて、各送信履歴情報に含まれる格納先ノード一覧の示すノード２０を特定する（ステップＢ２０４）。
【０１２９】
そして、読み出しを行うノード２０の格納先ノード検索部２５は、各時間帯について特定した格納先のノード２０を表す情報を返却し（ステップＢ２１１）、格納先検索動作を終了する。
【０１３０】
一方、ステップＢ２０１で、読み出し対象のノード２０がアクセス可能でなかった場合、または、ステップＢ２０３で、少なくとも一部の時間帯の送信履歴情報を取得できなかった場合について説明する。この場合、読み出しを行うノード２０の初期検索部２５１は、分割数ノード一覧情報の示す各ノード２０を問い合わせ対象とする。そして、初期検索部２５１は、問い合わせ対象のノード２０に対して、読み出し対象のノード２０における読み出し対象の時間帯に対応する各時間帯のログについて、その断片ログを格納しているか否かを問い合わせる（ステップＢ２０５）。
【０１３１】
次に、問い合わせを受けたノード２０の分割データ格納部２４は、図９のステップＢ１０３で説明したように、該当する断片ログを格納している場合、対応する格納履歴情報を、問い合わせ元のノード２０に返信する。ここでは、１つまたは複数の時間帯のログの断片ログについてそれぞれの格納履歴情報が送信される。
【０１３２】
なお、ステップＢ２０５において、初期検索部２５１は、送信履歴情報を取得できた時間帯については、その送信履歴情報に含まれる格納先ノード一覧の示すノード２０を特定すればよい。
【０１３３】
次に、読み出しを行うノード２０の格納先ノード検索部２５は、読み出し対象の時間帯に対応する各時間帯のログについて、格納先となる復元数以上のノード２０を特定できたか否かを判断する（ステップＢ２０６）。
【０１３４】
ここで、各時間帯について、格納先となる復元数以上のノード２０を特定できていると判断した場合について説明する（ステップＢ２０６でＹｅｓ）。この場合、読み出しを行うノード２０の格納先ノード検索部２５は、各時間帯について特定した格納先のノード２０を表す情報を返却し（ステップＢ２１１）、格納先検索動作を終了する。
【０１３５】
一方、格納先となる復元数以上のノード２０を特定できていない時間帯があると判断した場合について説明する（ステップＢ２０６でＮｏ）。
【０１３６】
この場合、格納先推定部２５２は、既に検索されたノード２０から得られた格納履歴情報に含まれる格納先ノード一覧の示す各ノード２０のうち、まだ問い合わせを行っていない各ノード２０を問い合わせ対象とする。そして、格納先推定部２５２は、問い合わせ対象のノード２０に対して、読み出し対象のノード２０における読み出し対象の時間帯に対応する各時間帯のログについて、その断片ログを格納しているか否かを問い合わせる（ステップＢ２０７）。
【０１３７】
次に、問い合わせを受けたノード２０の分割データ格納部２４は、図９のステップＢ１０３で説明したように、該当する断片ログを格納している場合、対応する格納履歴情報を、問い合わせ元のノード２０に返信する。ここでは、１つまたは複数の時間帯のログの断片ログについてそれぞれの格納履歴情報が送信される。
【０１３８】
次に、読み出しを行うノード２０の格納先ノード検索部２５は、読み出し対象の時間帯に対応する各時間帯のログについて、格納先となる復元数以上のノード２０を特定できたか否かを判断する（ステップＢ２０８）。
【０１３９】
ここで、各時間帯について、格納先となる復元数以上のノード２０を特定できていると判断した場合について説明する（ステップＢ２０８でＹｅｓ）。この場合、読み出しを行うノード２０の格納先ノード検索部２５は、各時間帯について特定した格納先のノード２０を表す情報を返却し（ステップＢ２１１）、格納先検索動作を終了する。
【０１４０】
一方、格納先となる復元数以上のノード２０を特定できていない時間帯があると判断した場合について説明する（ステップＢ２０８でＮｏ）。
【０１４１】
この場合、格納先ノード検索部２５は、新たに検索されたノード２０も含めて既に検索されたノード２０から得られた格納履歴情報に含まれる格納先ノード一覧の示す各ノード２０のうち、まだ問い合わせていないノード２０があるかを判断する（ステップＢ２０９）。
【０１４２】
ここで、まだ問い合わせていないノード２０がある場合（ステップＢ２０９でＹｅｓ）、格納先推定部２５２は、ステップＢ２０７からの動作を繰り返す。
【０１４３】
一方、まだ問い合わせていないノード２０がない場合（ステップＢ２０９でＮｏ）、格納先網羅部２５３は、情報処理システム２を構成する各ノード２０のうち、まだ問い合わせを行っていない各ノード２０を問い合わせ対象とする。そして、格納先網羅部２５３は、問い合わせ対象のノード２０に対して、読み出し対象のノード２０における読み出し対象の時間帯に対応する各時間帯のログについて、その断片ログを格納しているか否かを問い合わせる（ステップＢ２１０）。
【０１４４】
そして、格納先ノード検索部２５は、各時間帯について特定した格納先のノード２０を表す情報を返却し（ステップＢ２１１）、格納先検索動作を終了する。なお、格納先網羅部２５３によるステップＢ２１０の実行後も、格納先となる復元数以上のノード２０を特定できていない時間帯がある場合も考えられる。この場合、格納先ノード検索部２５は、その時間帯については、読み出し対象となるログが存在しない、もしくは、障害等により失われたと判断する。この場合、格納先ノード検索部２５は、復元数以上の格納先ノードが特定できた時間帯について、特定したノード２０を返却すればよい。なお、読み出し対象の時間帯に対応する全ての時間帯について復元数以上のノード２０を特定できない場合、格納先ノード検索部２５は、読み出し要求に対してエラーを返却する。
【０１４５】
以上で、ステップＢ１０１における格納先検索動作の詳細な説明を終了する。
【０１４６】
次に、本発明の第２の実施の形態の効果について述べる。
【０１４７】
本発明の第２の実施の形態としての情報処理システムは、複数のノードからなる情報処理システムにおいてログを分散管理する際に、耐障害性を向上させ、ログの格納・読み出しによる性能低下を抑えることができる。
【０１４８】
その理由について説明する。本実施の形態では、本発明の第１の実施の形態と同様の構成に加えて、次の構成を備える。すなわち、読み出し要求としてノードと時間帯の指定を受け付けたノードの格納先ノード検索部が、指定されたノードにおいて指定された時間帯に対応する各時間帯のログの断片ログについて、それぞれ復元数以上まで格納先ノードを特定するからである。具体的には、初期検索部が、読み出し対象のノードから各時間帯の送信履歴情報に基づいて各時間帯の格納先ノードを特定する。また、初期検索部が、読み出し対象のノードから各時間帯の送信履歴情報を取得できない場合、読み出し要求時点での分割数ノード一覧情報の示す各ノードに対して問い合わせることにより、該当する断片ログを格納しているノードを検索する。初期検索部を用いても復元数以上の格納先ノードを特定できない時間帯がある場合、格納先推定部が機能する。格納先推定部は、既に検索されたノードにおいて該当する断片ログと共に保持される格納履歴情報に含まれる格納先ノード一覧の示す各ノードに問い合わせることにより、該当する断片ログを格納しているノードを検索することを繰り返す。初期検索部と格納先推定部を用いても復元数以上の格納先ノードを特定できない時間帯がある場合、格納先網羅部が機能する。格納先網羅部は、情報処理システムを構成する各ノードのうち、まだ問い合わせていないノードに問い合わせることにより、該当する断片ログを格納しているノードを検索する。
【０１４９】
このように、本実施の形態は、ログの読み出し要求時に、低コストで処理を行う初期検索部または格納先推定部により、できるだけ少ないコストで格納先ノードを復元数以上まで特定する。そして、本実施の形態は、初期検索部または格納先推定部を用いても復元数以上の格納先ノードが検索できない時間帯がある場合にのみ、コストのかかる網羅手段を機能させるようにしている。その結果、本実施の形態は、格納済みログに関する情報を一元管理するノードを置かないこと、および、整合性維持のための制御の多くを省略することにより、ログの分散格納を効率化しながらも、ログの読み出し時のコスト増加を抑えることができる。
【０１５０】
また、ログは、頻繁に書き込まれるが滅多に読み出されないという特性がある。このため、本実施の形態は、上述のように格納時のコストを低減する代償として読み出し時のコストを若干増加させていても、全体としての効率を改善している。さらに、本実施の形態は、上述のように読み出し時のコスト増加を低減する構成のため、全体としての効率をさらに改善している。
【０１５１】
また、ログ読み出しが必要な場面は、情報処理システムに異常がある場合が少なくない。本実施の形態は、このように、格納済みログに関する情報を一元管理するノードを置かないことにより、情報処理システムの障害時などにも、より確実にログを読み出すことを可能にする。
【０１５２】
また、本実施の形態は、このように、ログを複数のノードに分散格納するので、ログを格納する専用の装置を必要としない。また、本実施の形態は、ログを生成するノードにログを保持させないので、ログを読み出したいノードへアクセスできない場合でも、ログ読み出しを可能とする。
【０１５３】
なお、本実施の形態において、ノード状態管理部が、各ノードの状態として、負荷を表す情報を収集し、各ノードの負荷に基づいて分割数のノードを選択する例について説明した。ただし、ノードの状態は、負荷を表す情報に限らない。例えば、ノード状態管理部は、ノードの状態として、各ノードに格納される断片ログの容量を収集し、断片ログの容量に基づいて分割数のノードを選択してもよい。例えば、ノード状態管理部は、断片ログの容量が少ない順に、分割数のノードを選択してもよい。その他、ノード状態は、ノードの状態を表す状態であれば、他の情報であってもよい。
【０１５４】
また、本実施の形態において、読み出しノード決定部は、マスタノードのノード状態管理部に問い合わせることにより、各ノードの状態に基づいて復元数の読み出しノードを決定する例について説明した。これに限らず、読み出しノード決定部は、読み出した断片ログから元のログを復元する際の計算コストがより少なくなるように、読み出しノードを決定してもよい。例えば、分割データ生成部がＲＡＤＩ６のようなデータ分割技術を採用している場合、読み出しノード決定部は、パリティではない断片ログを持っているノードを優先して読み出しノードとして選択してもよい。
【０１５５】
また、本実施の形態において、格納先ノード検索部は、情報処理システム全体の負荷が所定の低負荷条件を満たす場合には、初期検索部および格納先推定部を用いずに、格納先網羅部を用いて格納先ノードを検索してもよい。この場合、マスタノードのノード状態管理部が、情報処理システム全体の負荷が所定の低負荷条件を満たすか否かを判断し、各ノードに通知してもよい。このように、情報処理システムが低負荷である場合には最初から格納先網羅部を用いて全ノードへの問い合わせを行う場合、本実施の形態は、より高速に該当する断片ログを格納しているノードを検索できる。
【０１５６】
また、本実施の形態において、格納先ノード検索部が、読み出し対象の時間帯に対応する全ての時間帯についてそれぞれ復元数以上の格納先ノードを特定してから、読み出しノード決定部およびデータ読み出し部が動作するものとして説明した。さらなる改良として、本実施の形態において、格納先ノード検索部により、復元数以上の断片ログの所在を特定できた時間帯から順に、読み出しノード決定部およびデータ読み出し部が動作してもよい。これにより、本実施の形態は、読み出し対象の時間帯に対応する全ての時間帯についてそれぞれ復元数以上の断片ログの所在を特定してから読み出しを開始するよりも、高速に読み出しを行うことができる。また、ログを読み出す際には、読み出すログの示す時間帯の順序性は問われない。したがって、このように、読み出し要求に応じて、復元数以上の断片ログの所在が特定された時間帯から順次読み出しを開始することで、本実施の形態は、より効率的なログの読み出しを可能とする。
【０１５７】
また、本実施の形態において、初期検索部は、読み出し対象のノードにアクセスできない場合、読み出し要求時点での分割数ノード一覧情報に基づいて、格納先ノードの検索を行っていた。これに限らず、初期検索部は、読み出し対象の該当するログが分散格納された時点での分割数ノード一覧情報に基づいて、格納先ノードの検索を行ってもよい。この場合、ノード状態管理部が、分割数ノード一覧情報の更新履歴を更新時刻と共に保持しておいてもよい。そして、初期検索部が、読み出し対象の時間帯に関連する更新時刻に対応する過去の分割数ノード一覧情報を参照すればよい。また、この場合、全てのノード状態管理部が、分割数ノード一覧情報の更新履歴を保持していなくてもよい。例えば、マスタノードのノード状態管理部が分割数ノード一覧情報の更新履歴を保持しておき、各ノードの格納先ノード検索部は、必要に応じて、マスタノードのノード状態管理部に、過去の分割数ノード一覧情報を問い合わせてもよい。ただし、この場合、マスタノードとなるノードの切り替えにより、問い合わせ先のマスタノードのノード状態管理部が、対象の時刻の分割数ノード一覧情報を保持していない場合も考えられる。その場合には、初期検索部は、その時点の分割数ノード一覧情報を用いて、格納先ノードの検索を行えばよい。
【０１５８】
また、本実施の形態において、格納先推定部は、復元数以上の格納先ノードを特定できなかった時間帯がある場合に、さらに、ランダムに選択したノードに対して、順次問い合わせて検索を継続してもよい。この場合、問い合わせ先のノードは、情報処理システムを構成する他のノードのまだ問い合わせを行っていないノードからランダムに選択される。そして、これにより、各時間帯について復元数以上の格納先ノードを特定できた場合は、格納先ノード検索部は、格納先網羅部を用いなくてもよい。ただし、ランダムに選択したノードへの問い合わせを所定回数繰り返しても、復元数以上の格納先ノードを特定できなかった時間帯がある場合は、格納先ノード検索部は、格納先網羅部を用いて検索を継続すればよい。
【０１５９】
また、本実施の形態は、情報処理システムを構成するノードがグループに分割されている場合にも、適用することができる。例えば、大規模なグリッドコンピューティングシステム等を、あらかじめグループ分割を行って適切な規模にしておくことが考えられる。この場合、各ノードの各機能ブロックは、自ノードが属するグループの各ノードを対象として機能すればよい。例えば、各グループにおいてマスタノードとして機能するノードのノード状態管理部は、グループ内の各ノードの状態を収集し、グループ内の各ノードの状態に基づいて、グループ内のノードから分割数のノードを選択すればよい。これにより、分割データ送信部は、自ノードのログの断片ログを、グループ内における分割数のノードの分割データ格納部に分散格納することになる。また、読み出し要求時には、格納先ノード検索部およびデータ読み出し部は、自ノードが属するグループ内のノードのみと通信を行うことにより、格納先ノードの検索およびログ読み出しを行うことができる。このように、本実施の形態は、ノード数が多い大規模な情報処理システムであっても、グループ分割して適切な規模で動作することにより、同様の効果を奏することができる。
【０１６０】
また、本実施の形態において、分割データ格納部が、格納履歴情報を断片ログと共に格納する例について説明した。これに限らず、分割データ格納部は、格納履歴情報を断片ログのファイル名に含めてもよい。あるいは、分割データ格納部は、格納履歴情報を断片ログのファイルヘッダに格納してもよい。そして、この場合、分割データ送信部が、格納履歴情報をファイル名とする断片ログ、または、格納履歴情報をファイルヘッダに含む断片ログを、格納先ノードに送信すればよい。
【０１６１】
また、上述した本発明の各実施の形態において、各ノードの各機能ブロックが、メモリに記憶されたコンピュータ・プログラムを実行するＣＰＵによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
【０１６２】
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した各ノードの動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置（記憶媒体）に格納しておく。そして、係るコンピュータ・プログラムを当該ＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【０１６３】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【０１６４】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
【０１６５】
また、上述した各実施の形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
複数のノードからなる情報処理システムにおける前記ノードであって、
前記複数のノードのうち、任意のデータの分散格納先となり得る所定の分割数のノード一覧を表す分割数ノード一覧情報を、前記各ノードの状態に応じて他ノードと同期して更新しながら保持するノード状態管理部と、
自ノードに関連する情報を表す対象データから前記分割数の分割データを、前記分割数より少ない復元数の分割データで復元可能に生成する分割データ生成部と、
前記分割数ノード一覧情報の示す前記分割数のノードを格納先ノードとして、前記分割データ生成部によって生成された前記分割数の分割データを、前記分割数の格納先ノードに対してそれぞれ送信するとともに、送信先の格納先ノード一覧を表す情報を、送信履歴情報として保持する分割データ送信部と、
他ノードから受信した前記分割データを、該分割データの生成元ノードを表す情報および該分割データの元となる対象データから分割された分割データの格納先ノード一覧を表す情報を含む格納履歴情報と共に格納する分割データ格納部と、
読み出し要求として指定されるノード（読み出し対象のノード）に保持される前記送信履歴情報、または、前記ノード状態管理部に保持される前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定する格納先ノード検索部と、
前記格納先ノード検索部によって特定された格納先ノードのうち、前記復元数の格納先ノードを決定する読み出しノード決定部と、
前記読み出しノード決定部によって決定された各格納先ノードから前記分割データを取得し、取得した復元数の分割データを用いて前記対象データを復元するデータ読み出し部と、
を備えたノード。
（付記２）
前記格納先ノード検索部は、前記検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照して前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードをさらに検索することを繰り返すことにより、前記読み出し対象のノードに関連する対象データ毎に、前記復元数以上の格納先ノードを特定することを特徴とする付記１に記載のノード。
（付記３）
前記格納先ノード検索部は、前記復元数以上の格納先ノードを特定できない場合、前記複数のノードのそれぞれに順次問い合わせることにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定することを特徴とする付記１または付記２に記載のノード。
（付記４）
前記格納先ノード検索部は、前記各ノードの状態が所定条件を満たす場合、前記送信履歴情報、前記分割数ノード一覧情報、および、前記格納履歴情報を参照せずに、前記複数のノードのそれぞれに問い合わせることにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを所定の復元数以上まで特定することを特徴とする付記１から付記３のいずれか1つに記載のノード。
（付記５）
前記対象データが、任意の時間帯に関連する情報を表すとき、
前記分割データ送信部は、前記送信履歴情報に、送信した前記分割データの元となる対象データに関連する時間帯を表す情報を含め、
前記分割データ格納部は、他ノードから受信した前記分割データと共に格納する格納履歴情報に、該分割データの元となる対象データに関連する時間帯を表す情報を含め、
前記格納先ノード検索部は、前記読み出し対象のノードに加えて読み出し対象の時間帯を指定されると、前記読み出し対象のノードに保持される前記読み出し対象の時間帯に対応する１つ以上の時間帯の送信履歴情報、または、前記ノード状態管理部に保持される前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードにおいて前記読み出し対象の時間帯に対応する１つ以上の時間帯に関連する各対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照して前記１つ以上の時間帯に関連する各対象データの各分割データの格納先ノードをさらに検索することを繰り返すことにより、前記１つ以上の時間帯に関連する対象データ毎に、前記復元数以上まで前記格納先ノードを特定することを特徴とする付記１から付記４のいずれか1つに記載のノード。
（付記６）
少なくとも一部のノードの前記ノード状態管理部は、前記分割数ノード一覧情報の更新履歴を保持し、
前記格納先ノード検索部は、前記読み出し対象のノードに関連する対象データの格納時点における前記分割数ノード一覧情報を、前記更新履歴を保持するノードから取得し、取得した分割数ノード一覧情報の示すノードの中から、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索することを特徴とする付記１から付記５のいずれか1つに記載のノード。
（付記７）
前記ノード状態管理部は、自ノードの状態を表す情報を取得して蓄積し、自ノードがマスタノードである場合、他の各ノードからその状態を表す情報を取得して、前記複数のノードそれぞれの状態に基づいて前記分割数のノードを決定して前記分割数ノード一覧情報を更新し、更新した分割数ノード一覧情報を他の各ノードに送信し、自ノードがマスタノードでない場合、前記マスタノードから受信する前記分割数ノード一覧情報を用いて自ノードの前記分割数ノード一覧情報を更新することを特徴とする付記１から付記６のいずれか１つに記載のノード。
（付記８）
前記読み出しノード決定部は、前記各ノードの状態に基づいて、前記格納先ノード検索部によって特定された格納先ノードのうち、前記復元数の格納先ノードを決定することを特徴とする付記１から付記７のいずれか1つに記載のノード。
（付記９）
前記読み出しノード決定部は、復元にかかる計算コストに基づいて、前記格納先ノード検索部によって特定された格納先ノードのうち、前記復元数の格納先ノードを決定することを特徴とする付記１から付記７のいずれか1つに記載のノード。
（付記１０）
前記各ノードの状態として、前記各ノードの負荷を表す情報を適用することを特徴とする付記１から付記９のいずれか１つに記載のノード。
（付記１１）
前記各ノードの状態として、前記各ノードに格納される前記分割データの量を適用することを特徴とする付記１から付記１０のいずれか１つに記載のノード。
（付記１２）
前記分割データ生成部は、前記対象データに消失訂正符号を付加して前記分割数に分割することを特徴とする付記１から付記１１のいずれか１つに記載のノード。
（付記１３）
前記分割データ生成部は、誤り訂正符号を用いてデータを分散配置する技術に基づき前記対象データから前記分割数の分割データを生成することを特徴とする付記１から付記１１のいずれか１つに記載のノード。
（付記１４）
前記分割データ送信部は、前記各分割データに前記格納履歴情報を含めて、前記格納先ノードに送信し、
前記分割データ格納部は、前記格納履歴情報を含む分割データを格納することを特徴とする付記１から付記１３のいずれか１つに記載のノード。
（付記１５）
前記情報処理システムを構成する複数のノードがグループに分割されているとき、
自ノードが属するグループ内の複数のノードを対象として機能することを特徴とする付記１から付記１４のいずれか1つに記載のノード。
（付記１６）
複数の付記１から付記１５のいずれか１つに記載のノードからなる情報処理システム。
（付記１７）
複数のノードからなる情報処理システムにおいて、前記ノードが、
前記複数のノードのうち、任意のデータの分散格納先となり得る所定の分割数のノード一覧を表す分割数ノード一覧情報を、前記各ノードの状態に応じて他ノードと同期して更新しながら保持し、
自ノードに関連する情報を表す対象データから前記分割数の分割データを、前記分割数より少ない復元数の分割データで復元可能に生成し、
前記分割数ノード一覧情報の示す前記分割数のノードを格納先ノードとして、前記分割数の分割データを、前記分割数の格納先ノードに対してそれぞれ送信するとともに、送信先の格納先ノード一覧を表す情報を、送信履歴情報として保持し、
他ノードから受信した前記分割データを、該分割データの生成元ノードを表す情報および該分割データの元となる対象データから分割された分割データの格納先ノード一覧を表す情報を含む格納履歴情報と共に格納し、
読み出し要求として指定されるノード（読み出し対象のノード）に保持される前記送信履歴情報、または、前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定し、
特定した格納先ノードのうち、前記復元数の格納先ノードを決定し、
決定した各格納先ノードから前記分割データを取得し、取得した復元数の分割データを用いて前記対象データを復元する方法。
（付記１８）
複数のノードからなる情報処理システムにおける前記ノードに、
前記複数のノードのうち、任意のデータの分散格納先となり得る所定の分割数のノード一覧を表す分割数ノード一覧情報を、前記各ノードの状態に応じて他ノードと同期して更新しながら保持するノード状態管理ステップと、
自ノードに関連する情報を表す対象データから前記分割数の分割データを、前記分割数より少ない復元数の分割データで復元可能に生成する分割データ生成ステップと、
前記分割数ノード一覧情報の示す前記分割数のノードを格納先ノードとして、前記分割データ生成ステップで生成された前記分割数の分割データを、前記分割数の格納先ノードに対してそれぞれ送信するとともに、送信先の格納先ノード一覧を表す情報を、送信履歴情報として保持する分割データ送信ステップと、
他ノードから受信した前記分割データを、該分割データの生成元ノードを表す情報および該分割データの元となる対象データから分割された分割データの格納先ノード一覧を表す情報を含む格納履歴情報と共に格納する分割データ格納ステップと、
読み出し要求として指定されるノード（読み出し対象のノード）に保持される前記送信履歴情報、または、前記ノード状態管理ステップで保持される前記分割数ノード一覧情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを検索し、検索した格納先ノードに該分割データと共に保持される格納履歴情報を参照することにより、前記読み出し対象のノードに関連する対象データの各分割データの格納先ノードを前記復元数以上まで特定する格納先ノード検索ステップと、
前記格納先ノード検索ステップで特定された格納先ノードのうち、前記復元数の格納先ノードを決定する読み出しノード決定ステップと、
前記読み出しノード決定ステップで決定された各格納先ノードから前記分割データを取得し、取得した復元数の分割データを用いて前記対象データを復元する分割データ読み出しステップと、
を実行させるプログラム。
【符号の説明】
【０１６６】
１、２    情報処理システム
９    クライアント
１０、２０    ノード
１１、２１    ノード状態管理部
１２、２２    分割データ生成部
１３、２３    分割データ送信部
１４、２４    分割データ格納部
１５、２５    格納先ノード検索部
１６、２６    読み出しノード決定部
１７、２７    データ読み出し部
２８    ログバッファ
１０５    内部ネットワーク
１０６    外部ネットワーク
２１１    ノード状態収集部
２１２    ノード選択部
２５１    初期検索部
２５２    格納先推定部
２５３    格納先網羅部
１００１    ＣＰＵ
１００２    メモリ
１００５、１００６    ネットワークインタフェース
【図１】
0006432407.tif 000002
【図２】
0006432407.tif 000003
【図３】
0006432407.tif 000004
【図４】
0006432407.tif 000005
【図５】
0006432407.tif 000006
【図６】
0006432407.tif 000007
【図７】
0006432407.tif 000008
【図８】
0006432407.tif 000009
【図９】
0006432407.tif 000010
【図１０】
0006432407.tif 000011