説明

ストレージシステム、ストレージ装置、システム制御プログラムおよびシステム制御方法

【課題】Put要求に対する性能とGet要求に対する性能とを動的に調整する。
【解決手段】1つの側面では、ストレージシステム1は、複数のノード10〜12が共通して記憶するデータについての更新要求を受信した場合に、データの更新要求を複数のノード10〜12間で所定の転送順で送信することで更新要求の転送先の各ノード10〜12におけるデータの更新処理を行う。このストレージシステム1は、データの更新要求の受信頻度に応じて、所定の転送順に従った転送における転送先に含まれる1以上のノードを転送先から除外した転送順に所定の順を変更してデータの更新要求を転送するように制御する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステム、ストレージ装置、システム制御プログラムおよびシステム制御方法に関する。
【背景技術】
【0002】
従来、分散KVS(Key-Value Store)等のNoSQLを初めとするストレージシステムにおいて、データの複製であるレプリカを複数のノードに配置する技術が知られている。このような技術が適用されたストレージシステムは、レプリカを複数のノードに配置することで、ディスク故障などによるデータの消失を防ぐとともに、各ノードに配置されたレプリカからデータの読出しを許可することで、アクセスの負荷分散を行う。
【0003】
ここで、ストレージシステムは、各レプリカから読み出されるデータの同一性を保証するStrong Consistencyが要求される場合がある。このようなStrong Consistencyを保つ手法の一例として、チェインレプリケーションの技術が知られている。このようなチェインレプリケーションが適用されたストレージシステムの一例について以下に説明する。
【0004】
まず、図14を用いて、クライアントがPut要求を発行した際にストレージシステムが実行する処理の一例について説明する。図14は、チェインレプリケーションの一例について説明するための第1の図である。なお、図14に示す例では、チェインレプリケーションの一例としてCRAQ(Chain Replication with Apportioned Query)が適用されたストレージシステムについて説明する。
【0005】
図14に示す例では、ストレージシステムは、同一のレプリカを有するN個のノードを有する。なお、図14に示す例では、ストレージシステムは、N個のノードのうち、1stノード、2ndノード、3rdノード、Nthノード以外のノードについては、図示を省略した。
【0006】
このようなストレージシステムが有する各ノードは、クライアントが発行したPut要求を受信した場合には、各ノードを順に並べた経路に沿って、データの書込みを要求するupdate要求を順次転送する。例えば、図14中(A)に示す例では、クライアントは、Put要求を1stノードに発行する。このような場合には、1stノードは、新たなデータの書込みを準備するとともに、図14中(B)に示すように、2ndノードにupdate要求を送信する。
【0007】
次に、2ndノードは、1stノードからupdate要求を受信した場合には、新たなデータの書込みを準備するとともに、update要求を3rdノードに転送する。その後、各ノードは、update要求を経路の終端となるNthノードまで順に転送する。また、図14中(C)に示すように、経路の終端となるNthノードは、update要求を受信した場合には、新たなデータを書込むとともに、update要求に対する応答であるupdated要求を経路の1つ前のノードに送信する。
【0008】
その後、各ノードは、updated要求を受信した場合は、準備したデータの書込みを実行するとともに、updated要求を経路に沿って、始点となる1stノードまで順に転送する。そして、1stノードは、図14中(D)に示すように、updated要求を受信した場合には、準備したデータの書込みを実行し、書込み処理が終了した旨をクライアントに通知する。
【0009】
次に、図15を用いて、クライアントがGet要求を発行した際にストレージシステムが実行する処理の一例について説明する。図15は、チェインレプリケーションの一例について説明するための第2の図である。図15に示す例では、1stノードからNthノードまでの各ノードは、各クライアント7〜7cからのGet要求に対して、それぞれが記憶するレプリカのデータを送信する。このように、ストレージシステムは、Get要求の発行先を分散させることで、Get要求に対する性能を向上させる。
【0010】
ここで、Nthノード以外の各ノードは、データの書込みを準備している際に、クライアントからGet要求を受付けた場合には、経路の終端となるNthノードが新たなデータの書込みを行ったか否かを問い合わせる。そして、各ノードは、Nthノードが新たなデータの書込みを行った場合には、新たなデータを書込んだ後のレプリカのデータをクライアントに送信する。また、各ノードは、Nthノードが新たなデータの書込みを行っていない場合には、新たなデータを書込む前のレプリカのデータをクライアントに送信する。
【0011】
例えば、1stノードは、update要求を送信してからupdated要求を受信するまでの間にクライアントからGet要求を取得した場合には、図15中(E)に示すように、新たなデータの書込みを行ったか否かをNthノードに問い合わせる。そして、1stノードは、Nthノードから新たなデータを書込んだ旨の応答を取得した場合には、新たなデータの書込みを行った後のデータをクライアントに出力する。また、1stノードは、Nthノードから新たなデータを書込んでいない旨の応答を取得した場合には、新たなデータの書込みを行う前のデータをクライアントに出力する。
【先行技術文献】
【特許文献】
【0012】
【特許文献1】特開2010−146067号公報
【非特許文献】
【0013】
【非特許文献1】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.
【非特許文献2】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
【発明の概要】
【発明が解決しようとする課題】
【0014】
しかし、上述したチェインレプリケーションの技術では、レプリカを有するノードの数を変更することができないので、Put要求に対する性能とGet要求に対する性能とを調整することができないという問題がある。
【0015】
すなわち、レプリカを記憶するノードの数を増加させた場合には、Get要求に対する性能も向上する。しかし、レプリカを記憶するノードの数を増加させた場合には、データの書込み先が増加するため、Put要求に対する性能が劣化してしまう。また、レプリカを記憶するノードの数を減少させた場合には、Put要求に対する性能が向上するが、Get要求の発行先となるレプリカの数が減少するため、Get要求に対する性能が劣化してしまう。
【0016】
このため、ストレージシステムは、例えばレプリカのデータの初期化時にはPut要求に対する性能を向上させたいが、その後はGet要求に対する性能を向上させたい場合に、適切な数のノードを設定することができない。
【0017】
本願は、1つの側面では、Put要求に対する性能とGet要求に対する性能とを動的に調整する。
【課題を解決するための手段】
【0018】
1つの側面では、複数のストレージが共通して記憶するデータについての更新要求を受信した場合に、データの更新要求を複数のストレージ間で所定の転送順で送信することで更新要求の転送先の各ストレージにおけるデータの更新処理を行うストレージシステムである。このストレージシステムは、データの更新要求の受信頻度に応じて、所定の転送順に従った転送における転送先に含まれる1以上のストレージを転送先から除外した転送順に所定の順を変更してデータの更新要求を転送するように制御する。
【発明の効果】
【0019】
1つの側面では、Put要求に対する性能とGet要求に対する性能とを動的に調整する。
【図面の簡単な説明】
【0020】
【図1】図1は、実施例1に係るストレージシステムのシステム構成を説明するための図である。
【図2】図2は、実施例1に係るノードがPut要求を受信した際に実行する処理の一例を説明するための図である。
【図3】図3は、実施例1に係るノードの機能的構成を説明するための図である。
【図4A】図4Aは、チェーン管理表の一例を説明するための第1の図である。
【図4B】図4Bは、チェーン管理表の一例を説明するための第2の図である。
【図4C】図4Cは、チェーン管理表の一例を説明するための第3の図である。
【図5】図5は、ファントムレプリカ管理表の一例を説明するための図である。
【図6】図6は、テンポラリレプリカ管理表の一例を説明するための図である。
【図7】図7は、ファントムレプリカを生成する処理を説明するための図である。
【図8A】図8Aは、更新後のチェーン管理表の一例を説明するための第1の図である。
【図8B】図8Bは、更新後のチェーン管理表の一例を説明するための第2の図である。
【図9】図9は、テンポラリレプリカを生成する処理を説明するための図である。
【図10A】図10Aは、ファントムレプリカを設定する処理の流れを説明するためのフローチャートである。
【図10B】図10Bは、データの積算を記憶する処理の流れを説明するためのフローチャートである。
【図10C】図10Cは、ファントムレプリカを復帰させる処理の流れを説明するためのフローチャートである。
【図11A】図11Aは、テンポラリレプリカを作成する処理の流れを説明するためのフローチャートである。
【図11B】図11Bは、テンポラリレプリカを削除する処理の流れを説明するためのフローチャートである。
【図12】図12は、レプリカを削除する処理の流れを説明するためのフローチャートである。
【図13】図13は、システム制御プログラムを実行するコンピュータの一例を説明するための図である。
【図14】図14は、チェインレプリケーションの一例について説明するための第1の図である。
【図15】図15は、チェインレプリケーションの一例について説明するための第2の図である。
【発明を実施するための形態】
【0021】
以下に添付図面を参照して本願に係るストレージシステム、ストレージ装置、システム制御プログラムおよびシステム制御方法について説明する。
【実施例1】
【0022】
以下の実施例1では、図1を用いて、ストレージシステムの一例を説明する。図1は、実施例1に係るストレージシステムのシステム構成を説明するための図である。図1に示す例では、ストレージシステム1は、クライアント2をIP(Internet Protocol)網3を介してデータセンター4と接続する。ここで、クライアント2には、複数のクライアント2a、2bが含まれる。
【0023】
データセンター4は、ストレージプロキシ5、LAN(Local Area Network)6、ストレージサーバノード7を有する。ここで、ストレージプロキシ5は、複数のプロキシサーバ5a〜5cを有する。また、ストレージサーバノード7は、複数のノード10〜10b、11〜11b、12〜12bを有する。なお、ストレージサーバノード7は、他にも複数のノードを有するが、図1に示す例では、ノード10〜10b、11〜11b、12〜12b以外のノードについては表示を省略した。
【0024】
なお、ノードとは、例えば、データの複製であるレプリカを記憶する記憶装置と、他のノードとの通信処理、データの更新処理、データの管理処理等を実行する演算処理装置とを有するストレージ装置や情報処理装置、サーバ等である。ここで、各ノード10〜10b、11〜11b、12〜12bは、それぞれ相互に接続され、通信を行うことができるものとする。
【0025】
各ノード10〜10b、11〜11b、12〜12bは、データの複製であるレプリカを記憶する。例えば、各ノード10〜12は、データAの複製であるレプリカA1〜A3を記憶し、各ノード10a〜12aは、データBの複製であるレプリカB1〜B3を記憶し、各ノード10b〜12bは、データCの複製であるレプリカC1〜C3を記憶する。なお、以下の説明においては、各ノード10〜10b、11〜11b、12〜12bは、1つのデータについて3つのレプリカを記憶するが、レプリカの数はこれに限定されるものではなく、設定次第で任意の数のレプリカを生成することができる。
【0026】
ここで、各レプリカには、1stレプリカ、2ndレプリカ、3rdレプリカが設定されており、1stレプリカを記憶するノードがPut要求を受付けるノードとなる。例えば、ノード10が1stレプリカであるレプリカA1を記憶し、ノード11が2ndレプリカであるレプリカA2を記憶し、ノード12が3rdレプリカであるレプリカA3を記憶する場合には、ノード10がデータAに対するPut要求を受付けるノードとなる。
【0027】
クライアント2a、2bは、各ノード10〜10b、11〜11b、12〜12bが記憶するデータの更新(書込み)を要求するPut要求や、各ノード10〜10b、11〜11b、12〜12bが記憶するデータの読出しを要求するGet要求を発行する。そして、クライアント2a、2bは、発行したPut要求やGet要求を、IP網3を介して、データセンター4のストレージプロキシ5に送信する。
【0028】
ストレージプロキシ5が有する各プロキシサーバ5a〜5cは、クライアント2a、2bからPut要求またはGet要求を受信する。このような場合には、各プロキシサーバ5a〜5cは、LAN6を介して、Put要求やGet要求をストレージサーバノード7が有する各ノード10〜10b、11〜11b、12〜12bに配信する。この際、プロキシサーバ5a〜5cは、以下の処理を実行する。
【0029】
すなわち、プロキシサーバ5a〜5cは、受信した要求がPut要求である場合には、データの更新対象となるレプリカを識別する。そして、各ノード10〜10b、11〜11b、12〜12bのうち、識別したレプリカの1stレプリカを記憶するノードに対してPut要求を配信する。例えば、プロキシサーバ5a〜5cは、レプリカA1〜A3に対するPut要求を受信した場合には、1stレプリカであるレプリカA1を記憶するノード10にPut要求を配信する。
【0030】
一方、プロキシサーバ5a〜5cは、受信した要求がGet要求である場合には、Get要求の対象となるデータを識別し、識別したデータのレプリカを記憶するいずれかのノードに対してGet要求を配信する。例えば、プロキシサーバ5a〜5cは、データAに対するGet要求を受信した場合には、データAのレプリカA1〜A3を記憶するノード10〜12のうち、いずれかのノードに対してGet要求を配信する。
【0031】
次に、ストレージサーバノード7が有する各ノード10〜10b、11〜11b、12〜12bについて説明する。なお、以下の説明においては、ノード10が実行する処理について説明し、ノード10a、10b、11〜11b、12〜12bについては、ノード10が有する機能と同様の機能を発揮するものとして、説明を省略する。
【0032】
ノード10は、Get要求を受信した場合には、Get要求の対象となるデータをLAN6、ストレージプロキシ5、IP網3を介して、クライアント2a、2bに送信する。また、ノード10は、Put要求を受信した場合には、Put要求の対象となるデータのレプリカを記憶する他のノードに対して、データの更新を要求するupdate要求を送信する。
【0033】
ここで、図2を用いて、ノード10がPut要求を受信した際に実行する処理の一例について説明する。図2は、実施例1に係るノードがPut要求を受信した際に実行する処理の一例を説明するための図である。例えば、図2に示す例では、クライアント2aは、データAを対象とするPut要求を発行する。このような場合には、データAのレプリカA1〜A3のうち、1stレプリカであるA1を記憶するノード10にPut要求が配信される。
【0034】
ここで、ノード10は、Put要求を取得した場合には、自身が記憶するデータAの1stレプリカであるレプリカA1に対する書込み処理、すなわち、レプリカの更新を準備する。また、ノード10は、Put要求の対象となるデータAの2ndレプリカをノード11が記憶していると判別する。そして、ノード10は、データの更新要求であるupdate要求をノード11に送信する。
【0035】
次に、ノード11は、update要求を受信した場合には、自身が記憶する2ndレプリカの更新を準備するとともに、update要求の対象となるデータAの3rdレプリカをノード12が記憶していると判別する。そして、ノード11は、ノード12へupdate要求を転送する。
【0036】
次に、ノード12は、3rdレプリカを更新するとともに、update要求に対する応答であるupdated要求をノード11に送信する。ノード11は、updated要求を受信した場合には、準備していた2ndレプリカの更新を実行するとともに、updated要求をノード10に転送する。そして、ノード10は、updated要求を受信した場合には、準備していた1stレプリカの更新を実行し、Put要求に対する応答であるPut応答をクライアント2aに送信する。
【0037】
ここで、ノード10は、所定の時間内に受信したPut要求の数をカウントする。そして、ノード10は、カウントしたPut要求の数、すなわち、データの更新を行う頻度である更新頻度が所定の閾値よりも多いか否かを判別する。その後、ノード10は、更新頻度が所定の閾値よりも多いと判別した場合には、update要求を送信する経路に含まれるノード11、12のうち、どちらかのノードを経路から除外する。
【0038】
例えば、ノード10は、ノード11をファントムレプリカとして、update要求を転送する経路から除外する。このような場合には、ノード10は、ノード12に対してupdate要求を送信し、ノード12は、ノード10に対してupdated要求を送信する。つまり、ノード10は、update要求を送信するノードを1つ削減するので、Put要求に対する性能を向上させることができる。
【0039】
また、ノード10は、ファントムレプリカが存在する場合に、更新頻度が所定の閾値よりも少なくなった場合には、ファントムレプリカを元のノードとして復帰させる。例えば、ノード10は、ノード11をファントムレプリカとした後に、更新頻度が所定の閾値よりも少なくなった場合には、ノード11をupdate要求を送信する経路に復帰させる。このため、ノード10は、更新頻度に応じてPut要求に対する性能を調整することができる。
【0040】
また、ノード10は、所定の時間内に受信したGet要求の数をカウントする。そして、ノード10は、カウントしたGet要求の数、すなわち、データの読出しを行う頻度である参照頻度が所定の閾値よりも多いか否かを判別する。その後、ノード10は、参照頻度が所定の閾値よりも多いと判別した場合には、自身と同じレプリカを記憶するノードを追加する。
【0041】
すなわち、ノード10は、自身が記憶するレプリカと同じデータのレプリカを記憶していないサーバに、自身が記憶するレプリカと同じデータのレプリカをテンポラリレプリカとして記憶させる。そして、ノード10は、テンポラリレプリカを記憶したノードに対してGet要求の発行が可能である旨を各プロキシサーバ5a〜5cに通知する。このため、ノード10は、Get要求の発行先を分散させ、Get要求に対する性能を向上させることができる。
【0042】
また、ノード10は、参照頻度が所定の閾値よりも少ないと判別した場合には、追加したノードを削除する。すなわち、ノード10は、他のノードに記憶させたテンポラリレプリカを削除し、テンポラリレプリカを削除したノードに対してGet要求の発行ができなくなった旨を各プロキシサーバ5a〜5cに通知する。このため、ノード10は、参照頻度に応じて、Get要求に対する性能を調整することができる。
【0043】
次に、図3を用いて、ノード10の一例について説明する。図3は、実施例1に係るノードの機能的構成を説明するための図である。図3に示す例では、ノード10は、ネットワークインターフェース20、Put要求処理部21、Get要求処理部22、チェーン管理部23、ファントムレプリカ生成部24、テンポラリレプリカ生成部25を有する。また、ノード10は、ファントムレプリカ復帰部26、テンポラリレプリカ削除部27、レプリカ生成部28、レプリカ生成依頼部29、レプリカ記憶部30、ファントムレプリカ管理部31、テンポラリレプリカ管理部32を有する。
【0044】
レプリカ記憶部30は、レプリカのデータを記憶する記憶部である。例えば、レプリカ記憶部30、データAに関する1stレプリカであるレプリカA1を記憶する。また、レプリカ記憶部30は、データDに関する3rdレプリカであるレプリカD3を記憶する。このように、レプリカ記憶部30は、それぞれ異なるデータの複製である複数のレプリカを記憶することができる。
【0045】
チェーン管理部23は、チェーン管理表23a、ファントムレプリカ管理表23b、テンポラリレプリカ管理表23cを有する。ここで、チェーン管理表23aとは、update要求およびupdated要求を送信する経路であるチェーンの管理情報である。
【0046】
ここで、図4Aを用いて、チェーン管理表の一例について説明する。なお、図4Aは、チェーン管理表の一例を説明するための第1の図である。例えば、ノード10のチェーン管理部23は、図4Aに例示したチェーン管理表23aを記憶する。ここで、チェーン管理表23aには、チェーンID、レプリカタイプ、前方レプリカ、後方レプリカ、更新頻度、参照頻度を対応付けた情報が格納されている。チェーンIDとは、チェーンを一意に識別するための番号であり、レプリカの元となるデータごとに異なる番号が設定される。
【0047】
例えば、データAのレプリカであるレプリカA1〜A3のチェーンには、チェーンID「1」が設定され、データBのレプリカであるレプリカB1〜B3のチェーンには、チェーンID「2」が設定される。また、データCのレプリカであるレプリカC1〜C3のチェーンには、チェーンID「3」が設定される。このように、チェーンIDは、レプリカの元となるデータの種別に応じて、異なる番号が付与されることとなる。
【0048】
レプリカタイプとは、自身が記憶するレプリカの属性を示す情報である。例えば、ノード10がレプリカA1を記憶している場合には、チェーンID「1」と対応付けて、レプリカタイプ「1st」が記憶される。また、ノード10がレプリカB2を記憶している場合には、チェーンID「2」と対応付けて、レプリカタイプ「2nd」が記憶される。
【0049】
前方レプリカとは、対応付けられたチェーンIDが示すチェーンにおいて、前方となるレプリカを記憶するノード、すなわち、自身にとってupdate要求の送信元であり、updated要求の送信先となる前方ノードを示す情報である。後方レプリカとは、対応付けられたチェーンIDが示すチェーンにおいて、後方となるレプリカを記憶するノード、すなわち、自身にとってupdate要求の送信先であり、updated要求の送信元となる後方ノードを示す情報である。
【0050】
更新頻度とは、所定の時間が経過するまでの間に受信したPut要求の数である。すなわち、更新頻度とは、所定の時間が経過するまでの間にレプリカの更新処理を何度実行したかを示す情報である。また、参照頻度とは、所定の時間が経過するまでの間に受信したGet要求の数である。すなわち、参照頻度とは、所定の時間が経過するまでの間にレプリカの読出し処理を何度実行したかを示す情報である。
【0051】
例えば、図4Aに示す例では、チェーン管理表23aは、ノード10がチェーンID「1」のチェーン、すなわち、データAのレプリカA1〜A3のチェーンについて、1stレプリカであるA1を記憶していることを示す。また、チェーン管理表23aは、レプリカA1をノード11が記憶していることを示す。また、チェーン管理表23aは、データAのレプリカA1〜A3について、所定の時間が経過するまでの間に「4」回の更新が行われ、ノード10が記憶するレプリカA1の読出しが「4」回行われたことを示す。
【0052】
次に、図4Bおよび図4Cを用いて、ノード11およびノード12が有するチェーン管理表の一例について説明する。なお、図4Bは、チェーン管理表の一例を説明するための第2の図である。また、図4Cは、チェーン管理表の一例を説明するための第3の図である。また、図4Bには、ノード11が有するチェーン管理表の一例を記載し、図4Cには、ノード12が有するチェーン管理表の一例を記載した。
【0053】
すなわち、図4Bに示す例では、チェーン管理表は、ノード11がデータAのレプリカA1〜A3のチェーンについて、2ndレプリカであるA2を記憶していることを示す。また、チェーン管理表は、前方レプリカであるA1を記憶する前方ノードがノード10であり、後方レプリカであるA3を記憶する後方ノードがノード12であることを示す。また、チェーン管理表は、データAのレプリカA1〜A3について、所定の時間が経過するまでの間に「4」回の更新が行われ、ノード11が記憶するレプリカA2の読出しが「7」回行われたことを示す。
【0054】
また、図4Cに示す例では、チェーン管理表は、ノード12がデータAのレプリカA1〜A3のチェーンについて、3rdレプリカであるA3を記憶していることを示す。また、チェーン管理表は、前方レプリカであるA2を記憶する前方ノードがノード11であることを示す。また、チェーン管理表は、データAのレプリカA1〜A3について、所定の時間が経過するまでの間に「4」回の更新が行われ、ノード12が記憶するレプリカA3の読出しが「9」回行われたことを示す。
【0055】
図3に戻って、ファントムレプリカ管理表23bは、ノード10が設定したファントムレプリカの管理情報である。また、テンポラリレプリカ管理表23cは、ノード10が設定したテンポラリレプリカの管理情報である。以下、図5および図6を用いて、ファントムレプリカ管理表23bおよびテンポラリレプリカ管理表23cの一例について説明する。
【0056】
まず、図5を用いて、ファントムレプリカ管理表23bの一例を説明する。図5は、ファントムレプリカ管理表の一例を説明するための図である。図5に示す例では、ファントムレプリカ管理表23bには、チェーンID、ファントムレプリカを記憶するノード、更新データが対応付けて記憶される。
【0057】
ここで、更新データとは、ファントムレプリカに適用されていない更新処理を示す情報であり、例えば、更新処理の実行によって生じる差分データである。すなわち、ノード10は、Put要求を受信した際に、ファントムレプリカに対してupdate要求を送信しない。そこで、ノード10は、update要求による更新前と更新後との差分データをPut要求を受信する度に生成し、生成した差分データを更新データとして記憶する。すなわち、図5に示す例では、ファントムレプリカ管理表23bは、ノード11がファントムレプリカであり、複数の更新データである更新1、更新2…が存在することを示す。
【0058】
次に、図6を用いて、テンポラリレプリカ管理表23cの一例について説明する。図6は、テンポラリレプリカ管理表の一例を説明するための図である。図6に示すように、テンポラリレプリカ管理表23cには、チェーンIDとテンポラリレプリカを設定したノードとが対応付けて記憶される。すなわち、図6に示す例では、テンポラリレプリカ管理表23cは、チェーンID「1」に係るテンポラリレプリカ、すなわち、データAのテンポラリレプリカがノード11aおよびノード11bに設定されていることを示す。
【0059】
図3に戻って、ネットワークインターフェース20は、LAN6と接続されており、各プロキシサーバ5a〜5bが送信したPut要求やGet要求を受信する。また、ネットワークインターフェース20は、Put返答やレプリカのデータを各プロキシサーバ5a〜5bに送信する。また、ネットワークインターフェース20は、ストレージサーバノード7が有する各ノード10a、10b、11〜11b、12〜12bとupdate要求やupdated要求の送受信を行う。
【0060】
また、ネットワークインターフェース20は、各ノード10a、10b、11〜11b、12〜12bとの間でレプリカの生成処理や削除処理の実行要求を送受信する。なお、図3に示す例では、図が煩雑になるのを防ぐため、ネットワークインターフェース20とLAN6および各ノード10a、10b、11〜11b、12〜12bとの接続については省略した。
【0061】
Put要求処理部21は、Put要求を受信した場合には、レプリカの更新を実行する。具体的には、Put要求処理部21は、ネットワークインターフェース20を介してPut要求を受信した場合には、Put要求の対象となるデータを更新するレプリカをレプリカ記憶部30から検索し、検索したレプリカの更新を準備する。
【0062】
また、Put要求処理部21は、チェーン管理表23aがPut要求の対象となるレプリカのチェーンと対応付けて記憶する更新頻度を1インクリメントする。そして、Put要求処理部21は、Put要求の対象となるレプリカを更新するチェーンと対応付けて記憶された後方ノードをチェーン管理表23aから識別する。その後、Put要求処理部21は、識別した後方ノードにupdate要求を送信する。
【0063】
また、Put要求処理部21は、チェーン管理表23aに、前方ノードが記憶されていなかったチェーンに係るupdated要求を受信した場合、すなわち、ノード10が識別したチェーンにおいて始端となるノードである場合には、以下の処理を実行する。すなわち、Put要求処理部21は、準備した更新を適用し、Put要求を発行したクライアントにPut返答を送信する。
【0064】
また、Put要求処理部21は、ファントムレプリカを記憶するノードがPut要求の対象となるレプリカのチェーンと対応付けてファントムレプリカ管理表23bに記憶されている場合には、更新処理による差分データを生成する。そして、Put要求処理部21は、生成した差分データを更新データとしてファントムレプリカ管理表23bに格納する。
【0065】
また、Put要求処理部21は、upate要求を受信した場合には、テンポラリレプリカ管理表23cを参照し、update要求の対象となるレプリカのチェーンと対応付けて記憶されたテンポラリレプリカを記憶するノードを削除する。このような処理によって、ノード10は、レプリカの更新時に発生する性能低下を防ぐことができる。なお、Put要求処理部21は、上述した処理とは別に、所定の時間が経過するたびに、チェーン管理表23aの更新頻度を0に更新する。
【0066】
Get要求処理部22は、Get要求を発行したクライアントに対して、Get要求の対象となるレプリカのデータを送信する。具体的には、Get要求処理部22は、ネットワークインターフェース20を介してGet要求を受信した場合には、Get要求の対象となるレプリカをレプリカ記憶部30から検索する。そして、Get要求処理部22は、Get要求を発行したクライアントに対して、検索したレプリカのデータを送信する。
【0067】
また、Get要求処理部22は、Get要求を受信した場合には、チェーン管理表23aがGet要求の対象となるレプリカのチェーンと対応付けて記憶する参照頻度を1インクリメントする。なお、Get要求処理部22は、所定の時間が経過するたびに、チェーン管理表23aの参照頻度を0に更新する。
【0068】
ファントムレプリカ生成部24は、チェーン管理表23aに記憶された更新頻度が所定の閾値よりも多いか否かを判別する。そして、ファントムレプリカ生成部24は、更新頻度が所定の閾値よりも多いと判別した場合には、所定の閾値よりも多い更新頻度と対応付けて記憶された後方ノードをファントムレプリカとし、チェーンから除外する。
【0069】
具体的には、ファントムレプリカ生成部24は、チェーン管理表23aを参照し、自身を始端とするチェーンの更新頻度が所定の閾値よりも多いか否かを判別する。そして、ファントムレプリカ生成部24は、自身を始端とするチェーンの更新頻度が所定の閾値よりも多いと判別した場合には、以下の処理を実行する。すなわち、ファントムレプリカ生成部24は、更新頻度が所定の閾値よりも多いと判別したチェーンについて、後方ノードとして記憶されているノードに対し、レプリカをファントムレプリカにする旨とチェーンIDとを通知する。
【0070】
このような場合には、ノード10には、レプリカをファントムレプリカにする旨を通知したノードの後方ノードが通知される。そこで、ファントムレプリカ生成部24は、チェーン管理表23aのうち、更新頻度が所定の閾値よりも多いと判別したチェーンについて、後方ノードを通知されたノードに変更する。また、ファントムレプリカ生成部24は、ファントムレプリカを記憶するノードとチェーンIDとを対応付けてファントムレプリカ管理表23bに格納する。
【0071】
つまり、ファントムレプリカ生成部24は、更新頻度が所定の閾値よりも多い場合には、update要求を転送するチェーンに含まれるレプリカをファントムレプリカとして一時的に除外する。このため、ストレージシステム1は、update要求を転送する経路上のノードの数が減少させる結果、Put要求に対する性能を向上させることができる。
【0072】
テンポラリレプリカ生成部25は、チェーン管理表23aを参照し、各チェーンの参照頻度が所定の閾値よりも多いか否かを判別する。そして、テンポラリレプリカ生成部25は、いずれかのチェーンについて、参照頻度が所定の閾値よりも多いと判別した場合には、以下の処理を実行する。すなわち、テンポラリレプリカ生成部25は、ストレージサーバノード7から利用可能なノードを検索する。ここで、利用可能なノードとしては、例えば、ノードが備えるメモリ資源、ディスク容量、CPU(Central Processing Unit)の処理資源等に余裕があるノードや、ノード10に設置位置が近いノードである。
【0073】
そして、テンポラリレプリカ生成部25は、検索した利用可能なノードに、参照頻度が所定の閾値よりも多いと判別したチェーンに係るレプリカをテンポラリレプリカとして記憶させる。詳細には、テンポラリレプリカ生成部25は、参照頻度が所定の閾値よりも多いと判別したチェーンに係るレプリカのデータを検索したノードに送信するとともに、テンポラリレプリカの生成依頼を送信する。
【0074】
また、テンポラリレプリカ生成部25は、テンポラリレプリカ管理表23cに、複製したレプリカに係るチェーンIDとテンポラリレプリカを記憶させたノードとを対応づけて格納する。また、テンポラリレプリカ生成部25は、プロキシサーバ5a〜5cに、テンポラリレプリカを記憶されたノードからデータの読出しが可能である旨を通知する。
【0075】
つまり、テンポラリレプリカ生成部25は、ノード10が記憶するレプリカについて参照頻度が所定の閾値よりも多いと判別した場合には、ノード10が記憶するレプリカの複製であるテンポラリレプリカを他のノードに生成する。ここで、テンポラリレプリカは、チェーンには追加されず、update要求等による更新が行われない。このため、ノード10は、Put要求に対する性能を劣化させることなく、Get要求に対する性能を向上させることができる。
【0076】
ファントムレプリカ復帰部26は、ファントムレプリカが存在する際に、更新頻度が所定の閾値よりも少ないと判別した場合には、ファントムレプリカを通常のレプリカに復帰させる。具体的には、ファントムレプリカ復帰部26は、ファントムレプリカ管理表23bを参照し、ファントムレプリカを記憶するノードと対応付けて記憶されたチェーンIDを識別する。そして、ファントムレプリカ復帰部26は、チェーン管理表23aを参照し、識別したチェーンIDについて、更新頻度が所定の閾値よりも少ないか否かを判別する。
【0077】
そして、ファントムレプリカ復帰部26は、更新頻度が所定の閾値よりも少ないと判別した場合には、ファントムレプリカ管理表23bを用いて、以下の処理を実行する。すなわち、ファントムレプリカ復帰部26は、更新頻度が所定の閾値よりも少ないと判別したチェーンのチェーンIDと対応付けて記憶されたファントムレプリカを記憶するノードを識別する。そして、ファントムレプリカ復帰部26は、識別したノードに対して、ファントムレプリカ管理表23bに対応付けて記憶された更新データを送信し、ファントムレプリカに更新データを適用するよう指示する。
【0078】
また、ファントムレプリカ復帰部26は、チェーン管理表23aを参照し、更新頻度が所定の閾値よりも少ないと判別したチェーンの後方ノードを識別する。そして、ファントムレプリカ復帰部26は、ファントムレプリカを記憶するノードに識別したノードを通知するとともに、ファントムレプリカを復帰させる旨をチェーンIDと自分より一つ大きな番号のレプリカとなることを通知する。また、ファントムレプリカ復帰部26は、チェーン管理表23aから識別した後方ノードをファントムレプリカ管理表23bから識別したノードに変更する。
【0079】
すなわち、ファントムレプリカ復帰部26は、ファントムレプリカが存在する際に、更新頻度が所定の閾値よりも少ないと判別した場合には、ファントムレプリカを復帰させる。このため、ノード10は、更新頻度が少ない際にレプリカを記憶するノードを元の数に戻す結果、Put要求に対する性能を調整することができる。
【0080】
また、ファントムレプリカ復帰部26は、Put要求処理部21が生成した更新データをファントムレプリカに適用させてから、ファントムレプリカを通常のレプリカとしてチェーンに復帰させる。このため、ノード10は、各レプリカの同一性を保持したまま、Put要求に対する性能を調節することができる。また、ノード10は、新たにレプリカを生成するのではなく、更新の差分データである更新データを適用したファントムレプリカをチェーンに復帰させるので、レプリカの復帰を迅速に行うことができる。
【0081】
テンポラリレプリカ削除部27は、テンポラリレプリカが存在する際に、参照頻度が所定の閾値よりも少ないと判別した場合には、テンポラリレプリカを削除する。具体的には、テンポラリレプリカ削除部27は、テンポラリレプリカ管理表23cを参照し、テンポラリレプリカを記憶するノードと対応付けられたチェーンIDを識別する。そして、テンポラリレプリカ削除部27は、チェーン管理表23aを参照し、識別したチェーンIDについて、参照頻度が所定の閾値よりも少ないか否かを判別する。
【0082】
そして、テンポラリレプリカ削除部27は、識別したチェーンIDについて、参照頻度が所定の閾値よりも少ないと判別した場合には、以下の処理を実行する。すなわち、テンポラリレプリカ削除部27は、テンポラリレプリカ管理表23cを参照し、参照頻度が所定の閾値よりも少ないと判別したチェーンIDと対応付けて記憶されたテンポラリレプリカを記憶するノードを削除する。また、テンポラリレプリカ削除部27は、テンポラリレプリカ管理表23cから削除したノードからデータの読出しができなくなった旨を、各プロキシサーバ5a〜5cに通知する。
【0083】
つまり、テンポラリレプリカ削除部27は、テンポラリレプリカが存在する際に、参照頻度が所定の閾値よりも少なくなった場合には、テンポラリレプリカを削除する。このため、ノード10は、Put要求に対する性能を劣化させることなく、Get要求に対する性能を調整できる。
【0084】
レプリカ生成部28は、update要求等により通常のレプリカの生成を依頼された場合には、レプリカを生成し、レプリカ記憶部30に格納する。具体的には、レプリカ生成部28は、他のノードからupdate要求を受信した場合には、更新対象となるレプリカをレプリカ記憶部30から検索し、検索したレプリカの更新を準備する。また、レプリカ生成部28は、update要求の対象となるレプリカがレプリカ記憶部30に記憶されていない場合には、新たにレプリカを記憶させる準備を行う。
【0085】
また、レプリカ生成部28は、update要求の対象となるレプリカのチェーンにおいて、ノード10が終端となるノードではない場合には、レプリカ生成依頼部29にupdate要求を転送するよう指示する。また、レプリカ生成部28は、チェーン管理表23aに、後方ノードが記憶されていなかった場合、すなわち、ノード10が識別したチェーンにおいて終端となるノードである場合には、以下の処理を実行する。
【0086】
すなわち、レプリカ生成部28は、レプリカの更新または新たなレプリカをレプリカ記憶部30に記憶させるとともに、チェーン管理表23aに識別したチェーンと対応付けて記憶された前方ノードへupdated要求を送信する。また、レプリカ生成部28は、他のノードからupdated要求を受信した場合には、update要求を受信した際に準備した更新を適用する。また、レプリカ生成部28は、updated要求の対象となるレプリカのチェーンを識別し、チェーン管理表23aに、識別したチェーンと対応付けて記憶された前方ノードにupdated要求を転送する。
【0087】
また、レプリカ生成部28は、他のノードからレプリカをファントムレプリカにする旨の通知を取得した場合には、レプリカ記憶部30が記憶するレプリカをファントムレプリカとする。具体的には、レプリカ生成部28は、他のノードからレプリカをファントムレプリカにする旨の通知とチェーンIDとの通知を受信する。
【0088】
このような場合には、レプリカ生成部28は、識別したチェーンIDと対応付けて記憶された前方ノード、すなわち、ファントムレプリカにする旨の通知元であるノードに、通知されたチェーンIDと対応付けられた後方ノードを通知する。また、レプリカ生成部28は、チェーン管理表23aを参照し、通知されたチェーンIDと対応付けて記憶された後方ノードに、チェーンIDと対応付けて記憶された前方ノードと、識別したチェーンIDとを通知するとともに、チェーンから外れる旨を通知する。さらに、レプリカ生成部28は、チェーン管理表23aの識別したチェーンIDのレプリカタイプをファントムレプリカに変更する。
【0089】
また、レプリカ生成部28は、他のノードから、ノードと、チェーンIDと、チェーンから外れる旨の通知を受信した場合には、以下の処理を実行する。すなわち、レプリカ生成部28は、チェーン管理表23aを参照し、通知されたチェーンIDと対応付けて記憶された前方ノードを通知されたノードに変更する。つまり、レプリカ生成部28は、前方ノードが記憶するレプリカがファントムレプリカになると識別し、ファントムレプリカをチェーンから除外するため、前方ノードのさらに前方ノードを新たな前方ノードとする。
【0090】
また、レプリカ生成部28は、他のノードからファントムレプリカを復帰させる旨の通知を受信した場合には、ファントムレプリカをチェーンに復帰させる。具体的には、レプリカ生成部28は、他のノードからファントムレプリカを復帰させる旨の通知とノードの通知とチェーンIDおよび何番目のレプリカなのかなどのレプリカタイプを受信する。このような場合には、レプリカ生成部28は、チェーン管理表23aから、ファントムレプリカに係るチェーンの前方ノードを通知元のノードに変更するとともに、ファントムレプリカに係るチェーンの後方ノードを通知されたノードに変更する。さらに、レプリカ生成部28は、チェーン管理表23aの通知されたチェーンIDのレプリカタイプを通知されたレプリカタイプに変更する。
【0091】
そして、レプリカ生成部28は、他のノードから通知されたノード、すなわち新たな後方ノードに対して、ファントムレプリカに係るチェーンIDと前方ノードの変更とを通知する。なお、レプリカ生成部28は、他のノードからチェーンIDと前方ノードの変更との通知を受信した場合には、チェーン管理表23aから通知されたチェーンIDを識別し、識別したチェーンIDと対応付けて記憶された前方ノードを通知されたノードに変更する。
【0092】
また、レプリカ生成部28は、他のノードからテンポラリレプリカの生成依頼を受信した場合には、テンポラリレプリカをレプリカ記憶部30に記憶させる。具体的には、レプリカ生成部28は、レプリカのデータとテンポラリレプリカの生成依頼を受信する。このような場合には、レプリカ生成部28は、受信したレプリカのデータをテンポラリレプリカとしてレプリカ記憶部30に記憶させる。
【0093】
レプリカ生成依頼部29は、レプリカ生成部28からupdate要求を転送するよう指示された場合には、チェーン管理表23aを参照し、update要求の転送先となる後ノードを識別する。そして、レプリカ生成依頼部29は、識別した後ノードへupdate要求を送信する。
【0094】
ファントムレプリカ管理部31は、レプリカ記憶部30に記憶されたファントムレプリカの管理を実行する。例えば、ファントムレプリカ管理部31は、ノード10の資源が枯渇した場合には、レプリカ記憶部30に記憶されたファントムレプリカを削除する。特に、ファントムレプリカ管理部31は、レプリカ記憶部30やメモリが逼迫し、ファントムレプリカを記憶することができなくなった場合や、CPUの処理資源が逼迫し、レスポンスが悪化した場合等に、ファントムレプリカを削除する。なお、ファントムレプリカ管理部31は、ファントムレプリカを削除した場合には、ファントムレプリカが属していたチェーンの前ノードにファントムレプリカを削除した旨を通知することとしてもよい。
【0095】
また、テンポラリレプリカ管理部32は、レプリカ記憶部30に記憶されたテンポラリレプリカの管理を実行する。例えば、テンポラリレプリカ管理部32は、ノード10の資源が枯渇した場合には、レプリカ記憶部30に記憶されたテンポラリレプリカを削除する。なお、テンポラリレプリカ管理部32は、資源の枯渇により、テンポラリレプリカを削除した場合には、プロキシサーバ5a〜5cに対して、データの読み出しができなくなった旨を通知してもよい。
【0096】
例えば、ネットワークインターフェース20、Put要求処理部21、Get要求処理部22、ファントムレプリカ生成部24、テンポラリレプリカ生成部25、ファントムレプリカ復帰部26、テンポラリレプリカ削除部27とは、電子回路である。また、レプリカ生成部28、レプリカ生成依頼部29、ファントムレプリカ管理部31、テンポラリレプリカ管理部32とは、電子回路である。ここで、電子回路の例として、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路、またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などを適用する。
【0097】
また、チェーン管理部23、レプリカ記憶部30とは、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(flash memory)などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。
【0098】
次に、図7を用いて、上述したノード10がファントムレプリカを生成する処理の一例について説明する。図7は、ファントムレプリカを生成する処理を説明するための図である。例えば、図7に示す例では、ノード10がデータAの1stレプリカを記憶し、ノード11がデータAの2ndレプリカを記憶し、ノード12がデータAの3rdレプリカを記憶する。なお、図7に示す各ノードは、ノード10、ノード11、ノード12の順にチェーンするチェーンID「1」のチェーンで接続されているものとする。
【0099】
例えば、ノード10は、データAのレプリカを対象とするPut要求の更新頻度が所定の閾値よりも多い場合には、ノード11が記憶する2ndレプリカをファントムレプリカとする。具体的には、ノード10は、図7中(F)に示すように、2ndレプリカをファントムレプリカにする旨とチェーンID「1」とを後方ノードであるノード11に通知する。
【0100】
このような場合には、ノード11は、チェーンID「1」が示すチェーンにおいて、自身の後方ノードであるノード12をノード10に通知する。そして、ノード10は、チェーンID「1」が示すチェーンにおいて、自身の後方ノードであるノード11を通知されたノード12に変更する。
【0101】
また、ノード11は、図7中(G)に示すように、自身の前方ノードであるノード10をノード12に通知するとともに、チェーンID「1」が示すチェーンから外れる旨を通知する。すると、ノード12は、チェーンID「1」が示すチェーンにおいて、自身の前方ノードをノード11からノード10に変更する。このため、ノード10は、Put要求を受信した場合には、update要求を図7中(H)に示すように、ノード11ではなく、ノード12に送信することとなる。
【0102】
ここで、図8Aおよび図8Bを用いて、図7に示す例においてノード10およびノード12がチェーン管理表を更新する処理について説明する。図8Aは、更新後のチェーン管理表の一例を説明するための第1の図である。また、図8Bは、更新後のチェーン管理表の一例を説明するための第2の図である。なお、図8Aには、ノード10が有する更新後のチェーン管理表23aについて記載し、図8Bには、ノード12が有する更新後のチェーン管理表23aについて記載した。
【0103】
上述したように、ノード10は、ノード11の2ndレプリカをファントムレプリカとした場合には、ノード11からノード11の後方ノードであるノード12の通知を受信する。このため、ノード10は、図8Aに示すように、後方レプリカをノード11からノード12へ変更する。この結果、ノード10は、update要求をノード12へ送信することとなる。
【0104】
また、ノード12は、ノード11の2ndレプリカがファントムレプリカとなる場合には、ノード11からノード11の前方レプリカであるノード10の通知を受信する。このため、ノード12は、図8Bに示すように、前方レプリカをノード11からノード10へと変更する。この結果、ノード12は、updated要求をノード10へ送信することとなる。
【0105】
次に、図9を用いて、2ndレプリカを記憶するノード11がテンポラリレプリカを生成する処理の一例について説明する。図9は、テンポラリレプリカを生成する処理を説明するための図である。なお、図9に示す例では、ノード10〜12が図7と同様のレプリカを記憶する例について記載した。
【0106】
例えば、図9に示す例では、ノード10は、クライアント2aからGet要求を受信する。また、ノード11は、クライアント2bからGet要求を受信する。また、ノード12は、クライアント2cからGet要求を受信する。ここで、ノード11は、参照頻度が所定の閾値を超えたと判別した場合には、新たなノードとして、ノード11aを検出する。
【0107】
このような場合には、ノード11は、図9中(I)に示すように、ノード11aに2ndレプリカの複製であるテンポラリレプリカを生成する。このため、ノード11aは、図9中(J)に示すように、クライアント2dが発行したGet要求に対する処理を実行することとなる。
【0108】
また、ノード11は、ノード11aにテンポラリレプリカを生成した後に、再度、参照頻度が所定の閾値を超えたと判別した場合には、新たなノードとして、ノード11bを検出する。そして、ノード11は、図9中(K)に示すように、ノード11bにテンポラリレプリカを生成する。このため、ノード11bは、図9中(L)に示すように、クライアント2eが発行したGet要求に対する処理を実行することとなる。
【0109】
次に、図10A〜10C、図11A、図11B、図12を用いて、ノード10が実行する処理の流れを説明する。なお、ノード10は、図10A〜10c、図11A、図11B、図12に示す各処理を、それぞれ独立に実行するものとする。
【0110】
まず、図10Aを用いて、ノード10がファントムレプリカを設定する処理の一例について説明する。図10Aは、ファントムレプリカを設定する処理の流れを説明するためのフローチャートである。例えば、ノード10は、更新頻度が所定の閾値以上であるか否かを判別する(ステップS101)。
【0111】
そして、ノード10は、更新頻度が所定の閾値以上であると判別した場合には(ステップS101肯定)、チェーン管理表23aを更新し、チェーンの中間レプリカをチェーンから外す(ステップS102)。そして、ノード10は、チェーンから外したレプリカをファントムレプリカ管理表23bに登録し、ファントムレプリカとする(ステップS103)。その後、ノード10は、処理を終了する。一方、ノード10は、更新頻度が所定の閾値より少ないと判別した場合には(ステップS101否定)、一定時間待機する(ステップS104)。そして、ノード10は、再度、更新頻度が所定の閾値以上であるか否かを判別する(ステップS101)。
【0112】
次に、図10Bを用いて、ファントムレプリカが存在する際に、ノード10が更新データを記憶する処理の流れについて説明する。図10Bは、データの積算を記憶する処理の流れを説明するためのフローチャートである。例えば、図10Bに示す例では、ノード10は、クライアント2が発行したPut要求を受信する(ステップS201)。このような場合には、ノード10は、Put要求の対象となるレプリカのチェーンについて、ファントムレプリカが存在するか否かを判別する(ステップS202)。
【0113】
そして、ノード10は、ファントムレプリカが存在すると判別した場合には(ステップS202肯定)、以下の処理を実行する。すなわち、ノード10は、自身のレプリカの更新を準備するとともに、変更分のデータの積算、すなわち、更新前の更新後の差分データの積算を記憶し(ステップS203)、処理を終了する。なお、ノード10は、ファントムレプリカが存在しないと判別した場合には(ステップS202否定)、差分データの積算を記憶することなく、処理を終了する。
【0114】
次に、図10Cを用いて、ノード10がファントムレプリカを復帰させる処理の流れについて説明する。図10Cは、ファントムレプリカを復帰させる処理の流れを説明するためのフローチャートである。例えば、図10Cに示す例では、ノード10は、更新頻度が所定の閾値を下回ったか否かを判別する(ステップS301)。
【0115】
そして、ノード10は、更新頻度が所定の閾値を下回ったと判別した場合は(ステップS301肯定)、ファントムレプリカに、変更分のデータの積算を適用する(ステップS302)。そして、ノード10は、チェーン管理表23aの後ノードをファントムレプリカを記憶するノードに変更することで、ファントムレプリカをチェーンに復帰させ(ステップS303)、処理を終了する。一方、ノード10は、更新頻度が所定の閾値以上であると判別した場合は(ステップS301否定)、一定時間待機し(ステップS304)、再度、更新頻度が所定の閾値を下回ったか否かを判別する(ステップS301)。
【0116】
次に、図11Aを用いて、ノード10がテンポラリレプリカを作成する処理の一例について説明する。図11Aは、テンポラリレプリカを作成する処理の流れを説明するためのフローチャートである。例えば、図11Aに示す例では、ノード10は、参照頻度が所定の閾値以上であるか否かを判別する(ステップS401)。
【0117】
そして、ノード10は、参照頻度が所定の閾値以上であると判別した場合は(ステップS401肯定)、テンポラリレプリカを作成するサーバを選定する(ステップS402)。次に、ノード10は、選定したサーバにテンポラリレプリカを作成し(ステップS403)、テンポラリレプリカを作成したノードをプロキシサーバ5a〜5cに登録する(ステップS404)。一方、ノード10は、参照頻度が所定の閾値を下回ると判別した場合は(ステップS401否定)、一定時間待機し(ステップS405)、再度、参照頻度が所定の閾値以上であるか否かを判別する(ステップS401)。
【0118】
次に、図11Bを用いて、ノード10がテンポラリレプリカを削除する処理の流れの一例について説明する。図11Bは、テンポラリレプリカを削除する処理の流れを説明するためのフローチャートである。例えば、図11Bに示す例では、ノード10は、参照頻度が所定の閾値を下回ったか否かを判別する(ステップS501)。
【0119】
そして、ノード10は、参照頻度が所定の閾値を下回ったと判別した場合は(ステップS501肯定)、削除するテンポラリレプリカを記憶するノードをプロキシサーバ5a〜5cに通知する(ステップS502)。次に、ノード10は、テンポラリレプリカを削除し(ステップS503)、処理を終了する。なお、ノード10は、参照頻度が所定の閾値以上であると判別した場合は(ステップS501否定)、一定時間待機し(ステップS504)、再度、参照頻度が所定の閾値を下回ったか否かを判別する(ステップS501)。
【0120】
次に、図12を用いて、サーバ10がファントムレプリカまたはテンポラリレプリカを削除する処理の流れの一例について説明する。図12は、レプリカを削除する処理の流れを説明するためのフローチャートである。例えば、図12に示す例では、ノード10は、自身の資源が逼迫しているか否かを判別する(ステップS601)。
【0121】
そして、ノード10は、自身の資源が逼迫していないと判別した場合には(ステップS601否定)、一定時間待機し(ステップS602)、再度、自身の資源が逼迫しているか否かを判別する(ステップS601)。一方、ノード10は、自身の資源が逼迫していると判別した場合には(ステップS601肯定)、テンポラリレプリカを記憶しているか否かを判別する(ステップS603)。
【0122】
そして、ノード10は、テンポラリレプリカを記憶していると判別した場合には(ステップS603肯定)、記憶しているテンポラリレプリカを削除する(ステップS604)。その後、ノード10は、再度、自身の資源が逼迫しているか否かを判別する(ステップS601)。
【0123】
一方、ノード10は、テンポラリレプリカを記憶していないと判別した場合には(ステップS603否定)、ファントムレプリカを記憶しているか否かを判別する(ステップS605)。そして、ノード10は、ファントムレプリカを記憶していると判別した場合は(ステップS605肯定)、ファントムレプリカを削除し(ステップS606)、再度、自身の資源が逼迫しているか否かを判別する(ステップS601)。また、ノード10は、ファントムレプリカを記憶していないと判別した場合は(ステップS605否定)、そのまま処理を終了する。
【0124】
[実施例1の効果]
上述したように、ストレージシステム1は、複数のノード10〜12が共通して記憶するデータについてのPut要求を受信した場合に、データのPut要求を複数のノード10〜12間で所定の転送順で送信することでPut要求の転送先の各ノード10〜12におけるデータの更新処理を行う。このストレージシステム1は、データのPut要求の受信頻度に応じて、所定の転送順に従った転送における転送先に含まれる1以上のノードをファントムレプリカとして転送先から除外した転送順に所定の順を変更してデータのPut要求を転送するように制御する。
【0125】
例えば、チェーンの始端となるノード10は、所定の時間内に受信したPut要求の数である更新頻度が所定の閾値よりも多いか否かを判別する。そして、ノード10は、更新頻度が所定の閾値よりも多いと判別した場合には、後ノードであるノード11をファントムレプリカとしてチェーンから除外する。このため、ノード10を有するストレージシステム1は、Put要求に対する性能を動的に調整することができる。
【0126】
また、ストレージシステム1は、ファントムレプリカが存在し、データのPut要求の受信頻度が所定の閾値よりも少ない場合は、ファントムレプリカを経路に復帰させた転送順でデータのPut要求を転送するように制御する。例えば、ノード10は、ファントムレプリカが存在する際に、更新頻度が所定の閾値よりも少ないと判別した場合には、ファントムレプリカを通常のレプリカとしてチェーンに復帰させる。このため、ストレージシステム1は、Put要求に対する性能を動的に調整することができる。
【0127】
また、ストレージシステム1は、ファントムレプリカが存在し、Put要求を受信した場合は、差分データを保持する。そして、ストレージシステム1は、ファントムレプリカが存在し、データのPut要求の受信頻度が所定の閾値よりも少ない場合は、差分データをファントムレプリカに適用する。その後、ストレージシステム1は、ファンとムレプリカを復帰させた転送順でPut要求を転送するように制御する。
【0128】
例えば、ノード10は、ファントムレプリカが存在する際に、Put要求を受信した場合には、変更分のデータの積算、すなわち、差分データを記憶する。そして、ノード10は、更新頻度が所定の閾値よりも少ないと判別した場合には、ファントムレプリカに記憶した差分データを適用し、その後、ファントムレプリカを通常のレプリカとしてチェーンに復帰させる。このため、ストレージシステム1は、迅速にファントムレプリカを通常のレプリカとして復帰させることができる。
【0129】
また、ストレージシステム1は、Get要求の受信頻度が所定の閾値よりも多い場合には、データを記憶していないノードに、データを記憶させ、テンポラリレプリカを記憶するノードとしてストレージシステム1に追加する。そして、ストレージシステム1は、テンポラリレプリカを記憶させたノードからデータの読出しが可能である旨をプロキシサーバ5a〜5cに通知する。
【0130】
例えば、ノード10は、所定の時間内にGet要求を受信した回数である参照頻度が所定の閾値よりも多いか否かを判別する。そして、ノード10は、参照頻度が所定の閾値よりも多いと判別した場合には、他のノードにノード10と同じレプリカをテンポラリレプリカとして記憶させる。その後、ノード10は、テンポラリレプリカを記憶させたノードからデータの読出しが可能である旨を、プロキシサーバ5a〜5cに通知する。このため、ノード10は、Get要求に対する性能を動的に調整することができる。
【0131】
また、ストレージシステム1は、テンポラリレプリカを記憶させたノードが存在し、Get要求の受信頻度が所定の閾値よりも少ない場合は、テンポラリレプリカを記憶させたノードをストレージシステム1から除外する。また、ストレージシステム1は、除外したノードからデータの読出しができない旨をクプロキシサーバ5a〜5cに通知する。
【0132】
例えば、ノード10は、参照頻度が所定の閾値よりも少ないと判別した場合には、テンポラリレプリカを削除するとともに、テンポラリレプリカを削除したノードからデータの読出しができない旨をプロキシサーバ5a〜5cに通知する。このため、ストレージシステム1は、不必要なテンポラリレプリカにより、システムの資源を枯渇させることなく、Get要求に対する性能を動的に調整することができる。
【0133】
また、ストレージシステム1は、ファントムレプリカを記憶するノードの資源や、テンポラリレプリカを記憶するノードの資源が枯渇した場合には、ファントムレプリカやテンポラリレプリカを削除する。例えば、ノード10は、自身の資源が枯渇した場合には、自身に記憶されたテンポラリレプリカやファントムレプリカを削除する。このため、ストレージシステム1は、Put要求がGet要求に対する性能を動的に調整する際に、システムの資源を不用意に枯渇させることを防ぐことができる。
【実施例2】
【0134】
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例2として本発明に含まれる他の実施例を説明する。
【0135】
(1)更新データについて
上述したノード10は、ファントムレプリカを生成してから復帰するまでの間、Put要求を受信した場合には、更新前と更新後の差分データを蓄積していた。しかし、実施例は、これに限定されるものではない。例えば、ノード10は、差分データをファントムレプリカを記憶するノードに記憶させることとしてもよい。
【0136】
また、ノード10は、蓄積した差分データの量が、所定の量を超えた場合には、差分データを破棄するとともに、ファントムレプリカを削除することとしても良い。このような処理を実行した場合には、ストレージシステム1は、Put要求やGet要求に対する性能を調整する際に、資源が枯渇することを防ぐことができる。
【0137】
(2)テンポラリレプリカについて
上述したノード10は、資源が枯渇した際に、自身が記憶するテンポラリレプリカを削除した。しかし、実施例は、これに限定されるものではない。例えば、ノード10は、テンポラリレプリカを記憶してから所定の時間が経過した場合には、テンポラリレプリカを削除することとしてもよい。
【0138】
また、ノード10は、テンポラリレプリカを記憶している際に、update要求を受信した場合には、テンポラリレプリカを削除することで、テンポラリレプリカの更新処理による性能低下を防いだ。しかし、実施例はこれに限定されるものではなく、例えば、ノード10は、テンポラリレプリカを生成したサーバから更新後の新たなテンポラリレプリカのデータを受信し、受信したテンポラリレプリカのデータに置き換えることとしてもよい。
【0139】
(3)各処理について
上述した図3は、機能的構成の一例を説明するものに過ぎず、各部20〜32が実行する処理は、矛盾しない範囲で結合、または、分割することができる。例えば、レプリカ生成部28およびレプリカ生成依頼部29を1つの処理部として統合することも可能である。
【0140】
(4)クライアントについて
上述したストレージシステム1は、クライアント2a、2bが発行したPut要求やGet要求をプロキシサーバ5a〜5cが各ノード10〜10b、11〜11b、12〜12bに割り振っていた。しかし、実施例はこれに限定されるものではなく、例えば、各クライアント2a、2bは、Put要求やGet要求を発行するノードを予め記憶し、記憶したノードに対して、Put要求やGet要求を直接発行しても良い。このような場合には、各ノード10〜10b、11〜11b、11〜12bは、プライマリレプリカを記憶させたノードを、プロキシサーバ5a〜5cではなく、クライアント2a、2bに対して通知することとなる。
【0141】
(5)ファントムレプリカについて
上述したストレージシステム1において、ノード10は、自身の後ノードが記憶するレプリカをファントムレプリカとし、後ノードをチェーンから除外した。しかし、実施例はこれに限定されるものではない。例えば、ノード10は、ノード10、ノード11、ノード12、ノード12aを接続するチェーンにおいて、ノード12が記憶するレプリカをファントムレプリカとし、ノード12をチェーンから除外してもよい。
【0142】
なお、ノード10は、ノード12をチェーンから除外する場合には、ノード11を介してノード12にファントムレプリカとする旨を通知する。このような場合には、ノード12は、前ノードであるノード11に後ノード12aを通知し、後ノード12aに前ノードであるノード11を通知する。その後、ノード11は、後ノードをノード12aとし、ノード12aは、前ノードをノード12とすればよい。
【0143】
(6)プログラム
ところで、実施例1に係るノード10は、ハードウェアを利用して各種の処理を実現する場合を説明した。しかし、実施例はこれに限定されるものではなく、あらかじめ用意されたプログラムをストレージ装置として動作するコンピュータで実行することによって実現するようにしてもよい。そこで、以下では、図13を用いて、実施例1に示したノード10と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図13は、システム制御プログラムを実行するコンピュータの一例を説明するための図である。
【0144】
図13に例示されたコンピュータ100は、ROM(Read Only Memory)110、HDD(Hard Disk Drive)120、RAM(Random Access Memory)130、CPU(Central Processing Unit)140がバス160で接続される。また、コンピュータ100は、他のコンピュータと通信を行うためのI/O(Input Output)150がバス160で接続される。
【0145】
なお、HDD120は、通常のレプリカや、テンポラリレプリカ、ファントムレプリカが記憶されることとなる。RAM130には、システム制御プログラム131が記憶されており、CPU140が読み出して実行することによって、図13に示す例では、システム制御プロセス141として機能するようになる。なお、システム制御プロセス141は、図3に示すノード10と同様の機能を発揮する。
【0146】
なお、本実施例で説明したシステム制御プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM(Compact Disc Read Only Memory)、MO(Magneto Optical Disc)、DVD(Digital Versatile Disc)などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【0147】
1 ストレージシステム
2〜2b クライアント
3 IP網
4 データセンター
5 ストレージプロキシ
5a〜5c プロキシサーバ
6 LAN
7 ストレージサーバノード
10〜10b、11〜11b、12〜12b ノード
20 ネットワークインターフェース
21 Put要求処理部
22 Get要求処理部
23 チェーン管理部
24 ファントムレプリカ生成部
25 テンポラリレプリカ生成部
26 ファントムレプリカ復帰部
27 テンポラリレプリカ削除部
28 レプリカ生成部
29 レプリカ生成依頼部
30 レプリカ記憶部
31 ファントムレプリカ管理部
32 テンポラリレプリカ管理部

