説明

ストレージ装置、ストレージシステム、データ更新方法およびデータ管理プログラム

【課題】レプリカの更新に要する時間を短縮する。
【解決手段】複数のノード2〜6は、データの複製であるレプリカを記憶する。このノード2は、クライアント7からレプリカA1〜A4の更新を要求された場合は、自ストレージ装置を始端とし、複数のノードを接続する複数の経路を介して、各経路の終端となるノード5にデータの更新を要求するupdate要求を送信する。ノード2は、ノード5が全ての経路を介してupdate要求を受信した後に発行したupdated要求を、いずれかの経路を介して受信した場合には、レプリカの更新が完了した旨をクライアント7に通知する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージ装置、ストレージシステム、データ更新方法およびデータ管理プログラムに関する。
【背景技術】
【0002】
従来、分散KVS(Key-Value Store)等のNoSQLを初めとするストレージシステムにおいて、データの複製であるレプリカを複数のノードに配置する技術が知られている。このような技術が適用されたストレージシステムは、レプリカを複数のノードに配置することで、ディスク故障などによるデータの消失を防ぐとともに、各ノードに配置されたレプリカからデータの読出しを許可することで、アクセスの負荷分散を行う。
【0003】
ここで、ストレージシステムは、各レプリカから読み出されるデータの同一性を保証するStrong Consistencyが要求される場合がある。このようなStro
ng Consistencyを保つ手法の一例として、チェインレプリケーションの技術が知られている。このようなチェインレプリケーションが適用されたストレージシステムの一例について以下に説明する。
【0004】
図23は、チェインレプリケーションの一例について説明するための図である。なお、図23に示す例では、チェインレプリケーションの一例としてCRAQ(Chain Replication with Apportioned Query)が適用されたストレージシステムについて説明する。
【0005】
図23に示す例では、ストレージシステムは、同一のレプリカを有するN個のノードを有する。なお、図23に示す例では、ストレージシステムは、N個のノードのうち、1stノード、2ndノード、3rdノード、Nthノード以外のノードについては、図示を省略した。
【0006】
このようなストレージシステムが有する各ノードは、クライアントからレプリカの更新を要求された場合には、各ノードを順に並べた経路に沿って、レプリカの更新を要求するupdate要求を順次転送する。例えば、図23中(A)に示す例では、クライアントは、レプリカの更新要求を1stノードに発行する。このような場合には、1stノードは、レプリカの更新を準備するとともに、図23中(B)に示すように、2ndノードにupdate要求を送信する。
【0007】
次に、2ndノードは、1stノードからupdate要求を受信した場合には、レプリカの更新を準備するとともに、update要求を3rdノードに転送する。その後、各ノードは、update要求を経路の終端となるNthノードまで順に転送する。また、図23中(C)に示すように、経路の終端となるNthノードは、update要求を受信した場合には、レプリカを更新するとともに、update要求に対する応答であるupdated要求を経路の1つ前のノードに送信する。
【0008】
その後、各ノードは、updated要求を受信した場合は、レプリカの更新を行うとともに、updated要求を1次元の経路に沿って、始点となる1stノードまで順に転送する。そして、1stノードは、図23中(D)に示すように、updated要求を受信した場合には、レプリカを更新し、更新が終了した旨をクライアントに通知する。
【先行技術文献】
【非特許文献】
【0009】
【非特許文献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.
【発明の概要】
【発明が解決しようとする課題】
【0010】
しかし、上述したチェインレプリケーションの技術では、レプリカの更新を行う場合は、各ノードを順に接続する1つの経路に沿って、update要求を順に転送するので、ノードの数が増加するに従って、更新に要する時間が増加するという問題がある。
【0011】
例えば、上述したチェインレプリケーションの技術では、ノードの数が倍になると、データの更新に要する時間も倍になってしまう。また、ノードの設置位置を分散させる分散環境の技術が適用されたストレージシステムにおいては、ノードを広域に設置し、ノード同士の距離が離れると、ネットワークの遅延が増加するので、レプリカの更新処理に要する時間がボトルネックとなってしまう。
【0012】
本願は、上述した問題に鑑みてなされたものであり、1つの側面では、レプリカの更新に要する時間を短縮する。
【課題を解決するための手段】
【0013】
1つの側面では、データの複製を記憶する複数のストレージ装置のうち、クライアントからデータの更新を要求されるストレージ装置である。このストレージ装置は、データの更新を要求された場合は、自ストレージ装置を始端とし、複数のストレージ装置を直列に接続する複数の経路を介して、各経路の終端となる1つまたは複数のストレージ装置にデータの更新を要求する更新要求を送信する。また、ストレージ装置は、各経路の終端となるストレージ装置が全ての経路を介して更新要求を受信した後に発行した応答を、更新通知を送信したいずれかの経路を介して受信した場合は、データの更新が完了した旨を前記クライアントに通知する。
【発明の効果】
【0014】
1つの側面では、レプリカの更新に要する時間を短縮する。
【図面の簡単な説明】
【0015】
【図1】図1は、実施例1に関わるストレージシステムの一例を説明するための図である。
【図2a】図2aは、データAのレプリカを記憶するノードを説明するための図である。
【図2b】図2bは、データBのレプリカを記憶するノードを説明するための図である。
【図2c】図2cは、データCのレプリカを記憶するノードを説明するための図である。
【図3】図3は、実施例1に関わる始端ノードの一例を説明するための図である。
【図4a】図4aは、実施例1に関わるデータ記憶部が記憶する位置情報の一例を説明するための図である。
【図4b】図4bは、実施例1に関わるデータ記憶部が記憶する各レプリカA1〜A4を記憶するノードを示す情報の一例を説明するための図である。
【図5】図5は、実施例1に関わる始端ノードがupdate要求を発行する処理の一例を説明するための図である。
【図6】図6は、実施例1に関わる始端ノードがupdated要求を受信した際に実行する処理の一例を説明するための図である。
【図7】図7は、実施例1に関わる終端ノードの一例を説明するための図である。
【図8】図8は、実施例1に関わる終端ノードが実行する処理の一例を説明するための図である。
【図9a】図9aは、実施例1に関わるストレージシステムが複数の経路を介してupdate要求を送信する処理を説明するための図である。
【図9b】図9bは、実施例1に関わるストレージシステムが複数の経路を介してupdated要求を送信する処理を説明するための図である。
【図10】図10は、始端ノードが実行する処理の流れの一例を説明するためのフローチャートである。
【図11】図11は、中間ノードが実行する処理の流れの一例を説明するためのフローチャートである。
【図12】図12は、終端ノードが実行する処理の流れの一例を説明するためのフローチャートである。
【図13】図13は、実施例2に関わるストレージシステムの一例を説明するための図である。
【図14】図14は、実施例2に関わる始端ノードの一例を説明するための図である。
【図15】図15は、実施例2に関わる終端ノードの一例を説明するための図である。
【図16】図16は、実施例2に関わる終端ノードがGet要求を受信した際に実行する処理の一例を説明するための図である。
【図17】図17は、実施例2に関わる終端ノードがupdate要求を受信した際に実行する処理の一例を説明するための図である。
【図18a】図18aは、実施例2に関わるストレージシステムが複数の経路を介してupdate要求を送信する処理を説明するための図である。
【図18b】図18bは、実施例2に関わる終端ノードがreadyToUpdate要求を送受信する処理を説明するための図である。
【図18c】図18cは、実施例2に関わるストレージシステムがupdated要求を送信する処理を説明するための図である。
【図18d】図18dは、実施例2に関わるストレージシステムにおける動作を説明するための図である。
【図19】図19は、複数の経路の終端ノードが実行する処理の一例を説明するための図である。
【図20】図20は、実施例2に関わる終端ノードが実行する処理の流れを説明するためのフローチャートである。
【図21】図21は、Get要求に対する処理の流れの一例を説明するためのフローチャートである。
【図22】図22は、データ管理プログラムを実行するコンピュータの一例を説明するための図である。
【図23】図23は、チェインレプリケーションの一例について説明するための図である。
【発明を実施するための形態】
【0016】
以下に添付図面を参照して本願に係るストレージ装置、ストレージシステム、データ更新方法およびデータ管理プログラムについて説明する。
【実施例1】
【0017】
以下の実施例1では、図1を用いて、ストレージシステムの一例を説明する。図1は、実施例1に関わるストレージシステムの一例を説明するための図である。なお、以下の説明において、ノードとは、例えば、データの複製であるレプリカを記憶する情報処理装置と、他のノードとの通信処理、データの更新処理、データの管理処理等を実行する演算処理装置とを有するストレージ装置やサーバ等が適用されるものとする。
【0018】
図1に示すように、ストレージ装置1は、複数のデータセンター#1〜#3およびクライアント7をIP(Internet Protocol)網8を介して接続したシステムである。また、データセンター#1には、ノード2とノード3が設置されており、データセンター#2には、ノード4、ノード5が設置されており、データセンター#3には、ノード6が設置されている。
【0019】
また、各ノード2〜6は、データの複製であるレプリカを記憶する。具体的には、各ノード2〜6は、データAのレプリカであるレプリカA1〜A4、データBのレプリカであるレプリカB1〜B4、データCのレプリカであるレプリカC1〜C4を分散させて記憶する。
【0020】
例えば、図1に示す例では、ノード2は、レプリカA1とレプリカC4を記憶する。また、ノード3は、レプリカA2、レプリカB1を記憶する。また、ノード4は、レプリカA3、レプリカC1、レプリカB2を記憶する。また、ノード5は、レプリカA4、レプリカC2、レプリカB3を記憶する。また、ノード6は、レプリカB4とレプリカC3を記憶する。
【0021】
ここで、図2a〜図2cを用いて、各データA〜Cのレプリカをどのノード2〜6が記憶しているかを説明する。なお、図2aは、データAのレプリカを記憶するノードを説明するための図である。また、図2bは、データBのレプリカを記憶するノードを説明するための図である。また、図2cは、データCのレプリカを記憶するノードを説明するための図である。なお、図2a〜図2cでは、各行に各レプリカを、各列に各ノード2〜6を対応付け、丸印が付けられたマスの行に対応付けたレプリカを、列に対応付けたノードが記憶することを示した。
【0022】
例えば、図2aに示すように、データAのレプリカであるレプリカA1〜A4は、ノード2〜5が記憶する。また、図2bに示すように、データBのレプリカであるレプリカB1〜B4は、ノード3〜6が記憶する。また、図2cに示すように、データCのレプリカであるレプリカC1〜C4は、ノード2及びノード4〜6が記憶する。
【0023】
クライアント7は、各ノード2〜6が記憶する各レプリカA1〜A4、B1〜B4、C1〜C4を用いて、各データA〜Cの読出しや各データA〜Cの更新等を実行する。具体的には、クライアント7は、各レプリカA1〜A4、B1〜B4、C1〜C4がどのノードに記憶されているかを示す情報を記憶する。
【0024】
そして、クライアント7は、IP網8を介して、レプリカの読出し要求を示すGet要求を、update要求を転送する経路の終端ノードに発行する。例えば、クライアント7は、データAの更新においてノード5が終端ノードとなる場合には、ノード5にGet要求を発行する。
【0025】
また、クライアント7は、IP網8を介して、レプリカの更新要求を示すPut要求を発行する場合には、レプリカごとに定められた所定のノードに発行する。つまり、クライアント7は、各レプリカA1〜A4、B1〜B4、C1〜C4を更新する際にupdate要求が送信される経路における始端ノードに対してPut要求を発行する。例えば、クライアント7は、レプリカA1〜A4の更新を行う場合には、レプリカA1を記憶するノード2に対してPut要求を発行する。
【0026】
また、クライアント7は、レプリカB1〜B4の更新を行う場合には、レプリカB1を記憶するノード3に対してPut要求を発行する。また、クライアント7は、レプリカC1〜C4の更新を行う場合には、レプリカC1を記憶するノード4に対してPut要求を発行する。
【0027】
各ノード2〜6は、経路の終端ノードである際にGet要求をクライアント7から取得した場合には、Get要求の対象となるレプリカのデータをクライアント7へ送信する。また、ノード2〜4は、経路の始端ノードである際にPut要求を取得した場合は、自ストレージ装置を始端とし、更新対象となるレプリカを記憶するノードを直列に接続する複数の経路に沿って、レプリカの更新を要求するupdate要求を、各経路の終端となるノードに送信する。
【0028】
例えば、ノード2は、クライアント7からレプリカAに関わるPut要求を取得した場合には、以下の処理を実行する。すなわち、ノード2は、更新に関わるレプリカAを記憶する複数のノード3〜5を識別する。そして、ノード2は、update要求を送信する複数の経路を識別する。例えば、ノード2は、update要求を送信する経路として、ノード2、ノード3、ノード5を辿る経路と、ノード2、ノード4、ノード5を辿る経路を識別する。
【0029】
そして、ノード2は、ヘッダにupdate要求を転送する経路を示す経路情報を埋め込んだupdate要求をノード3およびノード4に転送する。このような場合には、ノード3は、レプリカA2の更新準備を行うとともに、update要求のヘッダに埋め込まれた経路情報を参照し、update要求の転送先としてノード5を識別する。そして、ノード3は、update要求をノード5に転送する。
【0030】
また、ノード4は、update要求を受信した場合には、レプリカA3の更新準備を行うとともに、update要求のヘッダに埋め込まれた経路情報を参照し、update要求の転送先としてノード5を識別する。そして、ノード4は、update要求をノード5に転送する。
【0031】
また、ノード5は、ノード3またはノード4からupdate要求を取得した場合には、経路情報を参照し、自身が複数の経路において終端となるノードであると判別する。このような場合には、ノード5は、update要求が転送される全ての経路を介してupdate要求を受信するまで待機する。
【0032】
そして、ノード5は、全ての経路を介してupdate要求を受信した場合、すなわち、ノード3およびノード4からupdate要求を受信した場合には、レプリカA4の更新を行うとともに、update要求に対する応答であるupdated要求をノード3およびノード4に送信する。
【0033】
また、ノード3およびノード4は、ノード5からupdated要求を受信した場合には、レプリカA2およびレプリカA3の更新を行うとともに、ノード2へupdated要求を転送する。また、ノード2は、ノード3またはノード4のいずれかからupdated要求を取得した場合には、レプリカA1の更新を行うとともに、クライアント7に更新が終了した旨の通知を送信する。
【0034】
このような処理を実行することで、ノード2〜5は、読み出されるデータの同一性が保証されるStrong Consistencyを保持することができる。また、ノード2〜5は、データAのレプリカを記憶する全てのノードに対して、複数の経路を介してupdate要求を行き渡らせるので、レプリカの更新に要する時間を短縮することができる。
【0035】
なお、ノード2〜6は、レプリカB1〜B4およびレプリカC1〜C4についても同様の処理を実行する。このため、ストレージシステム1は、各レプリカの更新に要する時間を短縮することができる。
【0036】
次に、各ノード2〜6について説明する。まず、図3を用いて、ノード2が複数の経路の始端となる始端ノード、および、ある経路においてupdate要求を転送する中間ノードとして動作する例について説明する。なお、他のノード3〜6についても図2に示す各部を有するものとする。すなわち、各ノード2〜6は、記憶するレプリカや、ストレージシステム1の設定に応じて、クライアント7からPut要求を受付ける始端ノードとして動作することができる。
【0037】
図3は、実施例1に関わる始端ノードの一例を説明するための図である。図3に示す例では、始端ノードとして動作するノード2は、ネットワークインターフェース10、要求送信元判断部11、クライアント要求受信部12、クライアント要求処理部13、ノード間要求受信部14、ノード間要求処理部15を有する。また、ノード2は、データ記憶部16、要求発行部17、要求発行認証部18、クライアント位置記憶部19、トポロジー計算部20、ノード間要求並列送信部21、クライアント位置判断部22、クライアント要求送信部23を有する。
【0038】
以下、ノード2が有する各部10〜23について説明する。まず、ノード2が有するデータ記憶部16について説明する。データ記憶部16は、レプリカのデータや、他のノードの設置位置等を記憶する記憶部である。例えば、データ記憶部16は、ノード2がデータAのレプリカA1〜A4を更新する際に始端ノードとなる場合には、各レプリカA1〜A4を記憶するノードを示す情報を記憶する。また、データ記憶部16は、各ノード2〜6が設置された位置を示す位置情報を記憶する。
【0039】
図4aは、実施例1に関わるデータ記憶部が記憶する位置情報の一例を説明するための図である。図4aに示す例では、データ記憶部16は、ノード2がデータセンター#1のラックR1に設置されている旨を示す位置情報と、ノード3がデータセンター#1のラックR2に設置されている旨を示す位置情報とを記憶する。
【0040】
また、データ記憶部16は、ノード4がデータセンター#2のラックR3に設置されている旨を示す位置情報と、ノード5がデータセンター#2のラックR4に設置されている旨を示す位置情報とを記憶する。また、データ記憶部16は、ノード6がデータセンター#3のラックR5に設置されている旨を示す位置情報を記憶する。
【0041】
図4bは、実施例1に関わるデータ記憶部が記憶する各レプリカA1〜A4を記憶するノードを示す情報の一例を説明するための図である。図4bに示す例では、データ記憶部16は、レプリカA1がノード2に、レプリカA2がノード3に、レプリカA3がノード4に、レプリカA4がノード5に記憶されている旨を示す情報を記憶する。
【0042】
以下に示すように、ノード2は、始端ノードとして動作する場合には、データ記憶部16が記憶する各情報を用いて、update要求を行き渡らせるノードと、update要求を転送する複数の経路とを識別する。そして、ノード2は、識別した複数の経路において自身と隣接するノードに対してupdate要求を送信する。
【0043】
図3に戻って、クライアント位置記憶部19は、ノード2に対してPut要求やGet要求を発行したクライアントを示す情報を記憶する記憶部である。例えば、クライアント位置記憶部19は、ノード2に対してPut要求を発行したクライアント7のIPアドレス等を記憶する。
【0044】
ネットワークインターフェース10は、IP網8を介して、クライアント7が発行するPut要求、および、他のノード3〜6が送信したupdate要求やupdated要求を受信する。このような場合には、ネットワークインターフェース10は、受信したPut要求、update要求、および、updated要求を要求送信元判断部11に出力する。
【0045】
また、ネットワークインターフェース10は、ノード間要求並列送信部21からupdate要求やupdated要求を取得した場合には、取得したupdate要求やupdated要求を他のノード3〜6に送信する。また、ネットワークインターフェース10は、クライアント要求送信部23からレプリカのデータや更新処理が終了した旨の通知を取得した場合には、取得したデータや通知をクライアント7に送信する。
【0046】
要求送信元判断部11は、ネットワークインターフェース10が取得した各要求を取得した場合には、取得した要求がPut要求であるか否かを判別する。そして、要求送信元判断部11は、取得した要求がPut要求である場合には、取得したPut要求をクライアント要求受信部12に出力する。一方、要求送信元判断部11は、取得した要求がPut要求ではない場合には、すなわち、取得した要求がupdate要求またはupdated要求である場合には、取得した要求をノード間要求受信部14に出力する。
【0047】
クライアント要求受信部12は、要求送信元判断部11からPut要求を取得した場合には、取得したPut要求を発行したクライアント7を識別する。そして、クライアント要求受信部12は、識別したクライアント7の位置情報をクライアント位置記憶部19に格納する。また、クライアント要求受信部12は、クライアント要求処理部13に対して、取得したPut要求を出力する。ここで、クライアント7の位置情報の例としては、クライアント7のIPアドレス等、クライアント7を一意に示す番号である。
【0048】
クライアント要求処理部13は、クライアント要求受信部12から取得したPut要求に対する処理を実行する。例えば、クライアント要求処理部13は、クライアント要求受信部12からPut要求を取得した場合には、Put要求の対象となるレプリカのデータをデータ記憶部16から検索する。
【0049】
そして、クライアント要求処理部13は、検出したレプリカのデータをPut要求に従って更新した更新後のデータを新たに生成し、更新後のデータを更新前のデータとは別にデータ記憶部16に格納する。また、クライアント要求処理部13は、update要求の発行を要求発行部17に指示する。
【0050】
ノード間要求受信部14は、要求送信元判断部11からupdate要求を取得した場合には、update要求をノード間要求処理部15に出力する。また、ノード間要求受信部14は、要求送信元判断部11からupdated要求を取得した場合には、updated要求をノード間要求処理部15に出力する。
【0051】
ノード間要求処理部15は、ノード間要求受信部14からupdate要求を取得した場合には、以下の処理を実行する。まず、ノード間要求処理部15は、更新対象となるレプリカをデータ記憶部16から検索し、検索したレプリカのデータを更新した更新後のデータを生成する。そして、ノード間要求処理部15は、更新後のデータを更新前のデータとともにデータ記憶部16に格納する。また、ノード間要求処理部15は、ノード間要求受信部14が出力したupdate要求を要求発行部17に出力するとともに、update要求の転送処理の実行を指示する。
【0052】
また、ノード間要求処理部15は、ノード間要求受信部14からupdated要求を取得した場合には、以下の処理を実行する。まず、ノード間要求処理部15は、クライアント要求処理部13が更新前のレプリカのデータをデータ記憶部16から削除する。次に、ノード間要求処理部15は、ノード間要求受信部14が受信したupdated要求が、ノード2が発行したupdate要求に対する応答として発行されたupdated要求であるか否かを判別する。
【0053】
そして、ノード間要求処理部15は、ノード間要求受信部14が取得したupdated要求が、ノード2が始端ノードとして発行したupdate要求に対する応答として発行されたupdated要求であると判別した場合には、以下の処理を実行する。すなわち、ノード間要求処理部15は、Put要求が完了した旨を通知するPut返答を発行するよう要求発行部17に指示する。なお、ノード2が始端ノードである場合には、複数の経路を介して複数のupdated要求を受信することとなるが、ノード間要求処理部15は、最初にupdated要求をノード2が受信した時点で、更新前のレプリカのデータを削除する。
【0054】
一方、ノード間要求処理部15は、ノード間要求受信部14が取得したupdated要求が、ノード2が始端ノードとして発行したupdated要求に対応するupdated要求ではないと判別した場合には、以下の処理を実行する。すなわち、ノード間要求処理部15は、ノード間要求処理部15が更新する前のレプリカのデータをデータ記憶部16から削除する。そして、ノード間要求処理部15は、ノード間要求受信部14が出力したupdated要求を要求発行部17に出力するとともに、updated要求の転送を行うよう指示する。
【0055】
要求発行部17は、クライアント要求処理部13からupdate要求の発行を指示された場合には、以下の処理を実行する。すなわち、要求発行部17は、データ記憶部16を参照し、update要求を送信するノード、すなわち、更新対象となるレプリカを記憶するノードを識別する。また、要求発行部17は、判別したノードの位置情報をデータ記憶部16から取得する。そして、要求発行部17は、update要求を生成し、生成したupdate要求を送信するようトポロジー計算部20に指示する。この際、要求発行部17は、取得したノードの位置情報をトポロジー計算部20に送信する。
【0056】
また、要求発行部17は、ノード間要求処理部15からupdate要求の転送処理の実行を指示された場合には、以下の処理を実行する。すなわち、要求発行部17は、ノード間要求処理部15が出力したupdate要求をトポロジー計算部20に出力するとともに、update要求を転送するよう指示する。
【0057】
また、要求発行部17は、ノード間要求処理部15からupdated要求の転送処理の実行を指示された場合には、以下の処理を実行する。すなわち、要求発行部17は、ノード間要求処理部15が出力したupdated要求をトポロジー計算部20に出力するとともに、updated要求を転送するように指示する。
【0058】
また、要求発行部17は、ノード間要求処理部15からPut返答を発行するよう指示された場合には、以下の処理を実行する。すなわち、要求発行部17は、要求発行認証部18にPut返答を発行すべきか否かを判別するよう指示する。
【0059】
そして、要求発行部17は、要求発行認証部18からPut返答を発行すべきである旨の通知を受けた場合には、Put返答を生成し、生成したPut返答を発行するようクライアント位置判断部22に指示する。一方、要求発行部17は、要求発行認証部18からPut返答を発行すべきではない旨の通知を受けた場合には、処理を終了する。
【0060】
要求発行認証部18は、要求発行部17からPut返答を発行すべきか否かを判別するよう指示された場合には、以下の処理を実行する。すなわち、要求発行認証部18は、要求発行部17が同一のPut返答を発行した旨を記憶しているか否かを判別する。
【0061】
そして、要求発行認証部18は、同一のPut返答を発行した旨を記憶していない場合には、Put返答を発行すべき旨を要求発行部17に通知するとともに、このPut返答を発行した旨を記憶する。一方、要求発行認証部18は、同一のPut返答を発行した旨を記憶している場合には、Put返答を発行すべきでない旨を要求発行部17に通知する。
【0062】
トポロジー計算部20は、update要求を送信するよう指示された場合には、以下の処理を実行する。まず、トポロジー計算部20は、要求発行部17からノードの位置情報を取得する。そして、トポロジー計算部20は、取得したノードの位置情報を用いて、update要求を転送する複数の経路を識別する。
【0063】
この際、トポロジー計算部20は、相互に設置位置が近いノードを同じ経路とする複数の経路を識別する。また、トポロジー計算部20は、各経路の終端ノードが同一のノードとなる複数の経路を識別する。そして、トポロジー計算部20は、識別した複数の経路を示す経路情報をupdate要求のヘッダに格納し、経路情報を格納したupdate要求をノード間要求並列送信部21に出力するとともに、update要求を送信するよう指示する。
【0064】
例えば、ノード2がクライアント7からデータAのレプリカA1〜A4に関わるPut要求を受付けた場合には、トポロジー計算部20は、要求発行部17からudate要求を取得するとともに、図4aに例示する各ノード2〜5の位置情報を取得する。このような場合には、ノード2は、データセンター#1にノード2、ノード3が設置され、データセンター#2にノード4、ノード5が設置されていると判別する。
【0065】
このように各ノード2〜5が設置されている際に、データセンターをまたぐ経路では、update要求を送信する際のレイテンシが増大してしまう。このため、トポロジー計算部20は、可能な限りデータセンターをまたがない経路を識別する。また、トポロジー計算部20は、Strong Consistencyの保持を容易にするため、各経路の終端ノードを同一のノードとする。
【0066】
すなわち、updete要求を転送する経路の終端ノードが複数存在する場合には、update要求を取得し、updated要求を取得するまでの間にGet要求を取得すると、問合せ先とする終端ノードを選択するアルゴリズムが複雑となってしまう。そこで、トポロジー計算部20は、各経路の終端ノードを同一のノードとする。
【0067】
例えば、図4aに示すように、各ノード2〜6が設置され、各ノード2〜5がレプリカA1〜A4を記憶している際に、クライアント7がデータAに関わるPut要求を発行した場合には、トポロジー計算部20は、以下のような複数の経路を識別する。すなわち、トポロジー計算部20は、ノード2を始端ノードとし、ノード3を経由してノード5を終端ノードとする経路、および、ノード2を始端ノードとし、ノード4を経由してノード5を終端ノードとする経路を識別する。
【0068】
また、トポロジー計算部20は、要求発行部17からupdate要求を取得するとともに、update要求を転送するよう指示された場合には、以下の処理を実行する。すなわち、トポロジー計算部20は、update要求をノード間要求並列送信部21に出力するとともに、update要求を転送するようノード間要求並列送信部21に指示する。
【0069】
また、トポロジー計算部20は、要求発行部17からupdated要求を取得するとともに、updated要求を転送するよう指示された場合には、以下の処理を実行する。すなわち、トポロジー計算部20は、updated要求をノード間要求並列送信部21に出力するとともに、updated要求を転送するようノード間要求並列送信部21に指示する。
【0070】
ノード間要求並列送信部21は、update要求をトポロジー計算部20から取得するとともに、updated要求を送信するよう指示された場合には、以下の処理を実行する。すなわち、ノード間要求並列送信部21は、update要求に格納された経路情報が示す複数の経路において、始端ノードであるノード2の次にupdate要求が送信される複数のノードを識別する。そして、ノード間要求並列送信部21は、ネットワークインターフェース10およびIP網8を介して、識別した複数のノードにupdate要求を送信する。
【0071】
例えば、ノード間要求並列送信部21は、経路情報を解析し、ノード2を始端ノードとし、ノード3を経由してノード5を終端ノードとする経路を識別する。また、ノード間要求並列送信部21は、ノード2を始端ノードとし、ノード4を経由してノード5を終端ノードとする経路を識別する。このような場合には、ノード間要求並列送信部21は、ノード3およびノード4にupdate要求を送信する。
【0072】
また、ノード間要求並列送信部21は、upadte要求を取得するとともにupdate要求を転送する旨の指示を受付けた場合には、以下の処理を実行する。まず、ノード間要求並列送信部21は、update要求に格納された経路情報を解析し、ノード2の次にupdate要求を転送すべきノードを識別する。そして、ノード間要求並列送信部21は、ネットワークインターフェース10を介して、識別したノードにupdated要求を転送する。
【0073】
また、ノード間要求並列送信部21は、upadted要求を取得するとともにupdated要求を転送する旨の指示を受付けた場合には、以下の処理を実行する。まず、後述するように、updated要求を転送する経路を示す経路情報が格納されているので、ノード間要求並列送信部21は、update要求に格納された経路情報を解析し、ノード2の次にupdated要求を転送すべきノードを識別する。そして、ノード間要求並列送信部21は、ネットワークインターフェース10を介して、識別したノードにupdated要求を転送する。
【0074】
クライアント位置判断部22は、要求発行部17からレプリカのデータを取得するとともに、クライアント7に送信するよう指示された場合には、以下の処理を実行する。すなわち、クライアント位置判断部22は、クライアント位置記憶部19からクライアント7の位置情報、例えば、クライアント7のIPアドレスを取得する。そして、クライアント位置判断部22は、レプリカのデータとクライアント7の位置情報とをクライアント要求送信部23に出力する。
【0075】
また、クライアント位置判断部22は、要求発行部17からPut返答を発行する旨を指示された場合には、以下の処理を実行する。すなわち、クライアント位置判断部22は、クライアント位置記憶部19からPut返答の発行先となるクライアントの位置情報を取得する。そして、クライアント位置判断部22は、クライアントの位置情報とPut返答とをクライアント要求送信部23に出力する。
【0076】
また、クライアント要求送信部23は、クライアント位置判断部からPut返答とクライアントの位置情報とを取得した場合には、ネットワークインターフェース10およびIP網8を介して、Put返答をクライアントに送信する。例えば、クライアント要求送信部23は、クライアント7の位置情報とPut返答とを取得した場合には、クライアント7にPut応答を送信する。
【0077】
次に、図5を用いて、クライアント7が発行したPut要求を取得した際に始端ノードとなるノード2が実行する処理の一例について説明する。図5は、実施例1に関わる始端ノードがupdate要求を発行する処理の一例を説明するための図である。なお、図5に示す例では、クライアント7は、データAの複製であるレプリカA1〜A4を更新対象とするPut要求を発行したものとする。
【0078】
例えば、図5に示す例では、ノード2は、図5中(1)に示すように、Put要求を取得する。このような場合には、要求送信元判断部11は、図5中(2)に示すように、Put要求をクライアント要求受信部12に出力する。クライアント要求受信部12は、図5中(3)に示すように、クライアント7の位置情報をクライアント位置記憶部19に格納するとともに、図5中(4)に示すように、クライアント要求処理部13にPut要求を出力する。
【0079】
このような場合には、クライアント要求処理部13は、データ記憶部16に記憶されたレプリカA1の更新後のデータを生成するとともに、要求発行部17にレプリカA1〜A4の更新を要求するupdate要求の発行を指示する。すると、要求発行部17は、図5中(5)に示すように、データ記憶部16からレプリカA1〜A4を記憶する各ノード2〜5の位置情報を取得し、図5中(6)に示すように、トポロジー計算部20にupdate要求と各ノード2〜5の位置情報を送信する。
【0080】
このような場合には、トポロジー計算部20は、位置情報に基づいて、各ノード2〜5にupdate要求を行き渡らせるための複数の経路を識別する。そして、トポロジー計算部20は、図5中(7)に示すように、識別した複数の経路を示す経路情報を格納したupate要求をノード間要求並列送信部21に出力する。すると、図5中(8)に示すように、ノード間要求並列送信部21は、経路情報が示す次のノードにupdate要求を送信する。
【0081】
次に、図6を用いて、updated要求を取得した際に始端ノードとなるノード2が実行する処理の一例について説明する。図6は、実施例1に関わる始端ノードがupdated要求を受信した際に実行する処理の一例を説明するための図である。例えば、図6中(1)に示すように、updated要求を取得した場合には、要求送信元判断部11は、図6中(2)に示すように、updated要求をノード間要求受信部14に出力する。このような場合には、ノード間要求受信部14は、図6中(3)に示すように、updated要求をノード間要求処理部15に出力する。
【0082】
すると、ノード間要求処理部15は、図6中(4)に示すように、更新前のレプリカA1をデータ記憶部16から削除するとともに、要求発行部17にPut返答を出力する旨を指示する。このような場合には、図6中(5)に示すように、要求発行部17は、Put返答を出力すべきか否かを要求発行認証部18に判別させる。そして、要求発行部17は、Put返答を出力すべき旨を取得した場合には、図6中(6)に示すように、Put返答を出力するようクライアント位置判断部22に指示する。
【0083】
すると、クライアント位置判断部22は、クライアント位置記憶部19からPut応答の送信先となるクライアント7の位置情報を取得し、図6中(7)に示すように、Put応答と取得した位置情報とをクライアント要求送信部23に出力する。このような場合には、クライアント要求送信部23は、図6中(8)に示すように、ネットワークインターフェース10およびIP網8を介して、クライアント7にPut返答を送信する。
【0084】
次に、図7を用いて、終端ノードとして動作するノード5が実行する処理について説明する。図7は、実施例1に関わる終端ノードの一例を説明するための図である。なお、図3に示した各部10〜23と同様の機能を発揮するものについては、同一の符号を付し、以下の説明を省略する。また、他のノード2〜4、ノード6についても図7に示す各部を有するものとする。すなわち、各ノード2〜6は、記憶するレプリカや、ストレージシステム1の設定に応じて、終端ノードとして動作することができる。
【0085】
なお、図7に示す例では、終端ノードとして動作するノード5は、ノード間要求受信部14とノード間要求処理部15aとの間に要求収集部24を有する。このため、ノード間要求受信部14は、ノード5がノード3、4から受信するupdate要求およびupdated要求をノード間要求処理部15aではなく要求収集部24に出力することとなる。
【0086】
ネットワークインターフェース10a、要求送信元判断部11a、クライアント要求受信部12a、クライアント要求処理部13aは、図3に示す各部10〜13と同様の機能を発揮する。また、ネットワークインターフェース10a、要求送信元判断部11a、クライアント要求受信部12aは、クライアント7からGet要求を受信した場合には、受信したGet要求をクライアント要求処理部13aに伝達する。
【0087】
クライアント要求処理部13aは、Get要求取得した場合にはデータ記憶部16からGet要求の対象となるレプリカのデータを検索する。そして、クライアント要求は、検索したレプリカのデータを要求発行部17aに出力するとともに、データをクライアントに送信するよう指示する。
【0088】
このような場合には、要求処理部13aは、クライアント位置判断部22を介して、クライアント要求送信部23に、取得したデータをクライアント7に送信するよう指示する。その後、クライアント要求送信部23は、クライアント7にデータを送信する。
【0089】
要求収集部24は、ノード間要求受信部14からupdate要求を取得した場合には、取得したupdate要求に格納された経路情報を解析し、経路情報が示す経路においてノード5が終端ノードとなるか否かを判別する。そして、要求収集部24は、経路情報が示す経路においてノード5が終端ノードとなる場合には、取得したupdate要求を保持する。
【0090】
また、要求収集部24は、保持したupdate要求の経路情報を解析し、同一のレプリカを更新対象とするupdate要求を、経路情報が示す全ての経路の数だけ保持したか否かを判別する。すなわち、要求収集部24は、全ての経路を介して転送されたupdate要求をノード5が受信したか否かを判別する。
【0091】
そして、要求収集部24は、同一のレプリカを更新対象とするupdate要求を、経路情報が示す全ての経路の数だけ保持したと判別した場合には、いずれか1つのupdate要求をノード間要求処理部15aに出力する。また、要求収集部24は、同一のレプリカを更新対象とするupdate要求を、経路情報が示す全ての経路の数だけ保持していないと判別した場合には、残りのupdate要求を取得するまで待機する。
【0092】
また、要求収集部24は、経路情報が示す経路においてノード5が終端ノードとはならない場合には、取得したupdate要求うちの1つをノード間要求処理部15aに出力するとともに、updated要求の発行を指示する。また、要求収集部24は、ノード間要求受信部14からupdated要求を取得した場合には、取得したupdated要求をノード間要求処理部15aに出力する。
【0093】
ノード間要求処理部15aは、図3に示すノード間要求処理部15と同様の処理を実行する。さらに、ノード間要求処理部15aは、要求収集部24からupdate要求を取得するとともに、updated要求の発行を指示された場合には、以下の処理を実行する。
【0094】
すなわち、ノード間要求処理部15aは、データ記憶部16に格納されたupdate要求の対象となるレプリカのデータを検索し、検索したデータを更新した更新後のレプリカのデータのみをデータ記憶部16に格納する。また、ノード間要求処理部15aは、要求発行部17aに対して、updated要求の発行を指示するとともに、update要求に格納されていた経路情報を出力する。
【0095】
要求発行部17aは、図3に示す要求発行部17と同様の機能を発揮するとともに、ノード間要求処理部15aからupdated要求の発行を指示された場合には、updated要求を生成する。そして、要求発行部17aは、トポロジー計算部20aに生成したupdated要求と、ノード間要求処理部15aから取得した経路情報を出力する。
【0096】
トポロジー計算部20aは、図3に示すトポロジー計算部20と同様の機能を発揮するとともに、要求発行部17aからupdated要求と経路情報とを取得した場合には、以下の処理を実行する。すなわち、トポロジー計算部20aは、取得した経路情報が示す複数の経路を逆に辿る新たな経路情報を生成する。そして、トポロジー計算部20aは、取得したupdated要求のヘッダに新たな経路情報を格納し、updated要求をノード間要求並列送信部21に出力する。
【0097】
このように、ノード2は、自身を始端ノードとする複数の経路を識別し、識別した経路において自身と隣接する複数のノードに対してupdate要求を送信することで、update要求を各ノード2〜5に送信する。このため、ノード2は、複数の経路を介して、各経路上のノードにupdate要求を並行して送信するので、レプリカの更新に要する時間を短縮することができる。
【0098】
また、ノード5は、自身を終端ノードとするupdate要求を、全ての経路から受信するのを待機する。そして、ノード5は、自身を終端ノードとするupdate要求を全ての経路から受信した場合には、updated要求を全ての経路を介して始端ノードに送信する。このため、ストレージシステム1は、Strong Consistencyを保持しつつ、レプリカの更新に要する時間を短縮することができる。
【0099】
次に、図8を用いて、終端ノードであるノード5が実行する処理の一例を説明する。図8は、実施例1に関わる終端ノードが実行する処理の一例を説明するための図である。例えば、図8中(1)に示すように、ネットワークインターフェース10aは、他のノード2〜6からupdate要求を受信した場合には、受信したupdate要求を要求送信元判断部11に出力する。
【0100】
また、要求送信元判断部11aは、図8中(2)に示すように、update要求をノード間要求受信部14に出力する。また、ノード間要求受信部14は、図8中(3)に示すように、update要求を要求収集部24に出力する。このような場合には、要求収集部24は、update要求の経路情報が示す全ての経路を介して、同一のレプリカを対象とするupdate要求を取得したか否かを判別する。そして、要求収集部24は、全ての経路を介して、同一のレプリカを対象とするupdate要求を取得したと判別した場合には、図8中(4)に示すように、update要求をノード間要求処置部15aに送信する。
【0101】
すると、ノード間要求処理部15aは、データ記憶部16に記憶されたレプリカを更新するとともに、図8中(5)に示すように、要求発行部17aにupdated要求を発行する旨を指示する。すると、要求発行部17aは、updated要求を生成し、図8中(6)に示すように、updated要求を送信するようトポロジー計算部20aに指示する。
【0102】
このような場合には、トポロジー計算部20aは、update要求に格納された経路情報が示す全ての経路を逆に辿る経路を示す新たな経路情報を識別し、新たな経路情報をupdated要求のヘッダに格納する。そして、トポロジー計算部20aは、図8中(7)に示すように、ノード間要求並列送信部21にupdated要求の送信を指示する。このような場合には、ノード間要求並列送信部21は、図8中(8)に示すように、ネットワークインターフェース10aを介して、updated要求を送信する。
【0103】
次に、図9a、図9bを用いて、実施例1に関わるストレージシステム1が、複数の経路を介して、update要求を始端ノードから終端ノードにまで順次転送し、updated要求を終端ノードから始端ノードまで順次転送する処理について説明する。
【0104】
図9aは、実施例1に関わるストレージシステムが複数の経路を介してupdate要求を送信する処理を説明するための図である。また、図9bは、実施例1に関わるストレージシステムが複数の経路を介してupdated要求を送信する処理を説明するための図である。なお、図9a、図9bに示す例では、1stノードから7thノードまでの7個のノードが記憶するレプリカの更新を行う例について説明する。
【0105】
例えば、クライアント7は、図9a中(D)に示すように、Put要求を1stノードに発行する。このような場合には、1stノードは、Put要求の対象となるレプリカを記憶する全てのノード、すなわち、1stノードから7thノードを識別する。
【0106】
そして、図9aに示す例では、1stノードは、自身を始端ノードとし、7thノードを終端とする3つの経路を識別する。詳細には、1stノードは、1stノード、2ndノード、5thノード、7thノードを接続する経路、1stノード、3rdノード、7thノードを接続する経路、1stノード、4thノード、6thノードを接続する経路を識別する。
【0107】
そして、1stノードは、図9a中(E)に示すように、update要求を2ndノード、3rdノード、4thノードに送信する。このような場合には、2ndノードはupdate要求を5thノードに転送し、5thノードはupdate要求を7thノードに転送する。また、3rdノードは、update要求を7thノードに転送する。また、4thノードは、update要求を6thノードに転送し、6thノードは、update要求を7thノードに転送する。
【0108】
ここで、7thノードは、図9aに示す3つの全ての経路を介してupdate要求を受信するまで待機し、全ての経路を介してupdate要求を受信したと判別した場合には、updated要求を生成する。そして、図9b中(F)に示すように、updated要求を5thノード、3rdノード、6thノードに送信する。このような場合には、2ndノード〜6thノードは、各経路を逆に辿るようにupdated要求を1stノードまで順次転送する。そして、1stノードは、いずれかの経路を介してupdated要求を取得した場合には、図9b中(G)に示すように、Put応答をクライアント7に送信する。
【0109】
ここで、従来のストレージシステムは、1stノードから7thノードまで1つの経路を介して順次update要求およびupdated要求を順次転送するので、6回の転送を実行する。しかし、ストレージシステム1は、複数の経路を介してupdate要求およびupdated要求を順次転送するので、図9a、図9bに示す例では、最大で3回の転送でよい。このため、図9a、図9bに示す例では、ストレージシステム1は、従来の1/2の時間で更新処理を実行することができる。
【0110】
例えば、ネットワークインターフェース10、10a、要求送信元判断部11、11a、クライアント要求受信部12、12a、クライアント要求処理部13、13a、ノード間要求受信部14、ノード間要求処理部15、15aとは、電子回路である。また、要求発行部17、17a、要求発行認証部18、クライアント位置記憶部19、トポロジー計算部20、20a、ノード間要求並列送信部21、クライアント位置判断部22、クライアント要求送信部23、要求収集部24とは、電子回路である。ここで、電子回路の例として、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路、またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などを適用する。
【0111】
また、データ記憶部16とは、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(flash memory)などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。
【0112】
次に、図10を用いて、始端ノードが実行する処理の流れの一例について説明する。図10は、始端ノードが実行する処理の流れの一例を説明するためのフローチャートである。なお、以下の説明ではノード2が始端ノードとして動作する際に実行する処理の一例について説明する。
【0113】
例えば、ノード2は、自身の状態に停止条件が発生しているか否かを判別する(ステップS101)。ここで、停止条件とは、例えば、Put要求を受信してからPut応答をまだ出力していない場合等に発生する条件である。そして、ノード2は、停止条件が発生していない場合は(ステップS101否定)、クライアント7からPut要求を受信したか否かを判別する(ステップS102)。
【0114】
次に、ノード2は、クライアント7からPut要求を受信した場合には(ステップS102肯定)、update要求を送信する複数の経路を識別するとともに、各経路における次のノードにupdate要求を送信する(ステップS103)。なお、ノード2は、update要求を送信してからupdated要求を受信するまでの間、updateing状態に移行する。
【0115】
次に、ノード2は、update要求を送信したいずれかのノードからupdated要求を受信したか否かを判別し(ステップS104)、受信していない場合には(ステップS104否定)、updated要求を受信するまで待機する(ステップS104)。そして、ノード2は、いずれかのノードからupdated要求を受信した場合には(ステップS104肯定)、クライアントにPut返答を送信し、updateing状態を解除する(ステップS105)。その後、ノード2は、停止条件が発生しているか否かを判別する(ステップS101)。
【0116】
また、ノード2は、クライアントからPut要求を受信していない場合には(ステップS102否定)、再度停止条件が発生しているか否かを判別する(ステップS101)。また、ノード2は、停止条件が発生している場合には(ステップS101肯定)、停止条件が解消されるまで、処理を終了する。
【0117】
次に、図11を用いて、各経路の中間ノードが実行する処理の流れの一例について説明する。図11は、中間ノードが実行する処理の流れの一例を説明するためのフローチャートである。なお、以下の説明では、ノード3が中間ノードとして動作する際に実行する処理の一例について説明する。
【0118】
例えば、ノード3は、停止条件が発生しているか否かを判別し(ステップS201)、発生していないと判別した場合には(ステップS201否定)、update要求を受信したか否かを判別する(ステップS202)。そして、ノード3は、経路の前ノードからupdate要求を受信した場合には(ステップS202肯定)、経路の次ノードにupdate要求を転送し、updating状態に遷移する(ステップS203)。
【0119】
次に、ノード3は、update要求を転送した次ノードからupdated要求を受信するまで待機し(ステップS204否定)、updated要求を受信した場合には(ステップS204肯定)、次の処理を実行する。すなわち、ノード3は、経路の前ノードにupdated要求を転送し、updating状態を解除する(ステップS205)。
【0120】
その後、ノード3は、再度停止条件が発生しているか否かを判別し(ステップS201)、停止条件が発生している場合には(ステップS201肯定)、停止条件が解消されるまで、処理を終了する。また、ノード3は、前ノードからupdate要求を受信していない場合には(ステップS202否定)、再度停止条件が発生しているか否かを判別する(ステップS201)。
【0121】
次に、図12を用いて、終端ノードが実行する処理の流れの一例について説明する。図12は、終端ノードが実行する処理の流れの一例を説明するためのフローチャートである。なお、以下の説明では、ノード5が終端ノードとして動作する際に実行する処理の一例について説明する。
【0122】
まず、ノード5は、停止条件が発生しているか否かを判別し(ステップS301)、発生していない場合には(ステップS301否定)、自身を終端とする全ての経路を介してupdate要求を受信したか否かを判別する(ステップS302)。そして、ノード5は、自身を終端とする全ての経路を介してupdate要求を受信していない場合には(ステップS302否定)、全ての経路を介してupdate要求を受信するまで待機する(ステップS302)。
【0123】
また、ノード5は、自身を終端とする全ての経路を介してupdate要求を受信した場合には(ステップS302肯定)、レプリカを更新するとともに、各経路の前ノードにupdated要求を送信する(ステップS303)。その後、ノード5は、再度、停止条件が発生しているか否かを判別し(ステップS301)、発生している場合には(ステップS301肯定)、停止条件が解消するまで処理を終了する。
【0124】
[ストレージシステム1の効果]
上述したように、ノード2は、クライアント7からレプリカA1〜A4に対するPut要求を受信した場合には、自身を始端とし、複数のノード2〜5を直列に接続する複数の経路を判別する。そして、ノード2は、識別した経路を介して、各経路の終端ノードであるノード5にupdate要求を送信する。その後、ノード2は、いずれかの経路を介してupdated要求を受信した場合には、クライアント7にPut応答を送信する。
【0125】
このため、ノード2は、update要求およびupdated要求を複数の経路を介して各ノード2〜5に転送させるので、レプリカA1〜A4の更新に要する時間を短縮することができる。
【0126】
また、ノード2は、各ノード2〜6の設置位置を記憶し、各ノード2〜6のうち、相互に設置位置が近い複数のストレージ装置を直列に接続する複数の経路を識別する。このため、ノード2は、各経路に含まれる複数のノードにupdate要求およびupdated要求を効率的に転送させることができる結果、各レプリカA1〜A4、B1〜B4、C1〜C4の更新に要する時間を短縮することができる。
【0127】
また、ノード2は、1つのノード5を終端ノードとする複数の経路を識別する。このため、ノード2は、Strong Consistencyを容易に保持することができる。
【0128】
また、ノード5は、自身を終端とする全ての経路を介してupdate要求を受信したか否かを判別し、全ての経路を介してupdate要求を受信するまで待機する。そして、ノード5は、全ての経路を介してupdate要求を受信した場合には、各経路を介して、updated要求を始端ノードであるノード2に送信する。このため、ノード5は、Strong Consistencyを保ちながら、複数の経路を介してupdate要求およびupdated要求を転送することができる。
【実施例2】
【0129】
次に、実施例2に関わるストレージシステムについて説明する。例えば、実施例1に関わるストレージシステム1は、1つのノードを終端ノードとする複数の経路を介して、update要求とupdated要求とを順次転送した。しかし、実施例はこれに限定されるものではない。
【0130】
例えば、各経路における終端ノードを異なるノードとした際に、各経路においてupdate要求とupdated要求とを転送する回数を減少させられるのであれば、更新に要する時間をより短縮することができる。そこで、以下の説明においては、各経路における終端ノードを異なるノードとするストレージシステム1aについて説明する。
【0131】
図13は、実施例2に関わるストレージシステムの一例を説明するための図である。図13に示す例では、ストレージシステム1aは、ストレージシステム1と同様に各データセンター#1〜#3に複数のノード2a〜6aを有する。なお、クライアント7およびIP網8は、実施例1に関わるクライアント7およびIP網8と同様の機能を発揮するものとして、説明を省略する。
【0132】
図14は、実施例2に関わる始端ノードの一例を説明するための図である。なお、図14に示す例では、始端ノードとして、ノード2aの一例について説明する。また、他のノード3a〜6aも、同様の機能を発揮できるものとする。また、図14に示すノード2aのうち、図3に示すノード2と同様の機能を発揮する部分については、同一の符号を付すものとし、以下の説明を省略する。
【0133】
トポロジー計算部20bは、実施例1に関わるトポロジー計算部20aと同様の機能を発揮する。また、トポロジー計算部20bは、各経路の終端ノードを異なるノードとした方が更新に要する時間をより短縮できる場合には、終端ノードをそれぞれ異なるノードとする複数の経路を識別する。
【0134】
そして、トポロジー計算部20bは、識別した複数の経路を示す経路情報をupdate要求に格納する。例えば、トポロジー計算部20bは、ノード2aを始端ノードとし、ノード3aを終端ノードとする経路と、ノード2aを始端ノードとし、ノード4aを中間ノードとし、ノード5aを終端ノードとする経路とを示す経路情報をupdate要求に格納する。
【0135】
次に、図15を用いて、実施例2に関わる終端ノードの一例を説明する。図15は、実施例2に関わる終端ノードの一例を説明するための図である。なお、以下の説明においては、ノード3a、および、ノード5aが終端ノードである例について説明する。また、他のノード2a、4a、6aも、ノード3aおよびノード5aと同様の機能を発揮できるものとする。また、図15に示すノード3aおよび5aのうち、図7に示すノード5と同様の機能を発揮する部分については、同一の符号を付すものとし、以下の説明を省略する。
【0136】
要求収集部24aは、要求収集部24と同様の機能を有する。また、要求収集部24aは、自身を終端ノードとする全ての経路を介してupdate要求を受信した場合は、ノード間要求処理部15bにupdate要求を出力せずに、以下の処理を実行する。
【0137】
すなわち、要求収集部24aは、ノード間要求処理部15bに対して、update要求を受信した旨を通知するreadyToUpdate要求を他の終端ノードに送信するよう指示する。この際、要求収集部24aは、update要求に格納されていた経路情報をノード間要求処理部15bに通知する。
【0138】
また、要求収集部24aは、ネットワークインターフェース10a、要求送信元判断部11a、ノード間要求受信部14を介して、他の終端ノードが発行したreadyToUpdate要求を取得する。そして、要求収集部24aは、他の全ての終端ノードからreadyToUpdate要求を取得したか否かを判別する。
【0139】
その後、要求収集部24aは、他の全ての終端ノードからreadyToUpdate要求を取得したと判別した場合には、取得したupdate要求のうちの1つをノード間要求処理部15bに出力する。一方、要求収集部24aは、他の全ての終端ノードからreadyToUpdate要求を取得していないと判別した場合には、他の全ての終端ノードからreadyToUpdate要求を取得するまで待機する。
【0140】
つまり、要求収集部24aは、自身を終端ノードとする全ての経路を介してupdate要求を取得した場合には、他の経路の終端ノードに対してreadyToUpdate要求を送信する。そして、要求収集部24aは、全ての終端ノードからreadyToUpdate要求を取得し、かつ、自身を終端ノードとする全ての経路を介してupdate要求を取得した場合には、以下の処理を実行する。つまり、要求収集部24aは、自身を終端ノードとする全ての経路を介して、updated要求を始端ノードに転送させる。
【0141】
ノード間要求処理部15bは、図7に示すノード間要求処理部15aと同様の機能を発揮する。また、ノード間要求処理部15bは、要求収集部24aから経路情報を取得するとともに、readyToUpdate要求の発行を指示された場合には、以下の処理を実行する。すなわち、ノード間要求処理部15bは、要求発行部17bに経路情報を出力するとともに、readyToUpdate要求の発行を指示する。
【0142】
また、ノード間要求処理部15bは、データ記憶部16に記憶された更新対象となるレプリカのデータを検索し、検索したデータを更新した更新後のデータを生成する。そして、ノード間要求処理部15bは、更新前のレプリカのデータとともに、更新後のレプリカのデータをデータ記憶部16に格納する。
【0143】
また、ノード間要求処理部15bは、update要求を要求収集部24aから取得した場合には、データ記憶部16に記憶された更新前のレプリカのデータを削除する。そして、ノード間要求処理部15bは、要求発行部17bに対して、updated要求の発行を指示するとともに、update要求に格納されていた経路情報を出力する。
【0144】
他終端状態判断部25は、クライアント要求受信部12aが出力したGet要求を取得する。このような場合には、他終端状態判断部25は、要求収集部24aが自身を終端ノードとする全ての経路を介してupdate要求を受信したか否かを判別する。そして、他終端状態判断部25は、自身を終端ノードとする全ての経路を介してupdate要求を受信していないと判別した場合は、クライアント要求処理部13aに更新前のレプリカのデータをクライアント7に出力するよう指示する。
【0145】
また、他終端状態判断部25は、要求収集部24aが自身を終端ノードとする全ての経路を介してupdate要求を受信していた場合には、全ての終端ノードからreadyToUpdate要求を受信したか否かを判別する。そして、他終端状態判断部25は、要求収集部24aが全ての終端ノードからreadyToUpdate要求を受信していると判別した場合には、クライアント要求処理部13aに更新後のレプリカのデータを出力するよう指示する。
【0146】
また、他終端状態判断部25は、要求収集部24aが全ての終端ノードからreadyToUpdate要求を受信していないと判別した場合には、以下の処理を実行する。すなわち、他終端状態判断部25は、updated要求の発行を依頼したか否かを他の終端ノードに問合せるようクライアント要求処理部13aに指示する。
【0147】
そして、他終端状態判断部25は、いずれかの終端ノードからupdated要求の発行を依頼した旨の返答を受信した場合には、クライアント要求処理部13aに更新後のレプリカのデータをクライアント7に出力するよう指示する。一方、他終端状態判断部25は、どの終端ノードからもupdated要求の発行を依頼した旨の返答を受信しなかった場合には、クライアント要求処理部13aに更新前のレプリカのデータを出力するようクライアント要求処理部13aに指示する。
【0148】
つまり、他終端状態判断部25は、自身を終端ノードとする全ての経路を介してupdate要求を受信し、かつ、自身を含むいずれかの終端ノードがupdated要求の発行を依頼した場合は、Get要求に対して更新後のレプリカのデータを出力させる。なお、他終端状態判断部25は、他の終端ノードにupdated要求を送信したか否かの問合せを行っている最中に、要求収集部24aが全ての終端ノードからreadToUpdate要求を取得した場合には、問合せを中止する。そして、他終点判断部25は、更新後のレプリカのデータを出力するようにクライアント要求処理部13aに指示する。
【0149】
なお、要求収集部24aは、ネットワークインターフェース10a、要求送信元判断部11a、クライアント要求受信部12aを介して、他の終端ノードから送信された問合せを取得する。このような場合には、要求収集部24aは、自身がupdated要求の発行を指示したか否かを問合せ元の終端ノードに返信するようノード間要求処理部15bに指示する。このような場合には、返信が要求発行部17b、トポロジー計算部20c、ノード間要求並列送信部21を介して、問合せ元の終端ノードに送信される。
【0150】
要求発行部17bは、図7に例示した要求発行部17aと同様の機能を発揮する。また、要求発行部17bは、経路情報を取得するとともに、readyToUpdate要求の発行を指示された場合には、readyToUpdate要求を生成する。そして、要求発行部17bは、取得した経路情報とともに、readyToUpdate要求をトポロジー計算部20cに出力する。
【0151】
トポロジー計算部20cは、図7に示すトポロジー計算部20aと同様の機能を発揮する。また、トポロジー計算部20cは、経路情報とともにreadyToUpdate要求を取得した場合には、取得した経路情報を解析し、自身以外の終端ノードを全て識別する。その後、トポロジー計算部20cは、readyToUpdate要求を識別した全ての終端ノードに送信するようノード間要求並列送信部21に指示する。
【0152】
このようなノード3aおよびノード5aは、自身を終端ノードとする全ての経路を介してupdate要求を受信した場合には、他の終端ノードにreadyToUpdate要求を送信する。そして、ノード3aおよびノード5aは、自身を終端ノードとする全ての経路を介してupdate要求を受信し、かつ、他の全ての終端ノードからreadyToUpdate要求を受信した場合には、updated要求を送信することとなる。このため、ストレージシステム1aは、update要求およびupdated要求を転送する複数の経路において、終端ノードが同一ではない場合にも、Strong Consistencyを保持したまま、レプリカの更新に要する時間を短縮できる。
【0153】
また、ノード3aおよびノード5aは、自身を終端ノードとする全ての経路を介してupdate要求を受信してから、他の全ての終端ノードからreadyToUpdateを受信するまでの間にGet要求を受信した場合には、以下の処理を実行する。すなわち、ノード3aおよびノード5aは、他の終端ノードにupdated要求を発行したか否かを問い合わせることで、updated要求を発行した終端ノードが存在するか否かを判別する。そして、ノード3aおよびノード5aは、いずれかの終端ノードがupdated要求を発行した場合には、更新後のレプリカのデータを出力し、いずれの終端ノードもupdated要求を発行していない場合には、更新前のレプリカのデータを出力する。
【0154】
このため、ストレージシステム1aは、レプリカの更新中にGet要求が発行された場合にも、各経路における更新状況に応じたデータをクライアントに送信することができる。この結果、ストレージシステム1aは、Strong Consistencyを保持したまま、レプリカの更新に要する時間を短縮できる。
【0155】
次に、図16を用いて、終端ノードであるノード3a、ノード5aがクライアント7からGet要求を受信した際に実行する処理の一例について説明する。図16は、実施例2に関わる終端ノードがGet要求を受信した際に実行する処理の一例を説明するための図である。なお、図16に示す例では、ノード3aに対してクライアント7がデータAに関わるレプリカA2のGet要求を発行した例について説明する。
【0156】
まず、図16中(1)に示すように、ネットワークインターフェース10aは、Get要求を要求送信元判断部11aに出力する。このような場合には、要求送信元判断部11aは、図16中(2)に示すように、クライアント要求受信部12aに出力する。次に
クライアント要求受信部12aは、図16中(3)に示すように、クライアント7の位置情報をクライアント位置記憶部19に格納する。また、クライアント要求受信部12aは、Get要求を他終端状態判断部25に出力する。
【0157】
次に、他終端状態判断部25は、図16中(4)に示すように、要求収集部24aがノード3aを終端とする全ての経路を介してupdate要求を取得したか否かを判別する。そして、他終端状態判断部25は、要求収集部24aがノード3aを終端とする全ての経路を介してupdate要求を取得していない場合は、更新前のレプリカのデータを出力するようクライアント要求処理部13aに指示する。
【0158】
また、他終端状態判断部25は、要求収集部24aがノード3aを終端とする全ての経路を介してupdate要求を取得している場合は、要求収集部24aが全ての終端ノードからreadyToUpdate要求を取得したか否かを判別する。そして、他終端状態判断部25は、全ての終端ノードからreadyToUpdate要求を取得していない場合には、図16中(5)に示すように、他の終端ノードに問合せるよう指示する。
【0159】
その後、他終端状態判断部25は、updated要求を送信した旨の返信をいずれかの終端ノードから取得した場合には、更新後のレプリカのデータを出力するようクライアント要求処理部13aに指示する。また、他終端状態判断部25は、要求収集部24aが全ての終端ノードからreadyToupdate要求を取得していた場合には、更新後のレプリカのデータを出力するようクライアント要求処理部13aに指示する。すると、クライアント要求処理部13aは、要求発行部17bに更新後のレプリカのデータを出力するよう指示する。
【0160】
このような場合には、要求発行部17bは、図16中(6)に示すように、更新後のレプリカのデータを取得し、図16中(7)に示すように取得したデータをクライアント位置判断部22に出力する。すると、クライアント位置判断部22は、クライアント位置記憶部19からGet要求の発行元であるクライアント7の位置情報を取得する。そして、クライアント位置判断部22は、図16中(8)に示すように、レプリカのデータとクライアント7の位置情報とをクライアント要求送信部23に出力する。このような場合には、図16中(9)に示すように、クライアント要求送信部23は、ネットワークインターフェース10aを介して、クライアント7にレプリカのデータを送信する。
【0161】
次に、図17を用いて、ノード3aがupdate要求を受信した際に実行する処理の一例について説明する。図17は、実施例2に関わる終端ノードがupdate要求を受信した際に実行する処理の一例を説明するための図である。例えば、図17中(1)に示すように、ネットワークインターフェース10aは、受信したupdate要求を要求送信元判断部11aに送信する。このような場合には、図17中(2)に示すように、要求元判断部11aは、update要求をノード間要求受信部14に出力し、図17中(3)に示すように、ノード間要求受信部14は、updated要求を要求収集部24aに出力する。
【0162】
ここで、要求収集部24aは、要求収集部24と同様に、ノード3aを終端ノードとする全ての経路を介してupdate要求を取得するまで待機する。そして、要求収集部24aは、ノード3aを終端ノードとする全ての経路を介してupdate要求を取得した場合には、図17中(4)に示すように、readyToUpdate要求を送信するようノード間要求処理部15bに指示する。
【0163】
このような場合には、ノード間要求処理部15bは、図17中(5)に示すように、更新後のレプリカのデータをデータ記憶部16に格納する。また、ノード間要求処理部15bは、図17中(6)に示すように、要求発行部17bにreadyToUpdate要求の発行を指示する。このような場合には、要求発行部17b、トポロジー計算部20c、ノード間要求並列送信部21は、readyToUpdate要求を他の終端ノードであるノード5aに送信する。
【0164】
また、図17中(7)に示すように、要求収集部24aは、ネットワークインターフェース10a、要求送信元判断部11a、ノード間要求受信部14を介して、readyToUpdate要求を取得した場合には、以下の処理を実行する。すなわち、要求収集部24aは、ノード3a以外の全ての終端ノードからreadyToUpdate要求を取得したか否かを判別する。
【0165】
そして、要求収集部24aは、ノード3a以外の全ての終端ノードからreadyToUpdate要求を取得したと判別した場合には、図17中(8)に示すように、ノード間要求処理部15bに受信したupdate要求のうちの1つを送信する。以降、ノード3aは、実施例1に関わるノード5と同様の処理を実行し、ノード3aを終端とする全ての経路を介して、updated要求を始端ノードまで順次転送させる。
【0166】
次に、図18a〜18dを用いて、実施例2に関わるストレージシステム1aがそれぞれ終端ノードが異なる複数の経路を介して、update要求とupdated要求とを順次転送する処理について説明する。なお、図18a〜18dに示す例では、図9a、図9bに示すように、1stノードから7thノードまでの7個のノードが記憶するレプリカの更新を行う例について説明する。
【0167】
図18aは、実施例2に関わるストレージシステムが複数の経路を介してupdate要求を送信する処理を説明するための図である。また、図18bは、実施例2に関わる終端ノードがreadyToUpdate要求を送受信する処理を説明するための図である。また、図18cは、実施例2に関わるストレージシステムがupdated要求を送信する処理を説明するための図である。また、図18dは、実施例2に関わるストレージシステムにおける動作を説明するための図である。
【0168】
まず図18a中(H)に示すように、クライアント7は、始端ノードである1stノードにPut要求を発行する。このような場合には、1stノードは、図18aに示すように、2ndノード、4thノード、6thノードを接続する経路と、3rdノード、5thノード、7thノードを接続する経路とを識別する。
【0169】
そして、図18a中(I)に示すように、1stノードは、2ndノードと3rdノードとにupdate要求を送信する。このような場合には、2ndノードは4thノードにupdate要求を転送し、4thノードは6thノードにupdate要求を転送する。また、3rdノードは5thノードにupdate要求を転送し、5thノードは7thノードにupdate要求を転送する。
【0170】
また、図18b中(J)に示すように、各経路の終端ノードである6thノードと7thノードは、update要求を受信した場合には、他の経路の終端ノードにreadyToUpdate要求を送信する。この処理によって、各経路の終端ノードである6thノードと7thノードとは、他の経路のノードにupdate要求が行き渡ったか否かを識別することができる。
【0171】
そして、図18c中(K)に示すように、各経路の終端ノードである6thノードと7thノードは、自身以外の終端ノードからreadyToUpdate要求を取得した場合には、updated要求を4thノードおよび5thノードに送信する。その後、図18c中(L)に示すように、1stノードは、いずれかの経路からupadted要求を取得した場合には、Put返答をクライアント7に送信する。
【0172】
すなわち、図18d中(M)に示すように、6thノードおよび7thノードは、readyToUpdate要求を相互に送受信することで、各経路の終端ノードとなる仮想終端ノードが存在するものとして動作する。このような処理を実行することで、ストレージシステム1aは、各経路の終端ノードが異なるノードである場合にも、Strong Consistencyを保持することができる。
【0173】
なお、各経路の終端ノードである6thノードおよび7thノードは、複数の経路の終端ノードとしても動作することができる。図19は、複数の経路の終端ノードが実行する処理の一例を説明するための図である。図19に示す例では、6thノードは、図18a〜18dに示した1stノード、2ndノード、4thノード、6thノードを接続する経路に加えて、1stノード、8thノード、9thノード、6thノードを接続する経路の終端ノードとなる。
【0174】
このような場合には、6thノードは、図19中(N)に示すように、自身を終端ノードとする2つの経路からupdate要求を取得するまで待機する。そして、6thノードは、2つの経路からupdate要求を取得した場合には、図19中(O)に示すように、readyToUpdate要求を7thノードに送信する。このような処理を行うことで、ストレージシステム1aは、任意のトポロジーを有する複数の経路を介して、update要求およびupdated要求を各ノードに送信することができる。
【0175】
例えば、ノード間要求処理部15b、要求発行部17b、トポロジー計算部20c、要求収集部24a、他終端状態判断部25とは、電子回路である。ここで、電子回路の例として、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路、またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などを適用する。
【0176】
次に、図20を用いて、終端ノードが実行する処理の流れの一例について説明する。図20は、実施例2に関わる終端ノードが実行する処理の流れを説明するためのフローチャートである。なお、以下の説明では、ノード3aが終端ノードとして動作する際に実行する処理の一例について説明する。
【0177】
例えば、ノード3aは、自身の状態に停止条件が発生しているか否かを判別する(ステップS401)。そして、ノード3aは、自身の状態に停止条件が発生していないと判別した場合には(ステップS401否定)、自身が終端ノードとなる全ての経路を介してupdate要求を受信したか否かを判別する(ステップS402)。そして、ノード3aは、自身が終端ノードとなる全ての経路を介してupdate要求を受信していないと判別した場合には(ステップS402否定)、全ての経路を介してupdate要求を受信するまで待機する(ステップS402)。
【0178】
また、ノード3aは、自身が終端ノードとなる全ての経路を介してupdate要求を受信した場合には(ステップS402肯定)、各終端ノードにreadyToUpdate要求を送信し、readyToUpdate待ち状態に移行する(ステップS403)。ここで、readyToUpdate待ち状態とは、自身が終端ノードとなる全ての経路を介してupdate要求を受信し、かつ、他の終端ノードからreadyToUpdate要求を受信していない状態である。
【0179】
また、ノード3aは、全ての終端ノードからreadyToUpdate要求を受信したか否かを判別する(ステップS404)。そして、ノード3aは、全ての終端ノードからreadyToUpdate要求を受信していないと判別した場合には(ステップS404否定)、全ての終端ノードからreadyToUpdate要求を受信するまで待機する(ステップS404)。
【0180】
また、ノード3aは、全ての終端ノードからreadyToUpdate要求を受信した場合には(ステップS404肯定)、レプリカを更新するとともに、自身を終端ノードとする全ての経路の前ノードにupdated要求を送信する(ステップS405)。この際、ノード3aは、readyToUpdate待ち状態を解除する。その後、ノード3aは、再度停止条件が発生しているか否かを判別し(ステップS401)、発生している場合には(ステップS401肯定)、停止条件が解消するまで処理を終了する。
【0181】
次に、図21を用いて、終端ノードがGet要求を受信した際に実行する処理の流れの一例を説明する。図21は、Get要求に対する処理の流れの一例を説明するためのフローチャートである。なお、以下の説明では、ノード3aが終端ノードとして動作する際に実行する処理の流れの一例について説明する。
【0182】
まず、ノード3aは、停止条件が発生しているかを判別し(ステップS501)、発生していない場合には(ステップS501否定)、クライアント7からGet要求を受信したか否かを判別する(ステップS502)。そして、ノード3aは、クライアント7からGet要求を受信した場合には(ステップS502肯定)、自身がreadyToUpdate待ち状態であるか否かを判別する(ステップS503)。すなわち、ノード3aは、他の全ての終端ノードからreadyToUpdate要求を受信したか否かを判別する。
【0183】
そして、ノード3aは、自身がreadyToUpdate待ち状態であると判別した場合には(ステップS503肯定)、他の終端ノードに問合せを行う(ステップS504)。そして、ノード3aは、いずれかの終端ノードがreadyToUpdate待ち状態を解除してupdated要求の発行を依頼したか否かを判別する(ステップS505)。
【0184】
その後、ノード3aは、いずれの終端ノードもupdated要求の発行を依頼していないと判別した場合には(ステップS505否定)、更新前のレプリカのデータをクライアント7に送信する(ステップS506)。また、ノード3aは、いずれかの終端ノードがupdated要求の発行を依頼したと判別した場合には(ステップS505肯定)、更新後のレプリカのデータをクライアント7に送信する(ステップS507)。その後、ノード3aは、再度停止条件が発生しているか否かを判別し(ステップS501)、停止条件が発生している場合には(ステップS501肯定)、停止条件が解消するまで処理を終了する。
【0185】
また、ノード3aは、Get要求を受信した際に(ステップS502肯定)、自身がreadyToUpdate待ち状態ではないと判別した場合には(ステップS503否定)、保持しているレプリカのデータをクライアント7に送信する(ステップS508)。
【0186】
すなわち、ノード3aは、自身を終端ノードとする全ての経路を介してupdate要求を受信していない場合には、更新後のレプリカのデータを記憶していないので、更新前のレプリカのデータを送信することとなる。また、ノード3aは、全ての終端ノードからreadyToUpdate要求を受信した場合には、更新後のレプリカのデータのみを記憶しているので、更新後のレプリカのデータを送信することとなる。
【0187】
また、ノード3aは、Get要求を受信していない場合には(ステップS502否定)、再度停止条件が発生しているか否かを判別する(ステップS501)。
【0188】
[ストレージシステム1aの効果]
上述したように、終端ノードとして動作するノード3aは、自身を終端ノードとする全ての経路を介してupdate要求を受信した場合には、自身を終端ノードとする経路以外の経路における終端ノードにreadyToUpdate要求を送信する。そして、ノード3aは、自身以外の全ての終端ノードからreadyToUdate要求を受信したか否かを判別する。その後、ノード3aは、自身以外の全ての終端ノードからreadyToUdate要求を受信した場合には、updated要求を、自身を終端ノードとする全ての経路を介して、始端ノードに送信する。
【0189】
このため、このようなノード3aを有するストレージシステム1aは、それぞれ異なるノードを終端ノードとする経路を介してupdate要求を各ノードに送信することができる。この結果、ストレージシステム1aは、レプリカの更新に要する時間をさらに短縮することができる。例えば、各ノード2a〜6aの設置位置によっては、終端ノードを1つのノードとする複数の経路よりも、終端ノードを複数のノードとする複数の経路でupdate要求を送信した方が更新に要する時間を短縮できる場合がある。このような場合にも、ストレージシステム1aは、レプリカの更新に要する時間を短縮することができる。
【0190】
また、ノード3aは、クライアント7からGet要求を受信した場合には、自身がreadyToUpdate状態か否かを判別し、readyToUpdate状態である場合には、他の終端ノードがupdated要求の発行を依頼したか否かを判別する。そして、ノード3aは、いずれかの終端ノードがupdated要求の発行を依頼していた場合には、更新後のレプリカのデータをクライアント7に送信する。また、ノード3aは、いずれの終端ノードもupdated要求の発行を依頼していない場合には、更新前のレプリカのデータをクライアント7に送信する。
【0191】
このようなノード3aを有するストレージシステム1aは、終端ノードが複数存在する場合にも、各終端ノードがGet要求に対して送信するレプリカのデータをそろえることができる。この結果、ストレージシステム1aは、Strong Consistencyを保持しつつ、レプリカの更新に要する時間を短縮することができる。
【実施例3】
【0192】
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例3として本発明に含まれる他の実施例を説明する。
【0193】
(1)経路の識別について
上述したストレージシステム1、1aは、クライアント7がPut要求を始端ノードに発行した場合には、更新対象となるレプリカを記憶するノードを識別し、識別したノードを接続する複数の経路を識別した。しかし、実施例はこれに限定されるものではない。すなわち、ストレージシステム1、1aは、更新対象となるデータごとにあらかじめ設定された複数の経路を介して、update要求を各ノードに送信することとしてもよい。
【0194】
例えば、ストレージシステム1、1aは、各ノード2〜5が記憶するレプリカA1〜A4が他のノードに移る等の処理が発生しない場合など、update要求を送信する経路を固定してもよい場合には、ノード2〜5に予めupdate要求を送信する経路を設定する。そして、ノード2〜5は、ノード2がPut要求を受信した場合には、予め設定された複数の経路にそって、update要求を順に転送することとしてもよい。
【0195】
すなわち、ストレージシステム1、1aは、複数の経路(マルチパス)でupdate要求を各ノードに送信した場合には、1つの経路(シングルパス)でupdate要求を各ノードに送信するよりも短時間でレプリカの更新を行うことができる。このため、ストレージシステム1、1aは、複数の経路でupdate要求を送信することができれば、経路が固定であっても、その都度複数の経路を識別する方法であってもよい。
【0196】
(2)ノードの数や各ノードが記憶するレプリカについて
上述した例では、ノード2〜6がレプリカA1〜A4、B1〜B4、C1〜C4を記憶する例について説明した。しかし、実施例はこれに限定されるものではなく、ノードの数や各ノードが記憶するレプリカの数および種類は任意の組合せを適用することができる。
【0197】
(3)経路情報について
上述した例では、update要求を送信する経路を示す経路情報をupdate要求のヘッダに格納した。しかし、実施例はこれに限定されるものではない。例えば、update要求を送信する経路が固定である場合には、経路情報を格納する必要はなく、経路が固定でなくとも、経路情報をupdate要求とは別に送ってもよい。すなわち、各ノードがupdate要求を送信する経路を識別する処理については、任意の手法を適用することができる。
【0198】
(4)経路について
上述した例では、2つまたは3つの経路を識別したが、実施例はこれに限定されるものではなく、任意の数の複数の経路を識別することもできる。例えば、トポロジー計算部20は、update要求を送信する複数の経路の組を複数識別し、各組において片道の最大遅延が最も小さい組を選択することとしてもよい。
【0199】
すなわち、ノード2〜6にレプリカD1〜D5が記憶されている際に、各レプリカ間の遅延がすべて10msec(millisecond)だとする。このような場合に、トポロジー計算部20は、ノード2、ノード3、ノード4、ノード6の経路とノード2、ノード5、ノード6の経路との第1の組を識別する。また、トポロジー計算部20は、ノード2、ノード3、ノード6の経路と、ノード2、ノード4、ノード6の経路と、ノード2、ノード5、ノード6の経路との第2の組を識別する。このような場合には、第2の組の方が、片道の最大遅延が10msec短いので、第2の組を識別することとなる。
【0200】
(5)プログラム
ところで、実施例1、2に関わるノード2〜6、2a〜6aは、ハードウェアを利用して各種の処理を実現する場合を説明した。しかし、実施例はこれに限定されるものではなく、あらかじめ用意されたプログラムをストレージ装置として動作するコンピュータで実行することによって実現するようにしてもよい。そこで、以下では、図22を用いて、実施例1に示したノード2〜6と同様の機能を有するデータ管理プログラムを実行するコンピュータの一例を説明する。図22は、データ管理プログラムを実行するコンピュータの一例を説明するための図である。
【0201】
図22に例示されたコンピュータ100は、RAM(Random Access Memory)110、HDD(Hard Disk Drive)120、ROM(Read Only Memory)130、CPU(Central Processing Unit)140がバス160で接続される。また、コンピュータ100は、RAM(Random Access Memory)140、他のコンピュータと通信を行うためのI/O(Input Output)150がバス160で接続される。
【0202】
HDD120には、レプリカが記憶されている。ROM130には、データ更新プログラム131が記憶されており、CPU140が読み出して実行することによって、図22に示す例では、データ更新プロセス141として機能するようになる。なお、データ更新プロセス141は、図3に示す各部11〜23と同様の機能を発揮するが、図7に示す要求収集部24および図15に示す他終端状態判断部25の機能を付加することもできる。
【0203】
なお、本実施例で説明したデータ管理プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM(Compact Disc Read Only Memory)、MO(Magneto Optical Disc)、DVD(Digital Versatile Disc)などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【0204】
1、1a ストレージネットワーク
2〜6、2a〜6a ノード
7 クライアント
8 IP網
10、10a ネットワークインターフェース
11、11a 要求送信元判断部
12、12a クライアント要求受信部
13、13a クライアント要求処理部
14 ノード間要求受信部
15〜15b ノード間要求処理部
16 データ記憶部
17〜17b 要求発行部
18 要求発行認証部
19 クライアント位置記憶部
20〜20c トポロジー計算部
21 ノード間要求並列送信部
22 クライアント位置判断部
23 クライアント要求送信部
24、24a 要求収集部
25 他終端状態判断部

