(57)【要約】  分散ストレージシステムにおいて、データオブジェクトの配置の柔軟性を確保しつつ、高いアクセス性能を実現すること。クライアント端末はオブジェクトデータの識別子とオブジェクトデータに対するアクセス要求を処理すべきストレージノードの識別子との対応関係を保持する非同期キャッシュを備え、アクセス要求を処理すべきストレージノードを非同期キャッシュに格納された対応関係に基づいて決定し、決定したストレージノードに対してアクセス要求を送出し、ストレージノードはクライアント端末からアクセス要求を受けると、アクセス要求を自身が処理すべきかどうかを判定して判定結果をクライアント端末に通知するとともに、アクセス要求を処理すべきストレージノードの更新を行い、非同期キャッシュはストレージノードによる前記更新とは非同期に、前記更新に従って前記対応関係を変更する。
2013172405.tif 000002
【特許請求の範囲】
【請求項１】
クライアント端末と、
複数のストレージノードと、を備え、
前記クライアント端末は、オブジェクトデータの識別子と前記オブジェクトデータに対するアクセス要求を処理すべきストレージノードの識別子との対応関係を保持する非同期キャッシュと、
前記アクセス要求を処理すべきストレージノードを前記非同期キャッシュに格納された前記対応関係に基づいて決定し、決定したストレージノードに対して前記アクセス要求を送出するアクセス部と、を有し、
前記複数のストレージノードは、前記クライアント端末から前記アクセス要求を受けると、前記アクセス要求を自身が処理すべきかどうかを判定し、判定結果を前記クライアント端末に通知する判定部と、
前記アクセス要求を処理すべきストレージノードの更新を行う更新部と、を有し、
前記非同期キャッシュは、前記複数のストレージノードのそれぞれによる前記更新とは非同期に、前記更新に従って前記対応関係を変更する、ストレージシステム。
【請求項２】
前記複数のストレージノードのそれぞれによる前記更新の内容を表す更新情報を蓄積するサーバ装置を備え、
前記複数のストレージノードのそれぞれの前記更新部は、前記アクセスを処理すべきストレージノードを更新すると、前記更新の内容を示す更新情報を前記サーバ装置に通知し、
前記非同期キャッシュは、前記複数のストレージノードのそれぞれによる前記更新とは非同期に、前記サーバ装置に蓄積された前記更新情報に従って前記対応関係を変更する、
請求項１に記載のストレージシステム。
【請求項３】
前記サーバ装置は、前記更新情報を定期的に前記クライアント端末に通知し、
前記非同期キャッシュは、前記サーバ装置から通知された前記更新情報に従って前記対応関係を変更する、
請求項２に記載のストレージシステム。
【請求項４】
前記サーバ装置は、前記更新情報のデータ量が所定のサイズ以上となった場合、前記更新情報を前記クライアント端末に通知し、
前記非同期キャッシュは、前記サーバ装置から通知された前記更新情報に従って前記対応関係を変更する、
請求項２に記載のストレージシステム。
【請求項５】
前記アクセス部は、前記対応関係に基づいて決定したストレージノードが前記アクセス要求を処理すべきストレージノードではないと前記判定部によって判定され場合、前記更新情報を通知するように前記サーバ装置に要求し、
前記非同期キャッシュは、前記要求に応じて前記サーバ装置から通知された前記更新情報に従って前記対応関係を変更する、
請求項２に記載のストレージシステム。
【請求項６】
前記判定部は、前記アクセス要求を自身が処理すべきではない場合、前記アクセス要求を処理すべきストレージノードに前記アクセス要求を転送する、
請求項１ないし５のいずれか１項に記載のストレージシステム。
【請求項７】
前記非同期キャッシュは、前記複数のストレージノード間で移動済みのオブジェクトデータの識別子と前記オブジェクトデータに対するアクセス要求を処理すべきストレージノードの識別子との対応関係を保持し、
前記アクセス部は、前記アクセス要求を処理すべきストレージノードを前記非同期キャッシュに格納された前記対応関係に基づいて決定することができなかった場合、所定の分散関数に基づいて前記アクセス要求を処理すべきストレージノードを決定し、決定したストレージノードに対して前記アクセス要求を送出する、
請求項１ないし６のいずれか１項に記載のストレージシステム。
【請求項８】
クライアント端末が、オブジェクトデータの識別子と前記オブジェクトデータに対するアクセス要求を処理すべきストレージノードの識別子との対応関係を非同期キャッシュに保持する工程と、
前記アクセス要求を処理すべきストレージノードを前記非同期キャッシュに格納された前記対応関係に基づいて決定し、決定したストレージノードに対して前記アクセス要求を送出する工程と、
複数のストレージノードのうちの、前記クライアント端末から前記アクセス要求を受けたストレージノードが、前記アクセス要求を自身が処理すべきかどうかを判定し、判定結果を前記クライアント端末に通知する工程と、
前記複数のストレージノードが、それぞれ、前記アクセス要求を処理すべきストレージノードの更新を行う工程と、
前記クライアント端末が、前記非同期キャッシュは、前記複数のストレージノードのそれぞれによる前記更新とは非同期に、前記非同期キャッシュに格納された前記対応関係を前記更新に従って変更する工程と、
を含む、データアクセス方法。
【請求項９】
サーバ装置が、前記複数のストレージノードのそれぞれによる前記更新の内容を表す更新情報を蓄積する工程と、
前記複数のストレージノードが、それぞれ、前記アクセスを処理すべきストレージノードを更新すると、前記更新の内容を示す更新情報を前記サーバ装置に通知する工程と、
前記クライアント端末が、前記複数のストレージノードのそれぞれによる前記更新とは非同期に、前記非同期キャッシュに格納された前記対応関係を、前記サーバ装置に蓄積された前記更新情報に従って変更する工程と、
を含む、請求項８に記載のデータアクセス方法。
【請求項１０】
前記サーバ装置が、前記更新情報を定期的に前記クライアント端末に通知する工程と、
前記クライアント端末が、前記非同期キャッシュに格納された前記対応関係を前記サーバ装置から通知された前記更新情報に従って変更する工程と、
を含む、請求項９に記載のデータアクセス方法。
【請求項１１】
前記サーバ装置が、前記更新情報のデータ量が所定のサイズ以上となった場合、前記更新情報を前記クライアント端末に通知する工程と、
前記クライアント端末が、前記非同期キャッシュに格納された前記対応関係を、前記サーバ装置から通知された前記更新情報に従って変更する工程と、
を含む、請求項９に記載のデータアクセス方法。
【請求項１２】
前記クライアント端末が、前記対応関係に基づいて決定したストレージノードが前記アクセス要求を処理すべきストレージノードではないと前記アクセス要求を受けたストレージノードによって判定された場合、前記更新情報を通知するように前記サーバ装置に要求する工程と、
前記非同期キャッシュに格納された前記対応関係を、前記要求に応じて前記サーバ装置から通知された前記更新情報に従って変更する工程と、
を含む、請求項９に記載のデータアクセス方法。
【請求項１３】
前記アクセス要求を受けたストレージノードが、前記アクセス要求を自身が処理すべきではない場合、前記アクセス要求を処理すべきストレージノードに前記アクセス要求を転送する工程を含む、
請求項８ないし１２のいずれか１項に記載のデータアクセス方法。
【請求項１４】
前記非同期キャッシュは、前記複数のストレージノード間で移動済みのオブジェクトデータの識別子と前記オブジェクトデータに対するアクセス要求を処理すべきストレージノードの識別子との対応関係を保持し、
前記クライアント端末が、前記アクセス要求を処理すべきストレージノードを前記非同期キャッシュに格納された前記対応関係に基づいて決定することができなかった場合、所定の分散関数に基づいて前記アクセス要求を処理すべきストレージノードを決定し、決定したストレージノードに対して前記アクセス要求を送出する工程を含む、
請求項８ないし１３のいずれか１項に記載のデータアクセス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願についての記載］
本発明は、日本国特許出願：特願２０１２−１１３１８３号（２０１２年  ５月１７日出願）に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、ストレージシステムおよびデータアクセス方法に関し、特に、複数のストレージノードを備えた分散型のストレージシステム、および、複数のストレージノードに対するデータアクセス方法に関する。
【背景技術】
【０００２】
ストレージシステムは、データを格納するとともに、格納したデータを提供するシステムである。具体的には、ストレージシステムは、データの一部に対するCREATE(INSERT), READ, WRITE(UPDATE）, DELETEなどの基本機能（アクセス）を提供するとともに、権限管理、データ構造化（整理）などの多様な機能を提供する。【０００３】
分散ストレージシステムは、ネットワークを介して接続された多数の計算機（ストレージノード）を有し、これらの計算機のハードディスクドライブ（ＨＤＤ：Hard Disk Drive）、メモリ等を用いてストレージシステムを実現する。分散ストレージシステムでは、いずれの計算機にデータを配置し、いずれの計算機によってデータを処理するのかを、ソフトウェアまたは特別なハードウェアが決定する。また、分散ストレージシステムの動作を動的に変更することにより、システム内のリソース使用量を調整するとともに、クライアント端末およびその利用者に対する性能を向上させる。【０００４】
例えば、非特許文献１には、メタサーバがデータチャンクの位置を一元管理する分散ストレージとしてGoogle File Systemが記載されている。【０００５】
また、非特許文献２には、クライアント端末がハッシュ関数を複数回適用することで、システム中においてデータを格納しているストレージノードを検出する技術が記載されている。【０００６】
さらに、非特許文献３には、データのマイグレーション（移動）に関する標準技術としてｐＮＦＳ（parallel Network File System）が記載されている。【０００７】
また、非特許文献４には、分散ストレージシステムに関する技術ではないものの、ＤＮＳ（Domain Name System）における名前解決とＤＮＳエントリのキャッシュを備えた複数の計算機から成るデータ格納システムとして、ＷＥＢサーバが記載されている。ＷＥＢサーバの位置情報は、サーバ名とオブジェクト名の組からなるＵＲＬ（Uniform Resource Locator）で示される。このうちサーバ名は、ＤＮＳサーバが提供するサービスによって実際のサーバアドレスへ変換される。ＤＮＳサーバの情報の一部は、性能向上のために、クライアント端末にキャッシュされることもある。【０００８】
さらに、非特許文献５には、ＷＥＢサーバソフトウェアであるApacheにおいて、自サーバ名（ドメイン名）を予め設定しておいて、異なるサーバ名で誤って送られてきたアクセスを拒否する技術が記載されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】国際公開第２０１２／０２３３８４号
【非特許文献】
【００１０】
【非特許文献１】Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung, "The Google File System," SIGOPS Oper. Syst. Rev. 37, 5 (October 2003), pp. 29-43
【非特許文献２】Ion Stoica, Robert Morris, David Karger, M. Frans Kaashoek, Hari Balakrishnan, "Chord: A Scalable Peer-to-peer Lookup Service for Internet Applications," ACM SIGCOMM Computer Communication, Review 31(4), pp.149-160, ACM Press, 2001
【非特許文献３】S. Shepler, et al., "Network File System (NFS) Version 4 Minor Version 1 Protocol," RFC 1035, Internet Engineering Task Force (IETF), 2010
【非特許文献４】P. Mockapetris, "Domain Names - Implementaion and Specification," RFC 1035, Network Working Group, 1987
【非特許文献５】Apache Software Foundation、「Apache HTTPサーバ バージョン 2.2 Apacheコア機能」、［online］、［平成24年4月27日検索］、インターネット〈URL：http://httpd.apache.org/docs/2.1/ja/mod/core.html〉
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上記の特許文献１および非特許文献１ないし５の全開示内容は、本書に引用をもって繰り込み記載されているものとする。以下の分析は、本発明者によってなされたものである。【００１２】
分散ストレージシステムにおいては、データは複数のストレージノードに分散して格納されている。したがって、クライアント端末がデータにアクセスする場合には、データを保持しているストレージノードを把握する必要がある。また、アクセス対象のデータを保持するストレージノードが複数存在する場合には、クライアント端末は、いずれのストレージノードにアクセスすべきかを把握する必要がある。【００１３】
格納されるデータは、意味的な単位でアクセスされる。例えば、関係データベースでは、データはレコード（record）またはタプル（tuple）と呼ばれる単位で書き込まれることが多い。ファイルシステムでは、データはブロックの集合として書き込まれる。キーバリューストア（Key-Value Store）では、データはオブジェクトとして書き込まれる。こうして書き込まれたデータは、その単位ごとにクライアント端末により読み込まれる。以下では、このデータ単位を「データオブジェクト」と呼ぶ。【００１４】
データオブジェクトを保持しているストレージノードをクライアント端末が把握する方式として、データオブジェクトの位置情報を管理する１または２以上の計算機から成るメタサーバを設ける方式（以下、「メタサーバ方式」という。）が知られている。【００１５】
非特許文献１に記載されたメタサーバ方式によると、ストレージシステムが大規模になるに従って、データオブジェクトを格納しているストレージノードの位置を検索するメタサーバの処理性能が不足し、アクセス性能上のボトルネックとなる。また、メタサーバ方式によると、クライアント端末は、データオブジェクトを格納するストレージノードにアクセスする以前にメタサーバにアクセスする必要があり、データアクセスに要する時間が長くなる。特に、クライアント端末とメタサーバとの距離が離れており、ネットワークアクセスに時間を要する場合には、データアクセス時間は顕著に増大する。【００１６】
この問題を解消するために、アクセスを行うクライアント端末または他の計算機上に、メタサーバ上のデータ位置情報の一部をキャッシュする技術が知られている。クライアント端末は、キャッシュされた位置情報を利用できる場合には、メタサーバへアクセスすることなく、データを格納しているストレージノードへ直接アクセスすることができる。ここで、キャッシュの方法として、同期キャッシュと非同期キャッシュとがある。【００１７】
同期キャッシュでは、メタサーバ上の位置情報（原本）への変更が同期的にキャッシュに適用されるため、クライアント端末は最新の正しい情報に従って該当ストレージノードを選ぶことができる。しかし、同期キャッシュによると、原本への更新をすべてのキャッシュに反映する必要があるため、原本の更新に長い時間を要する。また、同期キャッシュによると、各キャッシュは、原本に更新があったかどうかを確認する必要があるため、ストレージシステムの性能が低下するおそれがある。【００１８】
一方、非同期キャッシュでは、メタサーバ上の位置情報（原本）への変更はキャッシュに対して同期的に適用されないため、クライアント端末は、古い位置情報に従って、データオブジェクトを保持していないストレージノードへ誤ってアクセスすることがある。一方、非同期キャッシュによると、原本に対する高頻度の更新が行われた場合にも、キャッシュへの更新を遅延してまとめて適用することができる。【００１９】
データオブジェクトを保持しているストレージノードをクライアント端末が把握するための他の方式として、分散関数（例えば、ハッシュ関数）を用いてデータオブジェクトを格納するストレージノードを求める方式（以下、「分散関数方式」という。）がある。分散関数方式では、すべてのクライアント端末は、システムに参加しているストレージノードのリストおよび分散関数を共有する。また、格納データは固定長または任意長のデータ断片（Value、バリュー）に分割され、各Valueには、これを一意に特定するための識別子（Key、キー）が付与される。【００２０】
クライアント端末は、データにアクセスする場合、分散関数にキーを入力として与え、分散関数の出力値とストレージノードのリストに基づいて、データを格納しているストレージノードを算術的に求める。例えば、非特許文献２に記載された技術によると、クライアント端末は、ハッシュ関数を複数回適用することで、システム中においてデータを格納しているストレージノードを検出する。【００２１】
分散関数方式によると、各クライアント端末は、集中アクセスされるメタサーバを経由することなく、ストレージノードにアクセスすることができる。したがって、メタサーバが性能上のボトルネックになることがない。特許文献１には、乱数関数を用いてデータの配置を決定する技術が記載されている。【００２２】
ところで、分散ストレージシステムにおいて、あるストレージノードに格納されているデータオブジェクトを別のストレージノードに移動（マイグレーション）する技術が知られている。データオブジェクトの移動は、一例として、特定のストレージノードに対するアクセスが集中することを回避するために行われる。データアクセスサービスを提供するコンピュータの資源の使用量を均等に分散させることで、システム全体のスループット、レイテンシ、消費電力などの性能が向上する。【００２３】
また、あるデータオブジェクトと他のデータオブジェクトが同一のストレージノード内に存在するとき、これらのデータオブジェクトが別個のストレージノードに存在するときと比較して、アクセスを高速に処理できる場合がある。例えば、データオブジェクトＡとデータオブジェクトＢとの間で一貫性や整合性を保つ必要がある場合には、データオブジェクトＡとデータオブジェクトＢを格納するストレージノードと、これらのデータオブジェクトの一貫性を管理するソフトウェアプロセスとの間で通信が発生する。このようなアクセスが頻繁に到達する場合には、ストレージノードとソフトウェアプロセスが同一の計算機上で動作していれば計算機間の通信が削減され、より高速にアクセスを処理することができる。したがって、データオブジェクトＡとデータオブジェクトＢとが１つのストレージノード上に格納されるように、データオブジェクトを移動することが好ましい。このような場合にも、複数ストレージノード間でのデータオブジェクトの移動が行われる。【００２４】
さらに、データオブジェクトの移動は、システムの運用中においても動的に行われる。なぜなら、格納されているデータオブジェクトが利用される傾向は、時間の経過とともに変化し得るからである。【００２５】
例えば、データオブジェクトがビジネスの現場におけるドキュメントである場合には、次のようなライフサイクルが考えられる。一例として、データオブジェクトは、作成された直後に頻繁に編集され、一旦完成して利用者に回覧された後には、多くの参照要求が生じ、その後はごく稀にのみアクセスされ、消失することがないように保管され、数年後にストレージ内容を整理する際に削除される。他の例として、我が国のオフィスで使われているデータオブジェクトは、我が国における勤務時間帯（例えば、日中）に頻繁にアクセスされ、それ以外の時間帯（例えば、夜中）には稀にのみアクセスされる。一方、米国のオフィスで使われているデータオブジェクトは、現地における勤務時間帯に頻繁にアクセスされ、それ以外の時間帯には稀にのみアクセスされる。【００２６】
このように、データオブジェクトに対するアクセス頻度は数時間単位または数ヵ月単位で変化し得ることから、分散ストレージシステムの運用中においても、データオブジェクトの配置を動的に変更する必要がある。【００２７】
メタサーバ方式によると、分散関数方式と比較して、データオブジェクトを配置するストレージノードを変更することが容易である。メタサーバ方式では、各データオブジェクトが配置されているストレージノードの識別子またはアドレスがメタサーバに格納されている。【００２８】
例えば、データオブジェクトごとにエントリを作成し、各データオブジェクトのエントリに対して、データオブジェクトが格納されている１つ以上のストレージノードの識別子やアドレスを記載する方法が知られている。この方法によると、第１のストレージノードＮ１上のデータオブジェクト（「データオブジェクトＡ」とする。）を第２のストレージノードＮ２に移動した場合、データオブジェクトＡのエントリに記載された第１のストレージノードＮ１を第２のストレージノードＮ２へと変更すればよい。すると、エントリの変更後におけるクライアント端末からのデータオブジェクトＡへのアクセスは、第２のストレージノードＮ２に到達する。【００２９】
メタサーバ方式によると、一般に、各データオブジェクトは、任意のストレージノードをマイグレーション（移動）先とすることができる。ただし、耐障害性を向上させるために、データオブジェクトの１つ以上の複製データが他のストレージノードにも格納されている場合、データオブジェクトの冗長性を確保するために、マイグレーション先のストレージノードが制限されることもある。【００３０】
一方、分散関数方式によると、各データオブジェクトの配置は分散関数の出力に従って決定される。したがって、分散関数方式では、データオブジェクトごとにマイグレーション先を任意に設定することができない。【００３１】
例えば、データオブジェクトＡが分散関数ｈを用いた場合にｈ（Ａ）＝ｎ１となり、ハッシュ値ｎ１に相当する第１のストレージノードＮ１に格納されているものとする。このとき、データオブジェクトＡをハッシュ値ｎ２に相当する第２のストレージノードＮ２に移動するには、分散関数をｈからｈ’に変更してｈ’（Ａ）＝ｎ２となるようにしなければならない。しかし、分散関数ｈ’（）は、ストレージノードＮ１に格納されたデータオブジェクトＡ以外のデータオブジェクトＸに関してはｈ’（Ｘ）＝ｈ（Ｘ）＝ｎ１を満たす必要がある。しかしながら、このような性質を有する分散関数ｈ’を見つけ出すには膨大な計算が必要とされる。したがって、分散関数方式によると、データオブジェクトを任意のストレージノードにマイグレーションすることは困難となる。【００３２】
非特許文献３に記載されたｐＮＦＳでは、データがマイグレーション済みである場合には、マイグレーション済みを表すエラー応答または新しい移動先をクライアント端末に返す。しかし、ｐＮＦＳは基本的にメタサーバ方式に基づくデータ配置制御であり、特に、データCREATE時において、メタデータサーバ（ＭＤＳ：Metadata Server)が性能上のボトルネックとなるおそれがある。【００３３】
以下では、任意のデータオブジェクトに対して、マイグレーション先として設定できるストレージノードの個数が多いことを、データオブジェクトの配置が柔軟であると表現する。特に、任意のデータオブジェクトを任意のストレージノードにマイグレーションできる場合には、データオブジェクトの配置が最も柔軟であると表現する。【００３４】
上述した関連技術に基づいてデータオブジェクトの配置が柔軟な分散ストレージシステムを実現するには、メタサーバ方式を利用することが考えられる。メタサーバ方式によると、データオブジェクトの複製を考慮しない場合には、データオブジェクトの配置は最も柔軟となる。しかし、メタサーバ方式によると、上述のようにメタサーバがボトルネックとなり、アクセス性能が低下するおそれがある。【００３５】
上述の関連技術を基づいてデータオブジェクトの配置が柔軟な分散ストレージシステムを実現する他の方法として、メタサーバ方式に加えて、クライアント端末に非同期キャッシュを設ける方法が考えられる。この方式によると、ストレージシステム上に既に存在しているデータオブジェクトに対するアクセスであるREAD、WRITE（UPDATE)などのアクセスに関しては、クライアント端末はキャッシュされたメタサーバのエントリの一部を用いてアクセスすべきストレージノードを決定することができる。しかし、メタサーバ上のエントリの増減を伴うCREATEなどのアクセスに関しては、クライアント端末はキャッシュに基づいてストレージノードの位置を決定することができず、メタサーバに対するアクセスが頻発するおそれがある。したがって、この方式は既存のコンテンツを提供・更新する動画サーバなどに適するものの、ログデータ、ＣＧＭ（Consumer Generated Media）などを格納するストレージシステムのように、新しいデータオブジェクトが順次追加されるストレージシステムには適さない。【００３６】
一方、分散関数方式によると、CREATEも含むアクセスに関して、クライアント端末はメタサーバを介することなくストレージノードを決定することができる。しかしながら、分散関数方式は、上述のように、データオブジェクトの配置における柔軟性が乏しいという問題がある。【００３７】
なお、非特許文献４、５に記載された技術は、いずれもデータのマイグレーションを前提としておらず、上述の問題を解決することはできない。【００３８】
そこで、分散ストレージシステムにおいて、データオブジェクトの配置の柔軟性を確保しつつ、高いアクセス性能を実現することが課題となる。本発明の目的は、かかる課題を解決するストレージシステムおよびデータアクセス方法を提供することにある。
【課題を解決するための手段】
【００３９】
本発明の第１の視点に係るストレージシステムは、
クライアント端末と、
複数のストレージノードと、を備え、
前記クライアント端末は、オブジェクトデータの識別子と前記オブジェクトデータに対するアクセス要求を処理すべきストレージノードの識別子との対応関係を保持する非同期キャッシュと、
前記アクセス要求を処理すべきストレージノードを前記非同期キャッシュに格納された前記対応関係に基づいて決定し、決定したストレージノードに対して前記アクセス要求を送出するアクセス部と、を有し、
前記複数のストレージノードは、前記クライアント端末から前記アクセス要求を受けると、前記アクセス要求を自身が処理すべきかどうかを判定し、判定結果を前記クライアント端末に通知する判定部と、
前記アクセス要求を処理すべきストレージノードの更新を行う更新部と、を有し、
前記非同期キャッシュは、前記複数のストレージノードのそれぞれによる前記更新とは非同期に、前記更新に従って前記対応関係を変更する。【００４０】
本発明の第２の視点に係るデータアクセス方法は、
クライアント端末が、オブジェクトデータの識別子と前記オブジェクトデータに対するアクセス要求を処理すべきストレージノードの識別子との対応関係を非同期キャッシュに保持する工程と、
前記アクセス要求を処理すべきストレージノードを前記非同期キャッシュに格納された前記対応関係に基づいて決定し、決定したストレージノードに対して前記アクセス要求を送出する工程と、
複数のストレージノードのうちの、前記クライアント端末から前記アクセス要求を受けたストレージノードが、前記アクセス要求を自身が処理すべきかどうかを判定し、判定結果を前記クライアント端末に通知する工程と、
前記複数のストレージノードが、それぞれ、前記アクセス要求を処理すべきストレージノードの更新を行う工程と、
前記クライアント端末が、前記非同期キャッシュは、前記複数のストレージノードのそれぞれによる前記更新とは非同期に、前記非同期キャッシュに格納された前記対応関係を前記更新に従って変更する工程と、を含む。
【発明の効果】
【００４１】
本発明に係るストレージシステムおよびデータアクセス方法によると、データオブジェクトの配置の柔軟性を確保しつつ、高いアクセス性能を実現することができる。
【図面の簡単な説明】
【００４２】
【図１】第１の実施形態に係るストレージシステムの構成を一例として示すブロック図である。
【図２】第１の実施形態に係るストレージシステムの構成を一例として示すブロック図である。
【図３】第１の実施形態に係るストレージシステムの構成を一例として示すブロック図である。
【図４】第１の実施形態に係るストレージシステムにおけるCREATEシーケンスを説明する図である。
【図５】第１の実施形態の係るストレージシステムにおいて、CREATEシーケンスで誤ったストレージノードにアクセスした場合を説明する図である。
【図６】第１の実施形態に係るストレージシステムにおけるREADまたはUPDATEシーケンスを説明する図である。
【図７】第１の実施形態に係るストレージシステムにおいて、READまたはUPDATEシーケンスで誤ったストレージノードにアクセスした場合を説明する図である。
【図８】第２の実施形態に係るストレージシステムの構成を一例として示すブロック図である。
【図９】第２の実施形態に係るストレージシステムにおけるREADまたはUPDATEシーケンスを説明する図である。
【発明を実施するための形態】
【００４３】
はじめに、一実施形態の概要について説明する。なお、この概要に付記する図面参照符号は、専ら理解を助けるための例示であり、本発明を図示の態様に限定することを意図するものではない。
【００４４】
図３は、一実施形態に係るストレージシステムの構成を一例として示すブロック図である。図３を参照すると、ストレージシステムは、クライアント端末（１０）と、複数のストレージノード（２０）を備えている。なお、図３においては、簡単のため、１つのストレージノードのみを図示した。
【００４５】
クライアント端末は、非同期キャッシュ（１２）およびアクセス部（１１）を備えている。非同期キャッシュ（１２）は、オブジェクトデータの識別子とオブジェクトデータに対するアクセス要求を処理すべきストレージノードの識別子との対応関係を保持する。アクセス部（１１）は、アクセス要求を処理すべきストレージノードを非同期キャッシュ（１２）に格納された対応関係に基づいて決定し、決定したストレージノードに対してアクセス要求を送出する。
【００４６】
ストレージノード（２０）は、判定部（２１）および更新部（２３）を備えている。判定部（２１）は、クライアント端末（１０）からアクセス要求を受けると、アクセス要求を自身が処理すべきかどうかを判定し、判定結果をクライアント端末（１０）に通知する。更新部（２３）は、アクセス要求を処理すべきストレージノードの更新を行う。
【００４７】
非同期キャッシュ（１２）は、複数のストレージノードのそれぞれによる上記更新とは非同期に、上記更新に従って、上記対応関係を変更する。
【００４８】
図３を参照すると、ストレージシステムは、サーバ装置（３０）を備えていてもよい。サーバ装置（３０）は、複数のストレージノードのそれぞれによる上記更新の内容を表す更新情報を蓄積する。このとき、複数のストレージノードのそれぞれの更新部（２３）は、アクセスを処理すべきストレージノードを更新すると、更新の内容を示す更新情報をサーバ装置（３０）に通知する。また、非同期キャッシュ（１２）は、複数のストレージノードのそれぞれによる上記更新とは非同期に、サーバ装置（３０）に蓄積された上記更新情報に従って上記対応関係を変更する。
【００４９】
かかるストレージシステムによると、分散関数方式に基づくストレージシステムと比較して、より多くのストレージノードをオブジェクトデータのマイグレーション先とすることができ、柔軟なデータ配置が可能となる。また、クライアント端末はメタサーバを利用することなく、自身に設けられた非同期キャッシュの情報に基づいてストレージノードにアクセスすることができるため、多くのクライアント端末によるデータアクセスによってメタサーバがボトルネックとなることを防ぐことができ、高いアクセス性能がもたらされる。したがって、上記一実施形態に係るストレージシステムによると、データオブジェクトの配置の柔軟性を確保しつつ、高いアクセス性能を実現することができる。
【００５０】
また、非同期キャッシュ（１２）は、複数のストレージノード間で移動済みのオブジェクトデータの識別子と当該オブジェクトデータに対するアクセス要求を処理すべきストレージノードの識別子との対応関係のみを保持するようにしてもよい。さらに、アクセス部（１１）は、アクセス要求を処理すべきストレージノードを非同期キャッシュ（１２）に格納された対応関係に基づいて決定することができなかった場合、所定の分散関数に基づいてアクセス要求を処理すべきストレージノードを決定し、決定したストレージノードに対してアクセス要求を送出するようにしてもよい。
【００５１】
このとき、データマイグレーションが困難な配置方式（例えば、分散関数方式）と、データ配置が柔軟な配置方式（例えば、メタサーバ方式）を組み合わせたデータ配置方式が実現可能となる。データ配置が柔軟なメタサーバ方式などの配置方式では、CREATEがボトルネックになる。そこで、分散関数方式でCREATE先を決めておき、マイグレート（移動）されたデータオブジェクトのみをメタサーバ方式で管理し、非同期キャッシュをクライアント端末に設ける。こうすることで、多くのCREATEアクセスは、直接ストレージノードへ到達し、一部のマイグレートされたデータオブジェクトに対するアクセスは判定部（２１）により適切なストレージノードに割り当てられる。このとき、データ配置が整合を保ちつつ柔軟なデータ配置を実現し、メタサーバのボトルネックを回避した高速な分散ストレージシステムを提供することが可能となる。
【００５２】
なお、本発明において、下記の形態が可能である。
［形態１］
上記第１の視点に係るストレージシステムのとおりである。
［形態２］
前記ストレージシステムは、前記複数のストレージノードのそれぞれによる前記更新の内容を表す更新情報を蓄積するサーバ装置を備え、
前記複数のストレージノードのそれぞれの前記更新部は、前記アクセスを処理すべきストレージノードを更新すると、前記更新の内容を示す更新情報を前記サーバ装置に通知し、
前記非同期キャッシュは、前記複数のストレージノードのそれぞれによる前記更新とは非同期に、前記サーバ装置に蓄積された前記更新情報に従って前記対応関係を変更してもよい。
［形態３］
前記サーバ装置は、前記更新情報を定期的に前記クライアント端末に通知し、
前記非同期キャッシュは、前記サーバ装置から通知された前記更新情報に従って前記対応関係を変更してもよい。
［形態４］
前記サーバ装置は、前記更新情報のデータ量が所定のサイズ以上となった場合、前記更新情報を前記クライアント端末に通知し、
前記非同期キャッシュは、前記サーバ装置から通知された前記更新情報に従って前記対応関係を変更してもよい。
［形態５］
前記アクセス部は、前記対応関係に基づいて決定したストレージノードが前記アクセス要求を処理すべきストレージノードではないと前記判定部によって判定され場合、前記更新情報を通知するように前記サーバ装置に要求し、
前記非同期キャッシュは、前記要求に応じて前記サーバ装置から通知された前記更新情報に従って前記対応関係を変更してもよい。
［形態６］
前記判定部は、前記アクセス要求を自身が処理すべきではない場合、前記アクセス要求を処理すべきストレージノードに前記アクセス要求を転送してもよい。
［形態７］
前記非同期キャッシュは、前記複数のストレージノード間で移動済みのオブジェクトデータの識別子と前記オブジェクトデータに対するアクセス要求を処理すべきストレージノードの識別子との対応関係のみを保持し、
前記アクセス部は、前記アクセス要求を処理すべきストレージノードを前記非同期キャッシュに格納された前記対応関係に基づいて決定することができなかった場合、所定の分散関数に基づいて前記アクセス要求を処理すべきストレージノードを決定し、決定したストレージノードに対して前記アクセス要求を送出してもよい。
［形態８］
上記第２の視点に係るデータアクセス方法のとおりである。
［形態９］
前記データアクセス方法は、サーバ装置が、前記複数のストレージノードのそれぞれによる前記更新の内容を表す更新情報を蓄積する工程と、
前記複数のストレージノードが、それぞれ、前記アクセスを処理すべきストレージノードを更新すると、前記更新の内容を示す更新情報を前記サーバ装置に通知する工程と、
前記クライアント端末が、前記複数のストレージノードのそれぞれによる前記更新とは非同期に、前記非同期キャッシュに格納された前記対応関係を、前記サーバ装置に蓄積された前記更新情報に従って変更する工程と、を含んでもよい。
［形態１０］
前記データアクセス方法は、前記サーバ装置が、前記更新情報を定期的に前記クライアント端末に通知する工程と、
前記クライアント端末が、前記非同期キャッシュに格納された前記対応関係を前記サーバ装置から通知された前記更新情報に従って変更する工程と、を含んでもよい。
［形態１１］
前記データアクセス方法は、前記サーバ装置が、前記更新情報のデータ量が所定のサイズ以上となった場合、前記更新情報を前記クライアント端末に通知する工程と、
前記クライアント端末が、前記非同期キャッシュに格納された前記対応関係を、前記サーバ装置から通知された前記更新情報に従って変更する工程と、を含んでもよい。
［形態１２］
前記データアクセス方法は、前記クライアント端末が、前記対応関係に基づいて決定したストレージノードが前記アクセス要求を処理すべきストレージノードではないと前記アクセス要求を受けたストレージノードによって判定された場合、前記更新情報を通知するように前記サーバ装置に要求する工程と、
前記非同期キャッシュに格納された前記対応関係を、前記要求に応じて前記サーバ装置から通知された前記更新情報に従って変更する工程と、を含んでもよい。
［形態１３］
前記データアクセス方法は、前記アクセス要求を受けたストレージノードが、前記アクセス要求を自身が処理すべきではない場合、前記アクセス要求を処理すべきストレージノードに前記アクセス要求を転送する工程を含んでもよい。
［形態１４］
前記データアクセス方法において、前記非同期キャッシュは、前記複数のストレージノード間で移動済みのオブジェクトデータの識別子と前記オブジェクトデータに対するアクセス要求を処理すべきストレージノードの識別子との対応関係のみを保持し、
前記クライアント端末が、前記アクセス要求を処理すべきストレージノードを前記非同期キャッシュに格納された前記対応関係に基づいて決定することができなかった場合、所定の分散関数に基づいて前記アクセス要求を処理すべきストレージノードを決定し、決定したストレージノードに対して前記アクセス要求を送出する工程を含んでもよい。
【００５３】
（実施形態１）
第１の実施形態に係る分散ストレージシステムについて、図面を参照して説明する。
【００５４】
図１は、本実施形態の分散ストレージシステムにおけるデータの格納およびアクセスに関する構成を示すブロック図である。図１を参照すると、分散ストレージシステムは、ネットワーク４０に接続されたクライアント端末１０と、ストレージノード２０ａ〜２０ｃと、サーバ装置３０とを備えている。図１においては、一例として、ストレージノードの台数を３台としたが、ストレージノードの台数はこれに限定されない。
【００５５】
ストレージノード２０ａ〜２０ｃは、それぞれ、データ送受信部２５ａ〜２５ｃおよびデータ格納部２４ａ〜２４ｃを備えている。クライアント端末１０は、アクセス部１１および非同期キャッシュ１２を備えている。
【００５６】
図２は、図１のストレージノード２０ａ〜２０ｃのそれぞれの構成を詳細に示すブロック図である。図２を参照すると、クライアント端末１０は、ネットワーク４０を介して、ストレージノード２０ａ〜２０ｃに接続されている。
【００５７】
ストレージノード２０ｘ（ｘ＝ａ〜ｃ）は、それぞれ、ＣＰＵ（Central Processing Unit）２６ｘ、データ格納部２４ｘ、データ送受信部２５ｘ、および、配置方式部分情報２２ｘを備えている。ＣＰＵ２６ｘは、ソフトウェアとともに、本実施形態の分散ストレージシステムにおける各部の機能を実現する。
【００５８】
データ格納部２４ｘ（ｘ＝ａ〜ｃ）は、例えば、ＨＤＤ、フラッシュメモリ、ＤＲＡＭ（Dynamic Random Access Memory）、ＳＴＴ−ＲＡＭ（Spin Torque Transfer RAM）、ＭＲＡＭ（Magnetoresistive Random Access Memory）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）、ＰＲＡＭ（Phase change RAM）、ＲＡＩＤ（Redundant Array of Inexpensive Disks）コントローラやＳＳＤ（Solid State Drive）コントローラなどに結合された記憶装置、磁気テープのようにデータを記録可能な物理媒体、または、ストレージノードの外部に設置された媒体にデータを記録する制御装置である。
【００５９】
ネットワーク４０およびデータ送受信部２５ｘ（ｘ＝ａ〜ｃ）は、例えば、Ethernet（登録商標）、Fibre Channel、ＦＣｏＥ（Fibre Channel over Ethernet（登録商標）、InfiniBand、QsNet、Myrinet、PCIExpress、Thunderbolt、または、これらを利用するＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）、ＲＤＭＡ（Remote Direct Memory Access）などの上位プロトコルにより実現することができる。ただし、ネットワーク４０およびデータ送受信部２５ｘ（ｘ＝ａ〜ｃ）の実現方法は、これらに限られない。
【００６０】
格納データは、固定長または意味的に区切られたデータ断片（データオブジェクト）の集合として、ストレージノード２０ａ〜２０ｃのそれぞれのデータ格納部２４ａ〜２４ｃに格納される。各データオブジェクトには、一意の識別子（キー）が与えられている。クライアント端末は、キーを指定することで所望のデータオブジェクトを取得する。また、各データオブジェクトの複製を、複数のストレージノードに格納するようにしてもよい。また、各データオブジェクトの代わりとして、または、各データオブジェクトとともに、データオブジェクトに基づいて計算された冗長符号情報が他のストレージノードに格納されるようにしてもよい。ここで、冗長符号情報は、ストレージノードの故障によりデータオブジェクトの一部がアクセスできない状態となった場合に、データオブジェクトの消失を防ぐために用いられる。
【００６１】
データオブジェクトの例として、例えば、ブロックストレージのブロックもしくはセクタ、ファイルシステムのファイル、ファイルと関連するメタデータの集合、関係データベースのタプルもしくはテーブル、オブジェクトデータベースのデータ、Key-Valueデータ格納システムのValue、ＸＭＬ（Extensible Markup Language）文書のタグで囲まれた内容、ＲＤＦ（Resource Description Framework）文書のリソース、Google App Engineのデータエンティティ、Microsoft Windows（登録商標） Azureキューのメッセージ、Cassandra等のWide Column StoreのColumn、ＪＳＯＮ（JavaScript（登録商標） Object Notation）、ＢＳＯＮ（Binary JSON）で記載されたドキュメント等が考えられる。
【００６２】
また、データオブジェクトに対応するキーの例として、ブロック番号、論理ボリューム識別子とブロック番号の組、セクタ番号、ファイル名、メタデータプロパティ名、ファイル名とメタデータプロパティ名の組、タプルの主キー値、テーブル名、テーブル名と主キー値の組、オブジェクト名、オブジェクトＩＤ（Identifier）、タグ名、リソース名などが考えられる。ただし、本実施形態におけるデータオブジェクトおよびキーは、これらに限定されない。
【００６３】
クライアント端末１０のアクセス部１１は、ストレージノードを特定する識別子と、データキーから当該データオブジェクトを保持するストレージノードを特定し、データオブジェクトを送信または受信する。具体的には、データオブジェクトを保持するストレージノードの特定は、クライアント端末１０に設けられた非同期キャッシュ１２を介して行われる。非同期キャッシュ１２は、サーバ装置３０を介して、各ストレージノードが持つ配置方式の部分情報（すなわち、アクセス要求を処理すべきストレージノードを表す情報、以下、「配置方式部分情報」という。）の一部または全部の情報を保持する。
【００６４】
ここで、配置方式とは、非同期キャッシュ１２の内容を元に格納先となる１つ以上のストレージノードを決定することができるデータ構造またはアルゴリズムをいう。また、配置方式は、新しく作成するデータオブジェクトに関して、サーバ装置３０または各ストレージノードが持つ配置方式部分情報２２にアクセスすることなく、新しくデータオブジェクトを作成するストレージノードを決定する。
【００６５】
配置方式の例として、範囲付メタサーバ方式が考えられる。サーバ装置３０がメタサーバで、メタサーバの情報の一部を各ストレージノードの配置方式部分情報２２とする。メタサーバの情報は、データオブジェクト毎の識別子と、そのデータオブジェクトが格納されているストレージノードの識別子の組とする。また、範囲付メタサーバ方式では、さらにデータオブジェクトの識別子またはデータオブジェクトの識別子のハッシュ値の範囲ごとに新しくその範囲に該当するデータオブジェクトがCREATEされる際のストレージノードが定められている。この範囲の情報も、非同期にクライアント端末１０上に保持される。
【００６６】
ここで、「非同期」とは、元のデータオブジェクト（ここでは、ストレージノードが持つ配置方式部分情報２２）に対して更新が行われ、更新後のデータオブジェクトを取得できる何らかの動作主体がシステム上に存在する場合においても、クライアント端末１０は自身が保持する非同期キャッシュ１２上の古いデータを参照する可能性があるような更新情報の伝播方法をいう。
【００６７】
非同期の例として、所定の時刻まで更新情報を伝播させることなくサーバ装置３０に保持するか、または、更新量が所定の分量となるまで更新情報を伝播さることなくサーバ装置３０に保持しておいて、所定の時刻となったとき、または、更新量が所定の分量となったときに、更新情報をクライアント端末１０の非同期キャッシュ１２に伝播させる方式が考えられる。
【００６８】
非同期の他の例として、サーバ装置３０は能動的にクライアント端末１０の非同期キャッシュ１２に更新情報を伝播させることなく更新情報を保持しておいて、クライアント端末１０から情報の更新を要求されたときに、要求に応じて更新情報をクライアント端末１０の非同期キャッシュ１２に伝播させる方法が考えられる。ただし、本実施形態における非同期キャッシュ１２の実現方法は、これらに限定されない。
【００６９】
分散ストレージシステムは、データマイグレーションを行う。データマイグレーションとは、あるストレージノードに格納された１つ以上のデータオブジェクトを他のストレージノードに移動する処理をいう。ここで、データマイグレーションは、データオブジェクトのコピーであってもよい。データオブジェクトの移動においては、元のストレージノードにおけるデータオブジェクトが削除される。一方、データオブジェクトのコピーの場合には、元のストレージノードにおけるデータオブジェクトは削除されないため、データオブジェクトの複製の個数が増加する。
【００７０】
例えば、負荷分散、性能向上、システム増強、システム縮退に伴うストレージノード数の増減、障害復旧などの要因により、データオブジェクトの移動が生じる。しかし、本実施形態において、データマイグレーションの発生原因はこれらに限定されない。
【００７１】
データマイグレーションにおいて、ストレージノード２０ａ〜２０ｃ間でデータオブジェクトを転送した場合、クライアント端末１０は該当データオブジェクトを探索することができなくなる。そこで、データマイグレーションに伴って、配置情報を更新する必要がある。
【００７２】
図３は、本実施形態に係るストレージシステムの構成を一例として示すブロック図である。図３を参照すると、ストレージシステムは、クライアント端末１０、ストレージノード２０、および、サーバ装置３０を備えている。また、クライアント端末１０は、アクセス部１１および非同期キャッシュ１２を備えている。さらに、ストレージノード２０は、判定部２１、配置方式部分情報２２、更新部２３、および、データ格納部２４を備えている。
【００７３】
非同期キャッシュ１２は、オブジェクトデータの識別子と当該オブジェクトデータに対するアクセス要求を処理すべきストレージノードの識別子との対応関係を保持する。アクセス部１１は、アクセス要求を処理すべきストレージノードを非同期キャッシュ１２に格納された上記対応関係に基づいて決定し、決定したストレージノードに対してアクセス要求を送出する。
【００７４】
判定部２１は、クライアント端末１０からアクセス要求を受けると、アクセス要求を自身が処理すべきかどうかを判定し、判定結果をクライアント端末１０に通知する。更新部２３は、アクセス要求を処理すべきストレージノードを更新する。サーバ装置３０は、ストレージノード２０による更新の内容を表す更新情報を蓄積する。ストレージノード２０の更新部２３は、アクセスを処理すべきストレージノードを更新すると、更新の内容を示す更新情報をサーバ装置３０に通知する。
【００７５】
非同期キャッシュ１２は、ストレージノード２０による、アクセス要求を処理すべきストレージノードの更新とは非同期に、サーバ装置３０に蓄積された更新情報に従って上記の対応関係を変更する。
【００７６】
次に、本実施形態に係るストレージシステムの動作について、図面を参照して説明する。
【００７７】
本実施形態の分散ストレージシステムにおいて、データオブジェクトのCREATEまたはINSERTは、次のように行われる。ここでは、データオブジェクトＡを新しくシステム内に生成する場合について、図４および図５を参照して説明する。
【００７８】
図４は、アクセス先が非同期キャッシュ１２によって決定されたストレージノードに格納される場合の動作を示すシーケンス図である。
【００７９】
図４を参照すると、クライアント端末１０のアクセス部１１は、非同期キャッシュ１２の情報を用いて、データアクセス先ストレージノードを決定する。ここでは、ストレージノード２０がアクセス先として決定されたとする。
【００８０】
次に、クライアント端末１０は、ストレージノード２０へCREATEを意味するアクセスリクエストを転送する。ここで、アクセスリクエストは、まず、判定部２１が利用する。判定部２１は、配置方式部分情報２２を用いて、このリクエストがストレージノード２０で処理されてもよいかどうかを確認する。確認結果が処理されて、ストレージノード２０でCREATEが処理されることがデータ配置上適切である場合、ストレージノード２０でデータが作成される。さらに、配置方式部分情報２２とサーバ装置３０が更新され、当該データオブジェクトがストレージノード２０に格納されていることが記録される。
【００８１】
その後、ストレージノード２０は、クライアント端末１０にアクセスの成功を示す情報を返す。なお、アクセスの成功を示す情報は、シーケンスの最後ではなく、それ以前の段階で返されるようにしてもよい。
【００８２】
サーバ装置３０は、更新された情報を非同期にクライアント端末１０上の非同期キャッシュ１２に適用する。
【００８３】
図５は、アクセス先が非同期キャッシュ１２によって決定されたストレージノードが配置方式上誤りである場合の動作を示すシーケンス図である。
【００８４】
図５を参照すると、クライアント端末１０のアクセス部１１は、非同期キャッシュ１２の情報を用いて、データアクセス先ストレージノードを決定する。ここでは、ストレージノード２０がアクセス先として決定されたとする。
【００８５】
次に、クライアント端末１０は、ストレージノード２０へCREATEを意味するアクセスリクエストを転送する。アクセスリクエストは、まず、判定部２１が利用する。判定部２１は、配置方式部分情報２２を用いて、このリクエストがストレージノード２０で処理されてもよいかどうかを確認する。確認結果が処理されて、ストレージノード２０でCREATEが処理されることがデータ配置上不適切である場合、判定部２１は、アクセスが誤っていたことを表す情報をクライアント端末２０に返却する。
【００８６】
次に、クライアント端末１０は、自身の非同期キャッシュ１２が持っていた情報をサーバ装置３０の持つ正しい情報に更新する。非同期キャッシュ１２の情報を更新するために、例えば、クライアント端末２０は、図５に示すように、サーバ装置３０から情報を取得するようにしてもよい。また、クライアント端末１０は、サーバ装置３０から新しい更新が伝播されるまで一定時間待機するようにしてもよい。ただし、サーバ装置３０から再度非同期キャッシュ１２へ新しい情報を反映する手順については、これらの方法に限定されない。
【００８７】
クライアント端末１０は、再度、新しい配置方式情報に従ったストレージノードへCREATEアクセスを発行する。以下の動作は、図４のシーケンス図に示した動作と同様である。
【００８８】
一方、本実施形態の分散ストレージシステムにおいて、格納済みデータのREADおよびUPDATEは、次のように行われる。ここでは、既にシステム内に存在するデータオブジェクトＡに対するREADまたはUPDATEを発行する場合について、図６および図７を参照して説明する。
【００８９】
READの場合には、クライアント端末１０は、データオブジェクトの識別子と、必要であればデータオブジェクトのうちの読み出す箇所を表す情報（１つ以上のプロパティ名や、バイト範囲・オフセット情報など）を付随したリクエストを発行し、当該リクエストに合致するデータまたはエラー情報を受信する。一方、UPDATEの場合には、クライアント端末１０は、データオブジェクトの識別子と、必要であればデータオブジェクトのうちの上書き箇所を表す情報（１つ以上のプロパティ名や、バイト範囲・オフセット情報など）と、当該上書きに該当するデータ自体を同時または順次またはインタラクティブに送信し、アクセスの許否を表す情報を受信する。
【００９０】
図６は、アクセス先データオブジェクトＡが非同期キャッシュ１２によって決定されたストレージノードに格納されている場合の動作を示すシーケンス図である。
【００９１】
図６を参照すると、クライアント端末１０のアクセス部１１は、非同期キャッシュ１２の情報を用いて、データアクセス先ストレージノードを決定する。ここでは、ストレージノード２０がアクセス先として決定されたとする。
【００９２】
次に、クライアント端末１０は、ストレージノード２０へ前述のREADまたはWRITEを表すアクセスリクエストを転送する。ここで、アクセスリクエストは、まず、判定部２１が利用する。判定部２１は、配置方式部分情報２２を用いて、このリクエストがストレージノード２０で処理されてもよいかどうかを確認する。確認結果が処理されて、ストレージノード２０でCREATEが処理されることがデータ配置上適切である場合、ストレージノード２０でデータオブジェクトがアクセスされる。
【００９３】
その後、ストレージノード２０は、クライアント端末１０に返答を示す情報を送信する。なお、アクセスの成功を示す情報は、シーケンスの最後ではなく、それ以前の段階で返されるようにしてもよい。
【００９４】
図７は、アクセス先が非同期キャッシュ１２によって決定されたストレージノードが配置方式上誤りである場合の動作を示すシーケンス図である。すなわち、ストレージノード２０にはデータオブジェクトが格納されていないか、または、データオブジェクトが格納されているものの、ストレージノード２０はアクセスを処理できない状態にある。
【００９５】
データオブジェクトが格納されているもののストレージノード２０がアクセスを処理できない状態として、例えば、データオブジェクトに対してマイグレーションの予約が行われている場合が考えられる。他の例として、複数のデータオブジェクトの複製ごとにREAD可能、UPDATE可能などのアクセス権限が設定されており、当該複製に対するアクセスが当該アクセス権限に適合しない場合が考えられる。さらに、他の例として、当該データオブジェクトに対するアクセスが集中しており、負荷分散の観点から、ストレージノード２０では当該アクセスを処理できない場合が考えられる。なお、本実施形態において、判定部がアクセスを拒否する場合は、これらに限定されない。
【００９６】
図７の上段（破線の上部）は、再確認後クライアント端末１０に拒否返答を返す例である。
【００９７】
図７の上段を参照すると、クライアント端末１０のアクセス部１１は、非同期キャッシュ１２の情報を用いて、データアクセス先ストレージノードを決定する。ここでは、ストレージノード２０がアクセス先として決定されたとする。
【００９８】
次に、クライアント端末１０は、ストレージノード２０へREADまたはUPDATEを表すアクセスリクエストを転送する。ここで、アクセスリクエストは、まず、判定部２１が利用する。判定部２１は、配置方式部分情報２２を用いて、このリクエストがストレージノード２０で処理されてもよいかどうかを確認する。確認結果が処理されて、ストレージノード２０で当該が処理されることがデータ配置上不適切である場合、アクセスが誤っていたことを表す情報がクライアント端末１０に返却される。
【００９９】
その後、クライアント端末１０は、自身の非同期キャッシュ１２が持っていた情報をサーバ装置３０の持つ正しい情報に更新する。非同期キャッシュ１２の情報を更新するために、例えば、クライアント端末１０は、図７に示すように、サーバ装置３０から情報を取得するようにしてもよい。また、クライアント端末１０は、サーバ装置３０から新しい更新が伝播されるまで一定時間待機するようにしてもよい。ただし、本実施形態において、サーバ装置３０から再度非同期キャッシュ１２へと新しい情報を反映させる手順は、これらに限定されない。
【０１００】
クライアント端末１０は、再度、新しい配置方式情報に従ったストレージノードへCREATEアクセスを発行する。以下の動作は、図６のシーケンス図に示した動作と同様である。
【０１０１】
図７の下段（破線の下部）は、再確認後、アクセスを処理できる他のストレージノード２０ｂにアクセスを転送する例である。
【０１０２】
図７の下段を参照すると、クライアント端末１０のアクセス部１１は、非同期キャッシュ１２の情報を用いて、データアクセス先ストレージノードを決定する。ここでは、ストレージノード２０がアクセス先として決定されたとする。
【０１０３】
次に、クライアント端末１０は、ストレージノード２０へREADまたはUPDATEを表すアクセスリクエストを転送する。ここで、アクセスリクエストは、まず、判定部２１が利用する。判定部２１は、配置方式部分情報２２を用いて、このリクエストがストレージノード２０で処理されてもよいかどうかを確認する。確認結果が処理されて、ストレージノード２０で当該が処理されることがデータ配置上不適切である場合、ストレージノード２０は当該アクセスを別のストレージノード２０ｂに転送し処理を依頼する。
【０１０４】
ストレージノード２０ｂを選択する方法として、データオブジェクトＡの過去のマイグレーション情報をストレージノード２０上に一定期間記録しておき、当該過去のマイグレーション情報に従ってマイグレーション先のストレージノード２０ｂを選択する方法が考えられる。また、他の方法として、自ストレージノード以外の任意のストレージノードを選択してアクセスを転送し、アクセスを処理できるかどうかの判断を転送先のストレージノードに依頼する方法が考えられる。さらに、他の方法として、任意の個数のストレージノードを選択し、当該データオブジェクトＡを保持しているかどうかを確認する問い合わせをストレージノード２０から選択されたストレージノードに送出し、その応答結果に従って、データオブジェクトＡを保持しているストレージノードを抽出する方法が考えられる。ただし、第２のストレージノード２０ｂを選択する方法は、これらに限定されない。
【０１０５】
アクセスが転送されたストレージノード２０ｂは、アクセスを処理して、クライアント端末１０に返答を送出する。ストレージノード２０ｂは、返答を直接クライアント端末１０に送出してもよい。また、他の方法として、ストレージノード２０ｂは、クライアント端末１０から最初にアクセスを受けたストレージノード２０を経由してクラインと端末１０に返答を送信するようにしてもよい。
【０１０６】
図４ないし図７に示したシーケンス図においては、クライアント端末１０およびストレージノード２０の各手段が動作主体となっているが、クライアント端末１０およびストレージノード２０のそれぞれに対して集中的な制御を行うコントローラを設けることで、コントローラが各手段に対してインタラクティブに命令を出すようにしてもよい。
【０１０７】
本実施形態の分散ストレージシステムによると、柔軟なデータ配置方法と高いアクセス性能をもつ分散ストレージシステムを提供することができる。サーバ装置３０を設けたことにより、配置方式を上述のメタサーバ方式に類する方式とすることができる。したがって、本実施形態によると、分散関数方式のみを採用した場合と比較して、より多くのストレージノードをオブジェクトデータのマイグレーション先とすることができ、柔軟なデータ配置が可能となる。
【０１０８】
また、本実施形態によると、クライアント端末１０がもつ非同期キャッシュ１２と、ストレージノード２０が持つ判定部２１および判定部２１が利用する更新部２３により、高いアクセス性能が実現される。
【０１０９】
クライアント端末１０は、READおよびUPDATEのいずれのアクセスについても、システム全体を制御するような集権的なコンポーネントを経由することなく、ストレージノードにアクセスすることができる。したがって、アクセス負荷が多くの計算機リソースに分散することで、特定のコンポーネントがボトルネックとなることを防ぐことができ、高いアクセス性能がもたらされる。
【０１１０】
また、CREATEについても、配置情報の更新は各ストレージのもつ配置方式部分情報２２に保存される。したがって、従来のメタサーバ方式のようにシステム全体を制御するような集権的なコンポーネントを介することなくストレージノードにアクセスすることができる。
【０１１１】
さらに、非同期キャッシュ１２の非同期性に起因するアクセス先の誤りは、判定部２１によって是正される。したがって、データオブジェクトの不整合が生じたり、クライアント端末からアクセス不可能なオブジェクトが生成されるおそれもない。
【０１１２】
以上のとおり、本実施形態によると、データ配置の整合を保ちつつ柔軟なデータ配置を実現し、メタサーバのボトルネックを回避した高速な分散ストレージシステムを提供することができる。
【０１１３】
（実施形態２）
第２の実施形態に係るストレージシステムについて、図面を参照して説明する。
【０１１４】
図８は、本実施形態に係るストレージシステムの構成を一例として示すブロック図である。図８を参照すると、ストレージシステムは、クライアント端末５０、ストレージノード６０、および、サーバ装置３０を備えている。また、クライアント端末６０は、アクセス部５１、非同期キャッシュ５２、および、分散関数配置部５３を備えている。さらに、ストレージノード６０は、判定部６１、配置方式部分情報６２、更新部６３、および、データ格納部６４を備えている。図８においては、簡単のため、１つのストレージノード６０のみを図示したが、ストレージシステムは、複数のストレージノードを備えているものとする。
【０１１５】
非同期キャッシュ５２は、オブジェクトデータの識別子と当該オブジェクトデータに対するアクセス要求を処理すべきストレージノードの識別子との対応関係を保持する。本実施形態では、非同期キャッシュ５２は、オブジェクトデータのうちの、ストレージノード間で移動（マイグレーション）済みのオブジェクトデータに対してのみ、上記対応関係を保持する。
【０１１６】
分散関数配置部５３は、所定の分散関数（例えばハッシュ関数）に基づいて、オブジェクトに対するアクセス要求を処理すべきストレージノードを決定する。
【０１１７】
アクセス部５１は、アクセス要求を処理すべきストレージノードを非同期キャッシュ５２に格納された上記対応関係に基づいて決定し、決定したストレージノードに対してアクセス要求を送出する。一方、アクセス部５１は、アクセス要求を処理すべきストレージノードを非同期キャッシュ５２に格納された上記対応関係に基づいて決定することができなかった場合、分散関数配置部５３を用いて、所定の分散関数に基づいてアクセス要求を処理すべきストレージノードを決定し、決定したストレージノードに対してアクセス要求を送出する。
【０１１８】
配置方式部分情報６２は、オブジェクトデータのうちのストレージノード間で移動済みのオブジェクトデータを処理すべきストレージノードを表す情報（以下、「移動済みデータ格納情報」という。）を保持する。判定部６１は、クライアント端末５０からアクセス要求を受けると、配置方式部分情報６２を参照して、アクセス要求を自身が処理すべきかどうかを判定し、判定結果をクライアント端末５０に通知する。更新部６３は、アクセス要求を処理すべきストレージノードを更新する。サーバ装置３０は、ストレージノード６０による更新の内容を表す更新情報を蓄積する。ストレージノード６０の更新部６３は、アクセスを処理すべきストレージノードを更新すると、更新の内容を示す更新情報をサーバ装置３０に通知する。
【０１１９】
非同期キャッシュ５２は、ストレージノード６０による、アクセス要求を処理すべきストレージノードの更新とは非同期に、サーバ装置３０に蓄積された更新情報に従って上記の対応関係を変更する。
【０１２０】
本実施形態のストレージシステムと第１の実施形態のストレージシステムとは、配置方式の実現方法が異なる。本実施形態では、図８に示すように、配置方式は分散関数配置部５３と非同期キャッシュ５２により実現される。
【０１２１】
この方式では、クライアント端末５０からのCREATEおよびINSERTに関するアクセスは、分散関数方式に基づいて分散関数配置部５３によって実現される。データマイグレーションされたデータオブジェクトのみについて、データオブジェクト識別子と格納ストレージノードの組で指定されるエントリがメタサーバ方式で保持される。ただし、各エントリは、当該データオブジェクトを格納するストレージノードにおいても参照できるようになっている。
【０１２２】
移動済みデータオブジェクトのうち一部または全部が非同期にクライアント端末５０上にキャッシュされる。ここで、非同期の定義は、第１の実施形態における定義と同様である。
【０１２３】
クライアント端末５０からのREADおよびUPDATEは、次の手順で行われる。図９は、本実施形態のストレージシステムにおけるREADおよびUPDATEの動作を一例として示すシーケンス図である。クライアント端末５０は、まず、非同期キャッシュ５２をもとに、ストレージノードを探す。該当するデータオブジェクトに関する情報が見つからない場合、クライアント端末５０は、分散関数方式でストレージノードを探す。
【０１２４】
次に、クライアント端末５０は、決定したストレージノード（ストレージノード６０とする。）へアクセスする。
【０１２５】
ストレージノード６０の判定部６１は、少なくとも移動済みデータ格納情報を含む情報に基づいて、当該アクセスを処理することがストレージノード６０に適しているかどうかを確認する。
【０１２６】
アクセスを処理できる場合、ストレージノード６０はアクセスを処理する。一方、アクセスを処理できない場合、ストレージノードは６０、クライアント端末５０にその旨を返答するか、または、別のストレージノードに対してアクセスの処理を依頼する。なお、アクセスを処理できない場合の動作は、第１の実施形態における動作と同様の動作としてもよい。
【０１２７】
本実施形態の分散ストレージシステムによると、柔軟なデータ配置方法と高いアクセス性能を有する分散ストレージシステムを提供できる。
【０１２８】
マイグレーション済みのデータオブジェクトに対しては、配置方式をメタサーバ方式に類する方式とすることができる。したがって、本実施形態によると、分散関数方式のみを採用した場合と比較して、より多くのストレージノードをオブジェクトデータのマイグレーション先とすることができ、柔軟なデータ配置が可能となる。
【０１２９】
また、本実施形態によると、クライアント端末５０がもつ非同期キャッシュ５２と、ストレージノード６０が持つ判定部６１および判定部６１が利用する更新部６３により、高いアクセス性能が実現される。
【０１３０】
CREATEやデータマイグレーション候補でなかった多くのデータオブジェクトに対するREAD、UPDATEは、分散関数方式の配置方式により、途中にシステム全体を制御するような集権的なコンポーネントを経由することなく、ストレージノードにアクセスすることができる。したがって、アクセス負荷が多くの計算機リソースに分散することで、高いアクセス性能がもたらされる。
【０１３１】
また、データマイグレーション候補となったデータオブジェクトについても、配置情報の更新は各ストレージのもつ配置方式部分情報２２に保存されるため、従来のメタサーバ方式のようにシステム全体を制御する集権的なコンポーネントを経由することなく、ストレージノードにアクセスすることができる。
【０１３２】
さらに、非同期キャッシュの非同期性に起因するアクセス先の誤りは、判定部によって是正される。したがって、データオブジェクトの不整合性が生じたり、クライアント端末からアクセス不可能なデータオブジェクトが生成されるおそれもない。
【０１３３】
以上のとおり、本実施形態によると、データ配置の整合を保ちつつ柔軟なデータ配置を実現し、メタサーバのボトルネックを回避した高速な分散ストレージシステムを提供することができる。
【０１３４】
本発明に係るデータ記憶システムは、例えば、並列データベースや並列データ処理システム、分散ストレージ、並列ファイルシステム、分散データベース、クラスタコンピュータ、分散キーバリューストアなどに適用することができる。
【０１３５】
なお、上記の特許文献等の先行技術文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各請求項の各要素、各実施形態の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【０１３６】
１０、５０    クライアント端末
１１、５１    アクセス部
１２、５２    非同期キャッシュ
２０、２０ａ〜２０ｃ、６０    ストレージノード
２１、６１    判定部
２２、２２ａ〜２２ｃ、６２    配置方式部分情報
２３、６３    更新部
２４、２４ａ〜２４ｃ、６４    データ格納部
２５ａ〜２５ｃ    データ送受信部
２６ａ〜２６ｃ    ＣＰＵ
３０    サーバ装置
５３    分散関数配置部
４０    ネットワーク
【図１】
2013172405.tif 000003
【図２】
2013172405.tif 000004
【図３】
2013172405.tif 000005
【図４】
2013172405.tif 000006
【図５】
2013172405.tif 000007
【図６】
2013172405.tif 000008
【図７】
2013172405.tif 000009
【図８】
2013172405.tif 000010
【図９】
2013172405.tif 000011
【国際調査報告】
2013172405.tif 000012
2013172405.tif 000013
2013172405.tif 000014