(57)【特許請求の範囲】
【請求項１】
複数のストレージが共通して記憶するデータについての更新要求を受信した場合に、前記データの更新を準備させる更新要求を前記複数のストレージ間で所定の転送順で順次転送し、当該転送順とは逆の順に応答を転送し、応答を受信したストレージ装置から準備したデータの更新を適用する更新処理を行うストレージシステムにおいて、
前記データの更新要求の受信頻度に応じて、前記所定の転送順に従った転送における転送先に含まれる１以上のストレージを転送先から除外した転送順に前記所定の転送順を変更してデータの更新要求を転送するように制御する制御手段、
を備えたことを特徴とするストレージシステム。 
【請求項２】
前記制御手段は、前記転送先から除外したストレージが存在し、前記データの更新要求の受信頻度が所定の閾値よりも少ない場合は、当該ストレージを前記データの更新要求を転送する経路に復帰させた転送順に前記所定の転送順を変更してデータの更新要求を転送するように制御することを特徴とする請求項１に記載のストレージシステム。 
【請求項３】
前記転送先から除外したストレージが存在し、前記更新要求を受信した場合は、更新によるデータの差分を保持する保持手段をさらに備え、
前記制御手段は、前記転送先から除外されたストレージが存在し、前記データの更新要求の受信頻度が所定の閾値よりも少ない場合は、前記保持手段により保持したデータの差分を前記転送先から除外したストレージに適用し、その後、当該ストレージを前記経路に復帰させた転送順に前記所定の転送順を変更してデータの更新要求を転送するように制御することを特徴とする請求項２に記載のストレージシステム。 
【請求項４】
前記データについての読出しを要求する読出要求の受信頻度が所定の閾値よりも多い場合には、前記データを記憶していないストレージに、当該データを記憶させて、前記ストレージシステムに追加する追加手段と、
前記追加手段が新たに前記データを記憶させたストレージからデータの読出しが可能である旨を前記読出要求の送信元となるクライアントに通知する通知手段と、
をさらに備えることを特徴とする請求項１〜３のいずれか１つに記載のストレージシステム。
【請求項５】
前記追加手段は、新たにデータを記憶させた前記ストレージが存在し、前記読出要求の受信頻度が所定の閾値よりも少ない場合は、新たにデータを記憶させた前記ストレージを前記ストレージシステムから除外し、
前記通知手段は、前記追加手段が除外したストレージからデータの読出しができない旨を前記クライアントに通知することを特徴とする請求項４に記載のストレージシステム。
【請求項６】
前記制御手段は、前記転送先から除外したストレージが有する資源が枯渇した場合には、当該ストレージが記憶する前記データを削除することを特徴とする請求項３に記載のストレージシステム。 
【請求項７】
前記追加手段は、新たにデータを記憶させた前記ストレージが有する資源が枯渇した場合には、当該ストレージを前記ストレージシステムから除外することを特徴とする請求項５に記載のストレージシステム。 
【請求項８】
複数のストレージが共通して記憶するデータについての読出要求を受信した場合に、当該読出要求の送信元となるクライアントへ前記データを送信し、データについての更新要求を受信した場合に、前記データの更新を準備させる更新要求を前記複数のストレージ間で所定の転送順で順次転送し、当該転送順とは逆の順に応答を転送し、応答を受信したストレージ装置から準備したデータの更新を適用する複数のストレージを有するストレージシステムにおいて
前記読出要求の受信頻度が所定の閾値よりも多い場合には、前記データを記憶していないストレージに、前記データを記憶させて、前記データの更新要求を転送する経路に追加する追加手段と、
前記追加手段が新たに前記データを記憶させたストレージからデータの読出しが可能である旨を該読出要求の送信元となる前記クライアントに通知する通知手段と、
を有することを特徴とするストレージシステム。 
【請求項９】
前記追加手段は、新たに追加したストレージが存在する際に、前記データの読出要求を受信した回数が所定の閾値よりも少ない場合は、新たにデータを記憶させた前記ストレージを前記経路から除外し、
前記通知手段は、前記追加手段が除外したストレージからデータの読出しができない旨を前記クライアントに通知することを特徴とする請求項８に記載のストレージシステム。
【請求項１０】
複数のストレージ装置が共通して記憶するデータについての更新要求を受信した場合に、前記データの更新を準備させる更新要求を前記複数のストレージ装置間で所定の転送順で順次転送し、当該転送順とは逆の順に応答を転送し、応答を受信したストレージ装置から準備したデータの更新を適用する更新処理を行うストレージ装置において、
前記データの更新要求の受信頻度に応じて、前記所定の転送順に従った転送における転送先に含まれる１以上のストレージ装置を転送先から除外した転送順に前記所定の転送順を変更してデータの更新要求を転送するように制御する制御手段、
を備えたことを特徴とするストレージ装置。 
【請求項１１】
複数のストレージ装置が共通して記憶するデータについての読出要求を受信した場合に、当該読出要求の送信元となるクライアントへ前記データを送信し、複数のストレージ装置が共通して記憶するデータについての更新要求を受信した場合に、前記データの更新を準備させる更新要求を前記複数のストレージ装置間で所定の転送順で順次転送し、当該転送順とは逆の順に応答を転送し、応答を受信したストレージ装置から準備したデータの更新を適用する更新処理を行うストレージ装置において
前記読出要求の受信頻度が所定の閾値よりも多い場合には、前記データを記憶していないストレージ装置に、前記データを記憶させて前記データの更新要求を転送する経路に追加する追加手段と、
前記追加手段が新たに前記データを記憶させたストレージ装置からデータの読出しが可能である旨を該読出要求の送信元となる前記クライアントに通知する通知手段と、
を備えることを特徴とするストレージ装置。 
【請求項１２】
複数のストレージ装置が共通して記憶するデータについての更新要求を受信した場合に、前記データの更新を準備させる更新要求を前記複数のストレージ装置間で所定の転送順で順次転送し、当該転送順とは逆の順に応答を転送し、応答を受信したストレージ装置から準備したデータの更新を適用する更新処理を行うストレージ装置が実行するシステム制御プログラムにおいて、
前記データの更新要求の受信頻度に応じて、前記所定の転送順に従った転送における転送先に含まれる１以上のストレージ装置を転送先から除外した転送順に前記所定の転送順を変更してデータの更新要求を転送するように制御する
処理を実行することを特徴とするシステム制御プログラム。 
【請求項１３】
複数のストレージが共通して記憶するデータについての読出要求を受信した場合に、当該読出要求の送信元となるクライアントへ前記データを送信し、データについての更新要求を受信した場合に、前記データの更新を準備させる更新要求を前記複数のストレージ間で所定の転送順で順次転送し、当該転送順とは逆の順に応答を転送し、応答を受信したストレージ装置から準備したデータの更新を適用する複数のストレージを有するストレージシステムが実行するシステム制御プログラムにおいて
前記読出要求の受信頻度が所定の閾値よりも多い場合には、前記データを記憶していないストレージに、前記データを記憶させて、前記データの更新要求を転送する経路に追加し、
新たに前記データを記憶させたストレージからデータの読出しが可能である旨を該読出要求の送信元となる前記クライアントに通知する
処理を実行することを特徴とするシステム制御プログラム。 
【請求項１４】
複数のストレージ装置が共通して記憶するデータについての更新要求を受信した場合に、前記データの更新を準備させる更新要求を前記複数のストレージ装置間で所定の転送順で順次転送し、当該転送順とは逆の順に応答を転送し、応答を受信したストレージ装置から準備したデータの更新を適用する更新処理を行う複数のストレージ装置を有するストレージシステムが実行するシステム制御方法において、
前記データの更新要求の受信頻度に応じて、前記所定の転送順に従った転送における転送先に含まれる１以上のストレージ装置を転送先から除外した転送順に前記所定の転送順を変更してデータの更新要求を転送するように制御する
処理を実行することを特徴とするシステム制御方法。 
【請求項１５】
複数のストレージが共通して記憶するデータについての読出要求を受信した場合に、当該読出要求の送信元となるクライアントへ前記データを送信し、データについての更新要求を受信した場合に、前記データの更新を準備させる更新要求を前記複数のストレージ間で所定の転送順で順次転送し、当該転送順とは逆の順に応答を転送し、応答を受信したストレージ装置から準備したデータの更新を適用する複数のストレージを有するストレージシステムが実行するシステム制御方法において
前記読出要求の受信頻度が所定の閾値よりも多い場合には、前記データを記憶していないストレージに、前記データを記憶させて、前記データの更新要求を転送する経路に追加し、
新たに前記データを記憶させたストレージからデータの読出しが可能である旨を該読出要求の送信元となる前記クライアントに通知する
処理を実行することを特徴とするシステム制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム、ストレージ装置、システム制御プログラムおよびシステム制御方法に関する。
【背景技術】
【０００２】
従来、分散ＫＶＳ（Key-Value  Store）等のＮｏＳＱＬを初めとするストレージシステムにおいて、データの複製であるレプリカを複数のノードに配置する技術が知られている。このような技術が適用されたストレージシステムは、レプリカを複数のノードに配置することで、ディスク故障などによるデータの消失を防ぐとともに、各ノードに配置されたレプリカからデータの読出しを許可することで、アクセスの負荷分散を行う。
【０００３】
ここで、ストレージシステムは、各レプリカから読み出されるデータの同一性を保証するＳｔｒｏｎｇ  Ｃｏｎｓｉｓｔｅｎｃｙが要求される場合がある。このようなＳｔｒｏｎｇ  Ｃｏｎｓｉｓｔｅｎｃｙを保つ手法の一例として、チェインレプリケーションの技術が知られている。このようなチェインレプリケーションが適用されたストレージシステムの一例について以下に説明する。
【０００４】
まず、図１４を用いて、クライアントがＰｕｔ要求を発行した際にストレージシステムが実行する処理の一例について説明する。図１４は、チェインレプリケーションの一例について説明するための第１の図である。なお、図１４に示す例では、チェインレプリケーションの一例としてＣＲＡＱ（Ｃｈａｉｎ  Ｒｅｐｌｉｃａｔｉｏｎ  ｗｉｔｈ  Ａｐｐｏｒｔｉｏｎｅｄ  Ｑｕｅｒｙ）が適用されたストレージシステムについて説明する。
【０００５】
図１４に示す例では、ストレージシステムは、同一のレプリカを有するＮ個のノードを有する。なお、図１４に示す例では、ストレージシステムは、Ｎ個のノードのうち、１ｓｔノード、２ｎｄノード、３ｒｄノード、Ｎｔｈノード以外のノードについては、図示を省略した。
【０００６】
このようなストレージシステムが有する各ノードは、クライアントが発行したＰｕｔ要求を受信した場合には、各ノードを順に並べた経路に沿って、データの書込みを要求するｕｐｄａｔｅ要求を順次転送する。例えば、図１４中（Ａ）に示す例では、クライアントは、Ｐｕｔ要求を１ｓｔノードに発行する。このような場合には、１ｓｔノードは、新たなデータの書込みを準備するとともに、図１４中（Ｂ）に示すように、２ｎｄノードにｕｐｄａｔｅ要求を送信する。
【０００７】
次に、２ｎｄノードは、１ｓｔノードからｕｐｄａｔｅ要求を受信した場合には、新たなデータの書込みを準備するとともに、ｕｐｄａｔｅ要求を３ｒｄノードに転送する。その後、各ノードは、ｕｐｄａｔｅ要求を経路の終端となるＮｔｈノードまで順に転送する。また、図１４中（Ｃ）に示すように、経路の終端となるＮｔｈノードは、ｕｐｄａｔｅ要求を受信した場合には、新たなデータを書込むとともに、ｕｐｄａｔｅ要求に対する応答であるｕｐｄａｔｅｄ要求を経路の１つ前のノードに送信する。
【０００８】
その後、各ノードは、ｕｐｄａｔｅｄ要求を受信した場合は、準備したデータの書込みを実行するとともに、ｕｐｄａｔｅｄ要求を経路に沿って、始点となる１ｓｔノードまで順に転送する。そして、１ｓｔノードは、図１４中（Ｄ）に示すように、ｕｐｄａｔｅｄ要求を受信した場合には、準備したデータの書込みを実行し、書込み処理が終了した旨をクライアントに通知する。
【０００９】
次に、図１５を用いて、クライアントがＧｅｔ要求を発行した際にストレージシステムが実行する処理の一例について説明する。図１５は、チェインレプリケーションの一例について説明するための第２の図である。図１５に示す例では、１ｓｔノードからＮｔｈノードまでの各ノードは、各クライアント７〜７ｃからのＧｅｔ要求に対して、それぞれが記憶するレプリカのデータを送信する。このように、ストレージシステムは、Ｇｅｔ要求の発行先を分散させることで、Ｇｅｔ要求に対する性能を向上させる。
【００１０】
ここで、Ｎｔｈノード以外の各ノードは、データの書込みを準備している際に、クライアントからＧｅｔ要求を受付けた場合には、経路の終端となるＮｔｈノードが新たなデータの書込みを行ったか否かを問い合わせる。そして、各ノードは、Ｎｔｈノードが新たなデータの書込みを行った場合には、新たなデータを書込んだ後のレプリカのデータをクライアントに送信する。また、各ノードは、Ｎｔｈノードが新たなデータの書込みを行っていない場合には、新たなデータを書込む前のレプリカのデータをクライアントに送信する。
【００１１】
例えば、１ｓｔノードは、ｕｐｄａｔｅ要求を送信してからｕｐｄａｔｅｄ要求を受信するまでの間にクライアントからＧｅｔ要求を取得した場合には、図１５中（Ｅ）に示すように、新たなデータの書込みを行ったか否かをＮｔｈノードに問い合わせる。そして、１ｓｔノードは、Ｎｔｈノードから新たなデータを書込んだ旨の応答を取得した場合には、新たなデータの書込みを行った後のデータをクライアントに出力する。また、１ｓｔノードは、Ｎｔｈノードから新たなデータを書込んでいない旨の応答を取得した場合には、新たなデータの書込みを行う前のデータをクライアントに出力する。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２０１０−１４６０６７号公報
【非特許文献】
【００１３】
【非特許文献１】Object  Storage  on  CRAQ,  High-throughput  chain  replication  for  read-mostly  workloads,  Jeff  Terrace  and  Michael  J.Freedman  Princeton  University,  USENIX  annual  Technical  Conference.San  Diego,  CA,  June  2009.
【非特許文献２】Chain  Replication  for  Supporting  High  Throughput  and  Availability,  Robbert  van  Renesse,  Fred  B.Schneider,  USENIX  Association  OSDI’04:6th  Symposium  on  Operation  Systems  Design  and  Implementation
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかし、上述したチェインレプリケーションの技術では、レプリカを有するノードの数を変更することができないので、Ｐｕｔ要求に対する性能とＧｅｔ要求に対する性能とを調整することができないという問題がある。
【００１５】
すなわち、レプリカを記憶するノードの数を増加させた場合には、Ｇｅｔ要求に対する性能も向上する。しかし、レプリカを記憶するノードの数を増加させた場合には、データの書込み先が増加するため、Ｐｕｔ要求に対する性能が劣化してしまう。また、レプリカを記憶するノードの数を減少させた場合には、Ｐｕｔ要求に対する性能が向上するが、Ｇｅｔ要求の発行先となるレプリカの数が減少するため、Ｇｅｔ要求に対する性能が劣化してしまう。
【００１６】
このため、ストレージシステムは、例えばレプリカのデータの初期化時にはＰｕｔ要求に対する性能を向上させたいが、その後はＧｅｔ要求に対する性能を向上させたい場合に、適切な数のノードを設定することができない。
【００１７】
本願は、１つの側面では、Ｐｕｔ要求に対する性能とＧｅｔ要求に対する性能とを動的に調整する。
【課題を解決するための手段】
【００１８】
１つの側面では、複数のストレージが共通して記憶するデータについての更新要求を受信した場合に、データの更新を準備させる更新要求を複数のストレージ間で所定の転送順で順次転送し、かかる転送順とは逆の順に応答を転送し、応答を受信したストレージ装置から準備したデータの更新を適用する更新処理を行うストレージシステムである。このストレージシステムは、データの更新要求の受信頻度に応じて、所定の転送順に従った転送における転送先に含まれる１以上のストレージを転送先から除外した転送順に所定の順を変更してデータの更新要求を転送するように制御する。
【発明の効果】
【００１９】
１つの側面では、Ｐｕｔ要求に対する性能とＧｅｔ要求に対する性能とを動的に調整する。
【図面の簡単な説明】
【００２０】
【図１】図１は、実施例１に係るストレージシステムのシステム構成を説明するための図である。
【図２】図２は、実施例１に係るノードがＰｕｔ要求を受信した際に実行する処理の一例を説明するための図である。
【図３】図３は、実施例１に係るノードの機能的構成を説明するための図である。
【図４Ａ】図４Ａは、チェーン管理表の一例を説明するための第１の図である。
【図４Ｂ】図４Ｂは、チェーン管理表の一例を説明するための第２の図である。
【図４Ｃ】図４Ｃは、チェーン管理表の一例を説明するための第３の図である。
【図５】図５は、ファントムレプリカ管理表の一例を説明するための図である。
【図６】図６は、テンポラリレプリカ管理表の一例を説明するための図である。
【図７】図７は、ファントムレプリカを生成する処理を説明するための図である。
【図８Ａ】図８Ａは、更新後のチェーン管理表の一例を説明するための第１の図である。
【図８Ｂ】図８Ｂは、更新後のチェーン管理表の一例を説明するための第２の図である。
【図９】図９は、テンポラリレプリカを生成する処理を説明するための図である。
【図１０Ａ】図１０Ａは、ファントムレプリカを設定する処理の流れを説明するためのフローチャートである。
【図１０Ｂ】図１０Ｂは、データの積算を記憶する処理の流れを説明するためのフローチャートである。
【図１０Ｃ】図１０Ｃは、ファントムレプリカを復帰させる処理の流れを説明するためのフローチャートである。
【図１１Ａ】図１１Ａは、テンポラリレプリカを作成する処理の流れを説明するためのフローチャートである。
【図１１Ｂ】図１１Ｂは、テンポラリレプリカを削除する処理の流れを説明するためのフローチャートである。
【図１２】図１２は、レプリカを削除する処理の流れを説明するためのフローチャートである。
【図１３】図１３は、システム制御プログラムを実行するコンピュータの一例を説明するための図である。
【図１４】図１４は、チェインレプリケーションの一例について説明するための第１の図である。
【図１５】図１５は、チェインレプリケーションの一例について説明するための第２の図である。
【発明を実施するための形態】
【００２１】
以下に添付図面を参照して本願に係るストレージシステム、ストレージ装置、システム制御プログラムおよびシステム制御方法について説明する。
【実施例１】
【００２２】
以下の実施例１では、図１を用いて、ストレージシステムの一例を説明する。図１は、実施例１に係るストレージシステムのシステム構成を説明するための図である。図１に示す例では、ストレージシステム１は、クライアント２をＩＰ（Internet  Protocol）網３を介してデータセンター４と接続する。ここで、クライアント２には、複数のクライアント２ａ、２ｂが含まれる。
【００２３】
データセンター４は、ストレージプロキシ５、ＬＡＮ（Local  Area  Network）６、ストレージサーバノード７を有する。ここで、ストレージプロキシ５は、複数のプロキシサーバ５ａ〜５ｃを有する。また、ストレージサーバノード７は、複数のノード１０〜１０ｂ、１１〜１１ｂ、１２〜１２ｂを有する。なお、ストレージサーバノード７は、他にも複数のノードを有するが、図１に示す例では、ノード１０〜１０ｂ、１１〜１１ｂ、１２〜１２ｂ以外のノードについては表示を省略した。
【００２４】
なお、ノードとは、例えば、データの複製であるレプリカを記憶する記憶装置と、他のノードとの通信処理、データの更新処理、データの管理処理等を実行する演算処理装置とを有するストレージ装置や情報処理装置、サーバ等である。ここで、各ノード１０〜１０ｂ、１１〜１１ｂ、１２〜１２ｂは、それぞれ相互に接続され、通信を行うことができるものとする。
【００２５】
各ノード１０〜１０ｂ、１１〜１１ｂ、１２〜１２ｂは、データの複製であるレプリカを記憶する。例えば、各ノード１０〜１２は、データＡの複製であるレプリカＡ１〜Ａ３を記憶し、各ノード１０ａ〜１２ａは、データＢの複製であるレプリカＢ１〜Ｂ３を記憶し、各ノード１０ｂ〜１２ｂは、データＣの複製であるレプリカＣ１〜Ｃ３を記憶する。なお、以下の説明においては、各ノード１０〜１０ｂ、１１〜１１ｂ、１２〜１２ｂは、１つのデータについて３つのレプリカを記憶するが、レプリカの数はこれに限定されるものではなく、設定次第で任意の数のレプリカを生成することができる。
【００２６】
ここで、各レプリカには、１ｓｔレプリカ、２ｎｄレプリカ、３ｒｄレプリカが設定されており、１ｓｔレプリカを記憶するノードがＰｕｔ要求を受付けるノードとなる。例えば、ノード１０が１ｓｔレプリカであるレプリカＡ１を記憶し、ノード１１が２ｎｄレプリカであるレプリカＡ２を記憶し、ノード１２が３ｒｄレプリカであるレプリカＡ３を記憶する場合には、ノード１０がデータＡに対するＰｕｔ要求を受付けるノードとなる。
【００２７】
クライアント２ａ、２ｂは、各ノード１０〜１０ｂ、１１〜１１ｂ、１２〜１２ｂが記憶するデータの更新（書込み）を要求するＰｕｔ要求や、各ノード１０〜１０ｂ、１１〜１１ｂ、１２〜１２ｂが記憶するデータの読出しを要求するＧｅｔ要求を発行する。そして、クライアント２ａ、２ｂは、発行したＰｕｔ要求やＧｅｔ要求を、ＩＰ網３を介して、データセンター４のストレージプロキシ５に送信する。
【００２８】
ストレージプロキシ５が有する各プロキシサーバ５ａ〜５ｃは、クライアント２ａ、２ｂからＰｕｔ要求またはＧｅｔ要求を受信する。このような場合には、各プロキシサーバ５ａ〜５ｃは、ＬＡＮ６を介して、Ｐｕｔ要求やＧｅｔ要求をストレージサーバノード７が有する各ノード１０〜１０ｂ、１１〜１１ｂ、１２〜１２ｂに配信する。この際、プロキシサーバ５ａ〜５ｃは、以下の処理を実行する。
【００２９】
すなわち、プロキシサーバ５ａ〜５ｃは、受信した要求がＰｕｔ要求である場合には、データの更新対象となるレプリカを識別する。そして、各ノード１０〜１０ｂ、１１〜１１ｂ、１２〜１２ｂのうち、識別したレプリカの１ｓｔレプリカを記憶するノードに対してＰｕｔ要求を配信する。例えば、プロキシサーバ５ａ〜５ｃは、レプリカＡ１〜Ａ３に対するＰｕｔ要求を受信した場合には、１ｓｔレプリカであるレプリカＡ１を記憶するノード１０にＰｕｔ要求を配信する。
【００３０】
一方、プロキシサーバ５ａ〜５ｃは、受信した要求がＧｅｔ要求である場合には、Ｇｅｔ要求の対象となるデータを識別し、識別したデータのレプリカを記憶するいずれかのノードに対してＧｅｔ要求を配信する。例えば、プロキシサーバ５ａ〜５ｃは、データＡに対するＧｅｔ要求を受信した場合には、データＡのレプリカＡ１〜Ａ３を記憶するノード１０〜１２のうち、いずれかのノードに対してＧｅｔ要求を配信する。
【００３１】
次に、ストレージサーバノード７が有する各ノード１０〜１０ｂ、１１〜１１ｂ、１２〜１２ｂについて説明する。なお、以下の説明においては、ノード１０が実行する処理について説明し、ノード１０ａ、１０ｂ、１１〜１１ｂ、１２〜１２ｂについては、ノード１０が有する機能と同様の機能を発揮するものとして、説明を省略する。
【００３２】
ノード１０は、Ｇｅｔ要求を受信した場合には、Ｇｅｔ要求の対象となるデータをＬＡＮ６、ストレージプロキシ５、ＩＰ網３を介して、クライアント２ａ、２ｂに送信する。また、ノード１０は、Ｐｕｔ要求を受信した場合には、Ｐｕｔ要求の対象となるデータのレプリカを記憶する他のノードに対して、データの更新を要求するｕｐｄａｔｅ要求を送信する。
【００３３】
ここで、図２を用いて、ノード１０がＰｕｔ要求を受信した際に実行する処理の一例について説明する。図２は、実施例１に係るノードがＰｕｔ要求を受信した際に実行する処理の一例を説明するための図である。例えば、図２に示す例では、クライアント２ａは、データＡを対象とするＰｕｔ要求を発行する。このような場合には、データＡのレプリカＡ１〜Ａ３のうち、１ｓｔレプリカであるＡ１を記憶するノード１０にＰｕｔ要求が配信される。
【００３４】
ここで、ノード１０は、Ｐｕｔ要求を取得した場合には、自身が記憶するデータＡの１ｓｔレプリカであるレプリカＡ１に対する書込み処理、すなわち、レプリカの更新を準備する。また、ノード１０は、Ｐｕｔ要求の対象となるデータＡの２ｎｄレプリカをノード１１が記憶していると判別する。そして、ノード１０は、データの更新要求であるｕｐｄａｔｅ要求をノード１１に送信する。
【００３５】
次に、ノード１１は、ｕｐｄａｔｅ要求を受信した場合には、自身が記憶する２ｎｄレプリカの更新を準備するとともに、ｕｐｄａｔｅ要求の対象となるデータＡの３ｒｄレプリカをノード１２が記憶していると判別する。そして、ノード１１は、ノード１２へｕｐｄａｔｅ要求を転送する。
【００３６】
次に、ノード１２は、３ｒｄレプリカを更新するとともに、ｕｐｄａｔｅ要求に対する応答であるｕｐｄａｔｅｄ要求をノード１１に送信する。ノード１１は、ｕｐｄａｔｅｄ要求を受信した場合には、準備していた２ｎｄレプリカの更新を実行するとともに、ｕｐｄａｔｅｄ要求をノード１０に転送する。そして、ノード１０は、ｕｐｄａｔｅｄ要求を受信した場合には、準備していた１ｓｔレプリカの更新を実行し、Ｐｕｔ要求に対する応答であるＰｕｔ応答をクライアント２ａに送信する。
【００３７】
ここで、ノード１０は、所定の時間内に受信したＰｕｔ要求の数をカウントする。そして、ノード１０は、カウントしたＰｕｔ要求の数、すなわち、データの更新を行う頻度である更新頻度が所定の閾値よりも多いか否かを判別する。その後、ノード１０は、更新頻度が所定の閾値よりも多いと判別した場合には、ｕｐｄａｔｅ要求を送信する経路に含まれるノード１１、１２のうち、どちらかのノードを経路から除外する。
【００３８】
例えば、ノード１０は、ノード１１をファントムレプリカとして、ｕｐｄａｔｅ要求を転送する経路から除外する。このような場合には、ノード１０は、ノード１２に対してｕｐｄａｔｅ要求を送信し、ノード１２は、ノード１０に対してｕｐｄａｔｅｄ要求を送信する。つまり、ノード１０は、ｕｐｄａｔｅ要求を送信するノードを１つ削減するので、Ｐｕｔ要求に対する性能を向上させることができる。
【００３９】
また、ノード１０は、ファントムレプリカが存在する場合に、更新頻度が所定の閾値よりも少なくなった場合には、ファントムレプリカを元のノードとして復帰させる。例えば、ノード１０は、ノード１１をファントムレプリカとした後に、更新頻度が所定の閾値よりも少なくなった場合には、ノード１１をｕｐｄａｔｅ要求を送信する経路に復帰させる。このため、ノード１０は、更新頻度に応じてＰｕｔ要求に対する性能を調整することができる。
【００４０】
また、ノード１０は、所定の時間内に受信したＧｅｔ要求の数をカウントする。そして、ノード１０は、カウントしたＧｅｔ要求の数、すなわち、データの読出しを行う頻度である参照頻度が所定の閾値よりも多いか否かを判別する。その後、ノード１０は、参照頻度が所定の閾値よりも多いと判別した場合には、自身と同じレプリカを記憶するノードを追加する。
【００４１】
すなわち、ノード１０は、自身が記憶するレプリカと同じデータのレプリカを記憶していないサーバに、自身が記憶するレプリカと同じデータのレプリカをテンポラリレプリカとして記憶させる。そして、ノード１０は、テンポラリレプリカを記憶したノードに対してＧｅｔ要求の発行が可能である旨を各プロキシサーバ５ａ〜５ｃに通知する。このため、ノード１０は、Ｇｅｔ要求の発行先を分散させ、Ｇｅｔ要求に対する性能を向上させることができる。
【００４２】
また、ノード１０は、参照頻度が所定の閾値よりも少ないと判別した場合には、追加したノードを削除する。すなわち、ノード１０は、他のノードに記憶させたテンポラリレプリカを削除し、テンポラリレプリカを削除したノードに対してＧｅｔ要求の発行ができなくなった旨を各プロキシサーバ５ａ〜５ｃに通知する。このため、ノード１０は、参照頻度に応じて、Ｇｅｔ要求に対する性能を調整することができる。
【００４３】
次に、図３を用いて、ノード１０の一例について説明する。図３は、実施例１に係るノードの機能的構成を説明するための図である。図３に示す例では、ノード１０は、ネットワークインターフェース２０、Ｐｕｔ要求処理部２１、Ｇｅｔ要求処理部２２、チェーン管理部２３、ファントムレプリカ生成部２４、テンポラリレプリカ生成部２５を有する。また、ノード１０は、ファントムレプリカ復帰部２６、テンポラリレプリカ削除部２７、レプリカ生成部２８、レプリカ生成依頼部２９、レプリカ記憶部３０、ファントムレプリカ管理部３１、テンポラリレプリカ管理部３２を有する。
【００４４】
レプリカ記憶部３０は、レプリカのデータを記憶する記憶部である。例えば、レプリカ記憶部３０、データＡに関する１ｓｔレプリカであるレプリカＡ１を記憶する。また、レプリカ記憶部３０は、データＤに関する３ｒｄレプリカであるレプリカＤ３を記憶する。このように、レプリカ記憶部３０は、それぞれ異なるデータの複製である複数のレプリカを記憶することができる。
【００４５】
チェーン管理部２３は、チェーン管理表２３ａ、ファントムレプリカ管理表２３ｂ、テンポラリレプリカ管理表２３ｃを有する。ここで、チェーン管理表２３ａとは、ｕｐｄａｔｅ要求およびｕｐｄａｔｅｄ要求を送信する経路であるチェーンの管理情報である。
【００４６】
ここで、図４Ａを用いて、チェーン管理表の一例について説明する。なお、図４Ａは、チェーン管理表の一例を説明するための第１の図である。例えば、ノード１０のチェーン管理部２３は、図４Ａに例示したチェーン管理表２３ａを記憶する。ここで、チェーン管理表２３ａには、チェーンＩＤ、レプリカタイプ、前方レプリカ、後方レプリカ、更新頻度、参照頻度を対応付けた情報が格納されている。チェーンＩＤとは、チェーンを一意に識別するための番号であり、レプリカの元となるデータごとに異なる番号が設定される。
【００４７】
例えば、データＡのレプリカであるレプリカＡ１〜Ａ３のチェーンには、チェーンＩＤ「１」が設定され、データＢのレプリカであるレプリカＢ１〜Ｂ３のチェーンには、チェーンＩＤ「２」が設定される。また、データＣのレプリカであるレプリカＣ１〜Ｃ３のチェーンには、チェーンＩＤ「３」が設定される。このように、チェーンＩＤは、レプリカの元となるデータの種別に応じて、異なる番号が付与されることとなる。
【００４８】
レプリカタイプとは、自身が記憶するレプリカの属性を示す情報である。例えば、ノード１０がレプリカＡ１を記憶している場合には、チェーンＩＤ「１」と対応付けて、レプリカタイプ「１ｓｔ」が記憶される。また、ノード１０がレプリカＢ２を記憶している場合には、チェーンＩＤ「２」と対応付けて、レプリカタイプ「２ｎｄ」が記憶される。
【００４９】
前方レプリカとは、対応付けられたチェーンＩＤが示すチェーンにおいて、前方となるレプリカを記憶するノード、すなわち、自身にとってｕｐｄａｔｅ要求の送信元であり、ｕｐｄａｔｅｄ要求の送信先となる前方ノードを示す情報である。後方レプリカとは、対応付けられたチェーンＩＤが示すチェーンにおいて、後方となるレプリカを記憶するノード、すなわち、自身にとってｕｐｄａｔｅ要求の送信先であり、ｕｐｄａｔｅｄ要求の送信元となる後方ノードを示す情報である。
【００５０】
更新頻度とは、所定の時間が経過するまでの間に受信したＰｕｔ要求の数である。すなわち、更新頻度とは、所定の時間が経過するまでの間にレプリカの更新処理を何度実行したかを示す情報である。また、参照頻度とは、所定の時間が経過するまでの間に受信したＧｅｔ要求の数である。すなわち、参照頻度とは、所定の時間が経過するまでの間にレプリカの読出し処理を何度実行したかを示す情報である。
【００５１】
例えば、図４Ａに示す例では、チェーン管理表２３ａは、ノード１０がチェーンＩＤ「１」のチェーン、すなわち、データＡのレプリカＡ１〜Ａ３のチェーンについて、１ｓｔレプリカであるＡ１を記憶していることを示す。また、チェーン管理表２３ａは、レプリカＡ１をノード１１が記憶していることを示す。また、チェーン管理表２３ａは、データＡのレプリカＡ１〜Ａ３について、所定の時間が経過するまでの間に「４」回の更新が行われ、ノード１０が記憶するレプリカＡ１の読出しが「４」回行われたことを示す。
【００５２】
次に、図４Ｂおよび図４Ｃを用いて、ノード１１およびノード１２が有するチェーン管理表の一例について説明する。なお、図４Ｂは、チェーン管理表の一例を説明するための第２の図である。また、図４Ｃは、チェーン管理表の一例を説明するための第３の図である。また、図４Ｂには、ノード１１が有するチェーン管理表の一例を記載し、図４Ｃには、ノード１２が有するチェーン管理表の一例を記載した。
【００５３】
すなわち、図４Ｂに示す例では、チェーン管理表は、ノード１１がデータＡのレプリカＡ１〜Ａ３のチェーンについて、２ｎｄレプリカであるＡ２を記憶していることを示す。また、チェーン管理表は、前方レプリカであるＡ１を記憶する前方ノードがノード１０であり、後方レプリカであるＡ３を記憶する後方ノードがノード１２であることを示す。また、チェーン管理表は、データＡのレプリカＡ１〜Ａ３について、所定の時間が経過するまでの間に「４」回の更新が行われ、ノード１１が記憶するレプリカＡ２の読出しが「７」回行われたことを示す。
【００５４】
また、図４Ｃに示す例では、チェーン管理表は、ノード１２がデータＡのレプリカＡ１〜Ａ３のチェーンについて、３ｒｄレプリカであるＡ３を記憶していることを示す。また、チェーン管理表は、前方レプリカであるＡ２を記憶する前方ノードがノード１１であることを示す。また、チェーン管理表は、データＡのレプリカＡ１〜Ａ３について、所定の時間が経過するまでの間に「４」回の更新が行われ、ノード１２が記憶するレプリカＡ３の読出しが「９」回行われたことを示す。
【００５５】
図３に戻って、ファントムレプリカ管理表２３ｂは、ノード１０が設定したファントムレプリカの管理情報である。また、テンポラリレプリカ管理表２３ｃは、ノード１０が設定したテンポラリレプリカの管理情報である。以下、図５および図６を用いて、ファントムレプリカ管理表２３ｂおよびテンポラリレプリカ管理表２３ｃの一例について説明する。
【００５６】
まず、図５を用いて、ファントムレプリカ管理表２３ｂの一例を説明する。図５は、ファントムレプリカ管理表の一例を説明するための図である。図５に示す例では、ファントムレプリカ管理表２３ｂには、チェーンＩＤ、ファントムレプリカを記憶するノード、更新データが対応付けて記憶される。
【００５７】
ここで、更新データとは、ファントムレプリカに適用されていない更新処理を示す情報であり、例えば、更新処理の実行によって生じる差分データである。すなわち、ノード１０は、Ｐｕｔ要求を受信した際に、ファントムレプリカに対してｕｐｄａｔｅ要求を送信しない。そこで、ノード１０は、ｕｐｄａｔｅ要求による更新前と更新後との差分データをＰｕｔ要求を受信する度に生成し、生成した差分データを更新データとして記憶する。すなわち、図５に示す例では、ファントムレプリカ管理表２３ｂは、ノード１１がファントムレプリカであり、複数の更新データである更新１、更新２…が存在することを示す。
【００５８】
次に、図６を用いて、テンポラリレプリカ管理表２３ｃの一例について説明する。図６は、テンポラリレプリカ管理表の一例を説明するための図である。図６に示すように、テンポラリレプリカ管理表２３ｃには、チェーンＩＤとテンポラリレプリカを設定したノードとが対応付けて記憶される。すなわち、図６に示す例では、テンポラリレプリカ管理表２３ｃは、チェーンＩＤ「１」に係るテンポラリレプリカ、すなわち、データＡのテンポラリレプリカがノード１１ａおよびノード１１ｂに設定されていることを示す。
【００５９】
図３に戻って、ネットワークインターフェース２０は、ＬＡＮ６と接続されており、各プロキシサーバ５ａ〜５ｂが送信したＰｕｔ要求やＧｅｔ要求を受信する。また、ネットワークインターフェース２０は、Ｐｕｔ返答やレプリカのデータを各プロキシサーバ５ａ〜５ｂに送信する。また、ネットワークインターフェース２０は、ストレージサーバノード７が有する各ノード１０ａ、１０ｂ、１１〜１１ｂ、１２〜１２ｂとｕｐｄａｔｅ要求やｕｐｄａｔｅｄ要求の送受信を行う。
【００６０】
また、ネットワークインターフェース２０は、各ノード１０ａ、１０ｂ、１１〜１１ｂ、１２〜１２ｂとの間でレプリカの生成処理や削除処理の実行要求を送受信する。なお、図３に示す例では、図が煩雑になるのを防ぐため、ネットワークインターフェース２０とＬＡＮ６および各ノード１０ａ、１０ｂ、１１〜１１ｂ、１２〜１２ｂとの接続については省略した。
【００６１】
Ｐｕｔ要求処理部２１は、Ｐｕｔ要求を受信した場合には、レプリカの更新を実行する。具体的には、Ｐｕｔ要求処理部２１は、ネットワークインターフェース２０を介してＰｕｔ要求を受信した場合には、Ｐｕｔ要求の対象となるデータを更新するレプリカをレプリカ記憶部３０から検索し、検索したレプリカの更新を準備する。
【００６２】
また、Ｐｕｔ要求処理部２１は、チェーン管理表２３ａがＰｕｔ要求の対象となるレプリカのチェーンと対応付けて記憶する更新頻度を１インクリメントする。そして、Ｐｕｔ要求処理部２１は、Ｐｕｔ要求の対象となるレプリカを更新するチェーンと対応付けて記憶された後方ノードをチェーン管理表２３ａから識別する。その後、Ｐｕｔ要求処理部２１は、識別した後方ノードにｕｐｄａｔｅ要求を送信する。
【００６３】
また、Ｐｕｔ要求処理部２１は、チェーン管理表２３ａに、前方ノードが記憶されていなかったチェーンに係るｕｐｄａｔｅｄ要求を受信した場合、すなわち、ノード１０が識別したチェーンにおいて始端となるノードである場合には、以下の処理を実行する。すなわち、Ｐｕｔ要求処理部２１は、準備した更新を適用し、Ｐｕｔ要求を発行したクライアントにＰｕｔ返答を送信する。
【００６４】
また、Ｐｕｔ要求処理部２１は、ファントムレプリカを記憶するノードがＰｕｔ要求の対象となるレプリカのチェーンと対応付けてファントムレプリカ管理表２３ｂに記憶されている場合には、更新処理による差分データを生成する。そして、Ｐｕｔ要求処理部２１は、生成した差分データを更新データとしてファントムレプリカ管理表２３ｂに格納する。
【００６５】
また、Ｐｕｔ要求処理部２１は、ｕｐａｔｅ要求を受信した場合には、テンポラリレプリカ管理表２３ｃを参照し、ｕｐｄａｔｅ要求の対象となるレプリカのチェーンと対応付けて記憶されたテンポラリレプリカを記憶するノードを削除する。このような処理によって、ノード１０は、レプリカの更新時に発生する性能低下を防ぐことができる。なお、Ｐｕｔ要求処理部２１は、上述した処理とは別に、所定の時間が経過するたびに、チェーン管理表２３ａの更新頻度を０に更新する。
【００６６】
Ｇｅｔ要求処理部２２は、Ｇｅｔ要求を発行したクライアントに対して、Ｇｅｔ要求の対象となるレプリカのデータを送信する。具体的には、Ｇｅｔ要求処理部２２は、ネットワークインターフェース２０を介してＧｅｔ要求を受信した場合には、Ｇｅｔ要求の対象となるレプリカをレプリカ記憶部３０から検索する。そして、Ｇｅｔ要求処理部２２は、Ｇｅｔ要求を発行したクライアントに対して、検索したレプリカのデータを送信する。
【００６７】
また、Ｇｅｔ要求処理部２２は、Ｇｅｔ要求を受信した場合には、チェーン管理表２３ａがＧｅｔ要求の対象となるレプリカのチェーンと対応付けて記憶する参照頻度を１インクリメントする。なお、Ｇｅｔ要求処理部２２は、所定の時間が経過するたびに、チェーン管理表２３ａの参照頻度を０に更新する。
【００６８】
ファントムレプリカ生成部２４は、チェーン管理表２３ａに記憶された更新頻度が所定の閾値よりも多いか否かを判別する。そして、ファントムレプリカ生成部２４は、更新頻度が所定の閾値よりも多いと判別した場合には、所定の閾値よりも多い更新頻度と対応付けて記憶された後方ノードをファントムレプリカとし、チェーンから除外する。
【００６９】
具体的には、ファントムレプリカ生成部２４は、チェーン管理表２３ａを参照し、自身を始端とするチェーンの更新頻度が所定の閾値よりも多いか否かを判別する。そして、ファントムレプリカ生成部２４は、自身を始端とするチェーンの更新頻度が所定の閾値よりも多いと判別した場合には、以下の処理を実行する。すなわち、ファントムレプリカ生成部２４は、更新頻度が所定の閾値よりも多いと判別したチェーンについて、後方ノードとして記憶されているノードに対し、レプリカをファントムレプリカにする旨とチェーンＩＤとを通知する。
【００７０】
このような場合には、ノード１０には、レプリカをファントムレプリカにする旨を通知したノードの後方ノードが通知される。そこで、ファントムレプリカ生成部２４は、チェーン管理表２３ａのうち、更新頻度が所定の閾値よりも多いと判別したチェーンについて、後方ノードを通知されたノードに変更する。また、ファントムレプリカ生成部２４は、ファントムレプリカを記憶するノードとチェーンＩＤとを対応付けてファントムレプリカ管理表２３ｂに格納する。
【００７１】
つまり、ファントムレプリカ生成部２４は、更新頻度が所定の閾値よりも多い場合には、ｕｐｄａｔｅ要求を転送するチェーンに含まれるレプリカをファントムレプリカとして一時的に除外する。このため、ストレージシステム１は、ｕｐｄａｔｅ要求を転送する経路上のノードの数が減少させる結果、Ｐｕｔ要求に対する性能を向上させることができる。
【００７２】
テンポラリレプリカ生成部２５は、チェーン管理表２３ａを参照し、各チェーンの参照頻度が所定の閾値よりも多いか否かを判別する。そして、テンポラリレプリカ生成部２５は、いずれかのチェーンについて、参照頻度が所定の閾値よりも多いと判別した場合には、以下の処理を実行する。すなわち、テンポラリレプリカ生成部２５は、ストレージサーバノード７から利用可能なノードを検索する。ここで、利用可能なノードとしては、例えば、ノードが備えるメモリ資源、ディスク容量、ＣＰＵ（Central  Processing  Unit）の処理資源等に余裕があるノードや、ノード１０に設置位置が近いノードである。
【００７３】
そして、テンポラリレプリカ生成部２５は、検索した利用可能なノードに、参照頻度が所定の閾値よりも多いと判別したチェーンに係るレプリカをテンポラリレプリカとして記憶させる。詳細には、テンポラリレプリカ生成部２５は、参照頻度が所定の閾値よりも多いと判別したチェーンに係るレプリカのデータを検索したノードに送信するとともに、テンポラリレプリカの生成依頼を送信する。
【００７４】
また、テンポラリレプリカ生成部２５は、テンポラリレプリカ管理表２３ｃに、複製したレプリカに係るチェーンＩＤとテンポラリレプリカを記憶させたノードとを対応づけて格納する。また、テンポラリレプリカ生成部２５は、プロキシサーバ５ａ〜５ｃに、テンポラリレプリカを記憶されたノードからデータの読出しが可能である旨を通知する。
【００７５】
つまり、テンポラリレプリカ生成部２５は、ノード１０が記憶するレプリカについて参照頻度が所定の閾値よりも多いと判別した場合には、ノード１０が記憶するレプリカの複製であるテンポラリレプリカを他のノードに生成する。ここで、テンポラリレプリカは、チェーンには追加されず、ｕｐｄａｔｅ要求等による更新が行われない。このため、ノード１０は、Ｐｕｔ要求に対する性能を劣化させることなく、Ｇｅｔ要求に対する性能を向上させることができる。
【００７６】
ファントムレプリカ復帰部２６は、ファントムレプリカが存在する際に、更新頻度が所定の閾値よりも少ないと判別した場合には、ファントムレプリカを通常のレプリカに復帰させる。具体的には、ファントムレプリカ復帰部２６は、ファントムレプリカ管理表２３ｂを参照し、ファントムレプリカを記憶するノードと対応付けて記憶されたチェーンＩＤを識別する。そして、ファントムレプリカ復帰部２６は、チェーン管理表２３ａを参照し、識別したチェーンＩＤについて、更新頻度が所定の閾値よりも少ないか否かを判別する。
【００７７】
そして、ファントムレプリカ復帰部２６は、更新頻度が所定の閾値よりも少ないと判別した場合には、ファントムレプリカ管理表２３ｂを用いて、以下の処理を実行する。すなわち、ファントムレプリカ復帰部２６は、更新頻度が所定の閾値よりも少ないと判別したチェーンのチェーンＩＤと対応付けて記憶されたファントムレプリカを記憶するノードを識別する。そして、ファントムレプリカ復帰部２６は、識別したノードに対して、ファントムレプリカ管理表２３ｂに対応付けて記憶された更新データを送信し、ファントムレプリカに更新データを適用するよう指示する。
【００７８】
また、ファントムレプリカ復帰部２６は、チェーン管理表２３ａを参照し、更新頻度が所定の閾値よりも少ないと判別したチェーンの後方ノードを識別する。そして、ファントムレプリカ復帰部２６は、ファントムレプリカを記憶するノードに識別したノードを通知するとともに、ファントムレプリカを復帰させる旨をチェーンＩＤと自分より一つ大きな番号のレプリカとなることを通知する。また、ファントムレプリカ復帰部２６は、チェーン管理表２３ａから識別した後方ノードをファントムレプリカ管理表２３ｂから識別したノードに変更する。
【００７９】
すなわち、ファントムレプリカ復帰部２６は、ファントムレプリカが存在する際に、更新頻度が所定の閾値よりも少ないと判別した場合には、ファントムレプリカを復帰させる。このため、ノード１０は、更新頻度が少ない際にレプリカを記憶するノードを元の数に戻す結果、Ｐｕｔ要求に対する性能を調整することができる。
【００８０】
また、ファントムレプリカ復帰部２６は、Ｐｕｔ要求処理部２１が生成した更新データをファントムレプリカに適用させてから、ファントムレプリカを通常のレプリカとしてチェーンに復帰させる。このため、ノード１０は、各レプリカの同一性を保持したまま、Ｐｕｔ要求に対する性能を調節することができる。また、ノード１０は、新たにレプリカを生成するのではなく、更新の差分データである更新データを適用したファントムレプリカをチェーンに復帰させるので、レプリカの復帰を迅速に行うことができる。
【００８１】
テンポラリレプリカ削除部２７は、テンポラリレプリカが存在する際に、参照頻度が所定の閾値よりも少ないと判別した場合には、テンポラリレプリカを削除する。具体的には、テンポラリレプリカ削除部２７は、テンポラリレプリカ管理表２３ｃを参照し、テンポラリレプリカを記憶するノードと対応付けられたチェーンＩＤを識別する。そして、テンポラリレプリカ削除部２７は、チェーン管理表２３ａを参照し、識別したチェーンＩＤについて、参照頻度が所定の閾値よりも少ないか否かを判別する。
【００８２】
そして、テンポラリレプリカ削除部２７は、識別したチェーンＩＤについて、参照頻度が所定の閾値よりも少ないと判別した場合には、以下の処理を実行する。すなわち、テンポラリレプリカ削除部２７は、テンポラリレプリカ管理表２３ｃを参照し、参照頻度が所定の閾値よりも少ないと判別したチェーンＩＤと対応付けて記憶されたテンポラリレプリカを記憶するノードを削除する。また、テンポラリレプリカ削除部２７は、テンポラリレプリカ管理表２３ｃから削除したノードからデータの読出しができなくなった旨を、各プロキシサーバ５ａ〜５ｃに通知する。
【００８３】
つまり、テンポラリレプリカ削除部２７は、テンポラリレプリカが存在する際に、参照頻度が所定の閾値よりも少なくなった場合には、テンポラリレプリカを削除する。このため、ノード１０は、Ｐｕｔ要求に対する性能を劣化させることなく、Ｇｅｔ要求に対する性能を調整できる。
【００８４】
レプリカ生成部２８は、ｕｐｄａｔｅ要求等により通常のレプリカの生成を依頼された場合には、レプリカを生成し、レプリカ記憶部３０に格納する。具体的には、レプリカ生成部２８は、他のノードからｕｐｄａｔｅ要求を受信した場合には、更新対象となるレプリカをレプリカ記憶部３０から検索し、検索したレプリカの更新を準備する。また、レプリカ生成部２８は、ｕｐｄａｔｅ要求の対象となるレプリカがレプリカ記憶部３０に記憶されていない場合には、新たにレプリカを記憶させる準備を行う。
【００８５】
また、レプリカ生成部２８は、ｕｐｄａｔｅ要求の対象となるレプリカのチェーンにおいて、ノード１０が終端となるノードではない場合には、レプリカ生成依頼部２９にｕｐｄａｔｅ要求を転送するよう指示する。また、レプリカ生成部２８は、チェーン管理表２３ａに、後方ノードが記憶されていなかった場合、すなわち、ノード１０が識別したチェーンにおいて終端となるノードである場合には、以下の処理を実行する。
【００８６】
すなわち、レプリカ生成部２８は、レプリカの更新または新たなレプリカをレプリカ記憶部３０に記憶させるとともに、チェーン管理表２３ａに識別したチェーンと対応付けて記憶された前方ノードへｕｐｄａｔｅｄ要求を送信する。また、レプリカ生成部２８は、他のノードからｕｐｄａｔｅｄ要求を受信した場合には、ｕｐｄａｔｅ要求を受信した際に準備した更新を適用する。また、レプリカ生成部２８は、ｕｐｄａｔｅｄ要求の対象となるレプリカのチェーンを識別し、チェーン管理表２３ａに、識別したチェーンと対応付けて記憶された前方ノードにｕｐｄａｔｅｄ要求を転送する。
【００８７】
また、レプリカ生成部２８は、他のノードからレプリカをファントムレプリカにする旨の通知を取得した場合には、レプリカ記憶部３０が記憶するレプリカをファントムレプリカとする。具体的には、レプリカ生成部２８は、他のノードからレプリカをファントムレプリカにする旨の通知とチェーンＩＤとの通知を受信する。
【００８８】
このような場合には、レプリカ生成部２８は、識別したチェーンＩＤと対応付けて記憶された前方ノード、すなわち、ファントムレプリカにする旨の通知元であるノードに、通知されたチェーンＩＤと対応付けられた後方ノードを通知する。また、レプリカ生成部２８は、チェーン管理表２３ａを参照し、通知されたチェーンＩＤと対応付けて記憶された後方ノードに、チェーンＩＤと対応付けて記憶された前方ノードと、識別したチェーンＩＤとを通知するとともに、チェーンから外れる旨を通知する。さらに、レプリカ生成部２８は、チェーン管理表２３ａの識別したチェーンＩＤのレプリカタイプをファントムレプリカに変更する。
【００８９】
また、レプリカ生成部２８は、他のノードから、ノードと、チェーンＩＤと、チェーンから外れる旨の通知を受信した場合には、以下の処理を実行する。すなわち、レプリカ生成部２８は、チェーン管理表２３ａを参照し、通知されたチェーンＩＤと対応付けて記憶された前方ノードを通知されたノードに変更する。つまり、レプリカ生成部２８は、前方ノードが記憶するレプリカがファントムレプリカになると識別し、ファントムレプリカをチェーンから除外するため、前方ノードのさらに前方ノードを新たな前方ノードとする。
【００９０】
また、レプリカ生成部２８は、他のノードからファントムレプリカを復帰させる旨の通知を受信した場合には、ファントムレプリカをチェーンに復帰させる。具体的には、レプリカ生成部２８は、他のノードからファントムレプリカを復帰させる旨の通知とノードの通知とチェーンＩＤおよび何番目のレプリカなのかなどのレプリカタイプを受信する。このような場合には、レプリカ生成部２８は、チェーン管理表２３ａから、ファントムレプリカに係るチェーンの前方ノードを通知元のノードに変更するとともに、ファントムレプリカに係るチェーンの後方ノードを通知されたノードに変更する。さらに、レプリカ生成部２８は、チェーン管理表２３ａの通知されたチェーンＩＤのレプリカタイプを通知されたレプリカタイプに変更する。
【００９１】
そして、レプリカ生成部２８は、他のノードから通知されたノード、すなわち新たな後方ノードに対して、ファントムレプリカに係るチェーンＩＤと前方ノードの変更とを通知する。なお、レプリカ生成部２８は、他のノードからチェーンＩＤと前方ノードの変更との通知を受信した場合には、チェーン管理表２３ａから通知されたチェーンＩＤを識別し、識別したチェーンＩＤと対応付けて記憶された前方ノードを通知されたノードに変更する。
【００９２】
また、レプリカ生成部２８は、他のノードからテンポラリレプリカの生成依頼を受信した場合には、テンポラリレプリカをレプリカ記憶部３０に記憶させる。具体的には、レプリカ生成部２８は、レプリカのデータとテンポラリレプリカの生成依頼を受信する。このような場合には、レプリカ生成部２８は、受信したレプリカのデータをテンポラリレプリカとしてレプリカ記憶部３０に記憶させる。
【００９３】
レプリカ生成依頼部２９は、レプリカ生成部２８からｕｐｄａｔｅ要求を転送するよう指示された場合には、チェーン管理表２３ａを参照し、ｕｐｄａｔｅ要求の転送先となる後ノードを識別する。そして、レプリカ生成依頼部２９は、識別した後ノードへｕｐｄａｔｅ要求を送信する。
【００９４】
ファントムレプリカ管理部３１は、レプリカ記憶部３０に記憶されたファントムレプリカの管理を実行する。例えば、ファントムレプリカ管理部３１は、ノード１０の資源が枯渇した場合には、レプリカ記憶部３０に記憶されたファントムレプリカを削除する。特に、ファントムレプリカ管理部３１は、レプリカ記憶部３０やメモリが逼迫し、ファントムレプリカを記憶することができなくなった場合や、ＣＰＵの処理資源が逼迫し、レスポンスが悪化した場合等に、ファントムレプリカを削除する。なお、ファントムレプリカ管理部３１は、ファントムレプリカを削除した場合には、ファントムレプリカが属していたチェーンの前ノードにファントムレプリカを削除した旨を通知することとしてもよい。
【００９５】
また、テンポラリレプリカ管理部３２は、レプリカ記憶部３０に記憶されたテンポラリレプリカの管理を実行する。例えば、テンポラリレプリカ管理部３２は、ノード１０の資源が枯渇した場合には、レプリカ記憶部３０に記憶されたテンポラリレプリカを削除する。なお、テンポラリレプリカ管理部３２は、資源の枯渇により、テンポラリレプリカを削除した場合には、プロキシサーバ５ａ〜５ｃに対して、データの読み出しができなくなった旨を通知してもよい。
【００９６】
例えば、ネットワークインターフェース２０、Ｐｕｔ要求処理部２１、Ｇｅｔ要求処理部２２、ファントムレプリカ生成部２４、テンポラリレプリカ生成部２５、ファントムレプリカ復帰部２６、テンポラリレプリカ削除部２７とは、電子回路である。また、レプリカ生成部２８、レプリカ生成依頼部２９、ファントムレプリカ管理部３１、テンポラリレプリカ管理部３２とは、電子回路である。ここで、電子回路の例として、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路、またはＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などを適用する。
【００９７】
また、チェーン管理部２３、レプリカ記憶部３０とは、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ（flash  memory）などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。
【００９８】
次に、図７を用いて、上述したノード１０がファントムレプリカを生成する処理の一例について説明する。図７は、ファントムレプリカを生成する処理を説明するための図である。例えば、図７に示す例では、ノード１０がデータＡの１ｓｔレプリカを記憶し、ノード１１がデータＡの２ｎｄレプリカを記憶し、ノード１２がデータＡの３ｒｄレプリカを記憶する。なお、図７に示す各ノードは、ノード１０、ノード１１、ノード１２の順にチェーンするチェーンＩＤ「１」のチェーンで接続されているものとする。
【００９９】
例えば、ノード１０は、データＡのレプリカを対象とするＰｕｔ要求の更新頻度が所定の閾値よりも多い場合には、ノード１１が記憶する２ｎｄレプリカをファントムレプリカとする。具体的には、ノード１０は、図７中（Ｆ）に示すように、２ｎｄレプリカをファントムレプリカにする旨とチェーンＩＤ「１」とを後方ノードであるノード１１に通知する。
【０１００】
このような場合には、ノード１１は、チェーンＩＤ「１」が示すチェーンにおいて、自身の後方ノードであるノード１２をノード１０に通知する。そして、ノード１０は、チェーンＩＤ「１」が示すチェーンにおいて、自身の後方ノードであるノード１１を通知されたノード１２に変更する。
【０１０１】
また、ノード１１は、図７中（Ｇ）に示すように、自身の前方ノードであるノード１０をノード１２に通知するとともに、チェーンＩＤ「１」が示すチェーンから外れる旨を通知する。すると、ノード１２は、チェーンＩＤ「１」が示すチェーンにおいて、自身の前方ノードをノード１１からノード１０に変更する。このため、ノード１０は、Ｐｕｔ要求を受信した場合には、ｕｐｄａｔｅ要求を図７中（Ｈ）に示すように、ノード１１ではなく、ノード１２に送信することとなる。
【０１０２】
ここで、図８Ａおよび図８Ｂを用いて、図７に示す例においてノード１０およびノード１２がチェーン管理表を更新する処理について説明する。図８Ａは、更新後のチェーン管理表の一例を説明するための第１の図である。また、図８Ｂは、更新後のチェーン管理表の一例を説明するための第２の図である。なお、図８Ａには、ノード１０が有する更新後のチェーン管理表２３ａについて記載し、図８Ｂには、ノード１２が有する更新後のチェーン管理表２３ａについて記載した。
【０１０３】
上述したように、ノード１０は、ノード１１の２ｎｄレプリカをファントムレプリカとした場合には、ノード１１からノード１１の後方ノードであるノード１２の通知を受信する。このため、ノード１０は、図８Ａに示すように、後方レプリカをノード１１からノード１２へ変更する。この結果、ノード１０は、ｕｐｄａｔｅ要求をノード１２へ送信することとなる。
【０１０４】
また、ノード１２は、ノード１１の２ｎｄレプリカがファントムレプリカとなる場合には、ノード１１からノード１１の前方レプリカであるノード１０の通知を受信する。このため、ノード１２は、図８Ｂに示すように、前方レプリカをノード１１からノード１０へと変更する。この結果、ノード１２は、ｕｐｄａｔｅｄ要求をノード１０へ送信することとなる。
【０１０５】
次に、図９を用いて、２ｎｄレプリカを記憶するノード１１がテンポラリレプリカを生成する処理の一例について説明する。図９は、テンポラリレプリカを生成する処理を説明するための図である。なお、図９に示す例では、ノード１０〜１２が図７と同様のレプリカを記憶する例について記載した。
【０１０６】
例えば、図９に示す例では、ノード１０は、クライアント２ａからＧｅｔ要求を受信する。また、ノード１１は、クライアント２ｂからＧｅｔ要求を受信する。また、ノード１２は、クライアント２ｃからＧｅｔ要求を受信する。ここで、ノード１１は、参照頻度が所定の閾値を超えたと判別した場合には、新たなノードとして、ノード１１ａを検出する。
【０１０７】
このような場合には、ノード１１は、図９中（Ｉ）に示すように、ノード１１ａに２ｎｄレプリカの複製であるテンポラリレプリカを生成する。このため、ノード１１ａは、図９中（Ｊ）に示すように、クライアント２ｄが発行したＧｅｔ要求に対する処理を実行することとなる。
【０１０８】
また、ノード１１は、ノード１１ａにテンポラリレプリカを生成した後に、再度、参照頻度が所定の閾値を超えたと判別した場合には、新たなノードとして、ノード１１ｂを検出する。そして、ノード１１は、図９中（Ｋ）に示すように、ノード１１ｂにテンポラリレプリカを生成する。このため、ノード１１ｂは、図９中（Ｌ）に示すように、クライアント２ｅが発行したＧｅｔ要求に対する処理を実行することとなる。
【０１０９】
次に、図１０Ａ〜１０Ｃ、図１１Ａ、図１１Ｂ、図１２を用いて、ノード１０が実行する処理の流れを説明する。なお、ノード１０は、図１０Ａ〜１０ｃ、図１１Ａ、図１１Ｂ、図１２に示す各処理を、それぞれ独立に実行するものとする。
【０１１０】
まず、図１０Ａを用いて、ノード１０がファントムレプリカを設定する処理の一例について説明する。図１０Ａは、ファントムレプリカを設定する処理の流れを説明するためのフローチャートである。例えば、ノード１０は、更新頻度が所定の閾値以上であるか否かを判別する（ステップＳ１０１）。
【０１１１】
そして、ノード１０は、更新頻度が所定の閾値以上であると判別した場合には（ステップＳ１０１肯定）、チェーン管理表２３ａを更新し、チェーンの中間レプリカをチェーンから外す（ステップＳ１０２）。そして、ノード１０は、チェーンから外したレプリカをファントムレプリカ管理表２３ｂに登録し、ファントムレプリカとする（ステップＳ１０３）。その後、ノード１０は、処理を終了する。一方、ノード１０は、更新頻度が所定の閾値より少ないと判別した場合には（ステップＳ１０１否定）、一定時間待機する（ステップＳ１０４）。そして、ノード１０は、再度、更新頻度が所定の閾値以上であるか否かを判別する（ステップＳ１０１）。
【０１１２】
次に、図１０Ｂを用いて、ファントムレプリカが存在する際に、ノード１０が更新データを記憶する処理の流れについて説明する。図１０Ｂは、データの積算を記憶する処理の流れを説明するためのフローチャートである。例えば、図１０Ｂに示す例では、ノード１０は、クライアント２が発行したＰｕｔ要求を受信する（ステップＳ２０１）。このような場合には、ノード１０は、Ｐｕｔ要求の対象となるレプリカのチェーンについて、ファントムレプリカが存在するか否かを判別する（ステップＳ２０２）。
【０１１３】
そして、ノード１０は、ファントムレプリカが存在すると判別した場合には（ステップＳ２０２肯定）、以下の処理を実行する。すなわち、ノード１０は、自身のレプリカの更新を準備するとともに、変更分のデータの積算、すなわち、更新前の更新後の差分データの積算を記憶し（ステップＳ２０３）、処理を終了する。なお、ノード１０は、ファントムレプリカが存在しないと判別した場合には（ステップＳ２０２否定）、差分データの積算を記憶することなく、処理を終了する。
【０１１４】
次に、図１０Ｃを用いて、ノード１０がファントムレプリカを復帰させる処理の流れについて説明する。図１０Ｃは、ファントムレプリカを復帰させる処理の流れを説明するためのフローチャートである。例えば、図１０Ｃに示す例では、ノード１０は、更新頻度が所定の閾値を下回ったか否かを判別する（ステップＳ３０１）。
【０１１５】
そして、ノード１０は、更新頻度が所定の閾値を下回ったと判別した場合は（ステップＳ３０１肯定）、ファントムレプリカに、変更分のデータの積算を適用する（ステップＳ３０２）。そして、ノード１０は、チェーン管理表２３ａの後ノードをファントムレプリカを記憶するノードに変更することで、ファントムレプリカをチェーンに復帰させ（ステップＳ３０３）、処理を終了する。一方、ノード１０は、更新頻度が所定の閾値以上であると判別した場合は（ステップＳ３０１否定）、一定時間待機し（ステップＳ３０４）、再度、更新頻度が所定の閾値を下回ったか否かを判別する（ステップＳ３０１）。
【０１１６】
次に、図１１Ａを用いて、ノード１０がテンポラリレプリカを作成する処理の一例について説明する。図１１Ａは、テンポラリレプリカを作成する処理の流れを説明するためのフローチャートである。例えば、図１１Ａに示す例では、ノード１０は、参照頻度が所定の閾値以上であるか否かを判別する（ステップＳ４０１）。
【０１１７】
そして、ノード１０は、参照頻度が所定の閾値以上であると判別した場合は（ステップＳ４０１肯定）、テンポラリレプリカを作成するサーバを選定する（ステップＳ４０２）。次に、ノード１０は、選定したサーバにテンポラリレプリカを作成し（ステップＳ４０３）、テンポラリレプリカを作成したノードをプロキシサーバ５ａ〜５ｃに登録する（ステップＳ４０４）。一方、ノード１０は、参照頻度が所定の閾値を下回ると判別した場合は（ステップＳ４０１否定）、一定時間待機し（ステップＳ４０５）、再度、参照頻度が所定の閾値以上であるか否かを判別する（ステップＳ４０１）。
【０１１８】
次に、図１１Ｂを用いて、ノード１０がテンポラリレプリカを削除する処理の流れの一例について説明する。図１１Ｂは、テンポラリレプリカを削除する処理の流れを説明するためのフローチャートである。例えば、図１１Ｂに示す例では、ノード１０は、参照頻度が所定の閾値を下回ったか否かを判別する（ステップＳ５０１）。
【０１１９】
そして、ノード１０は、参照頻度が所定の閾値を下回ったと判別した場合は（ステップＳ５０１肯定）、削除するテンポラリレプリカを記憶するノードをプロキシサーバ５ａ〜５ｃに通知する（ステップＳ５０２）。次に、ノード１０は、テンポラリレプリカを削除し（ステップＳ５０３）、処理を終了する。なお、ノード１０は、参照頻度が所定の閾値以上であると判別した場合は（ステップＳ５０１否定）、一定時間待機し（ステップＳ５０４）、再度、参照頻度が所定の閾値を下回ったか否かを判別する（ステップＳ５０１）。
【０１２０】
次に、図１２を用いて、サーバ１０がファントムレプリカまたはテンポラリレプリカを削除する処理の流れの一例について説明する。図１２は、レプリカを削除する処理の流れを説明するためのフローチャートである。例えば、図１２に示す例では、ノード１０は、自身の資源が逼迫しているか否かを判別する（ステップＳ６０１）。
【０１２１】
そして、ノード１０は、自身の資源が逼迫していないと判別した場合には（ステップＳ６０１否定）、一定時間待機し（ステップＳ６０２）、再度、自身の資源が逼迫しているか否かを判別する（ステップＳ６０１）。一方、ノード１０は、自身の資源が逼迫していると判別した場合には（ステップＳ６０１肯定）、テンポラリレプリカを記憶しているか否かを判別する（ステップＳ６０３）。
【０１２２】
そして、ノード１０は、テンポラリレプリカを記憶していると判別した場合には（ステップＳ６０３肯定）、記憶しているテンポラリレプリカを削除する（ステップＳ６０４）。その後、ノード１０は、再度、自身の資源が逼迫しているか否かを判別する（ステップＳ６０１）。
【０１２３】
一方、ノード１０は、テンポラリレプリカを記憶していないと判別した場合には（ステップＳ６０３否定）、ファントムレプリカを記憶しているか否かを判別する（ステップＳ６０５）。そして、ノード１０は、ファントムレプリカを記憶していると判別した場合は（ステップＳ６０５肯定）、ファントムレプリカを削除し（ステップＳ６０６）、再度、自身の資源が逼迫しているか否かを判別する（ステップＳ６０１）。また、ノード１０は、ファントムレプリカを記憶していないと判別した場合は（ステップＳ６０５否定）、そのまま処理を終了する。
【０１２４】
[実施例１の効果]
上述したように、ストレージシステム１は、複数のノード１０〜１２が共通して記憶するデータについてのＰｕｔ要求を受信した場合に、データのＰｕｔ要求を複数のノード１０〜１２間で所定の転送順で送信することでＰｕｔ要求の転送先の各ノード１０〜１２におけるデータの更新処理を行う。このストレージシステム１は、データのＰｕｔ要求の受信頻度に応じて、所定の転送順に従った転送における転送先に含まれる１以上のノードをファントムレプリカとして転送先から除外した転送順に所定の順を変更してデータのＰｕｔ要求を転送するように制御する。
【０１２５】
例えば、チェーンの始端となるノード１０は、所定の時間内に受信したＰｕｔ要求の数である更新頻度が所定の閾値よりも多いか否かを判別する。そして、ノード１０は、更新頻度が所定の閾値よりも多いと判別した場合には、後ノードであるノード１１をファントムレプリカとしてチェーンから除外する。このため、ノード１０を有するストレージシステム１は、Ｐｕｔ要求に対する性能を動的に調整することができる。
【０１２６】
また、ストレージシステム１は、ファントムレプリカが存在し、データのＰｕｔ要求の受信頻度が所定の閾値よりも少ない場合は、ファントムレプリカを経路に復帰させた転送順でデータのＰｕｔ要求を転送するように制御する。例えば、ノード１０は、ファントムレプリカが存在する際に、更新頻度が所定の閾値よりも少ないと判別した場合には、ファントムレプリカを通常のレプリカとしてチェーンに復帰させる。このため、ストレージシステム１は、Ｐｕｔ要求に対する性能を動的に調整することができる。
【０１２７】
また、ストレージシステム１は、ファントムレプリカが存在し、Ｐｕｔ要求を受信した場合は、差分データを保持する。そして、ストレージシステム１は、ファントムレプリカが存在し、データのＰｕｔ要求の受信頻度が所定の閾値よりも少ない場合は、差分データをファントムレプリカに適用する。その後、ストレージシステム１は、ファンとムレプリカを復帰させた転送順でＰｕｔ要求を転送するように制御する。
【０１２８】
例えば、ノード１０は、ファントムレプリカが存在する際に、Ｐｕｔ要求を受信した場合には、変更分のデータの積算、すなわち、差分データを記憶する。そして、ノード１０は、更新頻度が所定の閾値よりも少ないと判別した場合には、ファントムレプリカに記憶した差分データを適用し、その後、ファントムレプリカを通常のレプリカとしてチェーンに復帰させる。このため、ストレージシステム１は、迅速にファントムレプリカを通常のレプリカとして復帰させることができる。
【０１２９】
また、ストレージシステム１は、Ｇｅｔ要求の受信頻度が所定の閾値よりも多い場合には、データを記憶していないノードに、データを記憶させ、テンポラリレプリカを記憶するノードとしてストレージシステム１に追加する。そして、ストレージシステム１は、テンポラリレプリカを記憶させたノードからデータの読出しが可能である旨をプロキシサーバ５ａ〜５ｃに通知する。
【０１３０】
例えば、ノード１０は、所定の時間内にＧｅｔ要求を受信した回数である参照頻度が所定の閾値よりも多いか否かを判別する。そして、ノード１０は、参照頻度が所定の閾値よりも多いと判別した場合には、他のノードにノード１０と同じレプリカをテンポラリレプリカとして記憶させる。その後、ノード１０は、テンポラリレプリカを記憶させたノードからデータの読出しが可能である旨を、プロキシサーバ５ａ〜５ｃに通知する。このため、ノード１０は、Ｇｅｔ要求に対する性能を動的に調整することができる。
【０１３１】
また、ストレージシステム１は、テンポラリレプリカを記憶させたノードが存在し、Ｇｅｔ要求の受信頻度が所定の閾値よりも少ない場合は、テンポラリレプリカを記憶させたノードをストレージシステム１から除外する。また、ストレージシステム１は、除外したノードからデータの読出しができない旨をクプロキシサーバ５ａ〜５ｃに通知する。
【０１３２】
例えば、ノード１０は、参照頻度が所定の閾値よりも少ないと判別した場合には、テンポラリレプリカを削除するとともに、テンポラリレプリカを削除したノードからデータの読出しができない旨をプロキシサーバ５ａ〜５ｃに通知する。このため、ストレージシステム１は、不必要なテンポラリレプリカにより、システムの資源を枯渇させることなく、Ｇｅｔ要求に対する性能を動的に調整することができる。
【０１３３】
また、ストレージシステム１は、ファントムレプリカを記憶するノードの資源や、テンポラリレプリカを記憶するノードの資源が枯渇した場合には、ファントムレプリカやテンポラリレプリカを削除する。例えば、ノード１０は、自身の資源が枯渇した場合には、自身に記憶されたテンポラリレプリカやファントムレプリカを削除する。このため、ストレージシステム１は、Ｐｕｔ要求がＧｅｔ要求に対する性能を動的に調整する際に、システムの資源を不用意に枯渇させることを防ぐことができる。
【実施例２】
【０１３４】
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例２として本発明に含まれる他の実施例を説明する。
【０１３５】
（１）更新データについて
上述したノード１０は、ファントムレプリカを生成してから復帰するまでの間、Ｐｕｔ要求を受信した場合には、更新前と更新後の差分データを蓄積していた。しかし、実施例は、これに限定されるものではない。例えば、ノード１０は、差分データをファントムレプリカを記憶するノードに記憶させることとしてもよい。
【０１３６】
また、ノード１０は、蓄積した差分データの量が、所定の量を超えた場合には、差分データを破棄するとともに、ファントムレプリカを削除することとしても良い。このような処理を実行した場合には、ストレージシステム１は、Ｐｕｔ要求やＧｅｔ要求に対する性能を調整する際に、資源が枯渇することを防ぐことができる。
【０１３７】
（２）テンポラリレプリカについて
上述したノード１０は、資源が枯渇した際に、自身が記憶するテンポラリレプリカを削除した。しかし、実施例は、これに限定されるものではない。例えば、ノード１０は、テンポラリレプリカを記憶してから所定の時間が経過した場合には、テンポラリレプリカを削除することとしてもよい。
【０１３８】
また、ノード１０は、テンポラリレプリカを記憶している際に、ｕｐｄａｔｅ要求を受信した場合には、テンポラリレプリカを削除することで、テンポラリレプリカの更新処理による性能低下を防いだ。しかし、実施例はこれに限定されるものではなく、例えば、ノード１０は、テンポラリレプリカを生成したサーバから更新後の新たなテンポラリレプリカのデータを受信し、受信したテンポラリレプリカのデータに置き換えることとしてもよい。
【０１３９】
（３）各処理について
上述した図３は、機能的構成の一例を説明するものに過ぎず、各部２０〜３２が実行する処理は、矛盾しない範囲で結合、または、分割することができる。例えば、レプリカ生成部２８およびレプリカ生成依頼部２９を１つの処理部として統合することも可能である。
【０１４０】
（４）クライアントについて
上述したストレージシステム１は、クライアント２ａ、２ｂが発行したＰｕｔ要求やＧｅｔ要求をプロキシサーバ５ａ〜５ｃが各ノード１０〜１０ｂ、１１〜１１ｂ、１２〜１２ｂに割り振っていた。しかし、実施例はこれに限定されるものではなく、例えば、各クライアント２ａ、２ｂは、Ｐｕｔ要求やＧｅｔ要求を発行するノードを予め記憶し、記憶したノードに対して、Ｐｕｔ要求やＧｅｔ要求を直接発行しても良い。このような場合には、各ノード１０〜１０ｂ、１１〜１１ｂ、１１〜１２ｂは、プライマリレプリカを記憶させたノードを、プロキシサーバ５ａ〜５ｃではなく、クライアント２ａ、２ｂに対して通知することとなる。
【０１４１】
（５）ファントムレプリカについて
上述したストレージシステム１において、ノード１０は、自身の後ノードが記憶するレプリカをファントムレプリカとし、後ノードをチェーンから除外した。しかし、実施例はこれに限定されるものではない。例えば、ノード１０は、ノード１０、ノード１１、ノード１２、ノード１２ａを接続するチェーンにおいて、ノード１２が記憶するレプリカをファントムレプリカとし、ノード１２をチェーンから除外してもよい。
【０１４２】
なお、ノード１０は、ノード１２をチェーンから除外する場合には、ノード１１を介してノード１２にファントムレプリカとする旨を通知する。このような場合には、ノード１２は、前ノードであるノード１１に後ノード１２ａを通知し、後ノード１２ａに前ノードであるノード１１を通知する。その後、ノード１１は、後ノードをノード１２ａとし、ノード１２ａは、前ノードをノード１２とすればよい。
【０１４３】
（６）プログラム
ところで、実施例１に係るノード１０は、ハードウェアを利用して各種の処理を実現する場合を説明した。しかし、実施例はこれに限定されるものではなく、あらかじめ用意されたプログラムをストレージ装置として動作するコンピュータで実行することによって実現するようにしてもよい。そこで、以下では、図１３を用いて、実施例１に示したノード１０と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図１３は、システム制御プログラムを実行するコンピュータの一例を説明するための図である。
【０１４４】
図１３に例示されたコンピュータ１００は、ＲＯＭ（Read  Only  Memory）１１０、ＨＤＤ（Hard  Disk  Drive）１２０、ＲＡＭ（Random  Access  Memory）１３０、ＣＰＵ（Central  Processing  Unit）１４０がバス１６０で接続される。また、コンピュータ１００は、他のコンピュータと通信を行うためのＩ／Ｏ（Input  Output）１５０がバス１６０で接続される。
【０１４５】
なお、ＨＤＤ１２０は、通常のレプリカや、テンポラリレプリカ、ファントムレプリカが記憶されることとなる。ＲＡＭ１３０には、システム制御プログラム１３１が記憶されており、ＣＰＵ１４０が読み出して実行することによって、図１３に示す例では、システム制御プロセス１４１として機能するようになる。なお、システム制御プロセス１４１は、図３に示すノード１０と同様の機能を発揮する。
【０１４６】
なお、本実施例で説明したシステム制御プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ（Compact  Disc  Read  Only  Memory）、ＭＯ（Magneto  Optical  Disc）、ＤＶＤ（Digital  Versatile  Disc）などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【０１４７】
１  ストレージシステム
２〜２ｂ  クライアント
３  ＩＰ網
４  データセンター
５  ストレージプロキシ
５ａ〜５ｃ  プロキシサーバ
６  ＬＡＮ
７  ストレージサーバノード
１０〜１０ｂ、１１〜１１ｂ、１２〜１２ｂ  ノード
２０  ネットワークインターフェース
２１  Ｐｕｔ要求処理部
２２  Ｇｅｔ要求処理部
２３  チェーン管理部
２４  ファントムレプリカ生成部
２５  テンポラリレプリカ生成部
２６  ファントムレプリカ復帰部
２７  テンポラリレプリカ削除部
２８  レプリカ生成部
２９  レプリカ生成依頼部
３０  レプリカ記憶部
３１  ファントムレプリカ管理部
３２  テンポラリレプリカ管理部
【図１】
0005915116.tif 000002
【図２】
0005915116.tif 000003
【図３】
0005915116.tif 000004
【図４Ａ】
0005915116.tif 000005
【図４Ｂ】
0005915116.tif 000006
【図４Ｃ】
0005915116.tif 000007
【図５】
0005915116.tif 000008
【図６】
0005915116.tif 000009
【図７】
0005915116.tif 000010
【図８Ａ】
0005915116.tif 000011
【図８Ｂ】
0005915116.tif 000012
【図９】
0005915116.tif 000013
【図１０Ａ】
0005915116.tif 000014
【図１０Ｂ】
0005915116.tif 000015
【図１０Ｃ】
0005915116.tif 000016
【図１１Ａ】
0005915116.tif 000017
【図１１Ｂ】
0005915116.tif 000018
【図１２】
0005915116.tif 000019
【図１３】
0005915116.tif 000020
【図１４】
0005915116.tif 000021
【図１５】
0005915116.tif 000022