【特許請求の範囲】
【請求項1】
データの複製を記憶する複数のストレージ装置のうち、クライアントからデータの更新を要求されるストレージ装置において、
前記データの更新を要求された場合は、自ストレージ装置を始端とし、複数のストレージ装置を接続する複数の経路を介して、各経路の終端となる1つまたは複数のストレージ装置に前記データの更新を要求する更新要求を送信する送信部と、
各経路の終端となる前記1つまたは複数のストレージ装置が前記複数の経路の全ての経路を介して前記更新要求の受信に応じて発行した応答を、前記送信部が前記更新要求を送信したいずれかの経路を介して受信した場合には、前記データの更新が完了した旨を前記クライアントに通知する通知部と
を有することを特徴とするストレージ装置。
【請求項2】
各ストレージ装置の設置位置を記憶する記憶部と、
前記記憶部が記憶する各ストレージ装置の設置位置に基づいて、自ストレージ装置を始端とし、相互に設置位置が近い複数のストレージ装置を接続する複数の経路を識別する識別部と、
をさらに有し、
前記送信部は、前記識別部が識別した複数の経路を介して、各経路の終端となるストレージ装置に前記更新要求を送信することを特徴とする請求項1に記載のストレージ装置。
【請求項3】
前記送信部は、同一のストレージ装置を終端とする複数の経路を介して、前記更新要求を送信することを特徴とする請求項1または2に記載のストレージ装置。
【請求項4】
データの複製を記憶する複数のストレージ装置のうち、データの更新を要求する更新要求を他のストレージ装置から受付けるストレージ装置において、
自ストレージ装置を終端とし、複数のストレージ装置を接続する複数の経路を介して前記更新要求を受信する受信部と、
前記受信部が、前記自ストレージ装置を終端とする全ての経路を介して前記更新要求を受信したか否かを判別する判別部と、
前記判別部が、前記自ストレージ装置を終端とする全ての経路を介して前記更新要求を受信したと判別した場合は、前記更新要求に対する応答を、前記自ストレージ装置を終端とする全ての経路を介して、各経路の始端となるストレージ装置へ送信する送信部と
を有することを特徴とするストレージ装置。
【請求項5】
データの複製を記憶する複数のストレージ装置のうち、他のストレージ装置からデータの更新を要求する更新要求を受付けるストレージ装置において、
自ストレージ装置を終端とし、複数のストレージ装置を接続する1つまたは複数の経路を介して前記更新要求を受信する受信部と、
前記受信部が、自ストレージ装置を終端とする全ての経路を介して前記更新要求を受信した場合には、自ストレージ装置を終端とする経路以外の経路において終端となる全てのストレージ装置に更新要求を受信した旨を通知する通知部と、
前記受信部が、自ストレージ装置を終端とする全ての経路を介して前記更新要求を受信し、かつ、前記自ストレージ装置を終端とする経路以外の経路において終端となる全てのストレージ装置から更新要求を受信した旨の通知を受付けたか否かを判別する判別部と、
前記判別部が、自ストレージ装置を終端とする全ての経路を介して前記更新要求を受信し、かつ、前記自ストレージ装置を終端とする経路以外の経路において終端となる全てのストレージ装置から更新要求を受信した旨の通知を受付けたと判別した場合には、前記更新要求に対する応答を前記自ストレージ装置を終端とする経路を介して、前記経路の始端となるストレージ装置へ送信する送信部と
を有することを特徴とするストレージ装置。
【請求項6】
更新の対象となる前記データの読出し要求を取得した際に、前記通知部が前記更新要求を受信した旨を通知した後であり、かつ、前記送信部が前記応答を送信していない場合には、前記自ストレージ装置を終端とする経路以外の経路において終端となる全てのストレージ装置に対して、前記応答を送信したか否かを問い合わせる問合せ部と、
前記問合せ部の問合せに対する応答として、いずれかのストレージ装置から前記応答を送信した旨の通知を取得した場合には、更新後の前記データを出力し、前記問合せ部の問合せに対する応答として、いずれのストレージ装置からも前記応答を送信した旨の通知を取得しなかった場合には、更新前の前記データを出力する出力部と
をさらに有することを特徴とする請求項5に記載のストレージ装置。
【請求項7】
データの複製を記憶する複数のストレージ装置を有するストレージシステムにおいて、
クライアントからデータの更新を要求された場合には、自ストレージ装置を始端とし、複数のストレージ装置を接続する複数の経路を介して、各経路の終端となる1つまたは複数のストレージ装置に前記データの更新を要求する更新要求を送信する第1のストレージ装置と、
自ストレージ装置を終端とする全ての経路を介して前記更新要求を受信したか否かを判別し、前記全ての経路を介して前記更新要求を受信したと判別した場合には、前記更新要求に対する応答を、前記全ての経路を介して、前記第1のストレージ装置へ送信する第2のストレージ装置と
を有することを特徴とするストレージシステム。
【請求項8】
データの複製を記憶する複数のストレージ装置を有するストレージシステムが実行するデータ更新方法において、
クライアントからデータの更新を要求される第1のストレージ装置が、
自ストレージ装置を始端とし、複数のストレージ装置を接続する複数の経路を介して、各経路の終端となるストレージ装置に前記データの更新を要求する更新要求を送信する処理を実行し、
前記各経路の終端となる第2のストレージ装置が、
自ストレージ装置を終端とする全ての経路を介して前記更新要求を受信したか否かを判別し、前記全ての経路を介して前記更新要求を受信したと判別した場合には、前記更新要求に対する応答を、前記全ての経路を介して、前記第1のストレージ装置へ送信する処理を実行する
ことを特徴とするデータ更新方法。
【請求項9】
データの複製を記憶する複数のストレージ装置のうち、クライアントからデータの更新を要求されるストレージ装置が実行するデータ管理プログラムにおいて、
前記データの更新を要求された場合は、自ストレージ装置を始端とし、複数のストレージ装置を接続する複数の経路を介して、各経路の終端となる前記1つまたは複数のストレージ装置に前記データの更新を要求する更新要求を送信し、
各経路の終端となるストレージ装置が全ての経路を介して前記更新要求を受信した後に前記更新要求に対して発行した応答を、前記更新通知を送信したいずれかの経路を介して受信した場合には、前記データの更新が完了した旨を前記クライアントに通知する
処理を実行させることを特徴とするデータ管理プログラム。
【請求項10】
データの複製を記憶する複数のストレージ装置のうち、他のストレージ装置からデータの更新を要求する更新要求を受付けるストレージ装置が実行するデータ管理プログラムにおいて、
自ストレージ装置を終端とし、複数のストレージ装置を接続する全ての経路を介して前記更新要求を受信したか否かを判別し、
自ストレージ装置を終端とする全ての経路を介して前記更新要求を受信したと判別した場合は、前記更新要求に対する応答を、前記自ストレージ装置を終端とする全ての経路を介して、各経路の始端となるストレージ装置へ送信する
処理を実行させることを特徴とするデータ管理プログラム。
【請求項11】
データの複製を記憶する複数のストレージ装置のうち、他のストレージ装置からデータの更新を要求する更新要求を受付けるデータ管理プログラムにおいて、
自ストレージ装置を終端とし、複数のストレージ装置を接続する経路を介して前記更新要求を受信した場合は、自ストレージ装置を終端とする経路以外の経路において終端となる全てのストレージ装置に更新要求を受信した旨を通知し、
自ストレージ装置を終端とする経路を介して前記更新要求を受信し、かつ、前記自ストレージ装置を終端とする経路以外の経路において終端となる全てのストレージ装置から前記更新要求を受信した旨の通知を受付けたか否かを判別し、
自ストレージ装置を終端とする経路を介して前記更新要求を受信し、かつ、自ストレージ装置を終端とする経路以外の経路において終端となる全てのストレージ装置から前記更新要求を受信した旨の通知を受付けたと判別した場合には、前記更新要求に対する応答を前記自ストレージ装置を終端とする経路を介して、前記経路の始端となるストレージ装置へ送信する
処理を実行させることを特徴とするデータ管理プログラム。

【図1】
image rotate

【図2a】
image rotate

【図2b】
image rotate

【図2c】
image rotate

【図3】
image rotate

【図4a】
image rotate

【図4b】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9a】
image rotate

【図9b】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18a】
image rotate

【図18b】
image rotate

【図18c】
image rotate

【図18d】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate