(57)【要約】      （修正有）【課題】分散ストレージシステムにおいてフレキシビリティ、スケーラビリティを提供するとともに、サーバ間の効率的なデータ共有を実現する。【解決手段】データストレージシステムは、複数のホストサーバ１００を備え、各ホストサーバはデータをキャッシュするキャッシュ１１３を有し、ネットワーク２００を介して複数のストレージノード３００と通信し、各ストレージノードは永続性ストレージ装置３４０−１、３４０−Ｎ、ストレージコントローラ３２０−１、３２０−２、３２０−Ｎ及び不揮発性メモリ装置３３０を有する。ホストサーバ内のプロセスはデータストレージへの書込み／読出し要求を発行し、書込み要求に対応するデータは最初に不揮発性メモリ装置に書き込んで圧縮、重複排除等の処理機能を実行する。ストレージノードに書き込まれたデータは、異なるホストサーバによるその後の読出しに利用できる。【選択図】図１
2016212819.tif 000002
【特許請求の範囲】
【請求項１】
複数のホストサーバ（１００）を備え、各ホストサーバは少なくとも１つのプロセッサ（１１１）を含み、少なくとも１つのネットワーク（２００）を介して複数のストレージノード（３００）と通信し、少なくとも１つのストレージノードは少なくとも１つの永続性ストレージ装置（３４０−１，３４０−Ｎ）及び少なくとも１つのストレージコントローラ（３２０−１，３２０−２，．．，３２０−Ｎ）を含む、データストレージシステムであって、
前記ホストサーバの少なくとも１つは、
データストレージ読出し／書込み要求を発行する少なくとも１つのプロセスと、
前記ストレージノードの少なくとも１つに格納されたデータをキャッシュするように構成されたキャッシュ（１１３）を構成するメモリ装置と、
書込み要求に対応するデータを少なくとも１つのリモート不揮発性メモリ装置（３３０）に書き込むように構成されたシステムソフトウェア（１１５）コンポーネントと、
前記少なくとも１つのプロセッサで実行されたとき、前記プロセッサに少なくとも１つのストレージ処理機能を実行させるコンピュータ実行可能なコードを備える分散仮想アレイ（ＤＶＡ）サブシステム（４０５）と、
を含む、ことを特徴とするシステム。
【請求項２】
前記ホストサーバは前記ストレージノードの選択された一つにデータを書き込み、前記ノードは前記ホストサーバの異なる一つからのその後の読出しに使用可能である、ことを特徴とする請求項１記載のシステム。
【請求項３】
前記少なくとも１つのストレージ処理機能は、
書き込まれるデータのフィンガープリントを計算し、前記フィンガープリントを前記ストレージノード（３００）の選択された一つに格納する処理、
書き込まれるデータを圧縮し、そのデータを圧縮した形で前記ストレージノード（３００）の少なくとも１つに格納のために送信する処理、
書き込まれるデータにわたって誤り訂正データを計算し、書き込まれるデータと計算した誤り訂正の両方を前記ストレージノード（３００）の少なくとも１つに格納する処理、
前記複数のストレージノード（３００）に既に格納されているデータを重複排除する処理、
データがログ構造ファイルシステムに従って前記ストレージノードに格納される場合には、
格納されたデータに関してガーベイジコレクションを実行する処理、
データの書込みをログし、対応するログ情報を少なくとも１つのノードのストレージコントローラ（３２０−１，３２０−２，．．，３２０−Ｎ）内のログに送信する処理、
データ再構成処理、
データリバランス処理、及び
データスクラブ処理、
のうちの少なくとも１つを含む、
ことを特徴とする請求項１又は２記載のシステム。
【請求項４】
前記キャッシュ（１１３）を構成する前記メモリ装置は、フラッシュＳＳＤ又はフラッシュＰＣＩｅ接続フラッシュ装置である、ことを特徴とする請求項１−３の何れかに記載のシステム。
【請求項５】
前記ホストは、前記ストレージ処理機能により生成されたデータをあるストレージノード（３１０）内のある永続性ストレージ装置（３４０−１，３４０−２，．．，３４０−Ｎ）に書き込み、それによって前記リモート不揮発性メモリ装置（３３０）が一時的なバックアップデータストレージシステムを構成する、ことを特徴とする請求項１−４の何れかに記載のシステム。
【請求項６】
前記ホスト（１００）は、前記ストレージ処理機能により生成されたデータを書き込んだ後に、前記書込み要求に対応するデータを前記リモート不揮発性メモリ装置から除去する、ことを特徴とする請求項１−５の何れかに記載のシステム。
【請求項７】
前記ホストシステムソフトウェアコンポーネント（４０５）は、前記ストレージ処理機能により生成されたデータが前記永続性ストレージ装置に書き込まれる前に、新たな書込みを承認する、ことを特徴とする請求項１−６のいずれかに記載のシステム。
【請求項８】
前記ホストは、前記ホストから離れた複数のリモート不揮発性メモリ装置にデータを書き込み、その後前記不揮発性メモリ装置に格納された前記データに対してＥＣＣコードを計算し、前記ＥＣＣデータを異なる永続性ストレージ装置に書き込む、ことを特徴とする請求項１−７の何れかに記載のシステム。
【請求項９】
前記ホストシステム（１００）は、新たな書込みを承認し、その後前記少なくとも１つのストレージ処理機能を実行する、ことを特徴とする請求項１−８の何れかに記載のシステム。
【請求項１０】
複数のホストサーバ（１００）を備え、各ホストサーバは少なくとも１つのプロセッサ（１１１）を含み、少なくとも１つのネットワーク（２００）を介して複数のストレージノード（３００）と通信し、少なくとも１つのストレージノードは少なくとも１つの永続性ストレージ装置（３４０−１，３４０−Ｎ）及び少なくとも１つのストレージコントローラ（３２０−１，３２０−２，．．，３２０−Ｎ）を含む、データストレージシステムにおいて、
少なくとも１つのプロセスからデータストレージ読出し／書込み要求を受信するステップ、
キャッシュ（１１３）を構成するメモリ装置において、前記ストレージノードの少なくとも１つに格納されたデータをキャッシュするステップ、
プロセス書込み要求に対応するデータを少なくとも１つのリモート不揮発性メモリ（３３０）に書き込むステップ、及び
少なくとも１つのストレージ処理機能を実行するステップ、
を備えることを特徴とするデータストレージ方法。
【請求項１１】
前記ホストサーバにより前記ストレージノード（３００）の選択された一つにデータを書き込むステップを更に備え、前記ノードは前記ホストサーバの異なる一つからのその後の読出しに使用可能である、ことを特徴とする請求項１０記載の方法。
【請求項１２】
前記少なくとも１つのストレージ処理機能は、
書き込まれたデータのフィンガープリントを計算し、前記フィンガープリントを前記ストレージノード（３００）の選択された一つに格納する処理、
書き込むべきデータを圧縮し、そのデータを圧縮した形で前記ストレージノード（３００）の少なくとも１つに格納のために送信する処理、
書き込むべきデータにわたって誤り訂正データを計算し、書き込むべきデータと計算した誤り訂正の両方を前記ストレージノード（３００）の少なくとも１つに格納する処理、
前記複数のストレージノード（３００）に既に格納されているデータを重複排除する処理、
データがログ構造ファイルシステムに従って前記ストレージノードに格納される場合には、
格納されたデータに関してガーベイジコレクションを実行する処理、
データの書込みをログし、対応するログ情報を少なくとも１つのノードのストレージコントローラ内のログに送信する処理、
データ再構成処理、
データリバランス処理、及び
データスクラブ処理、
のうちの少なくとも１つを含む、
ことを特徴とする請求項１０又は１１記載の方法。
【請求項１３】
前記ストレージ処理機能により発生されたデータをあるストレージノード（３１０）内のある永続性ストレージ装置（３４０−１，３４０−２，．．，３４０−Ｎ）に書き込むステップを更に備え、それによって前記リモート不揮発性メモリ装置（３３０）が一時的なバックアップデータストレージシステムを構成する、ことを特徴とする請求項１０−１２の何れかに記載の方法。
【請求項１４】
前記ホストが前記ストレージ処理機能により発生されたデータを書き込んだ後に、前記書込み要求に対応するデータを前記リモート不揮発性メモリ装置から除去するステップを更に備える、ことを特徴とする請求項１０−１３の何れかに記載の方法。
【請求項１５】
前記ストレージ処理機能により発生されたデータを前記永続性ストレージ装置に書き込む前に、新たな書込みを承認するステップを更に備える、ことを特徴とする請求項１０−１４のいずれかに記載の方法。
【請求項１６】
前記ホストから離れた複数のリモート不揮発性メモリ装置にデータを書き込み、その後前記不揮発性メモリ装置に格納された前記データに対してＥＣＣコードを計算し、前記ＥＣＣデータを異なる永続性ストレージ装置に書き込むステップを更に備える、ことを特徴とする請求項１０−１５の何れかに記載の方法。
【請求項１７】
前記少なくとも１つのストレージ処理機能を実行する前に、新たな書込みを承認するステップを更に備える、ことを特徴とする請求項１０−１６の何れかに記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は分散データストレージシステムに関する。
【背景技術】
【０００２】
大量のデータのための効率的なストレージシステム及び方法の必要性が増大し続けている。現在、大型データセンタは、メモリデバイス（ディスク及び／又はフラッシュ）の物理的シェルフとストレージコントローラのスケーラブル配列を含む従来のストレージシステムにアクセスするブレードサーバを一般に採用している。典型的には、ブレードサーバはネットワーク（インターネット、ロールーカルエリアネットワーク（ＬＡＮ）、ストレージエリアネットワーク（ＳＡＮ）等）を介してストレージコントローラにアクセスするが、ストレージコントローラは専用のバックプレーンを介してそれらの間で通信するとともに、ファイバチャネル又は直列結合ＳＣＳＩを介してシェルフと通信する。これらのサーバは一般にホストアプリケーション又はバーチャルマシン（ＶＭ）をホストし、ハードウェアリソースの動的配分を可能にし、現代のデータセンタの特徴になっている。
【０００３】
これらの従来のストレージシステムは、最近では、多様な計算集約的ストレージ処理機能、例えば重複排除をサポートするためのＳＨＡ−１フィンガープリント、蓄積容量を節約するためのデータ圧縮、セキュリティーのためのデータの暗号化、障害回復のためのデータの複製、ＲＡＩＤのための消去コードの計算、データ保全性を確保するためのチェックサムの計算、ログ構造ファイルシステムにおけるガベッジ収集、複数段のメモリデバイス（例えば、ＲＡＭ、フラッシュ及びディスク）の間で性能が最大になるようにデータを移転させる等の複数段のメモリデバイスの管理、及びスナップショット、高速クローン作成及びシン・プロビジョンニング（thin-provisioning）をサポートするための複数のデータ構造の維持を採用するようになってきている。これらの増加する負荷をサポートするために、ストレージコントローラはもっと多数の高性能のＣＰＵ及び多量のＲＡＭを用いてもっと高性能になってきており、時にはストレージコントローラがコンピュータサーバ自体より高性能で高価なものになることさえある。
【０００４】
従来のストレージシステムの共通の特徴は、それらはディスクドライブ等の多くの永続性記憶装置の高い書き込みレイテンシの問題に対処するために何らかの形の不揮発性メモリを含むことにある。上述した計算集約的ストレージ処理は、書き込みデータが処理された形で永続性記憶装置に書き込まれる前に実行されなければならない場合には、書き込みレイテンシを更に増大することになる。この不揮発性メモリは、すべての処理が生起し終る前でも又はデータ又は処理されたデータが永続性記憶装置に書き込まれ終わる前でも、ストレージシステムが新しい書き込みを「安全」と認識することを可能にする。従来のストレージシステムでは、不揮発性メモリはデータを書き込むサーバに透明である。コンピュータサーバはデータをストレージシステムに書き込み、ストレージシステムはデータを不揮発性メモリにバッファし、その書き込みをサーバに承認する。バックグラウンドでは、ストレージシステムはデータのストレージ処理を実行し、そのデータを永続性記憶装置に書き込むことができ、コンピュータサーバは如何なる追加の処理もデータに実行する必要はない。典型的には、コンピュータサーバはこのような不揮発性メモリを含まない。
【０００５】
コンピュータサーバは、これらの従来のストレージシステムのリソース、例えばメモリ装置の容量及び性能並びにストレージコントローラのストレージ処理能力を共有する。この構成の一つの欠点は共有リソースの競合に起因する減速である。例えば、格納すべきデータは圧縮され、関連する計算されたフィンガープリントで重複排除され、暗号化されるものと仮定する。所要の計算をストレージコントローラ内で実行する必要がある場合、１つのサーバに対する所要の計算の実行は他のサーバからの要求に対するサービスの実行に許容し得ない又は少なくとも望ましくない遅延を生じ得る。このような競合を検出もしくは管理することは容易でなく、性能及び任意の特定の作業負荷を保証することは不可能ではないが難しい。ノードにおけるこの計算リソースの過負荷の危険性を低減する一つの自明の方法は、それらの計算能力を高めることである。特に多数のストレージコントローラを使用するものとすると、このアプローチは費用がかかるのみならず、概してほとんどの通常の記憶操作に対して無駄な過剰供給をもたらす。更に、ストレージコントローラが性能不足であることが判明した場合に、それらをより高性能のモデルと交換することは、費用がかかり、交換中に停止時間を必要とし、また新しいストレージシステムにすべてのデータを移行させる必要もあり、それは長い中断を生じ、一般的に完了まで数週間から数ヶ月を要する。
【０００６】
現代のデータセンタの別の特徴は、１秒当たりのＩ／Ｏ処理回数（ＩＯＰＳ）を高めるためにストレージアーキテクチャ内の様々な点でデータをキャッシュするソリッドステートドライブ（ＳＳＤ）装置（例えばフラッシュメモリ）の使用を増やしている。ＶＭ用の現在の従来型のストレージアーキテクチャは旧設計を改良しているが、それらはいくつかのレガシー特性を保持し、これらのレガシー特性はこれらのアーキテクチャがコストと使いよさの２つの点で最適に有効になるのを妨げている。例えば、現在のストレージシステムは複雑なデータ記憶構造（ＬＵＮ、ボリューム等）を定義しなければならない。いくつかの現在のシステムはまた、複数の転送プロトコルを１つのプロプリエタリプロトコル（例えば、SpinNP及びNetApp）に変換するソフトウェアの層も必要とする。
【０００７】
仮想化されたストレージを含む環境では、今日見られる一つのトレンドは従来のストレージアーキテクチャ及び構造から離れ、物理的メモリ装置及びサーバ計算リソースを単一の物理的ユニットに含めた「ハイパーコンバージド」アーキテクチャとして知られるものを目指している。このアーキテクチャの宣伝利点は、専用のストレージコントローラの費用を回避できること、及びより多くのこのような複合ユニットがシステムに追加されるにつれてストレージ処理に利用可能な処理能力が増大することにある。別の宣伝利点は、仮想サーバを備えた環境におけるプロビショニングのより大きな制御にあり、多数のコンポーネントからの情報を統合ディスプレイ（「シングルペインオブグラス」とも呼ばれる）に統合するマネジメントコンソールを可能にする。ハイパーコンバージドストレージプロダクトの例には、ＶＭｗａｒｅ社による「Ｖｉｒｔｕａｌ  ＳＡＮ」、ＳｉｍｐｌｉＶｉｔｙ社による「ＯｍｎｉＣｕｂｅ」、ＮｉｍＢｏｘｘ社による「Ａｔｏｍｉｃ  Ｕｎｉｔ」、及びＮｕｔａｎｉｘ社による「Ｖｉｒｔｕａｌ  Ｃｏｍｐｕｔｅ  Ｐｌａｔｆｏｒｍがある。
【０００８】
しかしながら、ハイパーコンバージェンスにも欠点がある。第１に、異なるホストプラットフォームが共通ストレージリソースにアクセスすることが予想されるとき、一つのホストがそのデータにアクセスできるかどうかは他のホスト次第である場合、性能は他のホスト上のＶＭ（バーチャルマシン）がどのくらいビジーであるかにより決まる。この「ノイジーネイバー問題」のために、１つの特にビジーなＶＭは同じホスト上の他のＶＭの性能を低下し得るとともに、それがプールされる場合、そのノイジネスはそのホストの境界を越えてプール全体に広がる。所定のＶＭに必要なデータが別のホスト上にある場合、そのＶＭは必要とされる記憶装置を含むハイパーコンバージドホスト上の異なるＶＭにより減速されるために待たなければならなくなる。要するに、所定のＶＭの性能は他のホスト上の他のＶＭにより抑制され得る。
【０００９】
ハイパーコンバージドシステムの別の欠点は、ストレージとコンピュータリソースを独立にスケーリングするのが難しいことにある。環境がより大きな記憶容量を必要とする場合、たとえホストの計算リソースが必要とされなくても、ホスト全体をその内蔵メモリ装置と一緒にシステムに追加する必要があり得る。逆に、より多くの計算リソースが必要とされる場合には、それらは必要であろうとなかろうと追加の記憶容量を備えることになる。
【００１０】
従って、分散ストレージシステムは、フレキシビリティのみならずスケーラビリティも提供すること、ストレージ処理のための各サーバの計算能力及びローカルフラッシュメモリ装置の高性能を活用すること、及び独立にスケーラブルなストレージプールからのグループ内のすべてのサーバ間のデータ共有を提供するが、ノイジーネイバー問題を最小化するためにサーバ間協調及び通信を最小化することが必要である。
【図面の簡単な説明】
【００１１】
【図１】分散仮想アレイ（ＤＶＡ）システムの主なコンポーネントを示す。
【図２】ＤＶＡシステムのいくつかのコンポーネントを詳細に示す。
【図３】書込み要求の受信時におけるワークフローの一例のフローチャートである。
【図４】読出し要求の受信時におけるワークフローの一例のフローチャートである。
【発明を実施するための形態】
【００１２】
図１は、本発明の一般的な実施形態を示し、ＤＶＡの２つの主な物理的「サイド」の間、即ち任意の数（１つを含む）のホスト１００（例えばサーバ）の側と、ストレージプール３００の側との関係を図解している。ストレージプール３００はストレージノード３１０−１，３１０−２，．．．，３１０−Ｎ（まとめて３１０）を含み、これらのストレージノードは、ホストの観点からすると、単一の未分散ストレージシステムを形成し得る。ホスト１００内のエンティティは、不揮発性メモリ（ＮＶＲＡＭ３３０として示されている）に最初に格納され、ノード内に位置する永続性記憶装置３４０−１，．．．，３４０−Ｎに最終的に格納されるデータを書き込む。
【００１３】
読出し及び書込みエンティティは任意のタイプのものとすることができ、例えば仮想マシン１３０（ＶＭ１３０−１，．．．，１３０−Ｎとして別々に示されている）又はより一般的には、ユーザレベルアプリケーション１４０のような非仮想化プロセスとすることができる。データを読み書きするのに必要なソフトウェア及びハードウェアエンティティはここでは「クライアント」という。
【００１４】
各ホストは、システムハードウェア１１０を含み、システムハードウェア１１０は、１以上のプロセッサ（ＣＰＵ）１１１と、これらのＣＰＵで実行し得るデータ及び／又はコードの非永続的、揮発的及び／又は永続的、不揮発的、非一時的ストレージのためのいくつかの装置１１２を含む。伝統的には、「メモリ」と「ストレージ」との間には比較的明確な技術的区別があり、前者は一般に高速で、揮発性の固体装置を包含し、後者は一般に低速で不揮発性の機械的又はオプトメカニカル装置を包含する。しかしながら、大容量の永続性ストレージに対する現代技術の広範囲の利用によって、この区別はどんどん不明確になってきている。例えば、多くの現代のサーバは、特に不連続のストレージ位置に対して、スループット及び一般にＩＯＰＳ（１秒当たりの入力／出力処理回数）の名で測定されている速度を増大するために、「サーバフラッシュ」などの様々なソリッドステートストレージデバイス（ＳＳＤ）を使用している。相変化メモリ（ＰＲＡＭ）などの先端技術が区別をさらに不明確にしている。ここに記載する実施形態を実装するために特定のタイプのホスト側ストレージ又はメモリ技術は必要とされず、すべてのホストに同じストレージ技術を使用する必要はない。
【００１５】
システムハードウェア１１０は、システムの様々なコンポーネント間でデータを１以上のネットワーク２００を介して転送するためのネットワーク接続装置１１４等の他の従来の機構を含む。ネットワーク２００は任意の周知の公衆ネットワーク、又はインターネット、内部企業網などの専用ローカル又はワイドエリアネットワークとすることができる。唯一の要件は、どのようなネットワークが使用されようとも、すべてのクライアントがアクセスする必要があるストレージノードにアクセスできることである（下記参照）。従って、前記ネットワーク２００とは、異なるネットワーク間のデータ転送に必要なスイッチング又は他の通信装置も含めて、実装される異なるネットワークの集合と解釈すべきである。
【００１６】
各ホストは、従来のシステムソフトウェア１１５、例えば実装に応じて、オペレーティングシステム（ＯＳ）、デバイスドライバ等も含む。図示の構成では、ホスト１００の１つは仮想化プラットフォームをサポートするものとして示され、典型的には、ある種のハイパーバイザー１２０又は類似のインタフェース層をシステムハードウェア１１０と（図示の実施形態では）少なくとも一つの仮想マシン（ＶＭ）１３０−１，．．．，１３０−ｎとの間に含む。周知のように、ＶＭは実際の物理的コンピュータシステムのソフトウェアの抽象概念である。
【００１７】
ＶＭは単に簡単のために図１ではホスト内に示され、ほとんどの実施形態では、仮想マシンはハイパーバイザー／ハードウェアホスト上で動作する「ゲスト」である。一部の仮想化されたシステムでは、「仮想マシンモニタ」がハイパーバイザー又はホストＯＳ等の下位のソフトウェア層に対するインタフェースとして含まれる。ＶＭｗａｒｅ社の製品のＥＳＸサーバファミリー等の多くのハイパーバイザーは、ホストＯＳとのインタラクションの必要なしに、直接「ベアメタル」上で、即ち直接システムハードウェア１０上で動作する。他の仮想化プラットフォームでは、ハイパーバイザーはホストＯＳ上で又はこれと同じレベルで作動し、ハイパーバイザーからの要求時にいくつかの動作を実行しサポートする。ここに記載する種々の実施形態は、ＶＭであろうと、ハイパーバイザーであろうと、又は他の仮想化層であろうと、任意の特定の仮想化アーキテクチャに依存しない。実際には、ＶＭは全く前提とされず、むしろ、ソフトウェア及びハードウェアエンティティ（クライアント）からのデータストレージの読出し／書込み要求を処理するある種のシステムソフトウェア層が前提とされる。従って、「ホスト」は、以下に記載する分散ストレージ装置へのデータの書込み及び／又は読出しを希望するプロセス（ＶＭのプロセスは特別の場合）を実行する任意のプラットフォームである。
【００１８】
プール３００内の種々のストレージノード３１０は個別のユニットとして示され、異なる物理的サーバとすることができるが、それらはアドレス指定のために単一の論理的境界内にあるものとみなすこともできる。しかしながら、アドレス可能なストレージプールの論理的な概念境界は、図示の物理的ストレージノード３１０−１，３１０−２，．．．，３１０−Ｎのセットを超えて広がるストレージコンポーネント及びプロセスも含むことができる。
【００１９】
所望のＤＶＡ機能に応じて、ノード３１０に対するいくつかの分散機能及び制御機能を処理してノード３１０に共通の管理データ及び他のデータを維持するためにプールマネージャ３５０を含めることができる。このようなプールマネージャは１以上のストレージノード内で、１以上のホスト内で、又は同じネットワークに結合された別個のコンピューティングシステム内で動作する。それらは独立のエンティティとして実装することもできるが、プールマネージャは他の管理コンポーネント、例えばプール内に格納されたファイル（例えば仮想ディスク）のファイルネームスペースを管理するためのコンポーネント、クラスタ管理機能のためのコンポーネント、及び他のノード管理機能のためのコンポーネントを含むこともできる。
【００２０】
ストレージノードを実装するために選択できる多くの現在入手可能な実例のうちの２つは、複数のディスクコントローラを備えるＸｙｒａｔｅｘシャーシ、又はシングルディスク「ＦＡＷＮ」（Fast array of Wimpy Nodes）とすることができ、これは集中的な入力／出力タスクのための低能力のサーバアーキテクチャである。より一般的には、ノードは、任意の形のバス又はネットワーク接続を介して少なくとも１つのディスクと通信する任意の形のコンピュータを用いて実装することができる。実際には、ノード自体をストレージプールにデータを書き込むエンティティとすることもできる。
【００２１】
各ノードは１以上のストレージコントローラ３２０−１，３２０−２，．．．，３２０−Ｎ（まとめて３２０）を含み、各コントローラは１以上のディスク、フラッシュ又は他のＳＳＤ装置又は永続性ストレージ装置３４０（２以上の物理的装置を備える）を含む他の装置を制御する通常の処理回路を備える。コントローラはまた、ネットワーク２００に接続するために必要な回路も含む。いくつかの実施形態では、コントローラはストレージ装置と一体化して単一の複合モジュールにすることができる。ホスト１００と同様に、ストレージプール３００のノード内で使用される種々のソフトウェアコンポーネントは、プール内の各ハードウェアプラットフォーム上のプロセッサで実行できるように、任意の方法でロード及び／又は格納される。これらの媒体及びプロセッサは簡単のために図に別個に示されていないが、当然のことながら、当業者であればそれらの存在は理解されよう。これまで記載したシステムコンポーネントは多くの従来のシステムにも見られるものである。
【００２２】
好ましい実施形態では、コントローラ３２０の少なくとも１つは、極めて低いレイテンシで新たに書き込まれるデータを受け取り、永続的に格納するために、ある種の不揮発性メモリ３３０（ＮＶＲＡＭ：図２）も含むか、或いはこのメモリにアクセス可能である。いくつかのシステムでは、ＮＶＲＡＭはＰＣＩＥスロット内の特別のカード上に設けることができる。いくつかの実装では、コントローラはバッテリーバックアップを有し、停電時に、コントローラはシステムメモリの一部分をフラッシュドライブにコピーするのに十分な時間を有する。この場合には、ＮＶＲＡＭ３３０は別個の物理的コンポーネントにする必要はなく、代わりにコントローラ内の他の標準目的のための汎用ＲＡＭの論理部分とすることができる。いくつかのシステムでは、ＮＶＲＡＭは低いレイテンシのＳＳＤとすることができる。本発明の実施形態の実装はディスクとＮＶＲＡＭの両方を有する必要があるわけではなく、むしろ、任意の所定のノードはこれらの２つのタイプの永続性ストレージ装置の一つのみを有するか、少なくともそれにアクセスし得るように構成することができる。従って、図１に示すように、本システムは、１以上のノード（例えば、ノード３１０−１）は永続性ストレージ装置と不揮発性メモリの両方を含むが、１以上の他のノード（例えば、ノード３１０−２）は永続性ストレージ装置を含まず、更に他のノードは不揮発性メモリコンポーネント３３０を全く含まない実装することができる。また、ノード３１０−Ｎに対して図１に示されるように、１以上のノードは１つ以上の永続性ストレージ装置（３４０−Ｎ）を有することもできる。更に、いくつかの実施形態では、ＮＶＲＡＭはホスト内に設けることもできる。
【００２３】
好ましい実施形態では、ホストはネットワークを介してデータを、永続性ストレージ装置に書き込むのではなく、ストレージノード又はホスト内のＮＶＲＡＭに書き込むことができ、また前記ＮＶＲＡＭからデータを除去するコマンドを与えることもできる。これは、従来のストレージシステムの構成と大きく相違し、従来のストレージシステムではＮＶＲＡＭは永続性ストレージ装置へ向かう途中のデータに対してトランスペアレントなバッファである。
【００２４】
上述したように、２つの主要なストレージフィロソフィは両極端のトレードオフ関係になる。ハイパーコンバージドシステムでは、ほぼ全記憶及び計算負荷が相互依存ホスト内に集中するが、他のシステムでは、計算負荷の殆どはリモートストレージユニットに置かれ、ホストは直接互いに依存しない。本発明の実施形態は異なるアプローチを採用し、このアプローチでは、ホストの通常大きな計算リソースは多くのストレージ関連機能のために使用されるが、大きなホスト間通信及び調整を必要としない方法で使用され、主ストレージ能力は主としてリモートノードに維持され、如何なるホストも別のホストを経由することなくそのリモートノードにアクセスすることができる。
【００２５】
この目的のために、ホスト及びノードは、それぞれＤＶＡコンポーネントを含み、即ちホストにはシステムソフトウェアレベルにＤＶＡｈ４０５モジュールを含み、ノードにはＤＶＡｎモジュールを含む。図１にオーバラップさせて示すように、ＤＶＡｈ４０５は、システムソフトウェア１１５の一部分として、又は制御ソフトウェア（例えばハイパーバイザー１２０）の一部分として、又は両者の共働コンポーネントとして実装することができる。オプションとして、ＤＶＡｈコンポーネントをシステムソフトウェア１１５内又はハイパーバイザー１２０内のドライバとして構成し、ホストオペレーティングシステム（システムソフトウェア）に必要に応じ呼びかけるようにすることもできる。また、ＤＶＡｈ４０５コンポーネントは異なるユーザレベル又はシステムレベルプロセス内に、又は「ヘルパー」ＶＭ内に構成することもできる。ＤＶＡｈ及びＤＶＡｎの構成にかかわらず、それらは一般に、不揮発性ストレージに格納され、ホストＣＰＵ１１１による実行のためにメモリにロードされる、プロセッサ実行可能コードの対応する部分として実装される。
【００２６】
同様に、ノード内のＤＶＡｎ４２５コンポーネントもそれぞれのストレージコントローラ３２０上で作動するソフトウェアとして、又はストレージコントローラから分離されているがそれと共働するソフトウェアモジュールとして実装することができ、また不揮発性ストレージに格納され、ノード３１０内のプロセッサによる実行のためにメモリにロードされる、プロセッサ実行可能コードの対応する部分として実装することもできる。
【００２７】
少なくとも１つのホストには、好ましくはメモリ／ストレージコンポーネント１１２の一部分としてキャッシュ１１３を設けるのが好ましい。キャッシュは、任意の従来の十分に高速のストレージ技術、例えば１以上のフラッシュメモリ装置、相変化ランダムアクセスメモリ（ＰＲＡＭ）、メインシステムメモリの一部分などを用いて実装することができる。キャッシュは個別にパッケージ化されたソリッドステートディスク（ＳＳＤ）、サーバ内のバスにプラグ接続される回路カード、サーバマザーボード上のモジュールなどとして実装することもできる。
【００２８】
図２は図１に示す主要なシステムコンポーネントの簡略表示であるが、ＤＶＡモジュールの種々の任意選択サブコンポーネントをより詳細に示す。１つのホスト及び１つのノードのみを示すが、同様のサブコンポーネントを他のホスト／ノードにも含めることができる。すべてのホスト又はノードが図２に示すものと同一のＤＶＡサブコンポーネントを含む必要はなく、任意の所定のホスト内には、図示のサブコンポーネントの任意の数（１〜全部）を、任意の所定の実装の必要に応じて、任意の所望の組み合わせで含めることができる点に注意されたい。それゆえ、図２に示すＤＶＡサブコンポーネントのセットは例示及び説明のためにすぎない。更に、これらの種々のサブコンポーネントは図２に別個のものとして示されているが、これは例示及び説明のためにすぎず、それらのいずれか又はすべてを実行可能なコードの単位部分に組み合わせることができる。
【００２９】
ＤＶＡサブコンポーネント及びそれらの機能は、バックグラウンドストレージマネジメント機能、データ変換機能及び／又は以下に概説する他の機能を含む種々のストレージ処理機能のいずれか又はすべてを実行する。従来のストレージシステムではこれらの機能は典型的にはストレージコントローラ内で実行され、ホスト内で実行されない点に注意されたい。ＤＶＡｈサブコンポーネントは優先的に下記のものを含む。
【００３０】
キャッシュマネージャ５１３は既知の技術を用いてキャッシュ１１３への書込み及び読出しを処理する。一実施形態では、キャッシュはフィンガープリント化されたデータブロックを備えるため、キャッシュ内のブロックをブロックのフィンガープリントに基づいて見つけ出すことができる。
【００３１】
ファイルマネージャ５３０はホスト上のＶＭ（又は仮想化されている又はされていない他のプロセス）からのデータを受け取り、それをプール３００内のストレージのために設計されたフォーマットに処理する。ファイルマネージャはデータを読み出す要求も受け取り、キャッシュ又はプールからデータを検索し、それを処理してもとの記憶フォーマットにし、要求されたデータを返送する。ファイルマネージャはデータのキャッシュ、処理、格納又は検索を援助する他のコンポーネントを呼び出すこともできる。
【００３２】
ファイルマネージャ５３０はマッピングモジュール５２４を呼び出すことができ、マッピングモジュール５２４はマップをリファレンス（基準点）に対するファイルオフセットからプール３００に格納された対応するデータアイテムへ更新する。いくつかの実施形態では、データアイテムリファレンスはそのデータアイテムを含むブロックのフィンガープリントを備える。いくつかの実施形態では、ホストはフィンガープリントを計算する。いくつかの実施形態では、データアイテムリファレンスはそのデータアイテムに関するロケータを備える。ファイル内のあるオフセットに対する読み出し要求を満たすために、ファイルマネージャはマッピングモジュール５２４を呼び出して、ファイル内のそのオフセットに対して格納されたデータアイテムに対するリファレンスを得る。この場合、そのリファレンスを用いてキャッシュからデータアイテムを検索することができ、またそのデータアイテムがそこにない場合には、そのデータアイテムをプールから検索することができる。
【００３３】
周知のように、仮想マシンのストレージシステムも仮想化される。従って、ＶＭ上で作動するプロセスは、それらが「考えている」のは物理的ストレージであるが、実際には「仮想ディスク」（ｖＤｉｓｋ）内の仮想アドレスにアドレスし、この仮想アドレスは対応するアドレスマップを用いて１以上のレベルのアドレスリディレクションを受け、最終的に物理空間内のアドレスになる。分散ストレージシステムとの関係において、ＶＭの読出し及び書込みはプール３００内の１つの（又は例えばデータがミラーリングされている場合には２つ以上の）物理的ストレージ装置内の対応するアドレスに最終的にマップされる。
【００３４】
好適には、圧縮、暗号化、データ完全性を保証するためのチェックサム、イレージャコードストライプへの受信データのパック化、例えばＲＡＩＤストライプの一部としての誤り訂正コード（ＥＣＣ）値の計算、及び／又はフィンガープリント、即ち受信データブロックの一意の識別情報の計算などの既知のデータ変換機能の一部又は全部を実行するために、データ処理コンポーネント（処理エンジン５２０）が含められる。可能なフィンガープリント技術の一例はハッシュであり、例えばＳＨＡ法のいずれか（例えばＳＨＡ−１）を用いることができる。選択したフィンガープリント法が耐衝突性である（即ち、同じフィンガープリント出力を発生する２つの異なる入力の確率が十分に低い）と仮定すると、同じフィンガープリントを有する異なるデータブロックは同じ内容を有し、よって重複であると推測することができる。
【００３５】
一実施形態では、入力データはフィンガープリント化され、その入力ブロックのフィンガープリントをキャッシュ１１３内、即ちホスト１００内に格納されているブロックのフィンガープリントと比較することによって重複排除され、これにより、プール３００に格納されているデータを分析し、重複排除する必要がなくなる。この構成はこれらの計算集約タスクを通常の高性能のホスト内で実行することができるのみならず、さもなければ、ホストが最初にリモートストレージノード３１０からフィンガープリントを検索しなければならに場合に経験されるレイテンシの大部分を回避することもできる。
【００３６】
フィンガープリント化されたブロックのキャッシュは、読出し要求に応答してプールからデータブロックをフェッチする際のレイテンシを避けることもできる。２つの別個のファイルの各々が、同じ内容、よって同じフィンガープリントを有するブロックを含み得る。重複ブロックは１つのファイルに対する読出し又は書込み要求を満足させるためにキャッシュに挿入しておくことができ、別のファイルの重複ブロックに対するその後の読出し要求はそのキャッシュから満足させることができ、プールからそのブロックをフェッチするレイテンシを招くことはない。
【００３７】
フィンガープリント又はチェックサムはデータ完全性を保証するため及び不完全な書込みを検出するために使用することもできる。例えば、フィンガープリントはバッファしたデータに対して計算することができる。可能なホスト障害及び不完全な書込みの何らかの兆候がある場合には、現データのフィンガープリントをバッファしたデータのフィンガープリントと比較することができ、両者が同じでない場合、バッファしたデータは格納しようとするデータと同一でないため、システムは書き込みは不完全であったことを知ることができる。
【００３８】
ログ構造ファイルシステムを使用するＤＶＡ内には、ガーベイジコレクション機能、例えば、一部の実施形態では、今後コピーすべきデータを識別すること及び、一部の実施形態では、このようなデータを新しいストライプにコピーすることなど、を実行するためにガーベイジコレクションモジュール５２２を含めることができる。
【００３９】
ストライプを用いてデータを格納するシステムには、ストライプマネージャ５２３を含めることができる。ストライプマネージャは、ＥＣＣ値を計算するためにＥＣＣエンジン５３２を使用もしくは含むことができ、そのＥＣＣ値をストライプに加え、設計者が実施のために選択するマッピング又は割り当て方式に従って複数のストレージノードに分散することができる。
【００４０】
ホストには、データ完全性を保証するために、データ再構成（例えば、ＥＣＣ情報からの紛失ＲＡＩＤストライプ要素の再構成）、データリバランス、又はデータスクラブなどの機能を実行するモジュール５２６も含めることができる。このモジュール、又は１以上の他のホストモジュールは、ホストフラッシュキャッシュへのデータのプリフェッチ、データクランプの形成及び所定の粒度での重複排除、その後のこのようなクランプのリパッキング、ホストフラッシュ障害の処理、ホスト上でのｖＤｉｓｋマップの更新、などの操作を実行することもできる。
【００４１】
ＤＶＡｎサブコンポーネントは下記のものを含む。
【００４２】
フィンガープリントインデックス５２１はフィンガープリントからデータブロックロケータ又は他の識別子へのマッピングを行う。ホストがフィンガープリント化されたデータブロックをストライプに格納し、そのストライプをプールに書き込むとき、ホストはそのフィンガープリント及び対応するデータブロックロケータをフィンガープリントインデックス５２１に知らせる。ホストがフィンガープリント化されたブロックをプールから読み出す必要があるとき、ホストは最初にインデックス５２１からブロックロケータに要求し、次いでプールからそのブロックを読み出す。インデックス５２１はホスト内に実装してもよいが、コントローラ３２０内に実装する方が好ましい。なぜなら、インデックスのサイズはストレージ容量に比例するため、インデックスのためのメモリは対応するストレージユニットと一緒にするのが一般に最も効率的であるからである。
【００４３】
ログ３２５は、最近書き込まれたデータ及びホスト上のロギングモジュール５２５からの他のデータを受信し、そのデータを不揮発性で低レイテンシのＮＶＲＡＭモジュール３３０に格納する。ＮＶＲＡＭモジュール３３０は図２ではノード３１０の内部モジュールとして示されているが、これは一つの実装例にすぎない。他の例として、ＮＶＲＡＭモジュール３３０は異なる専用のノード又は任意の他の場所に含めることができる。最近書き込まれたデータをログとして又はさもなければＮＶＲＡＭに格納することによって、ディスクドライブのような高いレイテンシのストレージ装置３４０への書込みのレイテンシを被ることなく、その書込みを「安全」として承認することができる。このようなデータをホストの外部（例えばログ３２５）に格納することによって、ホストがそれを複数のストレージ装置３４０のうちの一つの永久位置に格納する前に故障しても、別のエンティティ（例えばストレージノードのうちの一つ、故障してないホストのうちの一つ、又は最初にデータを受信したホスト以外の任意の他のエンティティ）が不揮発性装置３３０からデータを読出し、そのデータを処理してストレージ装置３４０の一つに格納することができる。これは、データのコピーが現在故障中のホストを介してのみアクセスし得るホストの内部のキャッシュ１１３に格納されるのみである場合には不可能である。
【００４４】
ＮＶＲＡＭモジュール３３０を含み、それをＬＯＧ３２５のようなインタフェースを介してホストに公開する一つの他の利点は、ホストはデータをストレージノード上のＮＶＲＡＭに書き込み、急速承認を可能にすることによってそのデータを「安全」にすることができ、その後その計算リソースを、場合により遅れた追加のストレージ処理、例えば十分な量のデータがストライプからバッチされた後などの追加のストレージ処理、のために活用することができることにある。いくつかの実施形態では、ＮＶＲＡＭに書き込まれたデータの一部はホストによる追加のストレージ処理によらずに永続性ストレージに書き込むことはできない。いくつかの実施形態では、ＮＶＲＡＭ装置の一つ又はそれが接続されたコントローラの故障から保護するためにデータを複数のＮＶＲＡＭ装置に書き込むことができる。ホスト自体が複数のＮＶＲＡＭ装置に書き込むことができ、またコントローラが単一のホスト書込みを同じ又は異なるノード内の複数のＮＶＲＡＭ装置に又は複数の他のコントローラ及びそれらのＮＶＲＡＭ装置に反映させる（ミラーリング）ことができる。
【００４５】
一例として、ＶＭが少なくとも１つの仮想化ディスクｖＤｉｓｋ又はファイルにデータを書き込みたいと仮定する。ＶＭがゲストであるホストが故障すると、新たに書き込まれたデータのコピーはあるストレージノード上のログ及びＮＶＲＡＭ内で生き残る。書込みデータは、そのデータがプールに、場合により書込みに関するログデータを保持しない１以上のストレージノードに、書き込まれる前に、ある最小ストレージ単位、例えば（ＲＡＩＤのようなシステムにおける）フルストライプに十分なデータが満たされるまで、ファイルマネージャでバッファする、又はＶＭホストのキャッシュ１１３に格納することもできる。新たな書込みデータも、ｖＤｉｓｋ内の同じ位置の以後の上書きのための時間を与えるために充分長い期間に亘ってＶＭホスト上でバッファし、ストライプに上書きされたデータを書き出す必要性を除去することもできる。ホスト（例えばそのオペレーティングシステム内のＤＶＡｈコンポーネントの一部分又はある他のホストエンティティのいずれか）は書込み単位に対して少なくとも１つの消去符号化ブロックを計算し、その後それをストレージノードに書き込むこともできる。
【００４６】
操作がＲＥＡＤ（読出し）の場合には、所望のデータをキャッシュ１１３内で検索することができる。データがキャッシュされている場合、そのデータはキャッシュから読み出し、要求元プロセス、例えばＶＭに戻すことができる。データがキャッシュされていない場合、そのデータは（任意の中間アドレスマップを用いて）直接ストレージノードから読み出し、要求元プロセスに戻すことができる。ＲＥＡＤデータをキャッシュに書き込むこともできる。
【００４７】
管理及び計算負荷をホストに集中させることによって、ストレージ側における専用のバックプレーン及びファイバチャネル接続が不要になり、ストレージノードは比較的簡単且つ安価に保つことができ、更に、ストレージ側全体は標準のネットワーク接続を介して直接ホストと通信することができる。更に、ホストがプールと通信するが、たまにしか通信しない場合には、一つのホストは別のホストのノイジーネイバーに煩わされない。最後に、ホストが大きなキャッシュを含む場合、それらはプール内のノードにたまにコンタクトしなければならなくなるだけであり、ノイジーレイバー問題が更に減少する。ホストはＶＭ及びＶＭ内のアプリケーションにデータを供給する権限を持つため、システム内の他の場所の性能問題に影響されにくい。
【００４８】
本明細書に開示される種々の機能又はプロセスは種々の不揮発性コンピュータ可読媒体に具体化されるデータ及び／又は命令として記述することができ、ＤＶＡシステムの実施形態を実装したい人々にコンピュータプログラム製品として提供することができることに注意されたい。
【００４９】
図３は書込み要求の一つの実施例を示す。書込み要求が受信されると、その要求はノード上のＮＶＲＡＭモジュール３３０にログされる。書込みのロギングは書き込み中のファイルの指示及びファイル内のオフセットを含む。書込みデータ自体は書込みバッファに書き込まれ、その要求は承認される。書込みバッファが処理をトリガするのに十分なほど、例えばブロックを形成するのに十分なほど満杯でなければ、その処理は追加の書込み要求の受信に戻り、そうでなければ、書込みデータはブロックに形成することができ、（単一のフィンガープリントが全データセットに対して使用されるのか別々のフィンガープリントがブロック毎に使用されるのかに応じて）１以上のフィンガープリントを計算することができる。フィンガープリントの計算前、後又はそれと同時に、ブロックデータを、例えば圧縮、暗号化などで処理することもできる。所定のブロックが既にホストキャッシュにある場合（これはフィンガープリントの比較により決定できる）、ファイルマップをブロックに対するリファレンスで更新することができ、処理は追加の書込みの受信に戻ることができる。ブロックのフィンガープリントがホストキャッシュ又はグローバルフィンガープリントインデックス５２１内で見つからない場合には、ブロックは現在構成中のストライプに加えられる。ストライプがまだ完全でない場合、システムは追加の書込み要求の受信に戻ることができる。現在のストライプが完全である場合、ＥＣＣストライプ要素がそのブロックに対して計算され、ストレージのために分配され得る。その後、ストライプ内のブロックのフィンガープリントがグローバルフィンガープリントインデックス５２１に加えられる。このとき、ブロックもキャッシュに加えることができ、その後ファイルマップがストライプに格納されたブロックをリファレンスするように更新される。この時点で、書き込まれたデータはホスト故障に直面しても安全であるため、ＮＶＲＡＭ内のデータの一時的コピーはもはや必要ない。従って、例えばログモジュール５２５を使用するホストはログ３２５に、そのデータをトランケートしてＮＶＲＡＭから除去してよいことを知らせることができる。コントローラ自体はＮＶＲＡＭ内に一時的に格納されたデータをもっと永久的な位置に書き換える必要はないことに注意されたい。最後に、処理は追加の書込み要求の受信に戻る。他の実施形態では、ＤＶＡｈコンポーネントはフィンガープリントを計算し、そのフィンガープリントがホストキャッシュ及び／又はグローバルフィンガープリントインデックスに存在するかチェックし、対応するファイル及びそのファイル内のオフセットに対して、書込みを承認する前に、データ自体の代わりに、先に格納されたデータに対する新しいリファレンスのみをリモートＮＶＲＡＭにログする。
【００５０】
図４は読み出し要求を処理する一実施例を示す。読み出し要求が受信され、データを含むブロックに対するリファレンスが要求されたオフセットを提供するファイルマップモジュールから検索される。リファレンスされたブロックがキャッシュ１１３内にある場合、そのブロックが検索され、読み取り要求を達成するためにそのデータを返送することができる。そのブロックがキャッシュにない場合には、そのブロックはプールから検索しなければならない。これは、ブロックロケータをフィンガープリントインデックスから検索することによって達成することができる。ブロックが検索されたなら、そのブロックをキャッシュに加えることができ、要求されたデータを返送することができる。
【図１】
2016212819.tif 000003
【図２】
2016212819.tif 000004
【図３】
2016212819.tif 000005
【図４】
2016212819.tif 000006
【外国語明細書】
2016212819000001.pdf