【特許請求の範囲】
【請求項1】
複数のストレージが共通して記憶するデータについての更新要求を受信した場合に、前記データの更新要求を前記複数のストレージ間で所定の転送順で送信することで該更新要求の転送先の各ストレージにおける前記データの更新処理を行うストレージシステムにおいて、
前記データの更新要求の受信頻度に応じて、前記所定の転送順に従った転送における転送先に含まれる1以上のストレージを転送先から除外した転送順に前記所定の転送順を変更してデータの更新要求を転送するように制御する制御手段、
を備えたことを特徴とするストレージシステム。
【請求項2】
前記制御手段は、前記転送先から除外したストレージが存在し、前記データの更新要求の受信頻度が所定の閾値よりも少ない場合は、当該ストレージを前記経路に復帰させた転送順に前記所定の転送順を変更してデータの更新要求を転送するように制御することを特徴とする請求項1に記載のストレージシステム。
【請求項3】
前記転送先から除外したストレージが存在し、前記更新要求を受信した場合は、更新によるデータの差分を保持する保持手段をさらに備え、
前記制御手段は、前記転送先から除外されたストレージが存在し、前記データの更新要求の受信頻度が所定の閾値よりも少ない場合は、前記保持手段により保持したデータの差分を前記転送先から除外したストレージに適用し、その後、当該ストレージを前記経路に復帰させた転送順に前記所定の転送順を変更してデータの更新要求を転送するように制御することを特徴とする請求項2に記載のストレージシステム。
【請求項4】
前記データについての読出しを要求する読出要求の受信頻度が所定の閾値よりも多い場合には、前記データを記憶していないストレージに、当該データを記憶させて、前記ストレージシステムに追加する追加手段と、
前記追加手段が新たに前記データを記憶させたストレージからデータの読出しが可能である旨を前記読出要求の送信元となるクライアントに通知する通知手段と、
をさらに備えることを特徴とする請求項1〜3のいずれか1つに記載のストレージシステム。
【請求項5】
前記追加手段は、新たにデータを記憶させた前記ストレージが存在し、前記読出要求の受信頻度が所定の閾値よりも少ない場合は、新たにデータを記憶させた前記ストレージを前記ストレージシステムから除外し、
前記通知手段は、前記追加手段が除外したストレージからデータの読出しができない旨を前記クライアントに通知することを特徴とする請求項4に記載のストレージシステム。
【請求項6】
前記制御手段は、前記転送先から除外したストレージが有する資源が枯渇した場合には、当該ストレージが記憶する前記データを削除することを特徴とする請求項5に記載のストレージシステム。
【請求項7】
前記追加手段は、新たにデータを記憶させた前記ストレージが有する資源が枯渇した場合には、当該ストレージを前記ストレージシステムから除外することを特徴とする請求項5または6に記載のストレージシステム。
【請求項8】
複数のストレージが共通して記憶するデータについての読出要求を受信した場合に、当該読出要求の送信元となるクライアントへ前記データを送信する複数のストレージを有するストレージシステムにおいて
前記読出要求の受信頻度が所定の閾値よりも多い場合には、前記データを記憶していないストレージに、前記データを記憶させて、前記ストレージシステムに追加する追加手段と、
前記追加手段が新たに前記データを記憶させたストレージからデータの読出しが可能である旨を該読出要求の送信元となる前記クライアントに通知する通知手段と、
を有することを特徴とするストレージシステム。
【請求項9】
前記追加手段は、新たに追加したストレージが存在する際に、前記データの読出要求を受信した回数が所定の閾値よりも少ない場合は、新たにデータを記憶させた前記ストレージを前記ストレージシステムから除外し、
前記通知手段は、前記追加手段が除外したストレージからデータの読出しができない旨を前記クライアントに通知することを特徴とする請求項8に記載のストレージシステム。
【請求項10】
複数のストレージ装置が共通して記憶するデータについての更新要求を受信した場合に、前記データの更新要求を他のストレージ装置間で所定の転送順で送信させることで該更新要求の転送先の各ストレージ装置における前記データを更新させるストレージ装置において、
前記データの更新要求の受信頻度に応じて、前記所定の転送順に従った転送における転送先に含まれる1以上のストレージ装置を転送先から除外した転送順に前記所定の転送順を変更してデータの更新要求を転送するように制御する制御手段、
を備えたことを特徴とするストレージ装置。
【請求項11】
複数のストレージ装置が共通して記憶するデータについての読出要求を受信した場合に、当該読出要求の送信元となるクライアントへ前記データを送信するストレージ装置において
前記読出要求の受信頻度が所定の閾値よりも多い場合には、前記データを記憶していないストレージ装置に、前記データを記憶させる追加手段と、
前記追加手段が新たに前記データを記憶させたストレージ装置からデータの読出しが可能である旨を該読出要求の送信元となる前記クライアントに通知する通知手段と、
を備えることを特徴とするストレージ装置。
【請求項12】
複数のストレージ装置が共通して記憶するデータについての更新要求を受信した場合に、前記データの更新要求を他のストレージ装置間で所定の転送順で送信させることで該更新要求の転送先の各ストレージ装置における前記データを更新させるストレージ装置が実行するシステム制御プログラムにおいて、
前記データの更新要求の受信頻度に応じて、前記所定の転送順に従った転送における転送先に含まれる1以上のストレージ装置を転送先から除外した転送順に前記所定の転送順を変更してデータの更新要求を転送するように制御する
処理を実行することを特徴とするシステム制御プログラム。
【請求項13】
複数のストレージが共通して記憶するデータについての読出要求を受信した場合に、当該読出要求の送信元となるクライアントへ前記データを送信する複数のストレージが実行するシステム制御プログラムにおいて
前記読出要求の受信頻度が所定の閾値よりも多い場合には、前記データを記憶していないストレージに、前記データを記憶させて、前記ストレージシステムに追加し、
新たに前記データを記憶させたストレージからデータの読出しが可能である旨を該読出要求の送信元となる前記クライアントに通知する
処理を実行することを特徴とするシステム制御プログラム。
【請求項14】
複数のストレージ装置が共通して記憶するデータについての更新要求を受信した場合に、前記データの更新要求を他のストレージ装置間で所定の転送順で送信させることで該更新要求の転送先の各ストレージ装置における前記データを更新させるストレージシステムが実行するシステム制御方法において、
前記データの更新要求の受信頻度に応じて、前記所定の転送順に従った転送における転送先に含まれる1以上のストレージ装置を転送先から除外した転送順に前記所定の転送順を変更してデータの更新要求を転送するように制御する
処理を実行することを特徴とするシステム制御方法。
【請求項15】
複数のストレージが共通して記憶するデータについての読出要求を受信した場合に、当該読出要求の送信元となるクライアントへ前記データを送信する複数のストレージが実行するシステム制御方法において
前記読出要求の受信頻度が所定の閾値よりも多い場合には、前記データを記憶していないストレージに、前記データを記憶させて、前記ストレージシステムに追加し、
新たに前記データを記憶させたストレージからデータの読出しが可能である旨を該読出要求の送信元となる前記クライアントに通知する
処理を実行することを特徴とするシステム制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4A】
image rotate

【図4B】
image rotate

【図4C】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8A】
image rotate

【図8B】
image rotate

【図9】
image rotate

【図10A】
image rotate

【図10B】
image rotate

【図10C】
image rotate

【図11A】
image rotate

【図11B】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate