(57)【要約】  本明細書に記載の技術は、データストレージのシステムおよび方法に関し、より詳細には、オブジェクトインターフェース上にファイルシステム機能を重層することを提供することに関する。特定の実施形態では、ファイルシステム機能は、レガシーアプリケーションから期待される機能を可能にしながらクラウドベースのストレージを提供するためにクラウドオブジェクトインターフェース上に重層することができる。例えば、ＰＯＳＩＸインターフェースおよびセマンティクスを、データ編成が名前階層にある状態でファイルベースのアクセスと整合する態様でデータへのアクセスを提供しながら、クラウドベースのストレージ上に重層することができる。様々な実施形態はまた、メモリマップの変更と書き込みとの間の一貫性を確保しながらメモリマップの変更が永続的ストレージに反映されるようにデータのメモリマッピングを提供することもできる。例えば、ＺＦＳファイルシステムのディスクベースのストレージをＺＦＳクラウドベースのストレージに変換することによって、ＺＦＳファイルシステムはクラウドストレージの弾力性を獲得する。
2020506462.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
ＺＦＳシステムの仮想デバイス層で動作する１以上の仮想デバイスが、第１の複数の論理ブロックを記憶する第１のデータオブジェクトのセットを受信することを備え、前記第１の複数の論理ブロックはツリー階層の第１のインスタンスに対応し、前記ツリー階層の前記第１のインスタンスは、
前記ＺＦＳシステムによって表される１以上のファイルのデータに対応する第１の論理データブロックのセットと、
前記ＺＦＳシステムによって表される前記１以上のファイルに関連付けられる第１のメタデータに対応する１以上の追加の論理データブロックとを含み、
前記第１の論理データブロックのセット、および前記第１のメタデータに対応する前記追加の論理データブロックは、前記ツリー階層の前記第１のインスタンス内に別々の論理ブロックとして記憶され、前記方法はさらに、
前記ＺＦＳシステムの前記仮想デバイス層で動作する前記１以上の仮想デバイスが、第２の複数の論理ブロックを記憶する第２のデータオブジェクトのセットを生成することを備え、前記第２の複数の論理ブロックは前記ツリー階層の第２のインスタンスに対応し、前記ツリー階層の前記第２のインスタンスは、
前記ＺＦＳシステムによって表される前記１以上のファイルのデータに対応する第２の論理データブロックのセットと、
前記ＺＦＳシステムによって表される前記１以上のファイルに関連付けられる第２のメタデータに対応する１以上の追加の論理データブロックとを含み、
前記第２の論理データブロックのセット、および前記第２のメタデータに対応する前記追加の論理データブロックは、前記ツリー階層の前記第２のインスタンス内に別々の論理ブロックとして記憶され、前記方法はさらに、
ＺＦＳシステムの前記仮想デバイス層で動作する前記１以上の仮想デバイスが、前記ツリー階層の前記第２のインスタンスに対応する前記第２のデータオブジェクトのセットを、ローカルデータオブジェクトストアまたはクラウドオブジェクトストアのうちの少なくとも１つに記憶することを備える、方法。
【請求項２】
前記ツリー階層の前記第１のインスタンスに対応する前記第１の複数の論理ブロックは、前記ツリー階層の前記第２のインスタンスに対応する前記第２の複数の論理ブロックと同一である、請求項１に記載の方法。
【請求項３】
前記ツリー階層の前記第１のインスタンスおよび前記ツリー階層の前記第２のインスタンスに従って、第１の論理データブロックが、前記ＺＦＳシステムの第１のファイルのデータ内容を記憶し、異なる第２の論理データブロックが、前記ＺＦＳシステムの前記第１のファイルに関連付けられる対応するメタデータを記憶する、請求項２に記載の方法。
【請求項４】
前記第１のデータオブジェクトのセット内で、前記第１のファイルのデータ内容を記憶する前記第１の論理データブロックは、第１のデータオブジェクト内に記憶され、前記第１のファイルに関連付けられる前記対応するメタデータを記憶する前記第２の論理データブロックは、異なる第２のデータオブジェクト内に記憶される、請求項３に記載の方法。
【請求項５】
前記ツリー階層の前記第１のインスタンスに対応する前記第１のデータオブジェクトのセットを受信することは、ＺＦＳシステムの仮想デバイス層で動作するミラーデバイスが、前記ＺＦＳシステムの前記仮想デバイス層内で動作する第１のクラウドインターフェースデバイスを介して、前記第１のデータオブジェクトのセットを、第１のクラウドオブジェクトストアに記憶されるクラウドストレージオブジェクトとして取得することを含み、
前記ツリー階層の第２のインスタンスに対応する前記第２のデータオブジェクトのセットを記憶することは、前記ＺＦＳシステムの前記仮想デバイス層で動作する前記ミラーデバイスが、前記ＺＦＳシステムの前記仮想デバイス層内で動作する第２のクラウドインターフェースデバイスを介して、第２のクラウドオブジェクトストアに第２のクラウドストレージオブジェクトのセットを記憶することを含む、請求項１に記載の方法。
【請求項６】
前記第１のクラウドオブジェクトストアは、前記第１のクラウドオブジェクトストアに記憶される前記第１のデータオブジェクトのセットの各々について第１の属性のセットをネイティブにサポートするように構成され、前記第２のクラウドオブジェクトストアは、前記第２のクラウドオブジェクトストアに記憶される前記第２のクラウドストレージオブジェクトのセットの各々について第２の属性のセットをネイティブにサポートするように構成され、前記第１のクラウドオブジェクトストアによってネイティブにサポートされる前記第１の属性のセットは、前記第２のクラウドオブジェクトストアによってネイティブにサポートされる前記第２の属性のセットとは異なる、請求項５に記載の方法。
【請求項７】
前記ツリー階層の前記第１のインスタンスに対応する前記第１のデータオブジェクトのセットを受信することは、ＺＦＳシステムの仮想デバイス層で動作するミラーデバイスが、前記ＺＦＳシステムの前記仮想デバイス層内で動作する第１のクラウドインターフェースデバイスを介して、前記第１のデータオブジェクトのセットを、第１のクラウドオブジェクトストアに記憶されるクラウドストレージオブジェクトとして取得することを含み、
前記ツリー階層の第２のインスタンスに対応する前記第２のデータオブジェクトのセットを記憶することは、前記ＺＦＳシステムの前記仮想デバイス層で動作する前記１以上の仮想デバイスが、前記第２のデータオブジェクトのセットをローカルデータオブジェクトストアに記憶することを含む、請求項１に記載の方法。
【請求項８】
システムであって、
１以上のプロセッサを含む処理ユニットと、
前記処理ユニットと結合され、前記処理ユニットによって読み取り可能であり、命令のセットを記憶するメモリとを備え、前記命令のセットは前記処理ユニットによって実行されると、前記システムに、
ＺＦＳシステムの仮想デバイス層で動作する前記システムの１以上の仮想デバイスで、第１の複数の論理ブロックを記憶する第１のデータオブジェクトのセットを受信させ、前記第１の複数の論理ブロックはツリー階層の第１のインスタンスに対応し、前記ツリー階層の前記第１のインスタンスは、
前記ＺＦＳシステムによって表される１以上のファイルのデータに対応する第１の論理データブロックのセットと、
前記ＺＦＳシステムによって表される前記１以上のファイルに関連付けられる第１のメタデータに対応する１以上の追加の論理データブロックとを含み、
前記第１の論理データブロックのセット、および前記第１のメタデータに対応する前記追加の論理データブロックは、前記ツリー階層の前記第１のインスタンス内に別々の論理ブロックとして記憶され、さらに、前記命令のセットは前記処理ユニットによって実行されると、前記システムに、
前記ＺＦＳシステムの前記仮想デバイス層で動作する前記１以上の仮想デバイスによって、第２の複数の論理ブロックを記憶する第２のデータオブジェクトのセットを生成させ、前記第２の複数の論理ブロックは前記ツリー階層の第２のインスタンスに対応し、前記ツリー階層の前記第２のインスタンスは、
前記ＺＦＳシステムによって表される前記１以上のファイルのデータに対応する第２の論理データブロックのセットと、
前記ＺＦＳシステムによって表される前記１以上のファイルに関連付けられる第２のメタデータに対応する１以上の追加の論理データブロックとを含み、
前記第２の論理データブロックのセット、および前記第２のメタデータに対応する前記追加の論理データブロックは、前記ツリー階層の前記第２のインスタンス内に別々の論理ブロックとして記憶され、さらに、前記命令のセットは前記処理ユニットによって実行されると、前記システムに、
ＺＦＳシステムの前記仮想デバイス層で動作する前記１以上の仮想デバイスによって、前記ツリー階層の前記第２のインスタンスに対応する前記第２のデータオブジェクトのセットを、ローカルデータオブジェクトストアまたはクラウドオブジェクトストアのうちの少なくとも１つに記憶させる、システム。
【請求項９】
前記ツリー階層の前記第１のインスタンスに対応する前記第１の複数の論理ブロックは、前記ツリー階層の前記第２のインスタンスに対応する前記第２の複数の論理ブロックと同一である、請求項８に記載のシステム。
【請求項１０】
前記ツリー階層の前記第１のインスタンスおよび前記ツリー階層の前記第２のインスタンスに従って、第１の論理データブロックが、前記ＺＦＳシステムの第１のファイルのデータ内容を記憶し、異なる第２の論理データブロックが、前記ＺＦＳシステムの前記第１のファイルに関連付けられる対応するメタデータを記憶する、請求項９に記載のシステム。
【請求項１１】
前記第１のデータオブジェクトのセット内で、前記第１のファイルのデータ内容を記憶する前記第１の論理データブロックは、第１のデータオブジェクト内に記憶され、前記第１のファイルに関連付けられる前記対応するメタデータを記憶する前記第２の論理データブロックは、異なる第２のデータオブジェクト内に記憶される、請求項１０に記載のシステム。
【請求項１２】
前記ツリー階層の前記第１のインスタンスに対応する前記第１のデータオブジェクトのセットを受信することは、ＺＦＳシステムの仮想デバイス層で動作するミラーデバイスが、前記ＺＦＳシステムの前記仮想デバイス層内で動作する第１のクラウドインターフェースデバイスを介して、前記第１のデータオブジェクトのセットを、第１のクラウドオブジェクトストアに記憶されるクラウドストレージオブジェクトとして取得することを含み、
前記ツリー階層の第２のインスタンスに対応する前記第２のデータオブジェクトのセットを記憶することは、前記ＺＦＳシステムの前記仮想デバイス層で動作する前記ミラーデバイスが、前記ＺＦＳシステムの前記仮想デバイス層内で動作する第２のクラウドインターフェースデバイスを介して、第２のクラウドオブジェクトストアに第２のクラウドストレージオブジェクトのセットを記憶することを含む、請求項８に記載のシステム。
【請求項１３】
前記第１のクラウドオブジェクトストアは、前記第１のクラウドオブジェクトストアに記憶される前記第１のデータオブジェクトのセットの各々について第１の属性のセットをネイティブにサポートするように構成され、前記第２のクラウドオブジェクトストアは、前記第２のクラウドオブジェクトストアに記憶される前記第２のクラウドストレージオブジェクトのセットの各々について第２の属性のセットをネイティブにサポートするように構成され、前記第１のクラウドオブジェクトストアによってネイティブにサポートされる前記第１の属性のセットは、前記第２のクラウドオブジェクトストアによってネイティブにサポートされる前記第２の属性のセットとは異なる、請求項１２に記載のシステム。
【請求項１４】
前記ツリー階層の前記第１のインスタンスに対応する前記第１のデータオブジェクトのセットを受信することは、ＺＦＳシステムの仮想デバイス層で動作するミラーデバイスが、前記ＺＦＳシステムの前記仮想デバイス層内で動作する第１のクラウドインターフェースデバイスを介して、前記第１のデータオブジェクトのセットを、第１のクラウドオブジェクトストアに記憶されるクラウドストレージオブジェクトとして取得することを含み、
前記ツリー階層の第２のインスタンスに対応する前記第２のデータオブジェクトのセットを記憶することは、前記ＺＦＳシステムの前記仮想デバイス層で動作する前記１以上の仮想デバイスが、前記第２のデータオブジェクトのセットをローカルデータオブジェクトストアに記憶することを含む、請求項８に記載のシステム。
【請求項１５】
非一時的な機械可読記憶媒体で有形に具体化されるコンピュータプログラム製品であって、命令を含み、前記命令は、１以上のデータプロセッサに、アクションを実行させるよう構成され、前記アクションは、
ＺＦＳシステムの仮想デバイス層で動作する１以上の仮想デバイスが、第１の複数の論理ブロックを記憶する第１のデータオブジェクトのセットを受信することを含み、前記第１の複数の論理ブロックはツリー階層の第１のインスタンスに対応し、前記ツリー階層の前記第１のインスタンスは、
前記ＺＦＳシステムによって表される１以上のファイルのデータに対応する第１の論理データブロックのセットと、
前記ＺＦＳシステムによって表される前記１以上のファイルに関連付けられる第１のメタデータに対応する１以上の追加の論理データブロックとを含み、
前記第１の論理データブロックのセット、および前記第１のメタデータに対応する前記追加の論理データブロックは、前記ツリー階層の前記第１のインスタンス内に別々の論理ブロックとして記憶され、前記アクションはさらに、
前記ＺＦＳシステムの前記仮想デバイス層で動作する前記１以上の仮想デバイスが、第２の複数の論理ブロックを記憶する第２のデータオブジェクトのセットを生成することを含み、前記第２の複数の論理ブロックは前記ツリー階層の第２のインスタンスに対応し、前記ツリー階層の前記第２のインスタンスは、
前記ＺＦＳシステムによって表される前記１以上のファイルのデータに対応する第２の論理データブロックのセットと、
前記ＺＦＳシステムによって表される前記１以上のファイルに関連付けられる第２のメタデータに対応する１以上の追加の論理データブロックとを含み、
前記第２の論理データブロックのセット、および前記第２のメタデータに対応する前記追加の論理データブロックは、前記ツリー階層の前記第２のインスタンス内に別々の論理ブロックとして記憶され、前記アクションはさらに、
ＺＦＳシステムの前記仮想デバイス層で動作する前記１以上の仮想デバイスが、前記ツリー階層の前記第２のインスタンスに対応する前記第２のデータオブジェクトのセットを、ローカルデータオブジェクトストアまたはクラウドオブジェクトストアのうちの少なくとも１つに記憶することを含む、コンピュータプログラム製品。
【請求項１６】
前記ツリー階層の前記第１のインスタンスに対応する前記第１の複数の論理ブロックは、前記ツリー階層の前記第２のインスタンスに対応する前記第２の複数の論理ブロックと同一である、請求項１５に記載のコンピュータプログラム製品。
【請求項１７】
前記ツリー階層の前記第１のインスタンスおよび前記ツリー階層の前記第２のインスタンスに従って、第１の論理データブロックが、前記ＺＦＳシステムの第１のファイルのデータ内容を記憶し、異なる第２の論理データブロックが、前記ＺＦＳシステムの前記第１のファイルに関連付けられる対応するメタデータを記憶する、請求項１６に記載のコンピュータプログラム製品。
【請求項１８】
前記第１のデータオブジェクトのセット内で、前記第１のファイルのデータ内容を記憶する前記第１の論理データブロックは、第１のデータオブジェクト内に記憶され、前記第１のファイルに関連付けられる前記対応するメタデータを記憶する前記第２の論理データブロックは、異なる第２のデータオブジェクト内に記憶される、請求項１７に記載のコンピュータプログラム製品。
【請求項１９】
前記ツリー階層の前記第１のインスタンスに対応する前記第１のデータオブジェクトのセットを受信することは、ＺＦＳシステムの仮想デバイス層で動作するミラーデバイスが、前記ＺＦＳシステムの前記仮想デバイス層内で動作する第１のクラウドインターフェースデバイスを介して、前記第１のデータオブジェクトのセットを、第１のクラウドオブジェクトストアに記憶されるクラウドストレージオブジェクトとして取得することを含み、
前記ツリー階層の第２のインスタンスに対応する前記第２のデータオブジェクトのセットを記憶することは、前記ＺＦＳシステムの前記仮想デバイス層で動作する前記ミラーデバイスが、前記ＺＦＳシステムの前記仮想デバイス層内で動作する第２のクラウドインターフェースデバイスを介して、第２のクラウドオブジェクトストアに第２のクラウドストレージオブジェクトのセットを記憶することを含む、請求項１５に記載のコンピュータプログラム製品。
【請求項２０】
前記第１のクラウドオブジェクトストアは、前記第１のクラウドオブジェクトストアに記憶される前記第１のデータオブジェクトのセットの各々について第１の属性のセットをネイティブにサポートするように構成され、前記第２のクラウドオブジェクトストアは、前記第２のクラウドオブジェクトストアに記憶される前記第２のクラウドストレージオブジェクトのセットの各々について第２の属性のセットをネイティブにサポートするように構成され、前記第１のクラウドオブジェクトストアによってネイティブにサポートされる前記第１の属性のセットは、前記第２のクラウドオブジェクトストアによってネイティブにサポートされる前記第２の属性のセットとは異なる、請求項１９に記載のコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願との相互参照
本出願は、米国特許法第１１９条（ｅ）のもと、”FILE SYSTEM HIERARCHIES AND FUNCTIONALITY WITH CLOUD OBJECT STORAGE（クラウドオブジェクトストレージを伴うファイルシステム階層および機能）”と題される２０１７年１月６日に提出された米国仮出願第６２／４４３，３９１号の非仮出願であり、その利益および優先権を主張するものであり、その内容の全体をここに引用により援用する。
【０００２】
発明の技術分野
本開示は、一般に、データストレージのシステムおよび方法に関し、より詳細には、オブジェクトインターフェース上にファイルシステム機能を重層することに関する。
【背景技術】
【０００３】
背景
インターネットの継続的な拡大は、コンピューティングネットワークおよびシステムの拡大ならびに高度化とともに、インターネットを介して記憶されアクセス可能なコンテンツの急増につながっている。その結果、大規模で洗練されたデータストレージシステムの必要性が高まっている。データストレージに対する需要が増大し続けているなか、より大きくより洗練されたストレージシステムが設計されそして展開されている。多くの大規模データストレージシステムは、物理的記憶媒体のアレイを含むストレージアプライアンスを利用する。これらのストレージアプライアンスは、驚くべき量のデータを記憶できる。例えば、現時点では、オラクルのSUN ZFS Storage ZS5-4アプライアンスは最大６．９ペタバイトのデータを記憶できる。さらに、複数のストレージアプライアンスを互いにネットワーク接続してストレージプールを形成することができ、これにより記憶されるデータの量をさらに増やすことができる。
【０００４】
典型的には、これらのような大型ストレージシステムはファイルを記憶しアクセスするためのファイルシステムを含み得る。システムファイル（オペレーティングシステムファイル、デバイスドライバファイルなど）を記憶することに加えて、このファイルシステムは、ユーザデータファイルの記憶およびアクセスを提供する。これらのファイル（システムファイルおよび／またはユーザファイル）のいずれかに重要なデータが含まれている場合は、ファイルストレージデバイスに障害が発生しても重要なデータが失われないようにバックアップストレージ方式を採用すると有利である。
【０００５】
従来、クラウドベースのストレージはオブジェクトベースであり、弾力性および規模を提供する。ただし、クラウドオブジェクトストレージにはいくつかの問題がある。クラウドオブジェクトストレージは、オブジェクト全体のｇｅｔおよびｐｕｔに基づくインターフェースを提供する。クラウドオブジェクトストレージでは検索機能が制限されており、通常はレイテンシが長くなる。限られたクラウドベースのインターフェースは、ローカルファイルシステムアプリケーションのニーズと一致しない。レガシーアプリケーションを変換してオブジェクトインターフェースを用いることは、費用がかかり、実用的ではないか、または可能でさえないかもしれない。
【０００６】
したがって、オブジェクトインターフェース上におけるファイルシステム機能の重層を提供するために、前述の問題に対処するシステムおよび方法が必要とされている。このニーズおよび他のニーズは本開示によって対処される。
【発明の概要】
【課題を解決するための手段】
【０００７】
簡単な概要
本開示のある実施形態は、概してデータストレージのシステムおよび方法に関し、より詳細にはオブジェクトインターフェース上にファイルシステム機能を重層するためのシステムおよび方法に関する。
【０００８】
本明細書では、オブジェクトインターフェース上におけるファイルシステム機能の重層を提供するための様々な技法（例えば、システム、方法、非一時的機械可読記憶媒体に有形に具現化されたコンピュータプログラム製品など）が記載される。特定の実施形態では、ファイルシステム機能は、レガシーアプリケーションから期待される機能を可能にしながらクラウドベースのストレージを提供するためにクラウドオブジェクトインターフェース上に重層することができる。例えば、ＰＯＳＩＸインターフェースおよびセマンティクスを、データ編成が名前階層にある状態でファイルベースのアクセスと整合する態様でデータへのアクセスを提供しながら、クラウドベースのストレージ上に重層することができる。様々な実施形態はまた、メモリマップの変更と書き込みとの間の一貫性を確保しながらメモリマップの変更が永続的ストレージに反映されるようにデータのメモリマッピングを提供することもできる。例えば、ＺＦＳファイルシステムのディスクベースのストレージをＺＦＳクラウドベースのストレージに変換することによって、ＺＦＳファイルシステムはクラウドストレージの弾力性を獲得する。
【０００９】
本開示のさらなる適用分野は、以下に提供される詳細な説明から明らかになるであろう。詳細な説明および特定の例は、様々な実施形態を示しているが、例示の目的のためだけに意図されており、本開示の範囲を必ずしも限定することを意図されていないことを理解されたい。
【図面の簡単な説明】
【００１０】
本開示による実施形態の性質および利点は添付の図面と併せて本明細書の残りの部分を参照することによってさらに理解され得る。
【図１】本開示の特定の実施形態に従って使用され得るストレージネットワークの一例を示す。
【図２】本開示のいくつかの実施形態による、ストレージ環境内で実行することができるファイルシステムのインスタンスを示す。
【図３Ａ】本開示のいくつかの実施形態による、ファイルシステムのコピーオンライトプロセスを示す図である。
【図３Ｂ】本開示のいくつかの実施形態による、ファイルシステムのコピーオンライトプロセスを示す図である。
【図３Ｃ】本開示のいくつかの実施形態による、ファイルシステムのコピーオンライトプロセスを示す図である。
【図３Ｄ】本開示のいくつかの実施形態による、ファイルシステムのコピーオンライトプロセスを示す図である。
【図４】本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステムの一例を示すハイレベル図である。
【図５】本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステムの例示的なネットワークファイルシステムのインスタンスを示す図である。
【図６】本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステムのクラウドインターフェースアプライアンスの追加の局面を示す図である。
【図７】本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステムのためのＣＯＷプロセスのいくつかの特徴に向けられた例示的な方法を示すブロック図である。
【図８】本開示のいくつかの実施形態による、増分修正を処理するクラウドインターフェースアプライアンスの一例を示すハイレベル図である。
【図９】本開示のいくつかの実施形態による、クラウド内の保全性、および最終的に整合性のあるオブジェクトモデルからの常に整合性のあるセマンティクスを保証するハイブリッドクラウドストレージシステムのいくつかの機能に向けられる例示的な方法を示すブロック図である。
【図１０】本開示のいくつかの実施形態による、チェックを処理するクラウドインターフェースアプライアンスの一例を示すハイレベル図である。
【図１１】本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステムの機能をさらに示す簡略化した例の図である。
【図１２】本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステムの機能をさらに示す簡略化された例の図である。
【図１３】本開示のいくつかの実施形態による、キャッシュ管理およびクラウドレイテンシマスキングのためのハイブリッドクラウドストレージシステムのいくつかの機能に向けられた例示的な方法を示すブロック図である。
【図１４】本開示のいくつかの実施形態による、同期ミラーリングを容易にするためのハイブリッドクラウドストレージシステムの例示的なネットワークファイルシステムのインスタンスを示す図である。
【図１５】本開示のいくつかの実施形態による、同期ミラーリングおよびクラウドレイテンシマスキングのためのハイブリッドクラウドストレージシステムのいくつかの機能に向けられた例示的な方法を示すブロック図である。
【図１６】本開示のいくつかの実施形態による、複数のクラウドデータオブジェクトストアにわたる同期ミラーリングを容易にするように構成された例示的なネットワークファイルシステムのいくつかの層のインスタンスを示す図である。
【図１７】本開示のいくつかの実施形態による、複数のクラウドデータオブジェクトストアおよび／またはローカルデータオブジェクトストアにわたる同期ミラーリングを容易にするように構成された例示的なネットワークファイルシステムのいくつかの層のインスタンスを示す図である。
【図１８】本開示のいくつかの実施形態による、複数のクラウドデータオブジェクトストアにわたる、ネットワークファイルシステムからのデータの同期ミラーリングに向けられた例示的な方法を示すブロック図である。
【図１９】本開示のいくつかの実施形態による、複数のクラウドデータオブジェクトストアおよび／またはローカルデータオブジェクトストアにわたるファイルシステムからのデータの同期ミラーリングをサポートするように構成されたネットワークファイルシステムによる要求の受信および処理に向けられた例示的な方法を示すブロック図である。
【図２０】本開示による特定の実施形態を実施するための分散型システムの簡略図である。
【図２１】本開示のいくつかの実施形態による、システムの１以上のコンポーネントによって提供されるサービスをクラウドサービスとして提供することができるシステム環境の１以上のコンポーネントの簡略ブロック図である。
【図２２】本発明の様々な実施形態を実施することができる例示的なコンピュータシステムを示す。
【発明を実施するための形態】
【００１１】
添付の図面において、類似の構成要素および／または特徴は、同じ参照符号を有し得る。さらに、同じ種類の様々な構成要素は、参照符号の後にダッシュを付けること、および類似の構成要素を区別する第２のラベルによって区別する場合がある。本明細書において第１の参照符号のみが用いられる場合、その記載は、第２の参照符号に関係なく、同じ第１の参照符号を有する類似の構成要素のいずれにも適用可能である。
【００１２】
詳細な記載
以下の説明は好ましい例示的実施形態のみを示し、本開示の範囲、適用性、または構成を限定することを意図しない。むしろ、以下の好ましい例示的な実施形態の説明は、本開示の好ましい例示的な実施形態を実施するための実施可能な説明を当業者に提供するであろう。特許請求の範囲に記載の本開示の精神および範囲から逸脱することなく、要素の機能および構成において様々な変更を加えることができることを理解されたい。
【００１３】
上記のように、クラウドベースのストレージは弾力性および規模を提供するが、いくつかの問題を提示する。クラウドオブジェクトストレージは、オブジェクト全体のｇｅｔおよびｐｕｔに基づくインターフェースを提供する。クラウドオブジェクトストレージでは検索機能が制限されており、通常はレイテンシが長くなる。限られたクラウドベースのインターフェースは、ローカルファイルシステムアプリケーションのニーズと一致しない。レガシーアプリケーションを変換してオブジェクトインターフェースを用いることは、費用がかかり、実用的ではないか、または可能でさえないかもしれない。したがって、複雑で高価になるという見込みのためクラウドオブジェクトストレージに直接アクセスするようファイルシステムアプリケーションを変更する必要がないようにするための解決策が必要とされている。
【００１４】
解決策は、ローカルストレージシステムのデータをクラウド内のオブジェクトストレージにマッピングするために、様々なタイプのアダプテーション層を導入することなく、ネイティブのアプリケーションインターフェースが保存されることを可能にするべきである。したがって、本開示による特定の実施形態は、レガシーアプリケーションから期待される機能性を可能にしながらクラウドベースのストレージを提供するよう、クラウドオブジェクトインターフェース上にファイルシステム機能を重層してもよい。例えば、クラウドベースではないレガシーアプリケーションは、主にファイルとしてデータにアクセスし得、ＰＯＳＩＸインターフェースおよびセマンティクス用に設定され得る。レガシーアプリケーションの観点からは、ファイルを書き換えることなくファイルの内容を修正できることが期待される。同様に、名前階層でデータを編成できるということが期待される。
【００１５】
そのような期待に応えるために、特定の実施形態は、ユーザの観点から、データ編成が名前階層における状態でファイルベースのアクセスと一致する態様でデータへのアクセスを提供しながら、ＰＯＳＩＸインターフェースおよびセマンティクスをクラウドベースのストレージに重層することができる。さらに、特定の実施形態は、メモリマップの変更と書き込みとの間の一貫性を確保しながら、メモリマップの変更が永続的ストレージに反映されるように、データのメモリマッピングを提供することができる。ＺＦＳファイルシステムのディスクベースのストレージをＺＦＳクラウドベースのストレージに変換することによって、ＺＦＳファイルシステムはクラウドストレージの弾力性を獲得する。「ディスクブロック」をクラウドオブジェクトにマッピングすることで、ＺＦＳファイルシステムのストレージ要件は、実際に用いられている「ブロック」のみになる。バッキングストレージが不足する危険性なしに、システムを常にシンプロビジョニングすることができる。逆に、クラウドストレージはＺＦＳファイルシステムのセマンティクスおよびサービスを獲得する。ＺＦＳファイルシステムが提供する追加のデータサービス（圧縮、暗号化、スナップショットなど）だけでなく、完全なＰＯＳＩＸセマンティクスをクラウドクライアントに提供することができる。
【００１６】
特定の実施形態は、クラウドとの間でデータを移行する能力を提供することができ、ハイブリッドクラウドストレージシステムによってローカルデータをクラウド内のデータと共存させることができ、クラウドストレージ上にＺＦＳファイルシステム機能を重層しながら、ストレージの弾力性および規模を提供する。ＺＦＳファイルシステムを拡張してクラウドオブジェクトストアにオブジェクトを記憶できるようにすることによって、すべてのＺＦＳファイルシステムデータサービスに加えてＺＦＳファイルシステム機能を維持しながら、従来のオブジェクトストレージにブリッジを提供することができる。従来のローカルファイルシステムと様々なクラウドオブジェクトストアにデータを保存する能力との間のギャップを橋渡しすることで、パフォーマンスが大幅に向上する。
【００１７】
さらに、本発明の実施形態は、従来のＺＦＳデータサービスをハイブリッドクラウドストレージとともに用いることを可能にする。一例として、圧縮、暗号化、重複排除、スナップショット、およびクローンが、各々、本発明の特定の実施形態で利用可能であり、以下に詳細に説明される。本発明では、ユーザは、ストレージをクラウドに拡張するときにシームレスにＺＦＳファイルシステムによって提供されるすべてのデータサービスを使用し続けることができる。例えば、Oracle Key Managerまたはそれに相当するものは、ユーザに対してローカルなキーを管理し、クラウドへの保存時にローカルで管理されるキーを使用したエンドツーエンドの安全な暗号化を可能にする。圧縮、暗号化、重複排除、スナップショットの作成、ディスクストレージ上でのクローンの作成に用いられるのと同じコマンドが、クラウドへの保存にも用いられる。その結果、ユーザはＺＦＳの圧縮、暗号化、重複排除、スナップショット、およびクローンによって提供される効率ならびにセキュリティの恩恵を受け続ける。
【００１８】
圧縮は典型的には、それがデータの保存および送信に必要な資源を低減するため、オンにされる。計算資源は、圧縮プロセスにおいて、および通常はプロセスの反転（解凍）において、消費される。データ圧縮は、時空間複雑性のトレードオフの影響を受ける。例えば、ある圧縮方式は、解凍されているときに消費されるのに十分な速く集中的な処理解凍を必要とし得る。データ圧縮方式の設計は、圧縮の程度やデータの圧縮および解凍に必要な計算資源を含む、様々な要素間のトレードオフを伴う。
【００１９】
ＺＦＳ暗号化により、ローカルに保存された暗号化キーを使用したエンドツーエンドの安全なデータブロックシステムが可能になり、追加のセキュリティの層が与えられる。ＺＦＳ暗号化は、それ自体でデータブロックの不正使用を防がないが、インターセプタへのメッセージ内容を拒否する。ある暗号化方式では、意図されたデータブロックが暗号化アルゴリズムを用いて暗号化され、復号化された場合にのみ読み取ることができる暗号化テキストが生成される。技術的な理由から、ある暗号化方式は通常、アルゴリズムによって生成された擬似ランダム暗号化キーを用いる。鍵を所有せずにメッセージを復号化することは原則的に可能であるが、うまく設計された暗号化方式に対しては、大きな計算資源およびスキルが必要とされる。ＺＦＳデータブロックは、キー長が１２８、１９２、および２５６のＡＥＳ（Advanced Encryption Standard（高度暗号化規格））を用いて暗号化される。
【００２０】
データブロック重複排除は、繰り返しデータブロックの重複コピーを取り除くための特殊なデータ圧縮技術である。データブロック重複排除は、ストレージ使用率を向上させるために用いられ、ネットワークデータ転送に適用して、メモリに保存するために送信する必要があるデータブロックの数を減らすこともできる。重複排除プロセスでは、分析プロセス中に一意のデータブロックが識別されて保存される。分析が続くにつれて、他のデータブロックが保存されているコピーと比較され、一致が生じるたびに、冗長データブロックは保存されているデータブロックを指し示す小さな参照と置き換えられる。同じデータブロックパターンが数十回、数百回、さらには数千回も発生する可能性があると仮定すると、保存または転送しなければならないデータブロックの数は重複排除を用いることにより実質的に低減される。
【００２１】
クラウドオブジェクトストアに対するＺＦＳストレージのスナップショットは、ＺＦＳシステムでシームレスに作成される。スナップショットは、スナップショットに対するバックアップが必要な場合に特定のデータおよびメタデータブロックが上書きされないように、特定のデータおよびメタデータブロックをフリーズする。ツリー階層は多数のスナップショットを持つことができ、各スナップショットは削除されるまで保存されることになる。スナップショットは、ローカルに保存することも、クラウドオブジェクトストアに保存することもできる。また、スナップショットは、スナップショットが指すルートブロックを作成する以外に追加のストレージ能力を必要としないため、ＺＦＳシステムでは「無料」である。スナップショット参照からルートブロックへのアクセス時に、ルートブロックおよびそのルートブロックからの後続のすべてのブロックにコピーオンライト操作を行うことはできない。スナップショットが取られた後の次の進行で−新たなルートブロックがアクティブなルートブロックになる。
【００２２】
クローンはスナップショットから作成されるが、スナップショットとは異なり、ルートブロックへのクローン参照を用いてアクセスされるブロックは、コピーオンライト操作に使用できる。クローンを用いると、アクティブなルートブロックおよびツリーを破損することなく、システム上で開発およびトラブルシューティングを行うことができる。クローンはスナップショットにリンクされており、スナップショットブロックにリンクしているクローンが存続する場合はスナップショットを削除できない。場合によっては、クローンをアクティブな階層ツリーに昇格させることができる。
【００２３】
次に、添付の図面を、図１から始めて参照しながら、様々な実施形態についてさらに詳細に論ずる。
【００２４】
図１は、本開示による特定の実施形態にを実現するの用いられ得るストレージネットワーク１００の一例を示す。図１に示すハードウェアデバイスの選択および／または構成は、例示に過ぎず、限定を意味しない。図１は、１以上のスイッチ回路１２２を介して接続される複数のストレージアプライアンス１２０を提供する。スイッチ回路１２２は、複数のストレージアプライアンス１２０を複数のＩ／Ｏサーバ１３６に接続することができ、複数のＩ／Ｏサーバ１３６は次いで、ローカルコンピュータシステム１３０、ネットワーク１３２を介して利用可能なコンピュータシステム、および／またはクラウドコンピューティングシステム１３４などのクライアントデバイスのために、複数のストレージアプライアンス１２０へのアクセスを提供することができる。
【００２５】
各Ｉ／Ｏサーバ１３６は、複数の独立したファイルシステムインスタンスを実行することができ、それらの各々は、全体の記憶容量の一部の管理を担ってもよい。以下により詳細に説明されるように、これらのファイルシステムインスタンスは、Ｏｒａｃｌｅ  ＺＦＳファイルシステムを含み得る。Ｉ／Ｏサーバ１３６は、読み取りおよび／または書き込みデータアクセス要求を受信することによってクライアントデバイスと通信するためのホストポート１２４を含むブレードおよび／またはスタンドアロンサーバを備えることができる。ホストポート１２４は、各Ｉ／Ｏ要求をサービス処理するために正しいデータストレージコントローラ１２８を識別する外部インターフェースプロバイダ１２６と通信することができる。データストレージコントローラ１２８は各々、後述する１以上のストレージアプライアンス１２０内のデータ内容の一部を排他的に管理することができる。したがって、各データストレージコントローラ１２８は、ストレージプールの論理部分にアクセスし、外部インターフェースプロバイダ１２６から受信されるデータ要求を、それら自身のデータ内容にアクセスすることによって満たすことができる。データストレージコントローラ１２８を介したリダイレクションは、ホストポート１２４からの各Ｉ／Ｏ要求を、Ｉ／Ｏサーバ１３６上で実行され要求されたブロックを担当するファイルシステムインスタンス（例えば、ＺＦＳインスタンス）にリダイレクションすることを含み得る。例えば、これは、１つのＩ／Ｏサーバ１３６−１上のホストポート１２４−１から別のＩ／Ｏサーバ１３６−ｎ上のＺＦＳインスタンスへのリダイレクションを含み得る。このリダイレクションは、利用可能な記憶容量の任意の部分に任意のホストポート１２４から到達することを可能にし得る。次いで、ＺＦＳインスタンスは、要求を完了するために、必要なダイレクトＩ／Ｏトランザクションをストレージプール内の任意のストレージデバイスに発行することができる。次いで、確認応答および／またはデータが、発信元ホストポート１２４を介してクライアントデバイスに転送し戻されてもよい。
【００２６】
低レイテンシのメモリマップネットワークは、ホストポート１２４、任意のファイルシステムインスタンス、およびストレージアプライアンス１２０を互いに結び付けることができる。このネットワークは、スケーラブルで高性能のクラスタを提供するために、オラクルのSun Data Center InfiniBand Switch 36などの、１以上のスイッチ回路１２２を用いて実現することができる。PCI Expressバスなどのバスプロトコルが、ストレージネットワーク内で信号をルーティングしてもよい。Ｉ／Ｏサーバ１３６とストレージアプライアンス１２０とは、ピアとして通信することができる。リダイレクショントラフィックとＺＦＳメモリトラフィックとは、両方とも同じスイッチファブリックを使用できる。
【００２７】
様々な実施形態では、ストレージアプライアンス１２０の多くの異なる構成を図１のネットワークで用いることができる。いくつかの実施形態では、Oracle ZFS Storage Applianceシリーズを用いることができる。ZFS Storage Applianceは、以下に説明するオラクルのＺＦＳファイルシステム（「ＺＦＳ」）を伴うOracle Solarisカーネルに基づくストレージを提供する。処理コア１１４は、任意の選択されたデータ保護（例えば、ミラーリング、ＲＡＩＤ−Ｚなど）、データ低減（例えば、インライン圧縮、重複など）、および任意の他の実現されるデータサービス（例えば、リモートレプリケーションなど）を実現するのに必要とされる任意の操作を処理する。いくつかの実施形態において、処理コアは、２．８ＧＨｚのIntel（登録商標）Xeon（登録商標）プロセッサの８×１５コアを含み得る。処理コアはまた、ＤＲＡＭとフラッシュ１１２との両方における記憶されたデータのキャッシングを処理する。いくつかの実施形態において、ＤＲＡＭ／フラッシュキャッシュは、３ＴＢのＤＲＡＭキャッシュを含み得る。
【００２８】
いくつかの構成では、ストレージアプライアンス１２０は、データストレージコントローラ１２８からＩ／Ｏ要求を受け取るためにＩ／Ｏポート１１６を備え得る。各ストレージアプライアンス１２０は、それ自体の内部冗長電源および冷却システムを有する一体型ラックマウントユニットを含み得る。コンセントレータボード１１０または他の同様のハードウェアデバイスを用いて複数のストレージデバイスを相互接続してもよい。メモリボード、コンセントレータボード１１０、電源、および冷却装置などの能動部品は、活線挿抜可能であり得る。例えば、ストレージアプライアンス１２０は、フラッシュメモリ１０２、不揮発性ＲＡＭ（ＮＶＲＡＭ）１０４、ハードディスクドライブ１０５の様々な構成、テープドライブ、ディスクドライブのＲＡＩＤアレイ１０８などを含み得る。これらのストレージユニットは、メモリカード、電力、冷却および相互接続の活線挿抜ならびに内部冗長性を伴う高可用性のために設計されてもよい。いくつかの実施形態では、ＲＡＭは、電力損失時にそれを専用フラッシュにバックアップすることによって、不揮発性にすることができる。フラッシュカードとＮＶＲＡＭカードとの組み合わせは設定可能であり、どちらも同じコネクタおよびボードプロファイルを使用できる。
【００２９】
明示的には示されていないが、各Ｉ／Ｏサーバ１３６は、グローバル管理プロセス、またはデータストレージシステムマネージャを実行することができ、これは、グローバルなフラッシュウェアレベリング、設定変更、および／または障害回復のために、容量をＺＦＳインスタンス間で再割り当てする必要があるときに介入する、擬似静的「ロータッチ」アプローチにおいてストレージシステムの動作を監督し得る。個々のＺＦＳインスタンス間で容量を分割する「分割統治」戦略により、パフォーマンス、接続性、および容量の高度なスケーラビリティが可能になる。追加のパフォーマンスは、より多くのＩ／Ｏサーバ１３６を水平方向に追加し、次いで、１つのＺＦＳインスタンスあたりより少ない容量、および／または１つのＩ／Ｏサーバ１３６あたりより少ないＺＦＳインスタンスを割り当てることによって、達成され得る。より高速のサーバを用いることで、パフォーマンスを垂直方向にスケーリングすることもできる。Ｉ／Ｏサーバ１３６内の利用可能なスロットを埋め、次いで追加のサーバを追加することによって、追加のホストポートを追加してもよい。追加のストレージアプライアンス１２０を追加し、新たなまたは既存のＺＦＳインスタンスに新たな容量を割り当てることによって、追加の容量を達成することもできる。
【００３０】
図２は、本開示のいくつかの実施形態による、図１のストレージ環境を含むストレージ環境において実行され得る例示的なネットワークファイルシステム２００のインスタンスを示す。例えば、ファイルシステム２００は、非常に大きな容量（１２８ビット）、データ完全性、常に一貫性のあるオンディスクフォーマット、自己最適化性能、およびリアルタイムリモートレプリケーションを提供するOracle ZFSファイルシステム（「ＺＦＳ」）を含むことができる。他の方法の中でも、ＺＦＳは、少なくとも別途のボリュームマネージャの必要性を排除することによって、従来のファイルシステムとは異なる。代わりに、ＺＦＳファイルシステムは、ストレージデバイスの共通ストレージプールを共有し、ボリュームマネージャおよびファイルシステムの両方として機能する。したがって、ＺＦＳには、物理ディスクおよびボリューム（それらの状態、ステータス、ボリュームへの論理配置を、それらに記憶されるすべてのファイルとともに含む）の両方に関する完全な知識がある。ファイルシステム容量要件が時間の経過とともに必要に応じて動的に増減するよう変化するにつれ、デバイスのプールに対する追加または削除を、基底のストレージプールを再分割する必要なく行うことができる。
【００３１】
特定の実施形態では、システム２００はオペレーティングシステムを介してアプリケーション２０２と対話することができる。オペレーティングシステムは、ファイルシステムと対話する機能を含むことができ、ファイルシステムはストレージプールとインターフェースする。オペレーティングシステムは典型的には、システムコールインターフェース２０８を介してファイルシステム２００とインターフェースする。システムコールインターフェース２０８は、従来の、ファイルを読み取る、書き込む、開く、閉じるなどの動作、ならびにＶＦＳアーキテクチャに特有のＶＮＯＤＥ操作およびＶＦＳ操作を提供する。システムコールインターフェース２０８は、ファイルシステムとしてのＺＦＳと対話するための主要インターフェースとして機能することができる。この層は、データ管理ユニット（ＤＭＵ）２１８の間に存在し、そこに記憶されているファイルおよびディレクトリのファイルシステム抽象化を提示する。システムコールインターフェース２０８は、ファイルシステムインターフェースと基底のＤＭＵ２１８インターフェースとの間のギャップを橋渡しする役割を果たすことができる。
【００３２】
システムコールインターフェース２０８のＰＯＳＩＸ層に加えて、ファイルシステム２００のインターフェース層は、クラスタ／クラウドコンピューティングデバイス２０４と対話するための分散型ファイルシステムインターフェース２１０も提供することができる。例えば、サイズが小さなワークグループクラスタから大規模なマルチサイトクラスタまでの範囲にわたるコンピュータクラスタ用のファイルシステムを提供するために、Lustre（登録商標）インターフェースを提供してもよい。ボリュームエミュレータ２１２は、ブロック／キャラクタデバイスとして用いることができる論理ボリュームを作成するためのメカニズムも提供することができる。ボリュームエミュレータ２１２は、クライアントシステムがブロックとキャラクタとを区別することを可能にするだけでなく、クライアントシステムが所望のブロックサイズを指定することを可能にし、それによって「シンプロビジョニング」として知られるプロセスにおいて、より小さい疎なボリュームを作成することを可能にする。ボリュームエミュレータ２１２は外部デバイスへのｒａｗアクセス２０６を提供する。
【００３３】
インターフェース層の下には、トランザクショナルオブジェクト層がある。この層は、システムクラッシュ時に再生することができるデータセットごとのトランザクション履歴を記録するように構成されたインテントログ２１４を提供する。ＺＦＳでは、インテントログ２１４は、ファイルシステムを変更するシステムコールのトランザクションレコードを、システムコールをリプレイすることができるよう十分な情報とともにメモリ内に保存する。これらは、ＤＭＵ２１８がそれらをストレージプールにコミットし、それらが破棄され得るかまたはフラッシュされるまで、メモリに保存される。電源障害および／またはディスク障害が発生した場合、インテントログ２１４のトランザクションを再生して、ストレージプールを最新かつ一貫性のある状態に保つことができる。
【００３４】
トランザクショナルオブジェクト層はまた、オブジェクト内で任意の｛キー，値｝関連付けをすることによってシステムコールインターフェース２０８のＰＯＳＩＸ層内にディレクトリを実現するために用いられ得る属性プロセッサ２１６を提供する。属性プロセッサ２１６は、ＤＭＵ２１８の上に位置するモジュールを含むことができ、ＺＦＳ内で「ＺＡＰオブジェクト」と呼ばれるオブジェクトに対して動作することができる。ＺＡＰオブジェクトは、データセットについてのプロパティを記憶する、ファイルシステムオブジェクトをナビゲートする、および／またはストレージプールプロパティを記憶するのに用いることができる。ＺＡＰオブジェクトには２つの形式：「マイクロザップ」オブジェクトと「ファットザップ」オブジェクトがあってもよい。マイクロザップオブジェクトは、ファットザップオブジェクトの軽量バージョンであってもよく、少数の属性エントリに対して単純かつ高速のルックアップメカニズムを提供してもよい。ファットザップオブジェクトは、より大きなディレクトリ、より長いキー、より長い値など、多数の属性を含むＺＡＰオブジェクトに、より適している。
【００３５】
トランザクショナルオブジェクト層はまた、ＤＭＵオブジェクトを階層的名前空間に集約するデータセットおよびスナップショット層２２０も提供し、オブジェクトセットのプロパティ間の関係を記述および管理するためのメカニズムを提供する。これにより、プロパティの継承、ならびにストレージプールでの割り当ておよび予約の強制実施が可能になる。ＤＭＵオブジェクトは、ＺＦＳファイルシステムオブジェクト、クローンオブジェクト、ＣＦＳボリュームオブジェクト、およびスナップショットオブジェクトを含んでもよい。したがって、データおよびスナップショット層２２０は、スナップショットおよびクローンオブジェクトセットを管理することができる。スナップショットは、特定の時点におけるファイルシステム、クローン、および／またはボリュームの読み取り専用バージョンに対応し得る。クローンはスナップショットに源を発し、それらの初期の内容はそれらが源を発するスナップショットのそれと同じである。クローンはその起源を除いてファイルシステムと同一であってもよい。ＺＦＳでは、スナップショットはシステム再起動後にわたって保持されるため、別途のストレージプールを用いる必要はない。代わりに、スナップショットは、それらが作成されたファイルシステムまたはボリュームと同じストレージプールから直接ディスク空間を消費する。スナップショットは、１つのアトミック表現として素早く再帰的に作成できる。スナップショットは、クローン化、バックアップ、ロールバックなどができる。通常、スナップショットは、ソフトウェアのインストールやシステムのアップグレードなどの危険なアクションが実行される前に、現在の安定したファイルシステムをバックアップするための高速で効率的な方法を提供する。
【００３６】
ＤＭＵ２１８は、ストレージプールによって提示されるフラットアドレス空間の上に構築されるトランザクショナルオブジェクトモデルを提示する。上述のモジュールは、オブジェクトセット、オブジェクト、およびトランザクションを介してＤＭＵ２１８と対話し、ここでオブジェクトは、データブロックのコレクションなど、ストレージプールからのストレージの一部である。ＤＭＵ２１８を介した各トランザクションは、グループとしてストレージプールにコミットされる一連の操作を含む。これは、ディスク上の一貫性がファイルシステム内で維持されるメカニズムである。別の言い方をすれば、ＤＭＵ２１８はインターフェース層から命令を受け取り、それらをトランザクションバッチに変換する。データブロックを要求し、単一の読み取り／書き込み要求を送信するのではなく、ＤＭＵ２１８は、これらを、ディスクアクティビティが発生する前に最適化することができるオブジェクトベースのトランザクションのバッチにまとめることができる。これが行われると、トランザクションのバッチはストレージプール層に渡され、要求されたデータブロックを取得／書き込みするために必要な生のＩ／Ｏトランザクションをスケジュールして集計する。以下に説明するように、これらのトランザクションはコピーオンライト（ＣＯＷ）ベースで書き込まれるため、トランザクションジャーナリングは不要である。
【００３７】
ストレージプール層、または単に「ストレージプール」は、ストレージプールアロケータ（ＳＰＡ）と呼ばれ得る。ＳＰＡは、ストレージプール設定を操作するためのパブリックインターフェースを提供する。これらのインターフェースは、様々な記憶媒体を作成、破棄、インポート、エクスポート、およびプールし、ストレージプールの名前空間を管理できる。いくつかの実施形態では、ＳＰＡは、ＳＰＡのためのメモリ管理のための中心点として機能する適応置換キャッシュ（ＡＲＣ）２２２を含み得る。従来、ＡＲＣはキャッシュ管理のための基本的な最長未使用時間（ＬＲＵ）オブジェクト置換アルゴリズムを提供する。ＺＦＳでは、ＡＲＣ２２２は、Ｉ／Ｏ作業負荷に基づいて調整することができる自己調整キャッシュを含む。さらに、ＡＲＣ２２２は、ＤＭＵ２１８によって用いられるデータ仮想アドレス（ＤＶＡ）を定義する。いくつかの実施形態では、ＡＲＣ２２２は、高いスループットを維持するためにメモリ圧力の結果としてキャッシュからメモリバッファを立ち退かせる能力を有する。
【００３８】
ＳＰＡはまた、ＡＲＣ２２２からのＤＶＡを後述の各仮想デバイス（ＶＤＥＶ）２２６内の論理位置に変換するＩ／Ｏパイプライン２２４または「Ｉ／Ｏマネージャ」を含むことができる。Ｉ／Ｏパイプライン２２４は、アクティブＶＤＥＶにわたる動的ストライピング、圧縮、チェックサム機能、およびデータ冗長性を推進する。図２には明示的に示されていないが、Ｉ／Ｏパイプライン２２４は、ストレージプールからデータを読み取りおよび／またはそこにデータを書き込むためにＳＰＡによって用いられ得る他のモジュールを含み得る。例えば、Ｉ／Ｏパイプライン２２４は、圧縮モジュール、暗号化モジュール、チェックサムモジュール、およびメタスラブアロケータを含むことができるが、これらに限定されない。圧縮モジュールは、より大きい論理ブロックをより小さいセグメントに圧縮することができ、ここでセグメントは物理ディスク空間の領域である。暗号化モジュールは、不正アクセスを防止するために用いられ得る様々なデータ暗号化アルゴリズムを提供し得る。チェックサムモジュールは、以下により詳細に説明されるように、ストレージプール階層内でデータおよびメタデータについてチェックサムを計算することができる。チェックサムは、例えば、データが破損していないことを確認するために使用できる。いくつかの実施形態では、ＳＰＡは、メタスラブアロケータを用いて、ストレージプール内の記憶空間の割り当てを管理することができる。
【００３９】
ＺＦＳでは、ストレージプールはＶＤＥＶのコレクションで構成されてもよい。特定の実施形態では、ストレージプールの少なくとも一部は、自己記述型マークルツリー、すなわちデータとメタデータとの両方が論理ツリーのＶＤＥＶによって記憶される論理ツリーとして表すことができる。仮想デバイスには２つの種類がある。リーフＶＤＥＶと呼ばれる物理仮想デバイスと、内部ＶＤＥＶと呼ばれる論理仮想デバイスである。物理ＶＤＥＶは、ハードディスクまたはフラッシュドライブなどの書き込み可能メディアブロックデバイスを含み得る。論理ＶＤＥＶは、物理ＶＤＥＶを概念的にグループ化したものである。ＶＤＥＶは、ツリー状に、物理ＶＤＥＶが該ツリーのリーフとして存在する状態で、配置できる。ストレージプールには、ツリーのルートとなる「ルートＶＤＥＶ」と呼ばれる特別な論理ＶＤＥＶがあってもよい。ルートＶＤＥＶの直接の子（物理的または論理的）はすべて「最上位」ＶＤＥＶと呼ばれる。一般に、ＶＤＥＶはデータのレプリケーション、ミラーリング、およびＲＡＩＤ−ＺやＲＡＩＤ−Ｚ２などのアーキテクチャを実現する。各リーフＶＤＥＶは、ファイルシステムによって提供されるデータを実際に記憶する１以上の物理ストレージデバイス２２８を表す。
【００４０】
いくつかの実施形態では、ファイルシステム２００は、データとメタデータとの両方がオブジェクトとして記憶されるオブジェクトベースのファイルシステムを含み得る。より具体的には、ファイルシステム２００は、データと対応するメタデータとの両方をストレージプールに記憶する機能を含み得る。特定の操作（すなわち、トランザクション）を実行する要求は、オペレーティングシステムからシステムコールインターフェース２０８を介してＤＭＵ２１８に転送され、ＤＭＵ２１８は、オブジェクトに対して操作を実行する要求を、ストレージプール内での物理位置で読み取りまたは書き込み操作を実行する要求（つまり、Ｉ／Ｏ要求）に、直接変換する。ＳＰＡはＤＭＵ２１８から要求を受信し、ＣＯＷプロシージャを用いてブロックをストレージプールに書き込む。ＣＯＷトランザクションはファイルへのデータ書き込み要求に対して実行されてもよい。書き込み操作で既存のブロックを上書きするのではなく、書き込み要求により、修正されたデータに対して新たなセグメントが割り当てされる。したがって、取得されたデータブロックおよび対応するメタデータは、データブロックおよびメタデータの修正バージョンがコミットされるまで、決して上書きされない。したがって、ＤＭＵ２１８は、すべての修正されたデータブロックをストレージプール内の未使用セグメントに書き込み、その後、対応するブロックポインタをストレージプール内の未使用セグメントに書き込む。ＣＯＷトランザクションを完了するために、ＳＰＡは修正されたデータブロックを参照するようＩ／Ｏ要求を発行する。
【００４１】
図３Ａ〜図３Ｄは、本開示のいくつかの実施形態による、ファイルシステム２００などのファイルシステムのためのＣＯＷプロセスを示す。例えば、上記のＺＦＳシステムは、ファイルシステム内のすべてのブロックポインタが、ターゲットブロックの読み取り時に検証される当該ターゲットブロックの２５６ビットチェックサムを含み得る、ＣＯＷトランザクショナルモデルを用いる。上述したように、アクティブなデータを含むブロックはその場で上書きされない。代わりに、新たなブロックが割り当てられ、修正されたデータがそれに書き込まれ、それを参照しているメタデータブロックが単純に読み取され、再割り当てされ、そして再書き込みされる。新たなデータが書き込まれるとき、古いデータを含むブロックは保持され、ファイルシステムのスナップショットバージョンを維持できる。スナップショット内のすべてのデータはすでに記憶されているため、スナップショットは迅速に作成できる。変更されていないデータはファイルシステムおよびそのスナップショットの間で共有されるため、スナップショットは空間効率が非常に高くもある。
【００４２】
図３Ａは、いくつかの実施形態による、１以上のファイルに対応するデータおよびメタデータのファイルシステムストレージの論理ツリー３００としての簡易スナップショットを示す。論理ツリー３００、および本明細書で説明されている他の論理ツリーは、データおよびメタデータが論理ツリー３００のブロックとして記憶される自己記述型のマークルツリーであり得る。ルートブロック３０２は、論理ツリー３００のルート、すなわち「ユーバーブロック（uberblock）」を表してもよい。論理ツリー３００は、ルート３０２の各子ノード３０４、３０６を通ってナビゲートすることによってファイルおよびディレクトリを通ってトラバースすることができる。各非リーフノードは、ノード３０８、３１０、３１２、および３１４などのディレクトリまたはファイルを表す。いくつかの実施形態では、各非リーフノードは、その子ノードの値のハッシュを割り当てられてもよい。各リーフノード３１６、３１８、３２０、３２２は、ファイルのデータブロックを表す。
【００４３】
図３Ｂは、書き込み操作の初期段階後の論理ツリー３００−１のスナップショットを示す。この例では、ノード３２４および３２６によって表されるデータブロックはファイルシステム２００によって書き込まれている。ノード３１６および３１８内のデータを上書きする代わりに、新たなデータブロックがノード３２４および３２６に割り当てられる。したがって、この操作の後、ノード３１６および３１８内の古いデータは、ノード３２４および３２６内の新たなデータとともにメモリ内に存続する。
【００４４】
図３Ｃは、書き込み操作が続くときの論理ツリー３００−２のスナップショットを示す。ノード３２４および３２６において新たに書き込まれたデータブロックを参照するために、ファイルシステム２００は、古いノード３１６および３１８を参照するノード３０８および３１０を判断する。新たなノード３２８および３３０が、ノード３２４および３２６内の新たなデータブロックを参照するために割り当てられる。変更されたノードを参照する各ノードが新たなノードを指すように再割り当てされるまで、同じプロセスがファイルシステム階層を通して上方向に再帰的に繰り返される。
【００４５】
ポインタブロックが階層内の新たなノードに割り当てられると、各ノードのアドレスポインタは、メモリ内の割り当てられた子の新たな位置を指すように更新される。さらに、各データブロックは、アドレスポインタによって参照されるデータブロックによって計算されるチェックサムを含む。例えば、ノード３２８内のチェックサムは、ノード３２４内のデータブロックを用いて計算される。この構成は、チェックサムが、それが計算されるデータブロックとは別に記憶されることを意味する。これにより、新たなデータが書き込まれることのない、いわゆる「ゴースト書き込み」を防ぐことができるが、データブロックとともに記憶されるチェックサムは、そのブロックが正しかったことを示すであろう。論理ツリー３００の完全性は、論理ツリー３００をトラバースし、子ノードに基づいて各レベルでチェックサムを計算することによって、迅速にチェックすることができる。
【００４６】
書き込み操作を確定させるために、ルート３０２を再割り当てして更新することができる。図３Ｄは、書き込み操作の終わりにおける論理ツリー３００−３のスナップショットを示す。ルート３０２が更新される準備ができると、新たに割り当てられた子ノード３３２および３３４を指すように、新たなユーバーブロックルート３３６を割り当てて初期化することができる。次いで、ルート３３６は、論理ツリー３００−３の状態を確定するために、アトミック操作において論理ツリー３００−３のルートにすることができる。
【００４７】
本明細書で説明されている実施形態は、図１〜図３で上述されているシステムで実施され得る。例えば、システムは、図１の様々なサーバ、ストレージアプライアンス、および／またはスイッチング回路の１以上のプロセッサを備えることができる。１以上のプロセッサにファイルシステムの機能に影響を及ぼす様々な動作を実行させる命令をシステムの１以上のメモリデバイスに記憶することができる。様々な方法のステップを、図１〜図２のシステムのプロセッサ、メモリデバイス、インターフェース、および／または回路によって実行することができる。
【００４８】
ここで図４を参照して、図４は、本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステム４００の一例を示すハイレベル図である。ハイブリッドクラウドストレージシステム４００は、ＺＦＳファイルシステムなどのネットワークファイルシステムを、ファイルシステムデータサービスを含むファイルシステムの機能がファイルシステムから遠隔のクラウドオブジェクトストアに重層されるクラウド対応ファイルシステムに変換することができる。示される図のように、ハイブリッドクラウドストレージシステム４００は、ネットワークファイルシステム２００（本明細書では「ローカルファイルシステム２００」とも呼ばれる）を含むことができる。ローカルファイルシステム２００は、クラウドオブジェクトストレージ４０４に通信可能に結合することができる。いくつかの実施形態では、クラウドオブジェクトストレージ４０４は、図２に示されるクラスタ／クラウド２０４に対応し得る。ローカルファイルシステム２００は、クラウドインターフェースアプライアンス４０２を介してクラウドオブジェクトストレージ４０４に通信可能に結合することができる。クラウドインターフェースアプライアンス４０２は、クラウドオブジェクトストア４０４のためのアクセスポイントとしてローカルファイルシステム２００によって用いられてもよい。
【００４９】
ハイブリッドクラウドストレージシステム４００は、クラウドオブジェクトストレージの従来の制限を克服するための解決策を提供する。従来のクラウドオブジェクトプロトコルは、制限されたデータ／オブジェクトアクセスセマンティクスに制限されている。クラウドオブジェクトストアは、従来、インターフェースおよびプリミティブが制限されており、ＰＯＳＩＸ準拠ではない。例えば、いったんオブジェクトが書き込まれると、そのオブジェクトはそれ以降は修正できず、それは、削除され、新たに作成したオブジェクトに置き換えられるだけである。別の例として、従来のクラウドオブジェクトストレージは、名前空間が単純化され最上位のコンテナのみに限定されるように、名前空間の制限を有する。しかしながら、ハイブリッドクラウドストレージシステム４００は、クラウドオブジェクトストア４０４との間でデータを移行できるだけでなく、クラウドベースのストレージを提供するようクラウドオブジェクトストレージへのクラウドオブジェクトインターフェース上にローカルファイルシステム２００のファイルシステム機能を重層することもできる。
【００５０】
ローカルファイルシステム２００は、ＰＯＳＩＸインターフェースおよびセマンティクス用に構成することができる。例えば、ローカルファイルシステム２００は、ファイルとしてのデータへのアクセスをユーザに提供し、ファイルを書き換えることなくファイルの内容を修正することを可能にする。ローカルファイルシステム２００は、ＺＦＳファイルシステムに典型的であるように、名前階層におけるデータの編成も提供することもできる。ＺＦＳファイルシステムのすべての機能は、ローカルファイルシステム２００のユーザに利用可能であり得る。クラウドインターフェースアプライアンス４０２は、クラウドオブジェクトプロトコルの上にファイルシステムセマンティクスを重層することを可能にし（例えば、名前空間を構築する、ファイルを作成する、ディレクトリを作成するなどの能力を提供し）、そのような能力をクラウドオブジェクトストレージ４０４との間で移行されるデータに関して拡張してしてもよい。クラウドインターフェースアプライアンス４０２は、プラグアンドプレイオブジェクトストレージソリューションを容易にすることにより、ＺＦＳファイルシステムデータサービスをサポートしながら、ローカルファイルシステム２００を改善することができる。
【００５１】
クラウドインターフェースアプライアンス４０２は、オブジェクトＡＰＩ（アプリケーションプログラミングインターフェース）を提供するように構成されてもよい。いくつかの実施形態では、クラウドインターフェースアプライアンス４０２は、いくつかのＡＰＩ変換プロファイルを用いるように構成され得る。特定の実施形態によれば、ＡＰＩ変換プロファイルは、クラウドストレージと対話するように本来設計されていない可能性があるモジュールおよび機能（例えばデータサービスおよびモジュール）、ＰＯＳＩＸインターフェースおよびセマンティクス、ならびに他のコンポーネントを統合することができる。ＡＰＩ変換プロファイルは、いくつかの実施形態では、クラウドデータストア４０４との対話を可能にするために（例えば、ＡＰＩコールによって）ファイルシステム２００のプロトコル、フォーマット、およびルーチンを変換することができる。そのような統合のための情報は、クラウドインターフェースアプライアンス４０２と同じ場所に配置され得るかまたはそうでなければクラウドインターフェースアプライアンス４０２に通信可能に結合され得るＡＰＩ変換データストアに記憶され得る。クラウドインターフェースアプライアンス４０２は、その情報を利用して、ＰＯＳＩＸインターフェースおよびセマンティクスを密接に統合して、セマンティクスを維持しながら、クラウドデータストア４０４とインターフェースをとってもよい。
【００５２】
ハイブリッドクラウドストレージシステム４００は、ローカルファイルシステム２００がクラウドオブジェクトストレージ４０４を「ドライブ」として用いることを可能にし得る。様々なインスタンスにおいて、ファイル４１０は、メタデータオブジェクトとともにデータオブジェクトとして、および／または関連するメタデータとともにデータブロックとして、記憶されてもよい。クラウドインターフェースアプライアンス４０２は、ローカルファイルシステム２００との間でファイル４１０を送受信することができる。様々な実施形態において、ローカルファイルシステム２００は、ＮＦＳ（ネットワークファイルシステム）プロトコル、ＳＭＢ（サーバメッセージブロックプロトコル）などを介してファイル４１０を送受信することができる。いくつかの実施形態では、クラウドインターフェースアプライアンス４０２は、ファイル４１０をオブジェクト４１２に変換することができる。ファイル４１０の変換は、いずれもファイル４１０に対応し得る、データブロックおよび関連するメタデータおよび／またはメタデータオブジェクトに関連するデータオブジェクトを変換することを含むことができる。いくつかの実施形態では、変換は、クラウドインターフェースアプライアンス４０２がいくつかのＡＰＩ変換プロファイルを用いてＡＰＩ変換を実行することを含み得る。いくつかの実施形態によれば、変換は、クラウドインターフェースアプライアンス４０２がファイル４１０、オブジェクト、および／またはブロックからデータおよび／またはメタデータを抽出することを含み得る。クラウドインターフェースアプライアンス４０２は、抽出されたデータを少なくとも部分的に用いることによって、ファイル４１０、オブジェクト、および／またはブロックをクラウドストレージオブジェクトに変換することができる。いくつかの実施形態では、クラウドインターフェースアプライアンス４０２は、抽出データが、クラウドオブジェクトストア４０４に向けられるｐｕｔ要求に埋め込まれた、対応するクラウドストレージオブジェクトを作成することができる。同様に、クラウドデータストア４０４にインターフェースするためにクラウドインターフェースアプライアンス４０２が行う変換のいずれかを用いて、クラウドインターフェースアプライアンス４０２は、いくつかの実施形態では、ローカルファイルシステム２００のローカルコンポーネントとインターフェースするために、変換プロセスを逆転し得る。
【００５３】
クラウドインターフェースアプライアンス４０２は、クラウドオブジェクトストレージ４０４との間でオブジェクト４１２を転送および受信することができる。いくつかの実施形態では、クラウドインターフェースアプライアンス４０２は、ＨＴＴＰＳなどを介してオブジェクト４１２を送受信することができる。いくつかの実施形態では、クラウドインターフェースアプライアンス４０２は、ローカルファイルシステム２００と同じ場所に配置されてもよい。他の実施形態では、クラウドインターフェースアプライアンス４０２は、少なくともなんらかの機器がクラウドオブジェクトストア４０４を容易にする状態で、または他の何らかの通信可能に結合されたサイトでなど、ローカルファイルシステム２００から離れて配置され得る。
【００５４】
本明細書でさらに開示されるように、ローカルファイルシステム２００内のファイルは、「ディスクブロック」、つまりファイルに対応するデータオブジェクトおよびメタデータが論理ツリー３００（例えば、データおよびメタデータがブロックとして記憶される自己記述型のマークル木）として記憶される仮想記憶ブロックとして記憶され得る。クラウドインターフェースアプライアンス４０２は、データのツリー３００内の各論理ブロックからクラウドオブジェクトストア４０４内のクラウドオブジェクト４１４への直接マッピング４０６を作成することができる。いくつかの実施形態は、１対１のブロック対オブジェクトマッピングを採用し得る。追加的または代替的に、他の実施形態は、例えば複数のブロックを１つのクラウドオブジェクトにマッピングするために、クラウドオブジェクトに対するブロックの、他の任意の好適な比率を用いることができる。そのような実施形態のいくつかのインスタンスでは、ブロックの論理ツリー全体を単一のクラウドオブジェクトにマッピングすることができる。他のインスタンスでは、ブロックの論理ツリーの一部のみが単一のクラウドオブジェクトにマッピングされ得る。
【００５５】
いくつかの実施形態では、ブロックがクラウドオブジェクトに変換されると、アドレスポインタが更新される。ブロックが１対１のブロック対オブジェクト変換方式でクラウドオブジェクトに変換されるとき、階層内の非リーフクラウドオブジェクトがクラウドオブジェクトストア４０４内の子クラウドオブジェクトを指すようにアドレスポインタを更新することができる。例として、アドレスポインタは、子クラウドオブジェクトのオブジェクト名およびパス指定に対応することができ、それは、オブジェクト名、バケット指定などのようなパラメータを含み得る。したがって、いくつかの実施形態は、論理ツリー３００のブロックを論理ツリー３００Ａのクラウドオブジェクトに変換することができる。いくつかの実施形態では、そのような変換は、クラウドオブジェクトのアドレスポインタを利用してクラウドインターフェースアプライアンス４０２がクラウドオブジェクトの論理ツリー３００Ａをトラバースすることを可能にし得る。
【００５６】
いくつかの実施形態では、論理ツリー３００の一部が１つのクラウドオブジェクトに変換されるようにブロックが複数対１のブロック対オブジェクト変換方式でクラウドオブジェクトに変換されると、論理ツリー３００Ａを構成するクラウドオブジェクトのアドレスポインタは、階層内の非リーフクラウドオブジェクトがクラウドオブジェクトストア４０４内の子クラウドオブジェクトを指すように、同様に、ただしより低い粒度に更新されてもよい。そのような変換は、１対１のブロック対オブジェクト変換方式によって容易されるトラバーサルよりも粒度は低いが、より速い態様で、クラウドインターフェースアプライアンス４０２がクラウドオブジェクトのアドレスポインタを利用してクラウドオブジェクトの論理ツリー３００Ａをトラバースできるようにしてもよい。さらに、いくつかの実施形態では、チェックサムを変換プロセスとともに更新してもよい。個々のクラウドオブジェクトのチェックサムを更新し、親クラウドオブジェクトに別々に保存することができる。複数対１のブロック対オブジェクト変換方式を採用する変換では、ブロックのセットに対応するクラウドオブジェクトに対して単一のチェックサムを計算することができる。
【００５７】
したがって、マッピング４０６の実現により、１以上のネットワークを介したクラウドオブジェクトストア４０４への通信が可能になり、クラウドオブジェクトストア４０４とのインターフェースは、ブロックベースではなくオブジェクトベースであってもよい。本明細書でさらに開示されるように、クラウドインターフェースアプライアンス４０２がローカルファイルシステム２００とクラウドオブジェクトストア４０４との間にある状態で、ハイブリッドクラウドストレージシステム４００は、従来のＺＦＳファイルシステムとは異なる特性および障害モードを有し得る。クラウドインターフェースアプライアンス４０２は、クライアント側でローカルファイルシステム２０２のファイルシステムインターフェースを変換することができ、データを読み書きするためにクラウドオブジェクトストア４０４にオブジェクトプロトコルを介して調整することができる。クラウドインターフェースアプライアンス４０２を介して、クラウドオブジェクト４１４は、ＮＦＳ、ＳＭＢなどを介してローカルファイルシステム２００によってアクセス可能なままであり得る。
【００５８】
論理ブロックとしてのクラウドオブジェクト４１４のマッピング４０６を用いて、クラウドオブジェクト４１４のコレクションを、自己完結型コレクションとしてＺＦＳストレージプールをホストするドライブを形成するようにグループ化してもよい。ドライブの内容は、割り当てられた論理ブロックに対してのみクラウドオブジェクトが作成されるように、弾力性があってもよい。いくつかの実施形態では、クラウドインターフェースアプライアンス４０２は、（例えば、異なるデータ型に対して）可変オブジェクトサイズを割り当てて、より大きなストレージの柔軟性を可能にする能力を有してもよい。データは特定のバイトサイズに限定される必要はない。必要に応じてメタデータを修正することによってストレージサイズを拡張してもよい。いくつかの実施形態では、クラウドベースのプールを任意のサーバ上にインポートしてもよい。インポートされると、クラウドベースのプールは、すべてのＺＦＳサービスがクラウドベースのプールに対してサポートされるローカルストレージとして現れ得る。クラウドベースのプールは、新たなタイプのストレージプールとして示されてもよい。それでも、ユーザの観点からは、クラウドベースのプールからのデータは、ネイティブプールと区別がつかないように見えてもよい。
【００５９】
図５は、本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステム４００の例示的なネットワークファイルシステム２００−１のインスタンスを示す。ファイルシステム２００−１はファイルシステム２００に対応し得るが、クラウドデバイス管理はＺＦＳ制御スタックに直接統合される。ファイルシステム２００に関して開示されたものを超えて、ファイルシステム２００−１は、ファイルシステム２００−１のための記憶媒体としてクラウドオブジェクトストア４０４の活用を容易にするクラウドインターフェースデバイス５０２を含み得る。クラウドインターフェースデバイス５０２は、少なくとも部分的にクラウドストレージをデバイス抽象化にマッピングすることによって、クラウドドライブを容易にすることができる。
【００６０】
いくつかの実施形態では、クラウドインターフェースデバイス５０２は、ＺＦＳファイルシステムアーキテクチャ内の別のＶＤＥＶタイプのデバイスドライバインターフェースの１以上のＶＤＥＶに対応し得る。ＺＦＳは、クラウドインターフェースデバイス５０２と直接通信することができる。クラウドインターフェースデバイス５０２は、ファイルシステム２００−１のドライバ層の真上の仮想デバイス層にあってもよい。クラウドインターフェースデバイス５０２のいくつかの実施形態は、ＺＦＳアーキテクチャ内のデバイスドライバインターフェースの抽象化に対応し得る。ファイルシステム２００−１の他のコンポーネントは、クラウドインターフェースデバイス５０２と、あたかもそれがＶＤＥＶ２２６などの別のデバイスタイプの別のＶＤＥＶであるかのように、通信することができる。他のＶＤＥＶ２２６よりもクラウドインターフェースデバイス５０２を介して、より多くの情報を通過させることを可能にするために、クラウドインターフェースデバイス５０２に関連するインターフェースは、より多くの情報をＩ／Ｏパイプライン２２４およびクラウドインターフェースデバイス５０２を通してクラウドオブジェクトデータストア４０４に渡すために、より広くてもよい。
【００６１】
いくつかの実施形態では、クラウドインターフェースデバイス５０２は、クライアント側でファイルシステムインターフェースを変換してもよい。いくつかの実施形態では、完全なＰＯＳＩＸファイルシステムセマンティクスを提供するために、クラウドインターフェースデバイス５０２は、ファイルシステムインターフェース要求を、クラウドオブジェクトストア４０４に向けられたオブジェクトインターフェース要求に変換してもよい。いくつかの実施形態では、クラウドインターフェースデバイス５０２は、データを読み書きするために、オブジェクトプロトコルを介してクラウドオブジェクトストア４０４に通信することが可能であり得る。
【００６２】
図６は、本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステム４００−１のクラウドインターフェースアプライアンス４０２−１の追加の局面を示す図である。図示された例に示されるように、クラウドインターフェースアプライアンス４０２のいくつかの実施形態は、仮想ストレージプール６０２およびクラウドインターフェースデーモン６０４を含み得る。仮想ストレージプール６０２はファイルシステム２００−１のカーネルにあり得、クラウドインターフェースデーモン６０４はファイルシステム２００−１のユーザ空間にあり得る。様々な実施形態において、クラウドインターフェースデーモン６０４は、図５に示されるアプリケーション２０２および／またはクラスタ／クラウド２０４のクラウドインターフェースコンポーネントに対応し得る。
【００６３】
いくつかの実施形態では、仮想ストレージプール６０２は、少なくとも１つのクラウドインターフェースデバイス５０２、インテントログ２１４−２、およびキャッシュ２２２−１を含み得る。インテントログ２１４−２およびキャッシュ２２２−１は、図１および図２に関して上に、および図７に関して以下に説明される。クラウドインターフェースデバイス５０２は、マッピング４０６に少なくとも部分的に基づいてクラウドオブジェクトデータストア４０４に関する操作を調整するようクラウドインターフェースデーモン６０４と対話することができる。クラウドインターフェースデーモン６０４は、クラウドオブジェクトデータストア４０４とインターフェースをとるためのクラウドクライアントインターフェース６０８を含み得る。いくつかの実装形態では、クラウドクライアントインターフェース６０８は、クラウドオブジェクトデータストア４０４とのSwift/S3互換性を提供するエンドポイントを含み得る。クラウドクライアントインターフェース６０８の動作は、クラウドオブジェクトデータストア４０４への読み書きアクセスを容易にするために、全データオブジェクト４１２をｇｅｔおよびｐｕｔすることに少なくとも部分的に基づいてもよい。
【００６４】
図４および図５に戻って、いくつかの実施形態による動作においては、１以上のファイルに関して１以上のトランザクションを実行する要求は、ファイルシステム２００−１のアプリケーション層でアプリケーション２０２から、ファイルシステム２００−１のインターフェース層のシステムコールインターフェース２０８を通じて受信され得る。要求はＰＯＳＦＸに準拠していてもよく、クラウドオブジェクトストア４０４に記憶される論理ツリー３００のクラウドベースのインスタンス化３００Ａに関して１以上の操作を実行するために、ファイルシステム２００−１の１以上のコンポーネントによって１以上のオブジェクトインターフェース要求に変換され得る。例えば、いくつかの実施形態では、クラウドインターフェースアプライアンス４０２は、ＰＯＳＦＸ準拠の要求、またはＰＯＳＦＸ準拠の要求によって引き起こされた中間要求を、対応するオブジェクトインターフェース要求に変換することができる。いくつかの実施形態では、ＤＭＵ２１８は、ＰＯＳＦＸ準拠の要求をＩ／Ｏ操作を実行するためのＩ／Ｏ要求に変換してもよく、クラウドインターフェースアプライアンス４０２は、Ｉ／Ｏ要求を、対応するオブジェクトインターフェース要求に変換し、マッピング４０６を用いてオブジェクトインターフェース要求を調整してもよい。
【００６５】
いくつかのインスタンスでは、トランザクションは、ファイルをローカルに記憶させるための操作に対応し得る。いくつかのインスタンスでは、ファイルシステム２００−１は、データオブジェクトおよび対応するメタデータを、１以上のＶＤＥＶ２２６および１以上の物理ストレージデバイス２２８によって提供されるシステムストレージプール４１６に記憶することができる。データオブジェクトは、１以上のファイルに対応し得る。上で開示したように、１以上のファイルに対応するデータオブジェクトおよびメタデータは、論理ツリー３００として記憶することができる。したがって、論理ツリー３００の記憶はシステムストレージプール４１６内にローカルに記憶することができる。
【００６６】
いくつかの実施形態によるさらなる操作では、ファイルシステム２００−１は、論理ツリー３００のデータオブジェクトおよび対応するメタデータをクラウドオブジェクトストア４０４に記憶させることができる。いくつかの実施形態では論理ツリー３００はクラウドストレージに移行される前に最初にローカルストレージプールに記憶され得るが、他の実施形態では論理ツリー３００はクラウドオブジェクトストア４０４に記憶される前にローカルストレージプールに記憶されなくてもよい。例えば、いくつかの実施形態は、論理ツリー３００の少なくとも一部をキャッシュ内に作成し、次いでそれをクラウドオブジェクトストア４０４に移行することができる。したがって、様々な実施形態が可能であることを理解されたい。
【００６７】
論理ツリー３００のデータオブジェクトおよび対応するメタデータをクラウドオブジェクトストア４０４に記憶するために、クラウドインターフェースデバイス５０２は、論理ツリー３００内の各論理ブロックからクラウドオブジェクトストア４０４内のそれぞれのクラウドオブジェクト４１４へのマッピング４０６を作成することができる。いくつかの実施形態では、ＤＭＵ２１８は、システムストレージプール４１６から（例えばローカルプールのＲＡＩＤＺまたはＲＡＩＤ２から）データを読み取り、そのデータを、マッピング４０６を作成するための基礎としてクラウドインターフェースデバイス５０２に与えることができる。いくつかの実施形態では、クラウドインターフェースデバイス５０２は、別のＶＤＥＶ２２６と直接的または間接的に通信して、マッピング４０６の基礎としてデータを読み取ることができる。いくつかの実施形態では、マッピング４０６は、オブジェクトを、物理ドライブ内に表されるブロックに直接マッピングすることができる。マッピング４０６は、ファイル部分をオブジェクトにマッピングするよりも精密にすることができ、それはより下位でマッピングしてもよい。したがって、マッピング４０６は、オブジェクトごとのマッピング４０６であり得る。マッピング４０６は、論理ツリー３００Ａによって示されるように、論理ツリー３００がクラウドオブジェクトストア４０４内に表されるように、仮想ストレージブロックをクラウドオブジェクトストア４０４内のオブジェクトにマッピングすることができる。ローカルファイルシステム２００−１がクラウドオブジェクトストア４０４内のデータオブジェクト４１６とインターフェースするとき、論理ツリー３００Ａは、ローカルファイルシステム２００−１が通信することができる新たなデバイスタイプに準拠する。
【００６８】
マッピング４０６は、Ｉ／Ｏ操作ごとに、またはクラウドオブジェクトストア４０４への書き込み操作とともにのみ、更新されてもよい。いくつかの実施形態では、マッピング４０６は、すべてのクラウドオブジェクト４１４をインデックス付けするオブジェクトディレクトリを含み得る。クラウドオブジェクト状態は、オブジェクトごとにインデックス付けされ得る、インデックス、テーブル、インデックス編成されたテーブルなどに保持され得る。いくつかの実施形態では、マッピング４０６は、クラウドオブジェクト４１４のうちのいくつかのみをインデックス付けするオブジェクトディレクトリを含み得る。例えば、そのような実施形態は、ユーバーブロックに対応するクラウドオブジェクト４１４のみをインデックス付けすることができる。いくつかの実施形態では、各リーフパスに対する各オブジェクトについてのクラウドオブジェクト状態がインデックス付けされ得る。いくつかの実施形態では、オブジェクトディレクトリは、オブジェクト名およびパス指定に対応し得るアドレスポインタによってクラウドオブジェクト４１４を参照することができる。いくつかの実施形態では、オブジェクトディレクトリはＵＲＬによってクラウドオブジェクト４１４を参照することができる。
【００６９】
マッピング４０６でインデックス付けされたクラウドオブジェクト状態は、オブジェクト要求をルーティングするために用いられてもよい。インデックスを利用して、クラウドインターフェースデバイス５０２は、少なくとも部分的にユーバーブロックに基づいてクラウドオブジェクトを要求することができる。第１の方法によれば、そのような要求は、論理ツリー３００Ａ全体が要求に応答して転送されるクラウドオブジェクトのセットによって表されるように、特定のユーバーブロックに関連するクラウドオブジェクトのセットを要求することを伴い得る。第２の方法によれば、そのような要求は、所望の１以上のクラウドオブジェクトがクラウドオブジェクトストア４０４から読み取られるまで論理ツリー３００Ａ全体を反復的にトラバースするために、特定のユーバーブロックに関連するクラウドオブジェクトのサブセットに対する反復要求を必要とし得る。特定の実施形態では、クラウドインターフェースデバイス５０２は、様々な論理ツリー３００Ａを表すクラウドオブジェクトのサイズに少なくとも部分的に基づいて、２つの方法のうちの一方を選択的に用いることができる。例えば、クラウドインターフェースデバイス５０２は、クラウドオブジェクトのサイズが集約サイズの閾値よりも小さいときには１つの方法を利用し、クラウドオブジェクトのサイズが集約サイズの閾値を満たすまたは超えるときには他の方法に移行することができる。
【００７０】
いくつかの実施形態は、オブジェクトディレクトリがオブジェクトごとにクラウドオブジェクトにインデックスを付け、クラウドレベルでツリーのトラバーサルなしにクラウドオブジェクトを直接要求するのに用いられることができる、別の方法を採用することができる。いくつかの実施形態は、論理ツリー３００Ａのメタデータのローカルスナップショットを保持し得る。そのような実施形態は、ローカルスナップショットを利用して、クラウドオブジェクトを直接的または間接的に要求することができる。さらに、いくつかの実施形態は、論理ツリー３００Ａに対するチェックサムをオブジェクトディレクトリまたはローカルスナップショットに保持することができ、このチェックサムは、クラウドデータストア４０４から取得されたクラウドオブジェクトを検証するために用いることができる。
【００７１】
したがって、ファイルシステム２００−１は、データのツリーを維持し、そのツリーをクラウドオブジェクトストア４０４にマッピングすることができる。ツリー３００Ａの名前空間は、ツリー３００Ａのノード内に記憶されるメタデータに対応し得る。ファイルシステム２００−１は、階層ツリー表現を用い続けてもよいが、データを記憶する方法として、階層ツリー表現をクラウドオブジェクトストアにマッピングしてもよい。
【００７２】
再び図６を参照して、クラウドオブジェクトストア４０４に関してＩ／Ｏ操作を実行するために、クラウドインターフェースデバイス５０２はクラウドインターフェースデーモン６０４に要求を送信することができる。例えば、いくつかの実装形態では、クラウドインターフェースデバイス５０２は、ファイルシステム２００−１のトランザクショナルオブジェクト層およびインターフェース層を介してクラウドインターフェースデーモン６０４に要求を送信することができる。クラウドインターフェースデバイス５０２によって送信される要求は、アプリケーション２０２を介して受信されるＰＯＳＩＸ準拠の要求に少なくとも部分的に基づいてもよく、および／または（例えば、ＰＯＳＩＸ準拠要求に応答して）ＤＭＵ２１８によって作成されるＩ／Ｏ要求に少なくとも部分的に基づいてもよく、それを、クラウドインターフェースデバイス５０２はクラウドインターフェースデーモン６０４に対する要求に変換してもよい。
【００７３】
いくつかの実施形態では、クラウドインターフェースデバイス５０２によってクラウドインターフェースデーモン６０４に送信される要求は、クラウドクライアントインターフェース６０８のためにｇｅｔ要求およびｐｕｔ要求に変換され得る。いくつかの実施形態では、クラウドインターフェースデバイス５０２によって送信される要求は、ｇｅｔ要求およびｐｕｔ要求であり得；他の実施形態では、クラウドインターフェースデーモン６０４は、クラウドインターフェースデバイス５０２によって送信された要求をｇｅｔ要求およびｐｕｔ要求に変換することができる。いずれにせよ、クラウドインターフェースデバイス５０２によって送信された要求に応答して、クラウドインターフェースデーモン６０４は、１以上のネットワークを介してオブジェクトプロトコルを介して、クラウドオブジェクトストア４０４と通信して、データオブジェクト４１４に関して、対応するＩ／Ｏ操作を実行することができる。
【００７４】
例えば、クラウドオブジェクトストア４０４への通信は、マッピング４０６に少なくとも部分的に基づいて、クラウドオブジェクトストア４０４における論理ツリー３００Ａのデータオブジェクトおよび対応するメタデータの記憶を指定することを含むことができる。いくつかの実施形態では、通信は、例えば異なるデータ型に対して異なるオブジェクトサイズを指定することができる。したがって、クラウドインターフェースアプライアンス４０２は、１つのデータ型であると識別される特定のデータオブジェクトを記憶するために特定のオブジェクトサイズを指定し、異なるデータ型であると識別される他のデータオブジェクトを記憶するために異なるオブジェクトサイズを指定し得る。
【００７５】
図７は、本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステム４００のためのＣＯＷプロセスのいくつかの特徴に向けられた例示的な方法７００を示すブロック図である。特定の実施形態によれば、方法７００は、ブロック７０２によって示されるように開始し得る。しかしながら、本開示の教示は様々な構成で実施することができる。したがって、方法７００および／または本明細書に開示された他の方法を含む特定のステップの順序は、任意の適切な態様でシャッフルまたは組み合わされてもよく、選択される実現例に依存してもよい。さらに、以下のステップは説明のために分離され得るが、特定のステップは同時または実質的に同時に実行することができることを理解されたい。
【００７６】
ブロック７０２によって示されるように、特定の操作（すなわち、トランザクション）を実行するためのＰＯＳＩＸ準拠の要求が、アプリケーション２０２から受け取られ得る。そのような操作は、データの書き込みおよび／または修正に対応し得る。ブロック７０４によって示されるように、ＰＯＳＩＸ準拠の要求は、オペレーティングシステムからシステムコールインターフェース２０８を介してＤＭＵ２１８に転送され得る。様々な実施形態においては、ＤＭＵ２１８を介して行われるトランザクションは、システムストレージプール４１６およびクラウドオブジェクトストア４０４の一方または両方にグループとしてコミットされる一連の操作を含み得る。これらのトランザクションはＣＯＷベースで書かれ得る。
【００７７】
ブロック７０６によって示されるように、ＤＭＵ２１８は、データオブジェクトに対する操作を実行するための要求を、システムストレージプール４１６および／またはクラウドオブジェクトストア４０４内の物理的位置に向けられる書き込み操作を実行するための要求（すなわちＩ／Ｏ要求）に直接変換し得る。いくつかのモードでは、最初に、ローカルに記憶されたデータオブジェクトに対して操作が実行され、次にＤＭＵ２１８が特定の変更を指示することによって、またはＤＭＵ２１８がクラウドインターフェースアプライアンス４０２に指示して、直接的または間接的に他のＶＤＥＶ２２６で変更を読み取ることによって、データオブジェクトに対する変更が対応するクラウドに記憶されるデータオブジェクトに伝播され得る。他のモードでは、操作は、ローカルに記憶されたデータオブジェクトおよび対応するクラウドに記憶されたデータオブジェクトに対して同時または実質的に同時に実行されてもよい。さらに他のモードでは、操作はクラウドに記憶されたデータオブジェクトに対してのみ実行されてもよい。例えば、いくつかの実装形態は、ローカルツリー３００を有さず、クラウドベースのバージョンの論理ツリー３００Ａのみを有し得る。様々な実施形態は、１以上のモードのユーザ選択を可能にするように構成され得る。
【００７８】
ブロック７０８によって示されるように、ＳＰＡはＤＭＵ２１８からＩ／Ｏ要求を受け取り得る。そして、要求に応答して、ＳＰＡは、ＣＯＷプロシージャを用いてシステムストレージプール４１６および／またはクラウドオブジェクトストア４０４へのデータオブジェクトの書き込みを開始し得る。ブロック７１０によって示されるように、データオブジェクトの書き込みが、クラウドオブジェクトストア４０４へのデータオブジェクトの書き込みの前に、またはそれと同時に、ローカルに記憶されたデータオブジェクトに対して実行されるモードでは、（例えば、図３Ａ〜図３Ｄを考慮して）上に開示されたＣＯＷプロシージャはシステムストレージプール４１６に関して進み得る。
【００７９】
ブロック７１２によって示されるように、クラウドインターフェースアプライアンス４０２は、Ｉ／Ｏ要求を受信し、論理ツリー３００Ａに対する増分修正を識別し得る。増分修正は、書き込み要求を実行するためにＣＯＷプロセスから生じる新たなツリー部分に対応し得る。クラウドインターフェースアプライアンス４０２は、Ｉ／Ｏ要求を対応するオブジェクトインターフェース要求に変換し得る。Ｉ／Ｏ要求から、またはローカルに記憶されたデータオブジェクトに対する変更の読み取りから、修正されたデータを有するので、クラウドインターフェースデバイス５０２は、クラウドオブジェクトストア４０４内のクラウドストレージオブジェクト４１４のマッピング４０６を用いてオブジェクトインターフェース要求を調整し得る。
【００８０】
例えば、いくつかの実施形態では、増分修正は、論理ツリー３００への変更を反映するためにローカルに記憶されるデータオブジェクトへの変更に少なくとも部分的に基づいて判断することができる。いくつかのインスタンスでは、クラウドインターフェースアプライアンス４０２は、論理ツリー３００または少なくともそれに対する変更を読み取って、増分修正を判断することができる。そのようなデータは、ＤＭＵ２１８またはミラーＶＤＥＶなどの、ファイルシステムの別のコンポーネントによって、クラウドインターフェースアプライアンス４０２に渡されてもよい。いくつかの実施形態では、増分修正をクラウドインターフェースアプライアンス４０２に転送してもよい。
【００８１】
しかしながら、いくつかの実施形態では、クラウドインターフェースアプライアンス４０２は、ＣＯＷ方法論を論理ツリー３００のコピーもしくはスナップショットおよび／または論理ツリー３００Ａのスナップショットに適用することに少なくとも部分的に基づいて、増分修正を判断することができる。クラウドインターフェースアプライアンス４０２が論理ツリー３００Ａのスナップショットを用いる実施形態では、スナップショットはマッピング４０６に保持されるか、そうでなければメモリおよび／または物理層に記憶されてもよい。本明細書に開示されるように、スナップショットは、スナップショットキャプチャ時のツリーイメージに対応し得る。スナップショットは、データのツリートラバーサルデータインスタンス内に保持することができるメタデータを含むことができる。ツリーの時点イメージを保持するために、スナップショットは最小限の量のデータを記憶するのみでもよい。スナップショットは、スナップショットによって保持されるように指定／要求される、参照されるブロックのデータを保持するデータの要約表現であり得る。したがって、書き込み要求およびスナップショットが与えられた場合、増分修正は、本明細書に記載のＣＯＷ方法論に鑑みて判断することができる。
【００８２】
図８は、本開示のいくつかの実施形態による、クラウドインターフェースアプライアンスが増分修正を処理する一例を示すハイレベル図である。図示のように、クラウドインターフェースアプライアンス４０２は、クラウドオブジェクトストア４０４に記憶されている論理ツリー３００Ａのスナップショット３０１を用いて、増分修正３０３を作成することができる。例として、増分修正３０３は新たなリーフノード３２４、３２６；新たな非リーフノード３２８、３３０、３３２、３３４；および新たなルートノード３３６で示される。
【００８３】
図７を再び、より特定的に参照して、ブロック７１４によって示されるように、増分修正の判断は、新たなリーフノード（例えば、リーフノード３２４、３２６）を作成することを含んでもよい。書き込み操作の初期段階の後、新たなデータブロック（すなわちリーフノード）がメモリ内に割り当てられており、書き込み操作ごとのデータがクラウドインターフェースアプライアンス４０２によって新たなデータブロックに書き込まれており、一方、前のデータおよびデータブロックも同様にメモリに存続する。
【００８４】
ブロック７１６によって示されるように、新たな非リーフノード（例えば、非リーフノード３２６、３３０）が作成され得る。書き込み操作が続くにつれて、クラウドインターフェースアプライアンス４０２は、以前のバージョンのノードを参照する非リーフノードを判断し得る。新たに書き込まれたデータを参照するため、リーフノード内の新たなデータブロックを参照するために新たな非リーフノードが割り当てられる。変更されたノードを参照する各非リーフノードが新たなノードを指すように再割り当てされるまで、スナップショット３０１によって反映される、論理ツリー３００Ａの階層を通して、同じプロセスが再帰的に上向きに繰り返され得る。ポインタブロックが階層内の新たなノードに割り当てられると、各ノードのアドレスポインタは、メモリ内の割り当てられた子の新たな位置を指すように更新され得る。ブロック７１８によって示されるように、書き込み操作を確定するために、ルートノードを再割り当てし更新することができる（例えば、ルートノード３３６）。ルートノードを更新する準備ができたら、新たなルートノード（ユーバーブロック）を割り当てて初期化し、新たなルートノードの下において新たに割り当てられた子ノードを指すようにすることができる。
【００８５】
書き込み操作の一部として、トランザクショナル書き込み操作に伴うツリーのすべての部分のメタデータがチェックサムで更新される。作成された各ノードは、アドレスポインタによって参照されるノードを用いて計算されるチェックサムを含む。この構成は、チェックサムが、それが計算される元のノードとは別に記憶されることを意味する。各ノードのチェックサムを、そのノード自体ではなく、それの親ノードポインタに記憶することで、ツリー内のすべてのノードにそのすべての子についてのチェックサムが含まれる。これは、図３Ａ〜図３Ｄの例に関してさらなるに詳細に示される。こうすることで、各ツリーは自動的に自己検証され、読み取り操作で矛盾を検出することが常に可能になる。
【００８６】
ブロック７２０によって示されるように、増分修正に対応するデータオブジェクトおよびメタデータは、クラウドオブジェクトストア４０４に記憶され得る。様々な実施形態では、クラウドインターフェースアプライアンス４０２は、増分修正に対応するデータオブジェクトおよびメタデータを作成、読み取り、転送、定義、および／またはそうでなければ指定することができる。ブロック７２２によって示されるように、いくつかの実施形態において、データオブジェクトおよびメタデータの記憶は、少なくとも部分的に、クラウドインターフェースデバイス５０２がクラウドインターフェースデーモン６０４に要求を送信することによって、引き起こされ得る。ブロック７２４によって示されるように、クラウドインターフェースデバイス５０２によってクラウドインターフェースデーモン６０４に送信される要求は、クラウドクライアントインターフェース６０８のためにｐｕｔ要求に変換され得る。いくつかの実施形態では、クラウドインターフェースデバイス５０２によって送信される要求は、ｐｕｔ要求であり得；他の実施形態では、クラウドインターフェースデーモン６０４は、クラウドインターフェースデバイス５０２によって送信される要求をｐｕｔ要求に変換することができる。
【００８７】
ブロック７２６によって示されるように、クラウドインターフェースデバイス５０２によって送信された要求に応答して、クラウドインターフェースデーモン６０４は、１以上のネットワークを介してオブジェクトプロトコルを介してクラウドオブジェクトストア４０４と通信して、増分変更に対応するオブジェクトデータおよびメタデータを新たなクラウドオブジェクトとして記憶させ得る。ブロック７２８によって示されるように、クラウドインターフェースアプライアンス４０２は、クラウドオブジェクトストア４０４に記憶される増分修正に対応するデータオブジェクトおよびメタデータを考慮してマッピング４０６を更新し得る。
【００８８】
再び、より特定的に図８を参照すると、増分修正３０３に対応するデータオブジェクトおよびメタデータの記憶が示されている。クラウドベースのＣＯＷプロセスに従って、新たなクラウドオブジェクト４１４Ａが、増分変更３０３に対応するデータオブジェクトおよびメタデータに割り当てられ、増分変更３０３のクラウドベースのインスタンス化が、増分変更３０３Ａとして示されている。そして、新たなルートノードは、修正された論理ツリー３００Ａ−１の状態を確定するための記憶操作で、修正された論理ツリー３００Ａ−１のルートとすることができる。修正された論理ツリー３００Ａ−１は、増分修正３０３Ａによって修正された論理ツリー３００Ａに対応し得る。したがって、例示的なスナップショット３０１などのスナップショット、およびルート３３６、３３６−１に対応するルートなどのユーバーブロックを利用して、クラウドオブジェクトストア４０４は、最後のスナップショット以降に変更されたノードのサブセットに関してのみ更新され得る。そして、増分３０３Ａのその更新は、ルートノードを介してクラウド内のツリー３００Ａのバージョンにフックすることができ、修正された論理ツリー３００Ａ−１全体の任意の部分にアクセスすることができる。
【００８９】
増分修正３０３Ａの記憶で、アクティブなデータを含む（クラウドデータオブジェクト４１４として保存される）論理ツリー３００Ａのブロックは、その場で上書きされなくてもよい。新たなクラウドデータオブジェクト４１４Ａが割り当てられてもよく、修正された／新たなデータおよびメタデータがクラウドデータオブジェクト４１４Ａに書き込まれてもよい。以前のデータのバージョンを保持して、論理ツリー３００Ａのスナップショットバージョンを維持することを可能にしてもよい。いくつかの実施形態では、変更されていないデータを、修正された論理ツリー３００Ａ−１およびその関連スナップショットの間で共有してもよい。
【００９０】
したがって、特定の実施形態は、クラウドから（複数の増分更新を適用せずに）最適に復元する能力に加えて、非常に効率的な常時増分（永久増分としても知られる）バックアップ機能を提供することができる。当該業界における従来のバックアップ方法では、コピーをクラウドにプッシュする必要がある。しかし、本開示によるある実施形態は、新たなデータオブジェクトのみがクラウドストレージに書き込まれるクラウドベースのコピーオンライトファイルシステムを可能にする。新たな修正されたデータのみを送信する必要があるクラウドストレージは、クラウドプロバイダからのバックアップおよびクラウドプロバイダからのバックアップからの復元に対する非常に効果的な解決策を提供する。古いデータオブジェクトは修正する必要はない。これらの実施形態は、トランザクショングループを用いる一貫性モデルとともに、一貫性を常に確認することができる永久増分バックアップをともなってクラウドストレージを容易にする。
【００９１】
フルバックアップが最初に作成された後（例えば、クラウドデータオブジェクト４１４および論理ツリー３００Ａ）、増分バックアップ（例えば、増分修正３０３Ａ）が潜在的に無期限に行われ得る。すべての各増分は、それが送信された後、フルバックアップにマージされ得、現在のフルバックアップが常に存在するようになる。マージするたびに、フルバックアップの、単一のデータインスタンスが生成される。多数の増分を収集することが望ましくない場合には、その必要性を回避するために、別のフルバックアップを定期的に行ってもよい。実現例によっては、必要に応じて複数のフルバックアップのバージョンを保持することができる。したがって、特定の実施形態は、間隔、スナップショット、およびバックアップの完全な制御を提供する。
【００９２】
オブジェクトをクラウドに書き込み、その後そのオブジェクトをクラウドから読み取ることに伴う主な問題の１つは、読み取られたオブジェクトの整合性が保証されないことである。クラウドストレージに付随するデータの劣化（例えば、ストレージの損失、伝送の失敗、ビットロット（ビットの劣化）など）のリスクがある。さらに、オブジェクトの複数のバージョンが関与すると、望ましくないオブジェクトのバージョンを読み取る危険性がある。例えば、オブジェクトの更新が不完全である場合の最新のバージョンなど、所望のオブジェクトの、以前のバージョンが読み取られ得る。
【００９３】
従来のオブジェクトストアアーキテクチャはデータのコピーに依存し、最初にクォーラム（すなわち２つのコピー）が満たされ、追加のコピー（例えば第３のコピー）が非同期的に更新される。これは、すべてのコピーが更新される前にクライアントがデータのコピーを受け取り、その結果、そのデータの、一貫性のないビューを得る可能性を呈する。オブジェクトストアの一貫性のための典型的な解決策は、データが入手可能になる前にすべてのコピーが作成されることを保証することであるが、この解決策で一貫性を保証することは通常現実的でも達成可能でもない。オブジェクトのチェックサムがオブジェクトのメタデータにオブジェクトと一緒に、または他の場所の参照データベースに記憶される、オブジェクトベースのアプローチでは、オブジェクトの内容は検証できるが、オブジェクトの正しいバージョンは検証できないであろう。さらに、オブジェクトのバージョン化および単一の場所からのチェックを用いるかもしれない解決策では、クラウドストレージの目的および意図が多少損なわれるであろう。
【００９４】
しかしながら、本開示による特定の実施形態は、クラウド内で保証された完全性を保証することができ、かつ最終的に一貫したオブジェクトモデルから常に一貫したセマンティクスを保証することができる一貫性モデルを提供することができる。例えば、特定の実施形態は、本明細書に開示される論理ツリーを用いることによって障害の分離および一貫性を提供することができる。クラウドオブジェクトストアに対するすべてのトランザクショナル書き込み操作で、自己記述型マークルツリーのメタデータにおけるチェックサムを更新し得る。上述のように、チェックサムを、そのチェックサムが計算されるノードとは別に記憶することによって、各ツリーが自動的に自己検証的であることが保証される。すべてのツリー層で、下のノードはチェックサムを含むノードポインタによって参照される。したがって、オブジェクトがクラウドから読み取られると、そのオブジェクトが正しいかどうかがを判断され得る。
【００９５】
図９は、本開示の特定の実施形態による、クラウドにおける保証された完全性および最終的に整合性のあるオブジェクトモデルからの常に整合性のあるセマンティクスを保証するハイブリッドクラウドストレージシステム４００の特定の機能に関する方法例９００を示すブロック図である。特定の実施形態によれば、方法９００は、ブロック９０２によって示されるように開始し得る。しかしながら、上記で明らかにされたように、本開示の教示は、本明細書に開示された方法の特定のステップの順序が任意の好適な態様でシャッフルまたは組み合わされ、選択された実現例に依存してもよいように、様々な構成で実現され得る。さらに、以下のステップは説明のために分離され得るが、特定のステップは同時または実質的に同時に実行することができることを理解されたい。
【００９６】
ブロック９０２によって示されるように、１以上の特定の操作（すなわち、１以上のトランザクション）を実行するためのＰＯＳＩＸ準拠の要求をアプリケーション２０２から受信し得る。そのような操作は、データを読み取ること、またはそうでなければデータにアクセスすることに対応し得る。ブロック９０４によって示されるように、ＰＯＳＩＸ準拠の要求は、オペレーティングシステムからシステムコールインターフェース２０８を介してＤＭＵ２１８に転送され得る。ブロック９０６によって示されるように、ＤＭＵ２１８は、データオブジェクトに対して操作を実行するための要求を、クラウドオブジェクトストア４０４に向けられる１以上の読み取り操作を実行するための要求（すなわち、１以上のＩ／Ｏ要求）に直接変換し得る。ブロック９０８によって示されるように、ＳＰＡはＤＭＵ２１８からＩ／Ｏ要求を受信し得る。要求に応答して、ＳＰＡはクラウドオブジェクトストア４０４から１以上のデータオブジェクトの読み取りを開始し得る。
【００９７】
ブロック９１０によって示されるように、クラウドインターフェースアプライアンス４０２は、Ｉ／Ｏ要求を受け取り、対応するクラウドインターフェース要求をクラウドオブジェクトストア４０４に送信し得る。いくつかの実施形態では、クラウドインターフェースアプライアンス４０２は、Ｉ／Ｏ要求を対応するオブジェクトインターフェース要求に変換し得る。クラウドインターフェースデバイス５０２は、クラウドオブジェクトストア４０４内のクラウドストレージオブジェクト４１４のマッピング４０６を用いてオブジェクトインターフェース要求を調整し得る。例えば、クラウドインターフェースアプライアンス４０２は、論理ツリーに従ってクラウドデータオブジェクトとして記憶されるファイルの全部または一部を識別して要求することができる。
【００９８】
ブロック９１２によって示されるように、クラウドインターフェースアプライアンス４０２は、オブジェクトインターフェース要求に応答してデータオブジェクトを受信し得る。ブロック９１４によって示されるように、データオブジェクトは、論理ツリー内の親ノードからのチェックサムでチェックされ得る。様々な実施形態において、チェックはクラウドインターフェースアプライアンス４０２および／またはＩ／Ｏパイプライン２２４によって実行されてもよい。
【００９９】
図１０は、本開示のいくつかの実施形態による、チェックを処理するクラウドインターフェースアプライアンス４０２の一例を示すハイレベル図である。ここでも、他の実施形態では、システム４００の他のコンポーネントがチェックを実行してもよい。しかしながら、図１０では、クラウドインターフェースアプライアンス４０２は、論理ツリー３００Ａ−１に従って記憶されたデータを読み取るためにクラウドオブジェクトストア４０４にアクセスしたものとして示されている。図示の例では、クラウドストレージアプライアンス４０２は、論理ツリー３００Ａ−１に対応するクラウドオブジェクト４１４Ａにアクセスしたものとして示されている。クラウドストレージアプライアンス４０２は、非リーフノード３２６−２、３３４−２およびルートノード３３６−２のアドレスを介してリーフノード３２４−２にアクセスした。
【０１００】
本明細書で説明されるように、論理ツリーからノードを読み取るとき、そのノードは論理ツリー内のより上位のノードのポインタを用いて読み取られる。そのポインタは、読み取られると予想されるデータに対するチェックサムを含み、データがクラウドから引き出されるときにデータがそのチェックサムでチェックされる。データの実際のチェックサムは、計算され、クラウドインターフェースアプライアンス４０２および／またはＩ／Ｏパイプライン２２４によってすでに得られている予想されたチェックサムと比較されてもよい。図示の例では、非リーフノード３２６−２は、リーフノード３２４−２のためのチェックサムを含む。
【０１０１】
いくつかの実施形態では、チェックサムはクラウドデータストアから１つのオブジェクトとともに受信されてもよく、チェックサムでチェックされるべきデータは異なるオブジェクトとともに受信される。いくつかの実施形態によれば、チェックサムは、異なるオブジェクトをチェックされるべきデータとともに受信する前に、クラウドデータストアから別個のオブジェクトとともに受信されてもよい。いくつかの実施形態は、特定のオブジェクトインターフェース要求に応答して、チェックサムを有するオブジェクトが受信され、後続のオブジェクトインターフェース要求に応答して、チェックされるべきデータを有するオブジェクトが受信されるように、反復オブジェクトインターフェース要求プロセスを採用し得る。さらに、いくつかの実施形態では、後続のオブジェクトインターフェース要求は、特定のオブジェクトインターフェース要求とともに受信され、チェックされるべきデータを有するオブジェクトを指すアドレス指定情報を用いて行われ得る。いくつかの実施形態では、反復プロセスの代わりに、クラウドデータストアから複数のオブジェクトが受け取られ、その後、チェックが複数のオブジェクトに対して実行され得る。論理ツリーの完全性は、論理ツリーをトラバースして、親ノードに基づいて各レベルで子ノードのチェックサムを計算することによって、迅速にチェックできる。代替実施形態では、クラウドインターフェースアプライアンス４０２および／またはＩ／Ｏパイプライン２２４は、読み取り操作を開始する前にチェックサムを得てもよく、および／または別のソースからチェックサムを得てもよい。例えば、そのような代替実施形態では、チェックサムは、マッピング４０６、論理ツリーのスナップショット、および／またはローカルデータストアに保持されてもよい。
【０１０２】
再び図９を参照すると、ブロック９１６によって示されるように、データオブジェクトの実際のチェックサムを用いて論理ツリー内の親ノードからのチェックサムによってデータオブジェクトを検証するかどうかが判断され得る。ブロック９１８によって示されるように、データオブジェクトが検証される場合、データが破損しておらず不正確なバージョンではないと判定されたので、システム４００の読み取りおよび／またはさらなる処理操作が進行し得る。必要に応じて、すべてのオブジェクトがチェックサムされ、親オブジェクトポインタメタデータによって検証されるまで、チェックは追加のオブジェクトで行われ得る。
【０１０３】
データオブジェクトの実際のチェックサムと予想されるチェックサムとの不一致の場合には、エラー状態が識別され得る。これは図１０に示される場合であり、ここで、（リーフノード３２４−２に対応する）オブジェクトＤ’の実際のチェックサムは、（オブジェクトＣ’に対応する）親ノード３２６−２によって指定されたチェックサムと一致していない。エラー状態では、図９の処理フローはブロック９２０に進むことができる。実際のチェックサムと予想されるチェックサムとの不一致は、最新ではない誤ったバージョンのデータの取得、クラウドストレージ障害によるデータの劣化、ビットロット、伝送損失などの状況に対応し得る。ブロック９２０によって示されるように、対応策が開始され得る。いくつかの実施形態では、対応策は、クラウドオブジェクトストア４０４に１以上のクラウドインターフェース要求を再発行することを含み得る。再発行された各要求に応答して、プロセスフローはブロック９１２に戻ってもよく、ここでクラウドインターフェースアプライアンス４０２は１以上のデータオブジェクトを受信してもよく、チェックプロセスの別の反復が進んでもよい。
【０１０４】
１以上のクラウドインターフェース要求の再発行は、クラウドオブジェクトストア４０４が要求されたオブジェクトの正しいバージョンを見つけようと、より懸命に試みる要求に対応し得る。いくつかの実施形態では、クラウドインターフェースアプライアンス４０２は、正しいバージョンが取得されるまでクラウドノード／デバイスを繰り返し通ることができる。いくつかの実施形態は、クラウドオブジェクトストア４０４に記憶され得るツリー部分の以前のバージョンのスナップショットを繰り返しチェックし得る。いくつかの実施形態は、閾値が満たされた後にクラウドインターフェースアプライアンス４０２が他の対応策手段に進み得るように、閾値を採用することができる。閾値は、１以上のクラウドインターフェース要求の再発行の数に対応し得る。代替的にまたは追加的に、閾値は、ノードおよび／またはスナップショットの検索範囲に関する制限に対応し得る。例えば、閾値は、クラウドインターフェースアプライアンス４０２が異なる対応策手段に進む前に、何個のノードおよび／または何個のスナップショットが検索されるべきかを司り得る。
【０１０５】
クラウドインターフェースアプライアンス４０２が採用することができる別の対応策手段は、ブロック９２４によって示されるように、マルチクラウド実現例において別のクラウドオブジェクトストアからの正しいバージョンのデータを要求することである。マルチクラウドストレージの特定の実施形態が、本明細書でさらに説明される。第２のクラウドオブジェクトストアのレコードを調べて、データのコピーが第２のクラウドオブジェクトストアに記憶されているかどうかを判断してもよい。いくつかの実施形態では、レコードは、第２のクラウドオブジェクトストアに固有の別のマッピング４０６に対応し得る。データのコピーが第２のクラウドオブジェクトストアに記憶されていると判断されたので、クラウドインターフェースアプライアンス４０２は、所望のデータを取得するために、第２のクラウドオブジェクトストアへの１以上のオブジェクトインターフェース要求を開始し得る。
【０１０６】
そのような実施形態では、対象のオブジェクトに対する要求は、クラウドオブジェクトストア４０４に対する再発行要求の閾値が、正しいバージョンを首尾よく受け取ることなく満たされた後に、第２のクラウドオブジェクトストアに対してなされ得る。代替的に、いくつかの実装形態は、クラウドオブジェクトストア４０４に要求を再発行するのではなく、第１のデフォルトとして第２のクラウドオブジェクトストアに頼り得る。いずれにせよ、第２のクラウドオブジェクトストアへの要求に応答して、プロセスフローはブロック９１２に戻ってもよく、ここでクラウドインターフェースアプライアンス４０２は１以上のデータオブジェクトを受信し得、チェックプロセスの別の反復が進行し得る。正しいデータが第２のクラウドオブジェクトストアから取得されて検証される場合、ブロック９１８によって示されるように、システム４００の読み取りおよび／またはさらなる処理操作を進めることができる。さらに、第２のクラウドオブジェクトストアから正しいデータを受信したので、システム４００は、ブロック９２６によって示されるように、正しいデータをクラウドオブジェクトストア４０４に書き込むことができる。正しいデータの書き込みは、図４に関して開示されているように、増分修正を適用するよう、ＣＯＷプロシージャを用いて行われてもよい。
【０１０７】
いくつかの実施形態において、正しいデータが対応策プロセスを介して取得可能でない場合、ブロック９２８によって示されるように、エラーメッセージおよびデータの最新バージョンが返され得る。場合によっては、データの最新バージョンが取得できないことがある。例えば、データを指すべきメタデータが破損しているかもしれず、データの最新バージョンを参照および取得できない。そのような場合、データの最新バージョンなしでエラーメッセージが返され得る。ただし、データの最新バージョンが取得可能な場合は、それも返され得る。したがって、エンドツーエンドのチェックサムモデルでは、特定の実施形態は、クライアントからクラウドへの、そして再び戻ってくる、データのエンドツーエンドのトラバースをカバーし得る。特定の実施形態は、ツリー全体のチェックサムおよびエラーの検出を提供するだけでなく、回復力およびデータスクラビングを通じてツリーの部分を訂正する能力も提供することができる。
【０１０８】
図１１は、本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステム４００−２の特徴をさらに示す単純化した例の図である。ハイブリッドクラウドストレージシステム４００−２は、ハイブリッドストレージプール１１００がどのようにシステムストレージプール４１６と仮想ストレージプール６０２−１とから少なくとも部分的に形成されるのかを示す。システムストレージプール４１６および仮想ストレージプール６０２−１の各々について、読み取り操作および書き込み操作の流れが示される。
【０１０９】
いくつかの実施形態では、ＡＲＣ２２２はＡＲＣ２２２−２を含み得る。システムストレージプール４１６の読み取り操作は、ＡＲＣ２２２−２およびシステムストレージブロック２２８−１によって容易にされ得る。示されるように、ＡＲＣ２２２−２の特定の実施形態は、ＤＲＡＭを用いて実装され得る。同じく示されるように、システムストレージブロック２２８−１の特定の実施形態は、ＳＡＳ／ＳＡＴＡベースのインプリメンテーションを有し得る。いくつかの実施形態では、システムストレージプール４１６の読み取り操作は、キャッシュサイズを拡張することができるＬ２ＡＲＣデバイス２２２−３によってさらに容易にされ得る。いくつかの実施形態では、ＡＲＣ２２２は、Ｌ２ＡＲＣデバイス２２２−３を含めて参照されてもよい。図１１に示すように、Ｌ２ＡＲＣデバイス２２２−３の特定の実施形態は、ＳＳＤベースのインプリメンテーションを有することができる。システムストレージプール４１６の書き込み操作は、システムストレージブロック２２８−１およびインテントログ２１４−３によって容易にされ得る。示されるように、インテントログ２１４−３の特定の実施形態は、ＳＳＤベースのインプリメンテーションを有し得る。
【０１１０】
ローカルシステムにとって、仮想ストレージプール６０２−１は、論理ディスクのように見え得、論理ディスクのように振舞い得る。システムストレージプール４１６と同様に、仮想ストレージプール６０２−１の読み取り操作は、ＡＲＣ２２２−４およびクラウドストレージオブジェクトブロック４１４−１によって容易にされ得る。いくつかの実施形態ではＡＲＣ２２２−４はＡＲＣ２２２−４を含むものとして参照され得るが、いくつかの実施形態ではＡＲＣ２２２−４は１以上の別個のデバイスを用いて実装され得る。図１１に示すように、ＡＲＣ２２２−４の特定の実施形態は、ＤＲＡＭを用いて実施することができる。いくつかの実施形態では、ＡＲＣ２２２−４はＡＲＣ２２２−２と同じキャッシュであり得、他の実施形態では、ＡＲＣ２２２−４は、ＡＲＣ２２２−２とは異なる仮想ストレージプール６０２−１の別個のキャッシュであり得る。示されるように、クラウドストレージオブジェクトブロック４１４−１を容易にする特定の実施形態は、ＨＴＴＰベースのインプリメンテーションを有し得る。
【０１１１】
いくつかの実施形態では、仮想ストレージプール６０２−１の読み取り操作は、Ｌ２ＡＲＣデバイス２２２−５によってさらに容易にすることができる。いくつかの実施形態では、ＡＲＣ２２２は、Ｌ２ＡＲＣデバイス２２２−５を含めて参照されてもよい。いくつかの実施形態では、ＬＳＡＲＣデバイス２２２−５は、Ｌ２ＡＲＣデバイス２２２−３と同じキャッシュであり得、他の実施形態では、ＬＳＡＲＣデバイス２２２−５は、Ｌ２ＡＲＣデバイス２２２−３とは異なる仮想ストレージプール６０２−１の別個のキャッシュデバイスであり得る。示されるように、Ｌ２ＡＲＣデバイス２２２−５の特定の実施形態は、ＳＳＤベースまたはＨＤＤベースのインプリメンテーションを有し得る。
【０１１２】
クラウドストレージオブジェクトブロック４１４−１に対する仮想ストレージプール６０２−１の書き込み操作は、インテントログ２１４−４によって容易にすることができる。いくつかの実施形態では、インテントログ２１４−４はインテントログ２１４−３と同じであり得、他の実施形態では、インテントログ２１４−４はインテントログ２１４−３とは別個の異なるものであり得る。示されるように、インテントログ２１４−４の特定の実施形態は、ＳＳＤベースまたはＨＤＤベースのインプリメンテーションを有し得る。
【０１１３】
クラウドストレージへの遷移はいくつかの利点（例えば、コスト、規模、および地理的局所性）を提供するが、従来のように用いられる場合、クラウドストレージはいくつかの制限を伴う。アプリケーションクライアントがオンプレミスに位置し、クラウドに共存していない場合、レイテンシは、従来の技術では、多くの場合、大きな懸念となる。しかしながら、ハイブリッドクラウドストレージシステム４００はその懸念を排除することができる。ハイブリッドクラウドストレージシステム４００の特定の実施形態は、性能、移行、および可用性を容易にするよう、ミラーリング機能を提供することができる。
【０１１４】
ハイブリッドクラウドストレージシステム４００では、システムストレージプール４１６の読み取り操作のレイテンシと仮想ストレージプール６０２−１の読み取り操作のレイテンシとの間の差を最小にすることができる。いくつかの実施形態では、２つのプールのＡＲＣおよびＬ２ＡＲＣデバイスはローカル実装であり得る。そして、２つのプールのＡＲＣおよびＬ２ＡＲＣデバイスにおけるレイテンシは、等価または実質的に等価であり得る。例えば、ＡＲＣの読み取り操作に対する典型的なレイテンシは０．０１ｍｓ以下であり、Ｌ２ＡＲＣに対する典型的なレイテンシは０．１０ｍｓ以下である。クラウドストレージオブジェクトブロック４１４−１からの読み取り操作のレイテンシはより長くあり得るが、ハイブリッドクラウドストレージシステム４００はより長いレイテンシを最小にするために両方のプールをインテリジェントに管理し得る。
【０１１５】
特定の実施形態は、ファイルシステムセマンティクスを用いてレイテンシの少ないダイレクトクラウドアクセスを提供することができる。特定の実施形態は、アプリケーションセマンティクスを維持しながらクラウドストレージからの実行を容易にすることができる。特定の実施形態は、クラウド内の全データのレプリケーションされたコピーを保持しながら、ローカルストレージ読み取りパフォーマンスを可能にすることができる。これらの機能を提供するために、特定の実施形態は、オンプレミスキャッシングデバイスを利用し、ハイブリッドストレージプールキャッシングアルゴリズムを活用し得る。クラウドストレージに効果的なキャッシングおよびファイルシステムセマンティクスを提供することによって、クラウドストレージはバックアップおよび復元以外にも使用できる。ハイブリッドストレージシステムはクラウドストレージを「ライブ」で用い得る。別の言い方をすれば、オンプレミスのキャッシングデバイスをインテリジェントに用いることで、全コピーまたは複数のコピーをローカルに保存する必要なしに、フルパフォーマンスの利益をローカルシステムに提供することができる。
【０１１６】
図１２は、本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステム４００−２の機能をさらに示す単純化した例の図である。効果的なキャッシングデバイスおよびキャッシングアルゴリズムを用いて、ハイブリッドクラウドストレージシステム４００−２は、ファイルレベルではなくブロックレベルでキャッシングし得、したがって、大きなオブジェクト（例えば大きなデータベース）へのアクセスはオブジェクト全体のキャッシングを必要としない。様々な実施形態では、示されている例は、仮想ストレージプール６０２−１およびシステムストレージプール４１６のうちの１つまたはそれらの組合せに対応し得る。
【０１１７】
ハイブリッドクラウドストレージシステム４００−２は、システム動作に必要とされるオブジェクトの大部分を捕捉するために適応Ｉ／Ｏステージング（staging）を採用することができる。ハイブリッドクラウドストレージシステム４００−２は、適応Ｉ／Ｏステージングを提供するよう、複数のキャッシュデバイスを構成することができる。図示の例では、適応Ｉ／ＯステージングはＡＲＣ２２２−５を用いて実施される。しかし、様々な実施形態において、ハイブリッドクラウドストレージシステム４００−２は、適応Ｉ／Ｏステージングを提供するために複数のＡＲＣ２２２および／またはＬ２ＡＲＣ２２２を用いるように構成されてもよい。以下の説明では一例としてＡＲＣ２２２を用いているが、様々な実施形態は、開示された特徴を提供するために複数のＡＲＣ２２２を１以上のＬ２ＡＲＣ２２２１とならんで用いることができることを理解されたい。
【０１１８】
いくつかの実施形態では、ＡＲＣ２２２−５は、ＡＲＣ２２２−５がＩ／Ｏ作業負荷に基づいて調整することができるように自己調整することができる。例として、ハイブリッドクラウドストレージシステム４００−２が単にバックアップおよび移行のためだけではなくライブモードでクラウドストレージを用いる実施形態では、ＡＲＣ２２２−５は優先順位に従ってオブジェクトをステージングするキャッシングアルゴリズムを提供し得る。キャッシングのためのその優先順位は、最も最近用いられた（ＭＲＵ）オブジェクト、最も頻繁に用いられた（ＭＦＵ）オブジェクト、最も頻繁に用いられなかった（ＬＦＵ）オブジェクト、および最も最近用いられなかった（ＬＲＵ）オブジェクトに対応し得る。各Ｉ／Ｏ操作で、ＡＲＣ２２２−５はステージングされたデータオブジェクトの自己調整が必要かどうかを判断することができる。ある実施形態では、Ｌ２ＡＲＣ２２５−５はＡＲＣ２２２−５と協働して１以上のステージを容易にし得ることに留意されたい。一例として、ＡＲＣ２２２−５よりも高いレイテンシを有し得るＬ２ＡＲＣ２２５−５は、ＬＲＵステージおよび／またはＬＦＵステージなどの下位ランク付けされた１以上のステージに用いられ得る。いくつかの実施形態において、ハイブリッドクラウドストレージシステム４００−２の他のコンポーネントは、これらの実施形態に従ってキャッシングを引き起こし得る。例として、クラウドストレージアプライアンス４０２は、読み書き要求のキャッシングおよびサービスを調整し得る。さらに、クラウドストレージアプライアンス４０２は、いくつかの実施形態によれば、ＡＲＣ２２２−５、Ｌ２ＡＲＣ２２２−５、および／またはインテントログ２１４−４を含むことができる。
【０１１９】
各Ｉ／Ｏ操作で、ＡＲＣ２２２−５は、以前にある程度ステージングされた１以上のオブジェクトのステージングを調整し得る。少なくとも、調整は、少なくとも１つのオブジェクトのアクセスの追跡を更新することを含み得る。調整は、より低いステージへの降格、立ち退き、またはより高いステージへの昇格を含み得る。昇格および降格の遷移基準は、現在のステージから別のステージへの遷移、または立ち退きへの遷移ごとに異なり得る。本明細書で開示されるように、ＡＲＣ２２２−５は、高いスループットを維持するために、および／または使用量閾値を満たすために、メモリ圧力の結果としてキャッシュからメモリバッファを追い出す能力を有し得る。
【０１２０】
所与のＩ／Ｏ操作で、そのＩ／Ｏ操作に対応する１以上のオブジェクトがＭＲＵオブジェクトとしてまだステージングされていない場合、その１以上のオブジェクトはＭＲＵオブジェクトとして新たにステージングされ得る。しかし、Ｉ／Ｏ操作に対応する１以上のオブジェクトがＭＲＵオブジェクトとして既にステージングされている場合、ＡＲＣ２２２−５はその１以上のオブジェクトに遷移基準を適用して、その１以上のオブジェクトを異なるステージに遷移するかどうかを判断し得る。遷移基準が満たされない場合、Ｉ／Ｏ操作のサービスでステージングすることにおける変更は必要はない。
【０１２１】
図１３は、本開示のいくつかの実施形態による、キャッシュ管理およびクラウドレイテンシマスキングのためのハイブリッドクラウドストレージシステム４００−３のいくつかの機能に向けられた例示的な方法１３００を示すブロック図である。特定の実施形態によれば、方法１３００はブロック１３０２によって示されるように開始することができる。しかしながら、上記で明らかにされたように、本明細書に開示された方法の特定のステップは、任意の好適な態様でシャッフルされ、組み合わされ、および／または同時もしくは実質的に同時に実行され、選択された実現例に依存してもよい。
【０１２２】
ブロック１３０２によって示されるように、特定の操作（すなわちトランザクション）を実行するためのＰＯＳＩＸ準拠の要求が、アプリケーション２０２から受信され得る。そのような操作は、データの読み取り、書き込みおよび／または修正に対応し得る。ブロック１３０４によって示されるように、ＰＯＳＩＸ準拠の要求は、オペレーティングシステムからシステムコールインターフェース２０８を介してＤＭＵ２１８に転送され得る。ブロック１３０６によって示されるように、ＤＭＵ２１８は、オブジェクトに対して操作を実行するための要求を、クラウドオブジェクトストア４０４内の物理的な場所に向けられたＩ／Ｏ操作を実行するための要求に直接変換し得る。ＤＭＵ２１８は、Ｉ／Ｏ要求をＳＰＡに転送し得る。
【０１２３】
ブロック１３０８によって示されるように、ＳＰＡはＤＭＵ２１８からＩ／Ｏ要求を受信し得る。そして、要求に応答して、ＳＰＡはＩ／Ｏ操作の実行を開始し得る。ブロック１３１０によって示されるように、書き込み操作の場合、ＳＰＡはＣＯＷプロシージャを用いてクラウドオブジェクトストア４０４へのオブジェクトの書き込みを開始し得る。例えば、クラウドインターフェースアプライアンス４０２は、クラウドオブジェクトストア４０４に関して（例えば、図７に照らして）上に開示されたＣＯＷプロシージャを進め得る。ブロック１３１２によって示されるように、読み取り操作の場合、ＳＰＡはオブジェクトの読み取りを開始し得る。ＡＲＣ２２２−５は、１以上の要求されたオブジェクトについてチェックされ得る。いくつかの実施形態では、ブロック１３１４によって示されるように、Ｉ／Ｏ要求に対応する１以上の検証されたデータオブジェクトがＡＲＣ２２２−５内に存在するかどうかを判断することができる。これは、読み取り要求に対応する１以上のオブジェクトがＡＲＣ２２２−５から取得可能であるかどうかをＳＰＡが最初に判断することを含み得る。次に、そのような１以上のオブジェクトが取得可能である場合、そのオブジェクトは、論理ツリー内の１以上の親ノードからの１以上のチェックサムでチェックされ得る。様々な実施形態において、チェックは、ＡＲＣ２２２−５、クラウドストレージアプライアンス４０２、および／またはＩ／Ｏパイプライン２２４によって実行され得る。ブロック１３１６によって示されるように、データオブジェクトが検証される場合（または、検証を使用しないいくつかの実施形態では、単純なヒットの場合）、システム４００の読み取りおよび／またはさらなる処理操作が進み得る。
【０１２４】
いくつかの実施形態では、ブロック１３１８によって示されるように、データオブジェクトが検証されない場合（または、検証を使用しないいくつかの実施形態では、単純なヒットなしの場合）、ＳＰＡはローカルストレージ２２８から１以上のオブジェクトの読み取りを開始し得る。いくつかの実施形態では、１以上のオブジェクトへのポインタがキャッシュされ、ローカルストレージ２２８から１以上のオブジェクトを読み取るために用いられ得る。いくつかの実装形態は、そのようなポインタがキャッシュされない場合、１以上のオブジェクトについてローカルストレージ２２８をチェックしなくてもよい。１以上のオブジェクトが取得可能である場合、その１以上のオブジェクトは、論理ツリー内の１以上の親ノードからの１以上のチェックサムでチェックされ得る。ここでも、様々な実施形態において、チェックは、ＡＲＣ２２２−５、クラウドストレージアプライアンス４０２、および／またはＩ／Ｏパイプライン２２４によって実行され得る。オブジェクトが検証される場合、プロセスフローはブロック１３１６に遷移し得、システム４００の読み取りおよび／またはさらなる処理操作が進行し得る。
【０１２５】
ブロック１３２０によって示されるように、データオブジェクトが検証されない場合（または、検証を使用しないいくつかの実施形態では、単純なヒットなしの場合）、ＳＰＡはクラウドオブジェクトストア４０４から１以上のデータオブジェクトの読み取りを開始し得る。様々な実施形態において、読み取りの模倣が、ＤＭＵ２１８、ＡＲＣ２２２−５、Ｉ／Ｏパイプライン２２４、および／またはクラウドインターフェースアプライアンス４０２のうちの１つまたはそれらの組み合わせによって実行されてもよい。クラウドオブジェクトストア４０４からの１以上のオブジェクトの読み取りは、例えば図９に関して本明細書で上に開示されたステップを含み得る。そのようなステップは、上で詳述した、クラウドインターフェースアプライアンス４０２にＩ／Ｏ要求を発行すること、クラウドストレージオブジェクト４１４のマッピング４０６を用いてクラウドオブジェクトストア４０４に対応するクラウドインターフェース要求を送信すること、オブジェクトインターフェース要求に応答してデータオブジェクトを受信することなどの１つまたは組み合わせを含み得る。ブロック１３２４によって示されるように、検証されたオブジェクトがクラウドオブジェクトストア４０４から取得されたかどうかが判断され得る。ここでも、これは、例えば図９に関して本明細書で先に開示されたステップを含むことができ、論理ツリー内の親ノードからのチェックサムによってデータオブジェクトを検証するかどうかが判断される。
【０１２６】
データオブジェクトの実際のチェックサムと予想されるチェックサムとの不一致の場合、プロセスフローはブロック１３２６に遷移し得、そこで対応策プロセスが開始され得る。これは、例えば、図９に関して本明細書で先に開示された、対応策プロセスが開示されるステップを含み得る。しかしながら、データが検証される場合、プロセスフローはブロック１３１６に遷移し得、システム４００の読み取りおよび／またはさらなる処理操作が進行し得る。
【０１２７】
ブロック１３２８によって示されるように、１以上のオブジェクトを取得して、キャッシュステージングを調整し得る。場合によっては、キャッシュステージングの調整は、ブロック１３３０によって示されるように、１以上のオブジェクトをＭＲＵオブジェクトとして新たにキャッシュすることを含み得る。所与のＩ／Ｏ操作に対応する１以上のオブジェクトがＭＲＵオブジェクトとしてまだステージングされていない場合、その１以上のオブジェクトはＭＲＵオブジェクトとして新たにステージングされ得る。
【０１２８】
しかし、場合によっては、Ｉ／Ｏ操作に対応する１以上のオブジェクトがＭＲＵ、ＭＦＵ、ＬＦＵ、またはＬＲＵオブジェクトとして既にステージングされている場合、ＡＲＣ２２２−５は１以上のオブジェクトに遷移基準を適用して、ブロック１３３２によって示されるように、１以上のオブジェクトを異なるステージに遷移させるかどうかを判断し得る。ただし、遷移基準が満たされていない場合、ステージングすることにおける変更は、Ｉ／Ｏ操作のサービスでは必要でなくてもよい。
【０１２９】
いくつかの実施形態では、オブジェクトをステージングすることは、少なくとも部分的にはオブジェクトのアクセスの最近度の関数であり得る。ブロック１３３４によって示されるように、いくつかの実施形態では、キャッシュステージングの調整は、１以上の最近度属性を更新することを含み得る。ＡＲＣ２２２−５は、１以上の新たなオブジェクトのアクセスの最近度を追跡するために、１以上の新たなオブジェクトの最近度属性を定義することができる。最近度属性は、１以上のオブジェクトに対応する最後のアクセス時間を示す時間パラメータ（例えば、絶対時間、システム時間、時間差などによる）および／または他のオブジェクトの最近度属性が対比され得る１以上のオブジェクトに対応するアクセス数を示す順次パラメータに対応し得る。
【０１３０】
様々な実施形態において、遷移基準は、オブジェクトが現在のステージからの遷移に対して適格となるために定義される１以上の最近度閾値を含み得る。例えば、ＡＲＣ２２２−５は、１以上のオブジェクトに割り当てられた最近度属性の値に少なくとも部分的に基づいて、１以上のオブジェクトをＬＦＵステージまたはＬＲＵステージ（または立ち退き）に遷移すべきかどうかを判断することができる。いくつかの実施形態では、最近度閾値は、１以上のステージで他のオブジェクトに対して定義される最近度属性の関数として調整される動的閾値であり得る。例えば、既にＭＦＵオブジェクトとしてステージングされた任意のオブジェクトについて定義される最近度属性の値が昇順または降順でソートされる場合、最近度閾値は、ステージングされたオブジェクトについて定義される任意の最近度属性の最小値の関数であり得る。
【０１３１】
追加または代替として、いくつかの実施形態では、オブジェクトをステージングすることは少なくとも部分的にオブジェクトのアクセスの頻度の関数であり得る。ブロック１３３６によって示されるように、いくつかの実施形態では、キャッシュステージングの調整は、１以上の頻度属性を更新することを含み得る。特定のＩ／Ｏ操作では、ＡＲＣ２２２−５は、１以上のオブジェクトのアクセスの頻度を追跡するために、１以上のオブジェクトについて定義される頻度属性を増分することができる。頻度属性は、任意の好適な期間にわたるアクセス数を示し得、それは、絶対期間、アクティビティベースの期間（例えば、ユーザセッション、または最小アクティビティ閾値を満たす最後のアクセスアクティビティ量以降の時間）などであり得る。
【０１３２】
様々な実施形態において、遷移基準は、オブジェクトが現在のステージからの遷移に適格となるために定義される１以上の頻度閾値を含み得る。例えば、頻度属性の値の変化の結果として、ＡＲＣ２２２−５は、１以上のオブジェクトをＭＦＵオブジェクトとして（または別のステージにおけるオブジェクトとして）ステージングすべきかどうかを判断することができる。そのような判断は、更新された頻度属性を頻度閾値と比較することに少なくとも部分的に基づいて行われ得る。いくつかの実施形態では、頻度閾値は、他のステージングされたオブジェクト（例えば、ＭＦＵオブジェクトとしてステージングされたオブジェクトまたは別のステージにおけるオブジェクト）に対して定義される頻度属性の関数として調整される動的閾値であり得る。例えば、既にＭＦＵオブジェクトとしてステージングされた任意のオブジェクトについて定義される頻度属性の値が昇順または降順でソートされる場合、頻度閾値は、ステージングされたオブジェクトについて定義される任意の頻度属性の最小値の関数であり得る。
【０１３３】
ブロック１３３８によって示されるように、追加または代替として、いくつかの実施形態によれば、キャッシュステージングの調整は、１以上の他のステージング属性を指定することを含み得る。ステージング属性は操作タイプを示すことができる。いくつかの実施形態では、オブジェクトをステージングすることは少なくとも部分的に操作タイプの関数であり得る。例えば、ステージングアルゴリズムは、読み取り操作でアクセスされたオブジェクトのみがＭＦＵオブジェクトとしてステージングされ得るように、読み取り操作に対する書き込み操作の区別を用いることができる。そのような実施形態では、書き込み操作で参照されるオブジェクトは、最初はＭＲＵオブジェクトとして維持され、その後、ＬＦＵステージング基準に従って降格の対象となり得る。代替として、そのような実施形態では、書き込み操作で参照されるオブジェクトは、最初はＭＲＵオブジェクトとして維持され、その後ＬＲＵステージング基準に従って降格され、次いで立ち退きの対象となり、ＬＦＵステージングを効果的にスキップしてもよい。別の代替案として、書き込み操作で参照されるオブジェクトは、最初はＭＲＵオブジェクトとして維持され、その後立ち退きの対象となり、ＬＦＵステージングおよびＬＲＵステージングを効果的にスキップしてもよい。そのような代替案では、ＡＲＣ２２２−５は、クラウドオブジェクトを、後続の読み取り操作に必要とされる可能性が低いものとして、クラウドオブジェクトストア４０４にコミットするよう、書き込み操作を区別し、したがって、仮にそのような潜在的な操作が生じた場合にそのような操作がクラウドアクセスレイテンシを招くことを可能にする。
【０１３４】
ステージング属性はデータ型を示すことができる。追加または代替として、いくつかの実施形態では、オブジェクトをステージングすることは少なくとも部分的にデータ型の関数であり得る。例えば、いくつかの実施形態は、データとの関係において、メタデータに対して、より高い優先順位を与え得る。この、より高い優先順位は、すべてのメタデータオブジェクトを保持すること、およびデータオブジェクトをステージングすることを含み得る。代替的に、この、より高い優先順位は、ステージング遷移（現在のステージからの昇格および／または降格）についての異なる基準をデータオブジェクトとの関係においてメタデータオブジェクトに対して適用することを含み得る。例えば、データオブジェクトが降格に対して適格であると定義される閾値（例えば、最近度、頻度、および／または同様の閾値）は、メタデータが降格に対して適格であると定義される閾値より低くあり得る（したがって、より容易に満たされ得る）。代替的に、他の実施形態は、メタデータとの関係において、データに対して、より高い優先順位を与えてもよい。いくつかの実施形態では、クラウドオブジェクトの一部は、使用頻度に関係なく常にキャッシュされるように定義され得る。
【０１３５】
ステージング属性は操作特性を示すことができる。追加または代替として、いくつかの実施形態では、オブジェクトをステージングすることは少なくとも部分的に読み取り操作特性の関数であり得る。例えば、いくつかの実施形態は、読み取られるオブジェクトのサイズがサイズ閾値を満たすようにサイズ特性を有する読み取り操作に高い優先順位を与えてもよい。追加的または代替的に、読み取られるオブジェクトのシーケンスがシーケンス閾値を満たすように、シーケンシャルな特性を有する読み取り操作に、より高い優先順位が与えられてもよい。したがって、大きな、シーケンシャルなストリーミング読み取り操作は、より小さな、より分離された読み取り操作よりも、キャッシングに対して、より高い優先順位が与えられてもよい。このようにして、より大きい、シーケンシャルなストリーミング読み取り操作に対する、より高いクラウドアクセスレイテンシが、回避される。
【０１３６】
ＡＲＣ２２２−５のいくつかの実施形態は、各ステージに対して、異なる関数、遷移基準、および／または閾値を採用することができる。いくつかの実施形態では、ＡＲＣ２２２−５はステージングスコアリングシステムを採用してもよい。いくつかの実施形態は、例えばステージングスコアなどの数値表現でオブジェクトにスコアを付けることができる。ステージングスコアは、遷移基準などの任意の好適な基準に関するオブジェクトの資格を反映し得る。例えば、オブジェクトに対する所与のステージングスコアは、アクセスの頻度、アクセスの最近度、操作タイプ、データ型、操作特性、オブジェクトサイズなどの基準に従ったスコアリングの累積的なものとすることができる。与えられたオブジェクトは、各基準に関してスコア付けされ得る。例えば、頻度属性、最近度属性などの属性の比較的より大きい値には、より大きいスコアが与えられてもよい。同様に、スコアは他の基準および優先順位を考慮して割り当てられてもよい。オブジェクトの累積ステージングスコアは、キャッシュに記憶される他のオブジェクトのステージングスコアとともに、優先順位に従ってオブジェクトをランク付けするために使用できる。ここでも、優先順位は、オブジェクトを異なるステージに、および／または立ち退きに向かって遷移させるために用いることができる。
【０１３７】
ＡＲＣ２２２−５は、１以上のキャッシュ使用量および容量の制約を満たすようにそこに記憶されているステージおよびオブジェクトを適合させることができる。例えば１ＴＢのＤＲＡＭのキャッシュデバイス容量を考えると、ＡＲＣ２２２−５は、８０％の最大キャッシュ使用量を維持するよう、そこに記憶されているステージおよびオブジェクトを適合させてもよい。さらに、いくつかの実施形態は、１以上の速度制約を満たすよう、中に記憶されているステージおよびオブジェクトを適合させてもよい。例えば、ＡＲＣ２２２−５は、ローカルアクセスおよびクラウドアクセスの両方があるとして、多少のキャッシングを用いて１以上のレイテンシ許容範囲を満足すべきかどうかを判断するために、許容可能な量のアクセスレイテンシ（例えば、平均アクセスレイテンシ）を維持するよう、スループットを監視してもよい。そのような適応制約に鑑み、中に記憶されるステージおよびオブジェクトの適合は、オブジェクトを優先順位でソートするために各ステージについて異なる機能および閾値を適用することを含み得る。優先順位は、適応制約を満たすために、ＡＲＣ２２２−５によって利用されて、記憶されたオブジェクトを立ち退きの方へシフトさせることができる。
【０１３８】
ブロック１３４０によって示されるように、いくつかの実施形態において、キャッシュステージング調整は、異なるキャッシングモードへの遷移を含み得る。いくつかの実施形態は、使用およびレイテンシの制約を満たしながら負荷バランスをとるために動作モードを動的に変更することができる。初期動作モードまたはデフォルト動作モードは、オブジェクトが最初にキャッシュから、次に必要に応じてクラウドからアクセスされるように、ライブ方式でクラウドから動作することに対応し得る。ＡＲＣ２２２−５のいくつかの実施形態は、最初に（例えば、あるセッションまたは期間内に）Ｉ／Ｏ操作でアクセスされるすべてのオブジェクトをキャッシュし、次いでキャッシュ使用が１以上の閾値を満たすとステージングの使用に遷移してもよい。ステージングへの遷移は、１以上の二次動作モードで増分的であり得る。例えば、ステージングは、最初にＭＲＵおよびＭＦＵステージングに追いやられ、次に、１以上のキャッシュ使用閾値（最大キャッシュ使用閾値より前であってそれより低い）が満たされると１以上の他のステージに拡張されてもよい。
【０１３９】
キャッシュ使用が使用制約に近づき、１以上の使用閾値を満たすことを考慮して、特定の遷移基準を１以上の追加の動作モードで増分的に適用することができる。例えば、書き込み操作に対応するオブジェクトは、最初は区別されないかもしれない。しかし、キャッシュ使用が使用制約に近づくにつれて、その区別基準は、１以上の使用閾値が満たされた後、適用され得る。
【０１４０】
別の例として、キャッシュ使用がさらに使用制約に近づき、１以上の使用閾値を満たすと、ハイブリッドクラウドストレージシステム４００−２は、より低いランクのステージ（例えば、ＬＲＵおよび／またはＬＦＵステージ）に対して、１以上のＬ２ＡＲＣデバイス（１以上の、低レイテンシサイドに対応する）で、拡張されたキャッシュを利用し始めることができる。さらに別の例として、キャッシュ使用がさらに使用制約に近づき、１以上の使用閾値を満たすと、ハイブリッドクラウドストレージシステム４００−２は、１以上の三次動作モードでレイテンシ許容範囲に適合するためにローカルストレージ２２８を使用し始めることができる。より具体的な例として、将来の低レイテンシアクセスに対してプロビジョニングすることなく大規模なシーケンシャルなストリーミング読み取り操作を排除するのではなく、操作の拡張および対応するオブジェクトのアクセス頻度は、オブジェクトがローカルストレージ２２８に遷移されるようにサイズおよび頻度の閾値を満たすのに十分であってもよい。このようにして、ハイブリッドクラウドストレージシステム４００−２は、大規模なシーケンシャルな読み取り操作をもう一度呼び出す場合に、（他の大量のシーケンシャルな読み取り操作を必要とする可能性がある）他の低レイテンシアクセスのためにキャッシュ容量を解放し、クラウドレイテンシをペイすることを回避しながら、オブジェクトをローカルレイテンシ読み取り操作に対して利用可能に保つ。オブジェクトレベルでのローカルストレージ２２８とクラウドストレージとの両方のこのような選択的な利用は、レイテンシ許容範囲内で動作するためにクラウドストレージとローカルストレージ２２８との間の時間および負荷平衡の大部分キャッシュを使用しながらクラウドレイテンシのマスキングをさらに容易にする。様々な実施形態では、この三分された記憶適応は、フォールバック動作モードまたは特定のタイプの操作に対する初期デフォルトが特定の特性を有するときに開始されることができる。
【０１４１】
したがって、いくつかの実施形態は、オブジェクトアクセスの特性に少なくとも部分的に基づいてキャッシングモードおよび技法を変更し得る。特定の実施形態は、クラウドベースの操作についてレイテンシをマスキングするために、キャッシング機能、クラウドストレージ、およびローカルストレージ２２８を活用することができる。そのような実施形態では、操作の大部分は、ほとんどの場合ローカルレイテンシをもたらす、キャッシュヒット率が典型的には９０％以上を超える状態でキャッシュからサービス処理されてもよい。ローカルオブジェクトが欠落しているか破損している場合は、そのオブジェクトのクラウドコピーにアクセスし得る。いくつかの実施形態では、クラウドオブジェクトストア４０４からの読み取りは、キャッシュヒットがなく、読み取り要求がローカルストレージ２２８からサービス処理され得ない場合にのみ必要であってもよい。
【０１４２】
いくつかの実施形態では、上で開示されたＡＲＣチェック、ローカルストレージチェック、および／またはクラウドオブジェクトストアチェックの代わりに、マッピング４０６を用いて、対象の１以上のオブジェクトの位置を識別することができる。上述したように、マッピング４０６はオブジェクトディレクトリを含み、各Ｉ／Ｏ操作で更新されるオブジェクト状態を維持することができる。クラウドオブジェクト状態は、オブジェクトごとにインデックス付けされ得るインデックス、テーブル、インデックス編成テーブルなどに保持され得る。オブジェクト状態は、オブジェクトキャッシュ状態を含み得る。オブジェクトキャッシュ状態は、ＡＲＣ、Ｌ２ＡＲＣ、適応ステージ、ローカルストレージ、および／またはクラウドストレージのうちのいずれか１つまたはそれらの組合せにおけるオブジェクトの位置を示すことができる。マッピング４０６を利用することによって、クラウドインターフェースデバイス４０２は、対象の１以上のオブジェクトの位置を直接識別することができる。いくつかの実施形態では、クラウドインターフェースデバイス４０２は、ＡＲＣチェックに従ってヒットがない場合にのみマッピング４０６を利用することができる。
【０１４３】
いくつかの実施形態では、キャッシングに加えてまたはその代わりに、インテリジェントプール管理は、クラウドオブジェクトストレージ４０４と連続的に同期するミラーを維持することを含む。クラウドオブジェクトデータストアを仮想デバイスとして少なくとも部分的にサポートすることによって、特定の実施形態は、ローカルストレージとクラウドストレージとの間のミラーリングを提供することができる。クラウドストレージをローカルストレージとミラーリングすると、クラウド内においてすべてのデータのレプリケーションされたコピーを保持しながら、ローカルストレージの読み取りパフォーマンスを向上させることができる。ミラーを用いることで、複数のコピーをローカルに保存しなくても、フルパフォーマンスの利点をローカルシステムに提供し得る。ローカルデータが欠落しているか破損している場合は、データのクラウドコピーにアクセスすることができる。同期ミラーリングクラウドおよびローカルデバイスは、より高いレベルのパフォーマンスを促進し得る。
【０１４４】
そのような同期ミラーリングを容易にするために、特定の実施形態はミラーＶＤＥＶを含み得る。図１４は、本開示のいくつかの実施形態による、同期ミラーリングを容易にするためのハイブリッドクラウドストレージシステム４００の例示的ネットワークファイルシステム２００−２のインスタンスを示す。ファイルシステム２００−２は、ファイルシステム２００−１に対応し得るが、ミラー管理がＺＦＳ制御スタックに直接統合されている。ファイルシステム２００−１に関して開示されたものを超えて、ファイルシステム２００−２は、データのクラウドコピーを容易にするが、データを読み取るためにローカルアクセス時間／速度を除くデータのコピーを容易にするミラーＶＤＥＶ１４０２を含み得る。
【０１４５】
いくつかの実施形態では、ミラーＶＤＥＶ１４０２は、ＺＦＳファイルシステムアーキテクチャ内のデバイスドライバインターフェースの別のＶＤＥＶタイプの１以上のＶＤＥＶに対応し得る。ＺＦＳはミラーＶＤＥＶ１４０２と直接通信することができ、ミラーＶＤＥＶ１４０２はファイルシステム２００−２のドライバ層の真上の仮想デバイス層にあり得、いくつかの実施形態ではＺＦＳアーキテクチャ内のデバイスドライバインターフェースの抽象化に対応し得る。ファイルシステム２００−２は、ミラーＶＤＥＶ１４０２をＩ／Ｏ操作のためのファネルとなるように作成することができる。いくつかの実施形態では、ミラーＶＤＥＶ１４０２は、ファイルシステム２００−２の他のコンポーネントが主に通信することができるポイントであり得る。例えば、いくつかの実施形態では、トランザクショナルオブジェクト層からの通信は、ミラーＶＤＥＶ１４０２を介して物理層に進むことができる。より具体的には、ＤＭＵ２１８からの通信は、Ｉ／Ｏパイプライン２２４およびミラーＶＤＥＶ１４０２に向けられ得る。そのような通信に応答して、ミラーＶＤＥＶ１４０２は、ＶＤＥＶ２２６およびクラウドインターフェースデバイス５０２などの他のＶＤＥＶに通信を向けることができる。したがって、ミラーＶＤＥＶ１４０２は、ローカルストレージ２２８およびクラウドオブジェクトストレージ４０４に関してＩ／Ｏ操作を調整することができる。
【０１４６】
いくつかの実施形態では、ミラーＶＤＥＶ１４０２は、読み取り操作がミラーＶＤＥＶ１４０２を通過する必要がないように、ローカルストレージ２２８およびクラウドオブジェクトストレージ４０４に関して書き込み操作のみを調整することができる。そのような実施形態では、ＶＤＥＶ２２６およびクラウドインターフェースデバイス５０２などの他のＶＤＥＶは、読み取り操作についてはミラーＶＤＥＶ１４０２を迂回することができる。代替実施形態では、ミラーＶＤＥＶ１４０２はすべてのＩ／Ｏ操作を調整することができる。
【０１４７】
有利なことに、ミラーＶＤＥＶ１４０２は、各書き込み操作が、ローカルストレージ２２８に関しては１以上のＶＤＥＶ２２６を介して、およびクラウドオブジェクトストア４０４に関してはクラウドインターフェースデバイス５０２を介して、同期的に実行されるように、書き込み操作を調整することができる。各Ｉ／Ｏ操作のこのような同期ミラーリングは、ファイルレベルではなくオブジェクトレベルで実行される。各Ｉ／Ｏ操作でのデータレプリケーションは、ハイブリッドクラウドストレージシステム４００がクラウドアクセスのレイテンシをマスキングするローカルストレージ読み取りパフォーマンスを達成することを可能にする。デフォルトとして、ハイブリッドクラウドストレージシステム４００は、大部分の読み取り操作についてクラウドのレイテンシをペイすることを回避するためにローカルストレージ２２８から読み取ることができる。ハイブリッドクラウドストレージシステム４００が、ローカルデータが欠落しているか破損していると判断した場合にのみ、ハイブリッドクラウドストレージシステム４００はクラウドオブジェクトストア４０４にアクセスして所望のデータのクラウドコピーを読み取る必要がある。そのような例外は、クラウドアクセスのレイテンシが最小化されるように、オブジェクト単位で実行されてもよい。
【０１４８】
図１５は、本開示のいくつかの実施形態による、同期ミラーリングおよびクラウドレイテンシマスキングのためのハイブリッドクラウドストレージシステム４００のいくつかの特徴に向けられた例示的な方法１５００を示すブロック図である。特定の実施形態によれば、方法１５００はブロック１５０２によって示されるように開始することができる。しかしながら、上記で明らかにされたように、本明細書に開示された方法の特定のステップは、任意の好適な態様でシャッフルされ、組み合わされ、および／または同時もしくは実質的に同時に実行され、選択された実現例に依存してもよい。
【０１４９】
ブロック１５０２によって示されるように、特定の操作（すなわちトランザクション）を実行するためのＰＯＳＩＸ準拠の要求が、アプリケーション２０２から受信され得る。そのような操作は、データの書き込みおよび／または修正に対応し得る。ブロック１５０４によって示されるように、ＰＯＳＩＸ準拠の要求は、オペレーティングシステムからシステムコールインターフェース２０８を介してＤＭＵ２１８に転送され得る。ブロック１５０６によって示されるように、ＤＭＵ２１８は、データオブジェクトに対する操作を実行するための要求を、システムストレージプール４１６および／またはクラウドオブジェクトストア４０４内の物理的位置に向けられる書き込み操作を実行するための要求（すなわちＩ／Ｏ要求）に直接変換し得る。ＤＭＵ２１８は、Ｉ／Ｏ要求をＳＰＡに転送し得る。
【０１５０】
ＳＰＡのミラーＶＤＥＶ１４０２は、（例えば、ＡＲＣ２２２およびＩ／Ｏパイプライン２２４を介して）Ｉ／Ｏ要求を受信し得る。ブロック１５０８によって示されるように、ミラーＶＤＥＶ１４０２は、Ｉ／Ｏ操作ごとに同期レプリケーションでデータオブジェクトの書き込みを開始し得る。ミラーＶＤＥＶ１４０２の一部はローカルストレージを指し得、ミラーＶＤＥＶ１４０２の一部はクラウドストレージアプライアンス４０２のクラウドインターフェースデバイス５０２を指し得る。ブロック１５１０によって示されるように、ミラーＶＤＥＶ１４０２は、書き込み操作の第１のインスタンスを１以上のＶＤＥＶ２２６に向け得る。いくつかの実施形態では、ブロック１５１４によって示されるように、データオブジェクトをローカルシステムストレージに書き込むために、（例えば、図３Ａ〜図３Ｄを考慮して）上で開示されたＣＯＷプロシージャが進行し得る。
【０１５１】
ブロック１５１２によって示されるように、ミラーＶＤＥＶ１４０２は、書き込み操作の第２のインスタンスをクラウドストレージアプライアンス４０２のクラウドインターフェースデバイス５０２に向け得る。いくつかの実施形態では、ブロック１５１６によって示されるように、データオブジェクトをローカルシステムストレージに書き込むために、上で開示されたＣＯＷプロシージャが進行し得る。例えば、方法１５００は、ブロック７１２または方法７００の他のステップに遷移してもよい。
【０１５２】
各書き込み操作がローカルストレージ２２８およびクラウドオブジェクトストア４０４に関して同期的に実行されると、ハイブリッドクラウドストレージシステム４００はその後クラウドアクセスのレイテンシをマスキングするローカルストレージ読み取りパフォーマンスを達成するために読み取り操作をインテリジェントに調整し得る。レプリケーションを与えるデータストレージの完成後の任意の好適な時点で、ハイブリッドクラウドストレージシステム４００はそのような読み取り操作を調整し得る。再び図１５を参照すると、ブロック１５１８によって示されるように、１以上の特定の操作（すなわち、１以上のトランザクション）を実行するためのＰＯＳＩＸ準拠の要求がアプリケーション２０２から受信され得る。そのような操作は、データを読み取ること、またはそうでなければデータにアクセスすることに対応し得る。ブロック１５２０によって示されるように、ＰＯＳＩＸ準拠の要求は、オペレーティングシステムからシステムコールインターフェース２０８を介してＤＭＵ２１８に転送され得る。ブロック１５２２によって示されるように、ＤＭＵ２１８は、データオブジェクトに対して操作を実行するための要求を、ローカルストレージ２２８に向けられる１以上の読み取り操作を実行するための要求（すなわち１以上のＩ／Ｏ要求）に直接変換し得る。ＳＰＡは、ＤＭＵ２１８からＩ／Ｏ要求を受信し得る。ブロック１５２４によって示されるように、要求に応答して、ＳＰＡはローカルストレージ２２８からの１以上のデータオブジェクトの読み取りを開始し得る。いくつかの実施形態では、ＡＲＣ２２２は、１以上のデータオブジェクトのキャッシュされたバージョンについて最初にチェックされ、キャッシュされたバージョンが見つからない場合、ローカルストレージ２２８から１以上のデータオブジェクトを読み取る試みが行われ得る。
【０１５３】
ブロック１５２６によって示されるように、Ｉ／Ｏ要求に対応する１以上の検証されたデータオブジェクトが存在するかどうかを判断し得る。これは、ＳＰＡが、１以上のＩ／Ｏ要求に対応する１以上のオブジェクトがローカルストレージ２２８から取得可能であるかどうかをまず判断することを含み得る。次いで、そのような１以上のオブジェクトが取得可能である場合、そのオブジェクトは、論理ツリー内の親ノードからのチェックサムでチェックされ得る。様々な実施形態では、チェックは、ＶＤＥＶ２２６、ミラーＶＤＥＶ１４０２、および／またはＩ／Ｏパイプライン２２４のうちの１つまたは複数によって実行され得る。ブロック１５２８によって示されるように、データオブジェクトが検証される場合、データが破損しておらず不正確なバージョンではないと判定されたので、システム４００の読み取りおよび／またはさらなる処理操作が進行し得る。
【０１５４】
しかしながら、Ｉ／Ｏ要求に対応する検証されたデータオブジェクトが存在しないとＳＰＡが判断した場合、プロセスフローはブロック１５３０に遷移し得る。そのような判断は、１以上のＩ／Ｏ要求に対応する取得可能なデータオブジェクトが存在しないことに対応し得、その場合、エラー状態が識別され得る。同様に、そのような判断は、１以上のＩ／Ｏ要求に対応するデータオブジェクトの実際のチェックサムと予想されるチェックサムとの不一致に対応し得、その場合も、エラー状態が識別され得る。いずれの場合も、ブロック１５３０によって示されるように、ＳＰＡはクラウドオブジェクトストア４０４から１以上のデータオブジェクトの読み取りを開始することができる。様々な実施形態において、読み取りの開始は、ＤＭＵ２１８、ミラーＶＤＥＶ１４０２、Ｉ／Ｏパイプライン２２４、および／またはクラウドインターフェースアプライアンス４０２のうちの１つまたはそれらの組み合わせによって実行されることができる。
【０１５５】
クラウドオブジェクトストア４０４からの１以上のデータオブジェクトの読み取りは、例えば図９に関して本明細書で上に開示されたステップを含み得る。そのようなステップは、上で詳述した、クラウドインターフェースアプライアンス４０２にＩ／Ｏ要求を発行すること、クラウドストレージオブジェクト４１４のマッピング４０６を用いてクラウドオブジェクトストア４０４に対応するクラウドインターフェース要求を送信すること、オブジェクトインターフェース要求に応答してデータオブジェクトを受信することなどの１つまたは組み合わせを含み得る。ブロック１５３２によって示されるように、検証されたデータオブジェクトがクラウドオブジェクトストア４０４から取得されたかどうかが判断され得る。ここでも、これは、例えば図９に関して本明細書で先に開示されたステップを含むことができ、論理ツリー内の親ノードからのチェックサムによってデータオブジェクトを検証するかどうかが判断される。
【０１５６】
データが検証される場合、プロセスフローはブロック１５２８に遷移し、システム４００の読み取りおよび／またはさらなる処理操作が進行し得る。さらに、ブロック１５３４によって示されるように、正しいデータがローカルシステムストレージに書き込まれ得る。様々な実施形態において、訂正プロセスは、ＤＭＵ２１８、ミラーＶＤＥＶ１４０２、Ｉ／Ｏパイプライン２２４、および／またはクラウドインターフェースアプライアンス４０２のうちの１つまたはそれらの組み合わせによって実行されてもよい。いくつかの実施形態では、プロセスフローはブロック１５１４に遷移してもよく、そこで正しいデータをローカルシステムストレージに書き込むためにＣＯＷプロシージャが進行してもよい。
【０１５７】
しかし、データオブジェクトの実際のチェックサムと予想されるチェックサムとが一致しない場合、プロセスフローはブロック１５３６に遷移し、そこで対応策プロセスが開始され得る。これは、例えば、図９に関して本明細書で先に開示された、対応策プロセスが開示されるステップを含み得る。例えば、対応策プロセスは、１以上のクラウドインターフェース要求を再発行すること、別のクラウドオブジェクトストアに対してデータの正しいバージョンを要求することなどを含み得る。
【０１５８】
有利なことに、ハイブリッドクラウドストレージシステム４００によって維持されるデータ量が特定の量を超えると、図１２および図１３に関して開示された実施形態に従って、上に開示されたミラーリングモードからキャッシングモードに遷移することは、より費用効果的に最適になり得る。特定の実施形態はその遷移を自動的に行い得る。ハイブリッドクラウドストレージシステム４００は、ミラーリング技法で始まり得、１以上の閾値に達するまで進む。そのような閾値は、ストレージ使用の観点から定義され得る。例えば、ローカルストレージ容量の使用が、ある閾値パーセンテージ（または絶対値、相対値など）に達すると、ハイブリッドクラウドストレージシステム４００は適応Ｉ／Ｏステージングに遷移し得る。このようにして、ハイブリッドクラウドストレージシステム４００は、操作モードをシフトすることによってローカルストレージに与えられる負荷を均衡させることができる。次いで、ハイブリッドクラウドストレージシステム４００は、最も関連性のあるＸ量のデータ（例えば、１０ＴＢなど）をし、残りのデータをクラウドストレージにシャント（shunt）し得る。この負荷均衡は、増加する量のデータストレージに対応しながら、より少ないストレージデバイスを可能にし得る。
【０１５９】
図１６を参照して、ネットワークファイルシステム１６００の他の例が示されている。以下でより詳細に論じるように、この例示的ネットワークファイルシステム１６００は、異なるクラウドプロバイダによって動作され得る、複数のクラウドデータオブジェクトストア４０４にわたる同期ミラーリングをサポートするように構成され得る。この例では、プールストレージ層（例えば、仮想デバイス層）および物理ストレージ層内のコンポーネントなど、ファイルシステム１６００の特定のコンポーネントのみが示されているが、この例のファイルシステム１６００は、ファイルシステム２００−１および／またはファイルシステム２００−２のような、上述したＺＦＳファイルシステムの実施形態のうちの１つまたは複数に対応し得ることを理解されたい。例えば、ファイルシステム２２０−２におけるように、ファイルシステム１６００は、ファイルシステム１６００のデータおよびメタデータのファイルシステムストレージのスナップショットに対応する論理ツリー３００の同期レプリケーション（またはミラーリング）ならびにストレージをサポートするように構成されるミラーＶＤＥＶ１４０２を含み得る。ファイルシステム２００−２におけるように、ファイルシステム１６００は、ミラーＶＤＥＶ１４０２がデータの複数のクラウドコピーを容易にし得る、ＺＦＳ制御スタックに直接統合されるミラー管理をサポートすることができる。
【０１６０】
上述のように、ミラーＶＤＥＶ１４０２は、ドライバ層のすぐ上にあり得るＺＦＳファイルシステムアーキテクチャの仮想デバイス層内の仮想デバイスとして実装されてもよい。いくつかの実施形態において、ミラーＶＤＥＶ１４０２は、ＺＦＳアーキテクチャ内のデバイスドライバインターフェースの抽象化に対応し得る。ファイルシステム１６００は、Ｉ／Ｏ操作のためのファネルとなるようにミラーＶＤＥＶ１４０２を作成することができ、および／またはミラーＶＤＥＶ１４０２は、ファイルシステム１６００の他のコンポーネントがそれを介して通信することができるポイントとなることができる。この例に示されるように、トランザクショナルオブジェクト層（例えば、データ管理ユニット２１８（図示せず））からの通信は、Ｉ／Ｏパイプライン２２４を通ってミラーＶＤＥＶ１４０２へ、そして次に物理層へ進み得る。そのような通信に応答して、ミラーＶＤＥＶ１４０２は他のＶＤＥＶ２２６および／またはクラウドインターフェースデバイス５０２に通信を向けることができる。したがって、ミラーＶＤＥＶ１４０２は、ローカルデータオブジェクトストア２２８およびクラウドオブジェクトストア４０４に関してＩ／Ｏ操作を調整することができる。
【０１６１】
例示的なファイルシステム１６００などのネットワークファイルシステムを用いて、複数の異なるクラウドプロバイダのクラウドストレージ間でデータをミラーリングする様々な技法を実現し得る。例えば、後述するように、ＺＦＳファイルシステム１６００のファイルデータおよびメタデータを表す論理データブロックの完全なツリー階層を記憶するデータオブジェクトのセットが、複数の異なるクラウドオブジェクトストア４０４間でミラーリングされてもよい。この例に示すように、第１の論理ツリー階層３００Ａが、第１のクラウドプロバイダの第１のクラウドオブジェクトストア４０４ａに記憶され、同じツリー階層３００Ｂの同一のミラーリングされたインスタンスが、第２のクラウドプロバイダの第２のクラウドオブジェクトストア４０４ｂに記憶される。
【０１６２】
様々な実施形態において、本明細書に記載されているミラーリング技法は、クラウドレプリケーション、クラウド移行、クラウドベースの展開（例えば、開発テスト）環境、および様々な他の目的に用いることができる。例えば、クラウドレプリケーションは障害回復を提供し、クラウドストア障害からＺＦＳファイルシステムを保護する。クラウド移行は、例えばクラウドストアの性能、価格、信頼性などに基づいて、クラウドストア／クラウドプロバイダ間で評価し変更する能力をＺＦＳファイルシステム１６００に提供することができる。後述するように、そのような移行は、ほとんど（または完全に）ＺＦＳファイルシステムアーキテクチャの下位レベル内（例えば、プーリングされたストレージ層および物理ストレージ層内）で開始および実行できるので、クラウド移行はインターフェース層およびＺＦＳファイルシステム１６００上に構築されたすべてのアプリケーションに関して完全に透明に実行され得る。
【０１６３】
さらに、後述するように、そのような移行は、（例えば、単純なファイルごとの移行とは対照的に、）ファイルデータとメタデータとの両方を含む論理データブロックの同じツリー階層をミラーリングすることによって実行され得るので、ファイルシステムデータは、ファイルシステムデータや属性を失うことなく、異なるクラウドプロバイダ間で移行され得ることが保証され得る。すなわち、たとえ異なるクラウドオブジェクトストア４０４ａおよび４０４ｂが、そこに記憶されたデータオブジェクトについて、異なるネイティブの属性セットをサポートするとしても、ファイルシステムデータを、ファイルデータおよび／または別途の対応するメタデータを有する両方のブロックを含む論理データブロックのツリー階層として、編成、記憶、および移行することは、移行／レプリケーションプロセス中にファイルデータまたは対応するメタデータのいずれも失うことも変更することもなく、異なるクラウドオブジェクトストア４０４ａおよび４０４ｂ間で移行を確実に実行し得る。加えて、特定のファイルシステム属性および他の拡張された属性（例えば、ファイルシステムのバージョン履歴など）は、ツリー階層の論理データブロック内に明示的に記憶されてもよく、したがって異なる特性を有する異なるクラウドオブジェクトストア４０４ａ、４０４ｂ間の移行またはレプリケーション中に失われない。さらに、同様の理由で、異なるクラウドオブジェクトストア４０４ａおよび４０４ｂに存在するツリー階層の異なるインスタンスを用いて作成されたＺＦＳファイルシステムオブジェクト、クローンオブジェクト、ＣＦＳボリュームオブジェクト、およびスナップショットオブジェクトなどのＤＭＵオブジェクトは、それらが生成されたクラウドオブジェクトストア４０４に関わらず、同一であってもよい。
【０１６４】
加えて、クラウドプロバイダ間のデータミラーリングは、論理データブロックの同一の階層を含むクラウドベースの展開環境の直接的な作成を可能にし得る。したがって、そのような展開環境を用いることにより、クラウドデータオブジェクトストア４０４内に作業環境を作成し、アプリケーション開発者がクラウドベースの展開環境内で新たなアプリケーション／機能を構築およびテストし、次いで、（例えば新たな機能のテスト及び検証後に）クラウドベースの展開環境をＺＦＳファイルシステム１６００の一次ストレージシステム（例えば、ローカルデータオブジェクトストアまたはクラウドデータオブジェクトストア）に移行してもよい。
【０１６５】
さらに、本明細書に記載の、複数のクラウドプロバイダにわたってＺＦＳファイルシステム１６００のデータオブジェクトストレージをミラーリングする例は、各トランザクションの完了でデータの完全に同期されたコピーを保証し得る同期レプリケーション技法を用い得る。さらに、本明細書に記載のファイルシステムのアーキテクチャは、複数のクラウドデータオブジェクトストアにわたる効率的な同期レプリケーションを可能にし得、それによってミラーＶＤＥＶ１４０２は複数のクラウドデータオブジェクトストアにデータ修正を送信し得、すべてのクラウドデータオブジェクトストアから、成功したデータ書き込みを示す確認を待つ必要がない。例えば、クラウドデータミラーリングを用いてファイルシステム１６００上で書き込み操作を実行するとき、およびファイルシステム１６００が本明細書で説明される様々な同期、データ回復、および／または検証技法をサポートするとき、ミラーＶＤＥＶ１４０２は、書き込み操作がクラウドデータストア４０４の少なくとも１つで成功する限り、ファイルシステム１６００の同期、データ回復、および／または検証機能が、書き込み操作が失敗する可能性がある他の任意のクラウドデータストア４０４で書き込み操作を完了することになることを保証され得る。さらに、複数のクラウドデータオブジェクトストア４０４間の最初の移行またはレプリケーションの後、ファイルシステム１６００の特定の実施形態は、クラウドデータオブジェクトストア（例えば、４０４ａ、４０４ｂ、…）内の階層ツリー全体（例えば３００Ａ、３００Ｂ、．．．）の複数のインスタンスのチェックサムを提供し得る。
【０１６６】
以下により詳細に説明されるように、クラウドデータミラーリングの例は、論理ツリー階層３００Ａの第１のインスタンスを、１つのクラウドオブジェクトストア４０４ａから、別のクラウドオブジェクトストア４０４ｂにおける論理ツリー階層３００Ｂの同一の第２のインスタンスにレプリケーションおよび／または移行することを含み得る。ミラーＶＤＥＶ１４０２は、論理ツリー階層３００Ａを記憶するクラウドオブジェクトストア４０４ａからデータオブジェクトの取得を開始し、続いて、論理ツリー階層３００Ｂの同一のインスタンスを記憶するクラウドオブジェクトストア４０４ｂ上において同一のデータオブジェクトのセットの作成および書き込みを開始することによって、クラウドデータミラーリングを調整し得る。さらに、後述するように、最初のクラウドデータミラーリングの後、ミラーＶＤＥＶ１４０２はまた、ファイルシステム１６００のアプリケーション層から生じる読み取りおよび／または書き込み操作を調整することもできる。
【０１６７】
いくつかの実施形態では、クラウドデータミラーリングの制約は、クラウドデータを他の任意のクラウドオブジェクトストア４０４とミラーリングする各クラウドオブジェクトストア４０４に対してツリー階層の論理ブロックのクラウドデータオブジェクトへの同じマッピングを使用しなければならないことを必要とし得る。すなわち、ファイルデータを含む論理ブロックおよび／またはメタデータを含む論理ブロックの同じ構成、ならびにクラウドオブジェクトストア４０４内に記憶される物理データオブジェクトへのそれらの論理ブロックの同じ配置を、各クラウドオブジェクトストア４０４とともに（および／またはファイルシステム１６００のデータのミラーリングを実行することもできるローカルデータオブジェクトストア内で）用い得る。しかし、他の実施形態では、クラウドデータミラーリング技法は、同じミラーリング制約なしで実現され得る。そのような実施形態では、異なるクラウドオブジェクトストア４０４ａおよび４０４ｂは、各異なるクラウドオブジェクトストア４０４上の物理データオブジェクトがファイルシステム１６００を表す論理データブロックの同じツリー階層を記憶する限り、異なる数、サイズ、および／または構成の物理データオブジェクトを記憶し得る。
【０１６８】
最後に、ファイルシステム１６００の例に示されるように、ミラーＶＤＥＶ１４０２は、読み取り操作がミラーＶＤＥＶ１４０２を介して行われる必要はないように、クラウドデータオブジェクトストア４０４に関して（および／または場合によってはローカルストレージ２２８に関して）書き込み操作を調整するだけかもしれない。そのような実施形態では、アプリケーション層から始まる書き込み操作を調整するとき、ミラーＶＤＥＶ１４０２は、対応するクラウドインターフェースデバイス５０２を用いて、各書き込み操作が複数のクラウドオブジェクトストア４０４に関して同期的に実行されるように、書き込み操作を調整し得る。読み取り操作については、上流コンポーネント（例えば、Ｉ／Ｏパイプライン２２４、ＤＭＵ２１８など）は、読み取り操作についてはミラーＶＤＥＶ１４０２を迂回し得、クラウドオブジェクトストア４０４のうちの１つでの読み取り操作を実行するためにクラウドインターフェースデバイス５０２のうちの１つに直接読み取り操作をルーティングし得る。この例に示されるように、クラウドストアパフォーマンスモニタコンポーネント１６２５を用いて、クラウドストアパフォーマンスデータを受信／判断し、パフォーマンスデータに基づいて特定のクラウドオブジェクトストア４０４に読み取り操作をルーティングし得る。例えば、クラウドストアパフォーマンスモニタ１６２５（Ｉ／Ｏパイプライン内、ＤＭＵ２１８内、デバイス層内の別個の仮想デバイス２２６として、またはファイルシステム１６００内の他の場所に実装され得る）は、ミラーリングされたクラウドオブジェクトストア４０４の各々によって実行されたある数の以前の読み取り操作を評価および分析し得る。以前の読み取り操作を実行する際のクラウドオブジェクトストア４０４のパフォーマンスの評価に基づいて、クラウドストアパフォーマンスモニタ１６２５は、クラウドオブジェクトストア４０４の最も高性能なもののリアルタイム選択を実行し、読み取り操作をそのクラウドオブジェクトストア４０４にルーティングし得る。これらの例は、ミラーＶＤＥＶ１４０２がクラウドデータオブジェクトストア４０４に関して（および／またはローカルストレージ２２８に関して）読み取り操作を調整しない実施形態に関するものであるが、他の実施形態では、ミラーＶＤＥＶ１４０２は、ファイルシステム１６００のアプリケーション層から生じる読み取りおよび書き込みＩ／Ｏ操作の両方を調整し得る。
【０１６９】
ここで図１７を参照して、ネットワークファイルシステム１７００のさらに別の例が示されている。この例におけるネットワークファイルシステム１７００は、上述のファイルシステム１６００と同様の（または同一の）態様で実装されてもよい。上記の例のように、ファイルシステム１７００は、複数（例えば、２つ以上）のクラウドデータオブジェクトストア４０４にわたる同期ミラーリングをサポートするように構成され得る。さらに、この例では、ファイルシステム１７００は、クラウドデータオブジェクトストア４０４および別個のローカルデータオブジェクトストア４１６の両方にわたって同期ミラーリングをサポートすることができる。したがって、この例のファイルシステム１７００は、ハイブリッドクラウドストレージシステム４００のネットワークファイルシステム２００−２の例のように、上述したＺＦＳファイルシステムの様々な実施形態と同様のコンポーネントを含み得る。その例のように、ファイルシステム１７００は、１以上のクラウドデータオブジェクトストアとオンプレミスで（例えば同じデータセンター内に）残りのファイルシステム１７００のコンポーネントとともに記憶されるローカルデータストア４１６との間の同期ミラーリングをサポートするように構成される。例示的なツリー階層はこの例には示されていないが、ローカルデータストア４１６および各別々のクラウドストア４０４の両方は、ファイルシステム１７００のための論理ブロックツリー階層を含む同一のデータブロックのセットを記憶し得る。加えて、ＤＭＵ２１８からの通信は、Ｉ／Ｏパイプライン２２４およびミラーＶＤＥＶ１４０２に向けられ得、そのような通信に応答して、ミラーＶＤＥＶ１４０２は、様々なバックエンドデータストア上でデータ操作を実行するために、通信をＶＤＥＶ２２６およびクラウドインターフェースデバイス５０２に向けてもよい。したがって、ミラーＶＤＥＶ１４０２は、ローカルストレージ２２８とクラウドデータオブジェクトストア４０４の両方に関してＩ／Ｏ操作を調整することができる。したがって、上述のクラウドデータミラーリング技法および例をファイルシステム１７００において同様に（または同一に）実行して、１以上のクラウドオブジェクトストア４０４とローカルデータストア４１６との間の移行、レプリケーション、および他の同期ミラーリング技法をサポートし得る。
【０１７０】
いくつかの実施形態では、ファイルシステム１７００で用いられる同期ミラー技法は、各クラウドオブジェクトストア４０４内およびローカルデータストア４１６内においても、ファイルデータを含む論理ブロックおよび／またはメタデータを含む論理ブロックの同じ構成、ならびにそれらの論理ブロックの、記憶される物理データオブジェクトへの同じ配置を記憶することを含み得る。しかしながら、他の実施形態では、クラウドオブジェクトストア４０４およびローカルデータストア４１６がファイルシステム１７００に対応する論理データブロックの同じツリー階層を記憶する限り、クラウドオブジェクトストア４０４は、ローカルデータストア４１６内に記憶される物理データオブジェクトとは異なる数、サイズ、および／または構成の物理データオブジェクトを記憶し得る。
【０１７１】
上記のように、各Ｉ／Ｏ操作の同期ミラーリングは、ファイルレベルではなくオブジェクトレベルで実行されてもよい。各Ｉ／Ｏ操作でのデータレプリケーションは、ファイルシステム１７００がクラウドアクセスのレイテンシをマスキングするローカルストレージ読み取りパフォーマンスを達成することを可能にし得る。したがって、この例に示されるように、ファイルシステム１７００は、大部分の読み取り操作に対するクラウドレイテンシを回避するために、ローカルデータストア４１６から読み取りを行い得る。ファイルシステム１７００が、データストア４１６内のローカルデータが欠落しているか破損していると判断した場合にのみ、ファイルシステム１７００は、所望のデータのクラウドコピーを読み取るために、クラウドオブジェクトストア４０４の１つにアクセスする必要がある。そのような例外は、クラウドアクセスのレイテンシが最小化されるように、オブジェクト単位で実行されてもよい。したがって、この例に示されるように、いくつかの実施形態におけるファイルシステム１７００は、上述のように、様々なタイプの読み取り操作に関してクラウドストアパフォーマンスを分析するためにクラウドストアパフォーマンスモニタ１６２５を含む必要はない。むしろ、この例では、すべての読み取り操作は、ミラーＶＤＥＶ１４０２を迂回して、ローカルデータオブジェクトストア４１６にアクセスするように構成されたＶＤＥＶ２２６に直接与えることができる。しかし、上記の例のように、ファイルシステム１７００内のミラーＶＤＥＶ１４０２は、クラウドデータオブジェクトストア４０４およびローカルデータストア４１６に関する書き込み操作を調整するためにも用いられ得る。アプリケーション層から始まる書き込み操作を調整するとき、ミラーＶＤＥＶ１４０２は、各書き込み操作が、複数のクラウドオブジェクトストア４０４に関しては対応するクラウドインターフェースデバイス５０２を用い、ローカルデータストア４１６に関しては適切なＶＤＥＶ２２６を用いて、同期的に実行されるように、書き込み操作を調整し得る。
【０１７２】
ここで図１８を参照して、ネットワークファイルシステムから複数のクラウドデータオブジェクトストアにわたるデータの同期ミラーリングの例示的なプロセスを示すブロック図が示されている。この例で説明される同期ミラーリングプロセスは、上述のように、クラウドデータの移行、レプリケーション、および／または一時的なクラウドベースの展開（例えば開発テスト）環境の作成に対応し得る。さらに、この例示的なプロセスにおけるステップは、ファイルシステム１６００に示されるように、１つのクラウドオブジェクトストア４０４ａから別のクラウドオブジェクトストア４０４ｂへのファイルシステムデータの同期ミラーリングに関して説明される。しかしながら、他の例では、類似のまたは同一の技法を、クラウドオブジェクトストア４０４からローカルデータストア４１６への、またはその逆の、ファイルシステムデータの同期ミラーリングのために用いることができる。
【０１７３】
このプロセスのステップは、例えば、様々なクラウドインターフェースデバイス５０２および他のＶＤＥＶ２２６と関連して、ミラーＶＤＥＶ１４０２、Ｉ／Ｏパイプライン２２４、および／またはＤＭＵ２１８などの、上述したファイルシステム１６００および／またはファイルシステム１７００内のコンポーネントによって実行することができる。例えば、上述のように、ミラーＶＤＥＶ１４０２は、論理ツリー階層を記憶する第１のクラウドオブジェクトストア４０４ａ内の特定のデータオブジェクトの取得を開始し、続いて、第２のクラウドオブジェクトストア４０４ｂ上において同一のデータオブジェクトのセットの作成および書き込みを開始し、それによって論理ツリー階層の同一のインスタンスを記憶することによって、クラウドデータ移行および／またはレプリケーションプロセスを調整し得る。しかしながら、他の実施形態では、以下に説明するステップは、Ｉ／Ｏパイプライン２２４および／またはＤＭＵ２１８など、ミラーＶＤＥＶ１４０２以外のファイルシステムコンポーネントによって部分的にまたは全体的に実行され得る。また、本明細書に記載のプロセス機能は、上記のファイルシステム（例えば、１６００および１７００）の特定の実施形態に限定されず、本明細書でサポートされている様々な他のコンピューティング環境上で実行することができることも理解されたい。
【０１７４】
ブロック１８０２において、ファイルシステムデータを記憶する（少なくとも）１つのクラウドオブジェクトストア４０４ａを有するファイルシステム１６００内のミラーＶＤＥＶ１４０２は、ファイルシステムデータがミラーリングされるべき第２のクラウドオブジェクトストア４０４ｂを検出し得る。上述のように、ブロック１８０２で第２のクラウドオブジェクトストア４０４ｂへの同期ミラーリングを開始するという判断は、２つのクラウドオブジェクトストア４０４ａと４０４ｂとの間のクラウドデータ移行の開始、二次バックアップクラウドオブジェクトストア４０４ｂへのクラウドデータレプリケーションの開始、および／または第２のクラウドオブジェクトストア４０４ｂ上の一時的な展開環境の作成に対応する。
【０１７５】
ブロック１８０２における判断は、ファイルシステム管理者を介して受信された命令および／またはミラーＶＤＥＶ１４０２ソフトウェアによって実行される様々な自動化された判断に対応し得る。例えば、ミラーＶＤＥＶ１４０２は、利用可能なクラウドインターフェースデバイス５０２および／または各関連付けられたクラウドオブジェクトストア４０４で記憶されている現在のデータオブジェクトのセットを監視するように構成され得、特定の状態またはイベントの検出に基づいて自動的にクラウド間同期ミラーリングを開始し得る。一例として、ミラーＶＤＥＶ１４０２は、第１のクラウドオブジェクトストア４０４ａに関連する潜在的な性能または信頼性の問題（例えば、今後の予定されているメンテナンス、システムエラー、クラウドストレージサイズ制限の接近など）を検出した場合、ミラーＶＤＥＶ１４０２は、ブロック１８０２において、第１のクラウドオブジェクトストア４０４ａから第２のクラウドオブジェクトストア４０４ｂへのデータの移行またはレプリケーションを自動的に開始し得る。そのような例では、同期されたミラーリングプロセスが開始されるべきであると判断するためにミラーＶＤＥＶ１４０２によって実行される自動化されたプロセスは、複数の利用可能なクラウドデータオブジェクトストア４０４の分析、ならびにストレージの可用性、価格、性能および／またはその他の要因に基づく、移行／レプリケーションプロセスの受信側となる特定のクラウドデータオブジェクトストア４０４ｂの選択を含み得る。追加または代替として、ブロック１８０２における判断は、ファイルシステムデータのツリー階層を記憶する第１のクラウドオブジェクトストア４０４ａと第２のクラウドオブジェクトストア４０４ｂとの間の同期されたミラーリングプロセスを開始するよう管理ユーザインターフェースを介して受信される要求または命令に対応し得る。
【０１７６】
ブロック１８０４で、ミラーＶＤＥＶ１４０２は、第１のクラウドインターフェースデバイス５０２ａを介して、第１のクラウドオブジェクトストア４０４ａにデータオブジェクトを要求しそれを受信することを開始し得る。例えば、ミラーＶＤＥＶ１４０２は、１以上のデータオブジェクト要求を第１のクラウドインターフェースデバイス５０２ａに送信し得、第１のクラウドインターフェースデバイス５０２ａはその要求を受信し得、対応するクラウドインターフェース要求をクラウドオブジェクトストア４０４ａに送信し得る。いくつかの実施形態では、第１のクラウドインターフェースデバイス５０２ａは、クラウドオブジェクトストア４０４ａ内のクラウドストレージオブジェクトのマッピングを用いて要求を調整し得る。例えば、クラウドインターフェースデバイス５０２ａは、論理ツリー階層に従ってクラウドデータオブジェクトとして記憶されるファイルシステムデータの全部または一部を識別して要求し得る。要求に応答して、クラウドインターフェースデバイス５０２ａは、オブジェクトインターフェース要求に応答してデータオブジェクトを受信し、そ（れら）のデータオブジェクトをミラーＶＤＥＶ１４０２に返し得る。
【０１７７】
ブロック１８０６では、ミラーＶＤＥＶ１４０２は、ブロック１８０４で受信したデータオブジェクトの第２のクラウドオブジェクトストア４０４ｂへの書き込みを開始し得る。例えば、ミラーＶＤＥＶ１４０２は、同一のデータオブジェクトのセットの作成を開始し、同一のデータのセット（例えば、ファイルシステムに対応するファイルデータおよび／または別途のメタデータを有する様々な論理ブロック）を記憶するよう、一連のオブジェクト作成コマンドおよび／または書き込み操作を判断し得る。ブロック１８０６において、ミラーＶＤＥＶ１４０２は、判断された作成／書き込み操作を、論理ツリー階層の移行および／またはレプリケーションコピーが作成されることになる第２のクラウドオブジェクトストア４０４ｂに関連するクラウドインターフェースデバイス５０２ｂに送信し得る。いくつかの実施形態では、この例の様々なステップは、上で論じた順序ではなく同時に実行することができる。例えば、ミラーＶＤＥＶ１４０２の一部は第１のクラウドオブジェクトストア４０４ａのクラウドインターフェースデバイス５０２ａを指し得、ミラーＶＤＥＶ１４０２の別の一部は第１のクラウドオブジェクトストア４０４ｂのクラウドインターフェースデバイス５０２ｂを指し得、その後、第１のクラウドオブジェクトストア４０４ｂから第２のクラウドオブジェクトストア４０４ｂへのファイルシステムデータのミラーリングされたコピーを生成するために、迅速な一連の読み書き操作が実行されてもよい。
【０１７８】
ブロック１８０２〜１８０８の操作を介して実行される同期ミラーリングは、ファイルレベルではなくオブジェクトレベルで実行されてもよい。すなわち、様々な実施形態において、ステップ１８０４および１８０８はファイルの取得および記憶に対応しない。むしろ、第１のクラウドオブジェクトストア４０４ａに記憶される各データオブジェクトは、取得され、コピーされ、第２のクラウドオブジェクトストア４０４ｂに同一のデータオブジェクトとして記憶されてもよく、各データオブジェクトは、ファイルデータまたは別途記憶されたメタデータに対応する１以上の論理データブロックを記憶する。したがって、この例におけるブロック１８０２〜１８０８の完了時に、第１および第２のクラウドオブジェクトストア４０４ａおよび４０４ｂは、ファイルデータを含む論理ブロックおよび／またはメタデータを含む論理ブロックの同じ構成、ならびにそれらのそれぞれの物理ストレージシステム内に記憶される同一のデータオブジェクトのセットへのそれらの論理ブロックの同じ配置を記憶することができる。
【０１７９】
ここで図１９を参照して、複数のクラウドデータオブジェクトストア４０４および／またはローカルデータオブジェクトストア４１６にわたるファイルシステムデータの同期ミラーリングをサポートするネットワークファイルシステムによって要求を受信および処理する例示的なプロセスを示すブロック図が示されている。この例における要求は、ファイルシステム１６００内のファイルデータおよび／またはファイルの対応するメタデータ属性の取得、修正、および／または削除の要求に対応し得る。この例示的なプロセスは、ファイルシステム１６００および１７００で上述したように、複数のクラウドオブジェクトストア４０４間および／またはクラウドオブジェクトストア４０４とローカルデータストア４１６との間のファイルシステムデータの同期ミラーリングに関して以下に説明される。したがって、このプロセスのステップは、例えば、様々なクラウドインターフェースデバイス５０２および他のＶＤＥＶ２２６との関連でミラーＶＤＥＶ１４０２によって実行され得る。しかしながら、他の実施形態では、以下に説明するステップは、Ｉ／Ｏパイプライン２２４および／またはＤＭＵ２１８など、ミラーＶＤＥＶ１４０２以外のファイルシステムコンポーネントによって部分的にまたは全体的に実行され得る。また、本明細書に記載のプロセス機能は、上記のファイルシステム（例えば、１６００および１７００）の特定の実施形態に限定されず、本明細書でサポートされている様々な他のコンピューティング環境上で実行することができることも理解されたい。
【０１８０】
ブロック１９０２で、ファイルシステム１６００（または１７００など）は、例えばファイルデータの取得、データの書き込みおよび／または修正などの特定の操作を実行するためのＰＯＳＩＸ準拠の要求を受信し得る。ブロック１９０２の要求は、アプリケーションから、ファイルシステム１６００のアプリケーション層またはインターフェース層を介して受信されてもよい。ブロック１９０４で、ＰＯＳＩＸ準拠の要求は、オペレーティングシステムからシステムコールインターフェース２０８を介してＤＭＵ２１８に転送され得る。ブロック１９０６において、ＤＭＵ２１８は、データオブジェクトに対する操作を実行するための要求を、１以上のクラウドオブジェクトストア４０４および／またはローカルシステムストレージ４１６内の物理的位置に向けられる読み取りおよび／または書き込み操作を実行するための要求（例えば、Ｉ／Ｏ要求）に直接変換し得る。次に、ＤＭＵ２１８は、Ｉ／Ｏ要求をＳＰＡ内の１以上のコンポーネント、例えばＩ／Ｏパイプライン２２４（および／またはミラーＶＤＥＶ１４０２）に転送し得る。
【０１８１】
ブロック１９０８において、Ｉ／Ｏパイプライン２２４は、変換された要求がクラウドオブジェクトストア４０４および／またはローカルシステムストレージ４１６内で実行されるべき何らかの読み取り操作を必要とするかどうかを判定し得る。例えば、アプリケーションから受信されるファイルデータ、ファイルプロパティ、および類似の要求の、当該アプリケーションからの取得は、バックエンド物理ストレージシステム上で実行されるべき読み取り操作を必要としてもよい。
【０１８２】
そのような場合（１９０８：Ｙｅｓ）、ブロック１９１０において、Ｉ／Ｏパイプライン２２４は、どのオブジェクトストレージプール（したがってどの対応するバックエンド物理ストレージシステム）が要求された読み取り操作を実行するかを判断し得る。例えば、ファイルシステム１６００に関して上述したように、Ｉ／Ｏパイプライン２２４、ＤＭＵ２１８などは、読み取り操作に対してミラーＶＤＥＶ１４０２を迂回し、読み取り操作を実行のためにクラウドインターフェースデバイス５０２のうちの１つに直接ルーティングすることができる。例えば、ブロック１９１０は、クラウドストアパフォーマンスモニタコンポーネント１６２５および／または同様のコンポーネントを用いて、複数のクラウドオブジェクトストア４０４についてパフォーマンスデータを受信し評価することを含み得る。例えば、クラウドストアパフォーマンスモニタ１６２５は、ミラーリングされたクラウドオブジェクトストア４０４の各々によって実行されるいくつかの以前の読み取り操作を評価および分析し、その評価に基づいて、読み取り操作を処理するための最も高性能なクラウドオブジェクトストア４０４を選択し得る。他の例では、同様のクラウドストアパフォーマンスモニタコンポーネント１６２５は、ブロック１９１０での判断を、要求されたデータを記憶する利用可能なクラウドオブジェクトストア４０４の性能に基づかせるかわりに、またはそうすることに加えて、価格、信頼性、現在の処理負荷などの他のクラウドオブジェクトストア特性に基づいて、実行し得る。
【０１８３】
他の実施形態では、例えば、ファイルシステム１７００を参照して上述したように、大部分の読み取り操作に対して存在し得るクラウドレイテンシを回避するために、Ｉ／Ｏパイプライン２２４は、ローカルデータオブジェクトストア４１６にアクセスするように構成されたＶＤＥＶ２２６に大部分（またはすべて）の読み取り操作を直接ルーティングするように構成され得る。例えば、Ｉ／Ｏパイプライン２２４は、データストア４１６内のローカルデータが欠落または破損していると判断した場合にのみ、Ｉ／Ｏパイプライン２２４は読み取り要求をクラウドオブジェクトストア４０４のうちの１つにルーティングし得る。そのような例外は、クラウドアクセスのレイテンシが最小化されるように、オブジェクト単位で実行されてもよい。
【０１８４】
ブロック１９１２において、Ｉ／Ｏパイプライン２２４は、ブロック１９１０において判断されたバックエンドオブジェクトストア（例えば、４０４ａ、４０４ｂ、４１６など）からの１以上のデータオブジェクトの読み取りを開始することができる。いくつかの実施形態では、ＡＲＣ２２２は、１以上のデータオブジェクトのキャッシュされたバージョンについて最初にチェックされ、キャッシュされたバージョンが見つからない場合、ローカルオブジェクトストア４１６または判断されたクラウドオブジェクトストア４０４から１以上のデータオブジェクトを読み取る試みが行われ得る。様々な実施形態において、ブロック１９１２における読み取りの開始は、ＤＭＵ２１８、ミラーＶＤＥＶ１４０２、Ｉ／Ｏパイプライン２２４、および／または選択されたオブジェクトストアに対応するクラウドインターフェースデバイス５０２もしくはＶＤＥＶ２２６のうちの１つまたはそれらの組み合わせによって実行されることができる。
【０１８５】
ブロック１９１４において、Ｉ／Ｏパイプライン２２４は、変換された要求がクラウドオブジェクトストア４０４および／またはローカルシステムストレージ４１６内で実行されるべき何らかの書き込み操作を必要とするかどうかを判定し得る。例えば、ファイルの修正の作成、ファイル属性の更新、およびアプリケーションから受信される同様の要求は、バックエンド物理ストレージシステム上で実行されるべき書き込み操作を必要とし得る。この例では、ブロック１９０８の読み取り操作の判断はブロック１９１４の書き込み操作の判断の前に行われるが、これらの判断およびその後の関連するブロックの順序は逆にされてもよく、または他の例では並行して行われてもよい。
【０１８６】
ブロック１９１６で、Ｉ／Ｏパイプライン２２４は、各バックエンドオブジェクトストア（例えば、ローカルオブジェクトストア４１６および／またはクラウドオブジェクトストア４０４）にＩ／Ｏ操作ごとに同期データレプリケーションで１以上のデータオブジェクトの書き込みを開始し得る。Ｉ／Ｏパイプライン２２４は、判断された書き込み操作をミラーＶＤＥＶ１４０２に渡し得、ミラーＶＤＥＶ１４０２は、各書き込み操作が、複数のクラウドオブジェクトストア４０４に関しては対応するクラウドインターフェース５０２を用い、ローカルデータストア４１６に関しては適切なＶＤＥＶ２２６を用いて、同期的に実行されるように、アプリケーション層で始まる書き込み操作を調整することができる。
【０１８７】
例えば、ブロック１９１８によって示されるように、ミラーＶＤＥＶ１４０２は、書き込み操作の第１のインスタンスを１以上のＶＤＥＶ２２６に向け得る。いくつかの実施形態では、データオブジェクトをローカルデータストア４１６に書き込むために、（例えば、図３Ａ〜図３Ｄを考慮して）上に開示されたＣＯＷプロシージャが進行し得る。加えて、ブロック１９２０によって示されるように、ミラーＶＤＥＶ１４０２は、書き込み操作の第２のインスタンスをクラウドストレージアプライアンス４０４のクラウドインターフェースデバイス５０２に向け得る。この実施形態では書き込み操作のインスタンスは２つしか示されていないが、ファイルシステムデータのツリー階層は、追加のデータオブジェクトストア（例えば、複数のクラウドオブジェクトストア４０４）にわたって同期してミラーリングされ得、したがって、他の実施形態においては、書き込み操作の追加のインスタンスを開始し得る。
【０１８８】
図２０は、本開示に従うある実施形態を実現するための分散型システム２０００の簡略図を示す。示されている実施形態では、分散型システム２０００は、１つ以上のクライアントコンピューティングデバイス２００２，２００４，２００６および２００８を含み、それらは、１つ以上のネットワーク２０１０を介してウェブブラウザ、所有権付きクライアント（たとえばオラクルフォームズ（Ｏｒａｃｌｅ  Ｆｏｒｍｓ））などのクライアントアプリケーションを実行および動作させるように構成される。サーバ２０１２は、リモートクライアントコンピューティングデバイス２００２，２００４，２００６および２００８とネットワーク２０１０を介して通信可能に結合されてもよい。
【０１８９】
さまざまな実施形態では、サーバ２０１２は、システムのコンポーネントのうちの１つ以上によって提供される１つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合されてもよい。いくつかの実施形態では、これらのサービスは、ウェブベースのサービスもしくはクラウドサービスとして、またはソフトウェア・アズ・ア・サービス（ＳａａＳ）モデルの下で、クライアントコンピューティングデバイス２００２，２００４，２００６および／または２００８のユーザに対して提供されてもよい。クライアントコンピューティングデバイス２００２，２００４，２００６および／または２００８を動作させるユーザは、次いで、１つ以上のクライアントアプリケーションを利用してサーバ２０１２と対話して、これらのコンポーネントによって提供されるサービスを利用してもよい。
【０１９０】
図に示される構成では、システム２０００のソフトウェアコンポーネント２０１８，２０２０および２０２２は、サーバ２０１２上で実現されるものとして示されている。他の実施形態では、システム２０００のコンポーネントのうちの１つ以上および／またはこれらのコンポーネントによって提供されるサービスは、クライアントコンピューティングデバイス２００２，２００４，２００６および／または２００８のうちの１つ以上によって実現されてもよい。クライアントコンピューティングデバイスを動作させるユーザは、次いで、１つ以上のクライアントアプリケーションを利用して、これらのコンポーネントによって提供されるサービスを用いてもよい。これらのコンポーネントは、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせで実現されてもよい。分散型システム２０００とは異なってもよいさまざまな異なるシステム構成が可能であることが理解されるべきである。図に示される実施形態は、したがって、実施形態のシステムを実現するための分散型システムの一例であり、限定的であるよう意図されるものではない。
【０１９１】
クライアントコンピューティングデバイス２００２，２００４，２００６および／または２００８は、携帯可能な手持ち式のデバイス（たとえば、ｉＰｈｏｎｅ（登録商標）、セルラー電話、ｉＰａｄ（登録商標）、コンピューティングタブレット、携帯情報端末（ＰＤＡ））またはウェアラブルデバイス（たとえばＧｏｏｇｌｅ  Ｇｌａｓｓ（登録商標）頭部装着型ディスプレイ）であってもよく、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ  Ｍｏｂｉｌｅ（登録商標）などのソフトウェア、および／もしくは、ｉＯＳ、Ｗｉｎｄｏｗｓ  Ｐｈｏｎｅ、Ａｎｄｒｏｉｄ、ＢｌａｃｋＢｅｒｒｙ、Ｐａｌｍ  ＯＳなどのさまざまなモバイルオペレーティングシステムを実行し、インターネット、電子メール、ショートメッセージサービス（ＳＭＳ）、ＢｌａｃｋＢｅｒｒｙ（登録商標）、または他のイネーブルにされた通信プロトコルであってもよい。クライアントコンピューティングデバイスは、汎用パーソナルコンピュータであってもよく、一例として、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ａｐｐｌｅ  Ｍａｃｉｎｔｏｓｈ（登録商標）および／またはＬｉｎｕｘ（登録商標）オペレーティングシステムのさまざまなバージョンを実行するパーソナルコンピュータおよび／またはラップトップコンピュータを含むことができる。クライアントコンピューティングデバイスは、たとえばＧｏｏｇｌｅ  Ｃｈｒｏｍｅ  ＯＳなどのさまざまなＧＮＵ／Ｌｉｎｕｘオペレーティングシステムを限定を伴うことなく含む、さまざまな市場で入手可能なＵＮＩＸ（登録商標）またはＵＮＩＸのようなオペレーティングシステムのいずれかを実行するワークステーションコンピュータであり得る。代替的に、または加えて、クライアントコンピューティングデバイス２００２，２００４，２００６および２００８は、ネットワーク２０１０を介して通信することができる、シンクライアントコンピュータ、インターネットにより可能化されるゲームシステム（たとえば、Ｋｉｎｅｃｔ（登録商標）ジェスチャ入力デバイスを伴うかまたは伴わないＭｉｃｒｏｓｏｆｔ  Ｘｂｏｘゲームコンソール）および／または個人メッセージ伝達デバイスなどの任意の他の電子デバイスをであってもよい。
【０１９２】
例示の分散型システム２０００は、４つのクライアントコンピューティングデバイスとともに示されているが、任意の数のクライアントコンピューティングデバイスがサポートされてもよい。センサを伴うデバイスなど、他のデバイスがサーバ２０１２と対話してもよい。
【０１９３】
分散型システム２０００におけるネットワーク２０１０は、ＴＣＰ／ＩＰ（伝送制御プロトコル／インターネットプロトコル）、ＳＮＡ（システムネットワークアーキテクチャ）、ＩＰＸ（インターネットパケット交換）、ＡｐｐｌｅＴａｌｋなどを限定を伴うことなく含む、さまざまな市場で入手可能なプロトコルのうちのいずれかを用いてデータ通信をサポートすることができる、当業者が精通している任意のタイプのネットワークであってもよい。単に一例として、ネットワーク２０１０は、イーサネット（登録商標）、トークンリングなどに基づくものなどのローカルエリアネットワーク（ＬＡＮ）であってもよい。ネットワーク２０１０は、ワイドエリアネットワークおよびインターネットであってもよい。ネットワーク２０１０は、仮想ネットワークを含み得て、当該仮想ネットワークは、仮想プライベートネットワーク（ｖｉｒｔｕａｌ  ｐｒｉｖａｔｅ  ｎｅｔｗｏｒｋ：ＶＰＮ）、イントラネット、エクストラネット、公衆交換電話網（ｐｕｂｌｉｃ  ｓｗｉｔｃｈｅｄ  ｔｅｌｅｐｈｏｎｅ  ｎｅｔｗｏｒｋ：ＰＳＴＮ）、赤外線ネットワーク、無線ネットワーク（たとえば、米国電気電子学会（ＩＥＥＥ）８０２．１１のプロトコル一式、ブルートゥース（登録商標）、および／もしくはその他の無線プロトコルのうちのいずれかの下で動作するネットワーク）、ならびに／またはこれらのいずれかの組み合わせおよび／もしくは他のネットワークを含むが、それらに限定されるものではない。
【０１９４】
サーバ２０１２は、１つ以上の汎用コンピュータ、専用のサーバコンピュータ（一例としてＰＣ（パーソナルコンピュータ）サーバ、ＵＮＩＸ（登録商標）サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウント型サーバなどを含む）、サーバファーム、サーバクラスタ、またはその他の適切な構成および／もしくは組み合わせで構成されてもよい。さまざまな実施形態において、サーバ２０１２は、前述の開示に記載される１つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合されてもよい。たとえば、サーバ２０１２は、本開示の実施形態に従って上記の処理を実行するためのサーバに対応してもよい。
【０１９５】
サーバ２０１２は、上記のもののうちのいずれかを含むオペレーティングシステム、および任意の市場で入手可能なサーバオペレーティングシステムを実行してもよい。サーバ２０１２は、ＨＴＴＰ（ハイパーテキスト転送プロトコル）サーバ、ＦＴＰ（ファイル転送プロトコル）サーバ、ＣＧＩ（コモンゲートウェイインターフェイス）サーバ、ＪＡＶＡ（登録商標）サーバ、データベースサーバなどを含むさまざまなさらに他のサーバアプリケーションおよび／または中間層アプリケーションのうちのいずれかも実行してもよい。例示的なデータベースサーバは、オラクル、マイクロソフト、サイベース、ＩＢＭ（インターナショナルビジネスマシンズ）などから市場で入手可能なものを含むが、それらに限定されるものではない。
【０１９６】
いくつかの実現例では、サーバ２０１２は、クライアントコンピューティングデバイス２００２，２００４，２００６および２００８のユーザから受信されるデータフィードおよび／またはイベント更新情報を解析および整理統合するための１つ以上のアプリケーションを含んでもよい。一例として、データフィードおよび／またはイベント更新情報は、センサデータアプリケーション、金融株式相場表示板、ネットワーク性能測定ツール（たとえば、ネットワーク監視およびトラフィック管理アプリケーション）、クリックストリーム解析ツール、自動車交通監視などに関連するリアルタイムのイベントを含んでもよい、１つ以上の第三者情報源および連続データストリームから受信される、Ｔｗｉｔｔｅｒ（登録商標）フィード、Ｆａｃｅｂｏｏｋ（登録商標）更新情報またはリアルタイムの更新情報を含んでもよいが、それらに限定されるものではない。サーバ２０１２は、データフィードおよび／またはリアルタイムのイベントをクライアントコンピューティングデバイス２００２，２００４，２００６および２００８の１つ以上の表示デバイスを介して表示するための１つ以上のアプリケーションも含んでもよい。
【０１９７】
分散型システム２０００は、１つ以上のデータベース２０１４および２０１６も含んでもよい。データベース２０１４および２０１６は、さまざまな位置にあってもよい。一例として、データベース２０１４および２０１６のうちの１つ以上は、サーバ２０１２に局在する（および／またはサーバ２０１２に常駐する）非一時的な記憶媒体にあってもよい。代替的に、データベース２０１４および２０１６は、サーバ２０１２から遠隔にあり、ネットワークベースまたは専用の接続を介してサーバ２０１２と通信してもよい。一組の実施形態では、データベース２０１４および２０１６は、記憶域ネットワーク（ｓｔｏｒａｇｅ−ａｒｅａ  ｎｅｔｗｏｒｋ：ＳＡＮ）にあってもよい。同様に、サーバ２０１２に帰する機能を実行するための任意の必要なファイルが、適宜、サーバ２０１２上においてローカルに、および／または遠隔で格納されてもよい。一組の実施形態では、データベース２０１４および２０１６は、ＳＱＬフォーマットされたコマンドに応答してデータを格納、更新および検索取得するように適合される、オラクルによって提供されるデータベースなどのリレーショナルデータベースを含んでもよい。
【０１９８】
図２１は、本開示のある実施形態に従って、システムの１つ以上のコンポーネントによって提供されるサービスがクラウドサービスとして提供されてもよいシステム環境２１００の１つ以上のコンポーネントの簡略ブロック図である。示される実施形態において、システム環境２１００は、クラウドサービスを提供するクラウドインフラストラクチャシステム２１０２と対話するようユーザによって用いられてもよい１つ以上のクライアントコンピューティングデバイス２１０４，２１０６および２１０８を含む。クライアントコンピューティングデバイスは、クラウドインフラストラクチャシステム２１０２と対話して、クラウドインフラストラクチャシステム２１０２によって提供されるサービスを用いるよう、クライアントコンピューティングデバイスのユーザによって用いられてもよい、ウェブブラウザ、所有権付きクライアントアプリケーション（たとえばOracle Forms）または何らかの他のアプリケーションなどのようなクライアントアプリケーションを動作させるよう構成されてもよい。
【０１９９】
図に示されるクラウドインフラストラクチャシステム２１０２は図示されるもの以外のコンポーネントを有してもよいことが理解されるべきである。さらに、図に示される実施形態は、本発明の実施形態を組み込んでもよいクラウドインフラストラクチャシステムの一例に過ぎない。いくつかの他の実施形態において、クラウドインフラストラクチャシステム２１０２は、図に示されるよりも多いかもしくは少ないコンポーネントを有してもよく、２つ以上のコンポーネントを組み合わせてもよく、またはコンポーネントの異なる構成もしくは配置を有してもよい。
【０２００】
クライアントコンピューティングデバイス２１０４，２１０６および２１０８は、２００２，２００４，２００６および２００８に対して上記されたものと同様のデバイスであってもよい。
【０２０１】
例示的なシステム環境２１００は３つのクライアントコンピューティングデバイスとともに示されているが、任意の数のクライアントコンピューティングデバイスがサポートされてもよい。センサを伴うデバイスなどのような他のデバイスがクラウドインフラストラクチャシステム２１０２と対話してもよい。
【０２０２】
ネットワーク２１１０はクライアント２１０４，２１０６および２１０８とクラウドインフラストラクチャシステム２１０２との間におけるデータの通信および交換を容易にし得る。各ネットワークは、ネットワーク２０１０に対して上記されたものを含む、さまざまな市場で入手可能なプロトコルの任意のものを用いてデータ通信をサポートすることができる、当業者が精通している任意のタイプのネットワークであってもよい。クラウドインフラストラクチャシステム２１０２は、サーバ２０１２に対して上記されたものを含んでもよい１つ以上のコンピュータおよび／またはサーバを備えてもよい。
【０２０３】
特定の実施形態において、クラウドインフラストラクチャシステムによって提供されるサービスは、オンラインデータストレージおよびバックアップソリューション、ウェブに基づくｅメールサービス、運営管理されるオフィススイートおよびドキュメントコラボレーションサービス、データベース処理、管理される技術サポートサービスなどのような、オンデマンドでクラウドインフラストラクチャシステムのユーザに利用可能にされるサービスのホストを含んでもよい。クラウドインフラストラクチャシステムによって提供されるサービスは動的にスケーリングしてそのユーザのニーズを満たすことができる。クラウドインフラストラクチャシステムによって提供されるあるサービスのある具体的なインスタンス化は本明細書では「サービスインスタンス」と呼ばれる。一般的に、クラウドサービスプロバイダのシステムからインターネットなどのような通信ネットワークを介してユーザに利用可能にされる任意のサービスは「クラウドサービス」と呼ばれる。典型的には、パブリックなクラウド環境においては、クラウドサービスプロバイダのシステムを形成するサーバおよびシステムは顧客自身のオンプレミスのサーバおよびシステムとは異なる。たとえば、クラウドサービスプロバイダのシステムはアプリケーションを運営管理してもよく、ユーザは、インターネットなどのような通信ネットワークを介して、オンデマンドで、アプリケーションをオーダーし使用してもよい。
【０２０４】
いくつかの例では、コンピュータネットワーククラウドインフラストラクチャにおけるサービスは、ストレージ、運営管理されるデータベース、運営管理されるウェブサーバ、ソフトウェアアプリケーション、またはクラウドベンダーによってユーザに提供されるかもしくは他の態様で当該技術分野において公知であるような他のサービスに対する保護されたコンピュータネットワークアクセスを含んでもよい。たとえば、サービスは、クラウド上の遠隔ストレージに対するインターネットを介してのパスワード保護されたアクセスを含むことができる。別の例として、サービスは、ネットワーク接続された開発者による個人的な使用のために、ウェブサービスに基づく運営管理されたリレーショナルデータベースおよびスクリプト言語ミドルウェアエンジンを含むことができる。別の例として、サービスは、クラウドベンダーのウェブサイトにおいて運営管理されるｅメールソフトウェアアプリケーションに対するアクセスを含むことができる。
【０２０５】
特定の実施形態において、クラウドインフラストラクチャシステム２１０２は、セルフサービスの、サブスクリプションに基づく、順応性を持ってスケーラブルで、信頼性があり、非常に利用可能性があり、およびセキュリティ上安全な態様で顧客に対して配送されるアプリケーションの組、ミドルウェア、データベースサービス提供を含んでもよい。そのようなクラウドインフラストラクチャシステムの一例は本譲受人によって提供されるＯｒａｃｌｅ  Ｐｕｂｌｉｃ  Ｃｌｏｕｄである。
【０２０６】
さまざまな実施形態において、クラウドインフラストラクチャシステム２１０２は、クラウドインフラストラクチャシステム２１０２によって提供されるサービスに対する顧客のサブスクリプションを自動的にプロビジョニング、管理、およびトラッキングするように構成されてもよい。クラウドインフラストラクチャシステム２１０２はクラウドサービスを異なる開発モデルを介して提供してもよい。たとえば、サービスは、クラウドインフラストラクチャシステム２１０２が（たとえばＯｒａｃｌｅによって所有される）クラウドサービスを販売する組織によって所有され、サービスが一般大衆または異なる業界エンタープライズに対して利用可能にされるパブリッククラウドモデルの下で提供されてもよい。別の例として、サービスは、クラウドインフラストラクチャシステム２１０２が単一の組織に対してのみ動作され、その組織内における１つ以上のエンティティに対してサービスを提供してもよい、プライベートクラウドモデルの下で提供されてもよい。クラウドサービスは、さらに、クラウドインフラストラクチャシステム２１０２およびクラウドインフラストラクチャシステム２１０２によって提供されるサービスが関係付けられるコミュニティにおけるいくつかの組織によって共有されるコミュニティクラウドモデルの下で提供されてもよい。クラウドサービスは、さらに、２つ以上の異なるモデルの組合せであるハイブリッドクラウドモデルの下で提供されてもよい。
【０２０７】
いくつかの実施形態において、クラウドインフラストラクチャシステム２１０２によって提供されるサービスは、Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＳａａＳ）カテゴリ、Ｐｌａｔｆｏｒｍ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＰａａＳ）カテゴリ、Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＩａａＳ）カテゴリ、またはハイブリッドサービスを含む他のサービスのカテゴリの下で提供される、１つ以上のサービスを含んでもよい。顧客は、サブスクリプションオーダーを介して、クラウドインフラストラクチャシステム２１０２によって提供される１つ以上のサービスをオーダーしてもよい。クラウドインフラストラクチャシステム２１０２は、次いで、処理を実行して、顧客のサブスクリプションオーダーにおけるサービスを提供する。
【０２０８】
いくつかの実施形態において、クラウドインフラストラクチャシステム２１０２によって提供されるサービスは、限定を伴わずに、アプリケーションサービス、プラットフォームサービスおよびインフラストラクチャサービスを含んでもよい。いくつかの例では、アプリケーションサービスはクラウドインフラストラクチャシステムによってＳａａＳプラットフォームを介して提供されてもよい。ＳａａＳプラットフォームは、ＳａａＳカテゴリに入るクラウドサービスを提供するよう構成されてもよい。たとえば、ＳａａＳプラットフォームは、一式のオンデマンドアプリケーションを統合された開発およびデプロイプラットフォーム上で構築し配送する能力を提供してもよい。ＳａａＳプラットフォームは、ＳａａＳサービスを提供するための基底のソフトウェアおよびインフラストラクチャを管理および制御してもよい。ＳａａＳプラットフォームによって提供されるサービスを利用することによって、顧客はクラウドインフラストラクチャシステムにおいて実行されるアプリケーションを利用することができる。顧客は、別のライセンスおよびサポートを購入する必要なくアプリケーションサービスを獲得することができる。さまざまな異なるＳａａＳサービスが提供されてもよい。その例は、限定を伴うことなく、大きな組織に対する売上実績管理、エンタープライズ統合、および事業柔軟性に対するソリューションを提供するサービスを含む。
【０２０９】
いくつかの実施形態において、プラットフォームサービスはクラウドインフラストラクチャシステムによってＰａａＳプラットフォームを介して提供されてもよい。ＰａａＳプラットフォームはＰａａＳカテゴリの下におけるクラウドサービスを提供するよう構成されてもよい。プラットフォームサービスの例は、限定を伴わずに、（Ｏｒａｃｌｅなどのような）組織が既存のアプリケーションを共有される共通のアーキテクチャにおいて整理統合することができるサービス、およびプラットフォームによって提供される共有されるサービスをてこ入れする新たなアプリケーションを構築する能力を含んでもよい。ＰａａＳプラットフォームはＰａａＳサービスを提供するための基底のソフトウェアおよびインフラストラクチャを管理および制御してもよい。顧客は、クラウドインフラストラクチャシステムによって提供されるＰａａＳサービスを、別のライセンスおよびサポートを購入する必要なく獲得することができる。プラットフォームサービスの例は、限定を伴わずに、Ｏｒａｃｌｅ  Ｊａｖａ  Ｃｌｏｕｄ  Ｓｅｒｖｉｃｅ（ＪＣＳ）、Ｏｒａｃｌｅ  Ｄａｔａｂａｓｅ  Ｃｌｏｕｄ  Ｓｅｒｖｉｃｅ（ＤＢＣＳ）などを含む。
【０２１０】
ＰａａＳプラットフォームによって提供されるサービスを利用することによって、顧客は、クラウドインフラストラクチャシステムによってサポートされるプログラミング言語およびツールを使用することができ、デプロイされたサービスを制御することもできる。いくつかの実施形態において、クラウドインフラストラクチャシステムによって提供されるプラットフォームサービスは、データベースクラウドサービス、ミドルウェアクラウドサービス（たとえばＯｒａｃｌｅ  Ｆｕｓｉｏｎ（登録商標）  Ｍｉｄｄｌｅｗａｒｅサービス）、およびＪａｖａクラウドサービスを含んでもよい。一実施形態において、データベースクラウドサービスは、組織がデータベース資源をプールし、顧客にＤａｔａｂａｓｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅをデータベースクラウドの形式で提供することを可能にする、共有されるサービスデプロイモデルをサポートしてもよい。ミドルウェアクラウドサービスは、顧客のためのプラットフォームを提供してさまざまなビジネスアプリケーションを開発およびデプロイしてもよく、Ｊａｖａクラウドサービスは顧客のためのプラットフォームを提供してＪａｖａアプリケーションをクラウドインフラストラクチャシステムにおいてデプロイしてもよい。
【０２１１】
さまざまな異なるインフラストラクチャサービスがＩａａＳプラットフォームによってクラウドインフラストラクチャシステムにおいて提供されてもよい。インフラストラクチャサービスは、ＳａａＳプラットフォームおよびＰａａＳプラットフォームによって提供されるサービスを利用する顧客に対するストレージ、ネットワーク、他の基礎的計算資源などのような基底の計算資源の管理および制御を容易にする。
【０２１２】
特定の実施形態において、クラウドインフラストラクチャシステム２１０２は、さらに、クラウドインフラストラクチャシステムの顧客に対してさまざまなサービスを提供するよう用いられる資源を提供するためのインフラストラクチャ資源２１３０を含んでもよい。一実施形態において、インフラストラクチャ資源２１３０は、ＰａａＳプラットフォームおよびＳａａＳプラットフォームによって提供されるサービスを実行するよう、サーバ、ストレージおよびネットワーク接続資源などのような、ハードウェアの予め統合され最適化された組合せを含んでもよい。
【０２１３】
いくつかの実施形態において、クラウドインフラストラクチャシステム２１０２における資源は、複数のユーザによって共有され、要望に付き動的に再割当てされてもよい。加えて、資源はユーザに対して異なる時間ゾーンで割当てられてもよい。たとえば、クラウドインフラストラクチャシステム２１３０は、第１の時間ゾーンにおける第１の組のユーザがクラウドインフラストラクチャシステムの資源をある特定化された時間数の間利用することを可能にし、次いで、異なる時間ゾーンに位置する別の組のユーザに対する同じ資源の再割当てを可能にし、それによって、資源の利用を最大限にしてもよい。
【０２１４】
特定の実施形態において、クラウドインフラストラクチャシステム２１０２の異なるコンポーネントまたはモジュール、およびクラウドインフラストラクチャシステム２１０２によって提供されるサービスによって共有される、ある数の内部の共有されるサービス２１３２が提供されてもよい。これらの内部の共有されるサービスは、限定を伴うことなく、セキュリティおよびアイデンティティサービス、統合サービス、エンタープライズリポジトリサービス、エンタープライズマネージャサービス、ウイルススキャンおよびホワイトリストサービス、高可用性、バックアップおよびリカバリサービス、クラウドサポートを可能にするためのサービス、ｅメールサービス、通知サービス、ファイル転送サービスなどを含んでもよい。
【０２１５】
特定の実施形態において、クラウドインフラストラクチャシステム２１０２は、クラウドインフラストラクチャシステムにおいてクラウドサービス（たとえばＳａａＳ、ＰａａＳ、およびＩａａＳサービス）の包括的な管理を提供してもよい。一実施形態において、クラウド管理機能は、クラウドインフラストラクチャシステム２１０２によって受信される顧客のサブスクリプションをプロビジョニングし、管理し、およびトラッキングする能力などを含んでもよい。
【０２１６】
ある実施形態において、図に示されるように、クラウド管理機能は、オーダー管理モジュール２１２０、オーダーオーケストレーションモジュール２１２２、オーダープロビジョニングモジュール２１２４、オーダー管理およびモニタリングモジュール２１２６、ならびにアイデンティティ管理モジュール２１２８などのような１つ以上のモジュールによって提供されてもよい。これらのモジュールは、１つ以上のコンピュータおよび／またはサーバを含むかもしくはそれらを用いて提供されてもよく、それらは汎用コンピュータ、特殊化されたサーバコンピュータ、サーバファーム、サーバクラスタ、または任意の他の適切な構成および／もしくは組合せであってもよい。
【０２１７】
例示的な動作２１３４においては、クライアントデバイス２１０４、２１０６または２１０８などのようなクライアントデバイスを用いる顧客は、クラウドインフラストラクチャシステム２１０２によって提供される１つ以上のサービスを要求すること、およびクラウドインフラストラクチャシステム２１０２によって提供される１つ以上のサービスに対するサブスクリプションに対するオーダーを行うことによって、クラウドインフラストラクチャシステム２１０２と対話してもよい。特定の実施形態において、顧客は、クラウドユーザインターフェイス（ＵＩ）、クラウドＵＩ２１１２、クラウドＵＩ２１１４および／またはクラウドＵＩ２１１６にアクセスし、サブスクリプションオーダーをこれらのＵＩを介して行ってもよい。顧客がオーダーを行うことに応答してクラウドインフラストラクチャシステム２１０２によって受取られるオーダー情報は、顧客を識別する情報、およびクラウドインフラストラクチャシステム２１０２によって提供される、その顧客が利用することを意図する１つ以上のサービスを含んでもよい。
【０２１８】
オーダーが顧客によってなされた後、オーダー情報はクラウドＵＩ２１１２、２１１４および／または２１１６を介して受取られてもよい。
【０２１９】
動作２１３６において、オーダーはオーダーデータベース２１１８に格納される。オーダーデータベース２１１８は、クラウドインフラストラクチャシステム２１１８によって動作されるいくつかのデータベースの１つであり得、他のシステム要素との関連において動作され得る。
【０２２０】
動作２１３８で、オーダー情報はオーダー管理モジュール２１２０に転送される。いくつかの例では、オーダー管理モジュール２１２０は、オーダーを検証すること、および検証でそのオーダーを予約することなど、オーダーに関係付けられる請求および課金機能を実行するよう構成されてもよい。
【０２２１】
動作２１４０で、オーダーに関する情報がオーダーオーケストレーションモジュール２１２２に通信される。オーダーオーケストレーションモジュール２１２２は、オーダー情報を利用して、顧客によってなされたオーダーに対してサービスおよび資源のプロビジョニングをオーケストレーションしてもよい。いくつかの例では、オーダーオーケストレーションモジュール２１２２は、資源のプロビジョニングをオーケストレーションして、利用されるサービスを、オーダープロビジョニングモジュール２１２４のサービスを用いてサポートしてもよい。
【０２２２】
特定の実施形態において、オーダーオーケストレーションモジュール２１２２は、各オーダーに関連付けられるビジネスプロセスの管理を可能にし、ビジネスロジックを適用して、オーダーがプロビジョニングに進むべきかどうかを判断する。動作２１４２で、新たなサブスクリプションに対するオーダーが受取られると、オーダーオーケストレーションモジュール２１２２は、オーダープロビジョニングモジュール２１２４に対して、資源を割当て、サブスクリプションオーダーを満たすよう必要とされる資源を構成するよう、要求を送る。オーダープロビジョニングモジュール２１２４は、顧客によってオーダーされたサービスに対する資源の割当てを可能にする。オーダープロビジョニングモジュール２１２４は、クラウドインフラストラクチャシステム２１００によって提供されるクラウドサービスと、要求されたサービスを提供するための資源をプロビジョニングするよう用いられる物理的インプリメンテーション層との間におけるある抽象レベルを与える。オーダーオーケストレーションモジュール２１２２は、したがって、サービスおよび資源がオンザフライで実際にプロビジョニングされるか、または予めプロビジョニングされ、要求でのみ割当て／分配されるかどうかなど、インプリメンテーション詳細から隔離されてもよい。
【０２２３】
動作２１４４で、サービスおよび資源がプロビジョニングされると、提供されるサービスの通知が、クラウドインフラストラクチャシステム３０２のオーダープロビジョニングモジュール２１２４によってクライアントデバイス２１０４、２１０６および／または２１０８における顧客に送信されてもよい。動作２１４６で、顧客のサブスクリプションオーダーはオーダー管理およびモニタリングモジュール２１２６によって管理およびトラッキングされてもよい。いくつかの例では、オーダー管理およびモニタリングモジュール２１２６は、用いられるストレージの量、転送されるデータ量、ユーザの数、システムアップ時間およびシステムダウン時間の量などのような、サブスクリプションオーダーにおけるサービスに対する使用統計を収集するよう構成されてもよい。
【０２２４】
特定の実施形態において、クラウドインフラストラクチャシステム２１００はアイデンティティ管理モジュール２１２８を含んでもよい。アイデンティティ管理モジュール２１２８は、クラウドインフラストラクチャシステム２１００におけるアクセス管理および承認サービスなどのようなアイデンティティサービスを提供するよう構成されてもよい。いくつかの実施形態において、アイデンティティ管理モジュール２１２８は、クラウドインフラストラクチャシステム２１０２によって提供されるサービスを利用することを望む顧客についての情報を制御してもよい。そのような情報は、そのような顧客のアイデンティティを認証する情報、およびそれらの顧客がさまざまなシステム資源（たとえばファイル、ディレクトリ、アプリケーション、通信ポート、メモリセグメントなど）に対してどのアクションを実行するよう承認されるかを記述する情報を含むことができる。アイデンティティ管理モジュール２１２８は、さらに、各顧客についての記述的情報およびどのように誰によってその記述的情報がアクセスおよび修正され得るかの管理を含んでもよい。
【０２２５】
図２２は、本発明のさまざまな実施形態を実現することができる例示的なコンピュータシステム２２００を示す。システム２２００は、上記のコンピュータシステムのうちのいずれかを実現するよう用いられてもよい。図に示されるように、コンピュータシステム２２００は、多数の周辺サブシステムとバスサブシステム２２０２を介して通信する処理ユニット２２０４を含む。これらの周辺サブシステムは、処理加速ユニット２２０６、Ｉ／Ｏサブシステム２２０８、ストレージサブシステム２２１８および通信サブシステム２２２４を含んでもよい。ストレージサブシステム２２１８は、有形のコンピュータ読取可能な記憶媒体２２２２およびシステムメモリ２２１０を含む。
【０２２６】
バスサブシステム２２０２は、コンピュータシステム２２００のさまざまなコンポーネントおよびサブシステムに意図されるように互いに通信させるための機構を提供する。バスサブシステム２２０２は単一のバスとして概略的に示されているが、バスサブシステムの代替的実施例は、複数のバスを利用してもよい。バスサブシステム２２０２は、さまざまなバスアーキテクチャのうちのいずれかを用いるメモリバスまたはメモリコントローラ、周辺バスおよびローカルバスを含むいくつかのタイプのバス構造のうちのいずれかであってもよい。たとえば、そのようなアーキテクチャは、業界標準アーキテクチャ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ：ＩＳＡ）バス、マイクロチャネルアーキテクチャ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ：ＭＣＡ）バス、エンハンストＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ：ＥＩＳＡ）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ：ＶＥＳＡ）ローカルバス、およびＩＥＥＥ  Ｐ１３８６．１規格に従って製造される中二階バスとして実現され得る周辺コンポーネントインターコネクト（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ：ＰＣＩ）バスを含んでもよい。
【０２２７】
１つ以上の集積回路（たとえば、従来のマイクロプロセッサまたはマイクロコントローラ）として実現可能な処理ユニット２２０４は、コンピュータシステム２２００の動作を制御する。１つ以上のプロセッサが処理ユニット２２０４に含まれてもよい。これらのプロセッサは、シングルコアプロセッサを含んでもよく、またはマルチコアプロセッサを含んでもよい。特定の実施形態では、処理ユニット２２０４は、シングルコアまたはマルチコアプロセッサが各処理ユニットに含まれる１つ以上の独立した処理ユニット２２３２および／または２２３４として実現されてもよい。他の実施形態では、処理ユニット２２０４は、２つのデュアルコアプロセッサを単一のチップに統合することによって形成されるクアッドコア処理ユニットとして実現されてもよい。
【０２２８】
さまざまな実施形態では、処理ユニット２２０４は、プログラムコードに応答してさまざまなプログラムを実行することができ、複数の同時に実行されるプログラムまたはプロセスを維持することができる。任意の所与の時点で、実行されるべきプログラムコードの一部または全ては、プロセッサ２２０４、および／または、ストレージサブシステム２２１８に常駐することができる。好適なプログラミングを介して、プロセッサ２２０４は、上記のさまざまな機能を提供することができる。コンピュータシステム２２００は、デジタル信号プロセッサ（ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ：ＤＳＰ）、特殊目的プロセッサなどを含み得る処理加速ユニット２２０６をさらに含んでもよい。いくつかの実施形態では、処理加速ユニット２２０６は、コンピュータシステムの機能を向上させるために、本明細書に開示されているものなどの加速エンジンを含むかまたはそれとともに動作してもよい。
【０２２９】
Ｉ／Ｏサブシステム２２０８は、ユーザインターフェイス入力デバイスおよびユーザインターフェイス出力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、キーボード、マウスまたはトラックボールなどのポインティングデバイス、ディスプレイに組み込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイアル、ボタン、スイッチ、キーパッド、音声コマンド認識システムを伴う音声入力デバイス、マイクロフォン、および他のタイプの入力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、たとえば、ジェスチャおよび話し言葉コマンドを用いて、ナチュラルユーザインターフェイスを介して、Ｍｉｃｒｏｓｏｆｔ  Ｘｂｏｘ（登録商標）２２６０ゲームコントローラなどの入力デバイスをユーザが制御して対話することを可能にするＭｉｃｒｏｓｏｆｔ  Ｋｉｎｅｃｔ（登録商標）モーションセンサなどのモーション感知および／またはジェスチャ認識デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、ユーザから目の動き（たとえば、写真を撮っている間および／またはメニュー選択を行なっている間の「まばたき」）を検出し、アイジェスチャを入力デバイス（たとえばＧｏｏｇｌｅ  Ｇｌａｓｓ（登録商標））への入力として変換するＧｏｏｇｌｅ  Ｇｌａｓｓ（登録商標）瞬き検出器などのアイジェスチャ認識デバイスも含んでもよい。また、ユーザインターフェイス入力デバイスは、ユーザが音声コマンドを介して音声認識システム（たとえばＳｉｒｉ（登録商標）ナビゲータ）と対話することを可能にする音声認識感知デバイスを含んでもよい。
【０２３０】
ユーザインターフェイス入力デバイスは、三次元（３Ｄ）マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、ならびにスピーカ、デジタルカメラ、デジタルカムコーダ、ポータブルメディアプレーヤ、ウェブカム、画像スキャナ、指紋スキャナ、バーコードリーダ３Ｄスキャナ、３Ｄプリンタ、レーザレンジファインダ、および視線追跡デバイスなどの聴覚／視覚デバイスも含んでもよいが、それらに限定されるものではない。また、ユーザインターフェイス入力デバイスは、たとえば、コンピュータ断層撮影、磁気共鳴撮像、ポジションエミッショントモグラフィー、医療用超音波検査デバイスなどの医療用画像化入力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、たとえば、ＭＩＤＩキーボード、デジタル楽器などの音声入力デバイスも含んでもよい。
【０２３１】
ユーザインターフェイス出力デバイスは、ディスプレイサブシステム、インジケータライト、または音声出力デバイスなどの非ビジュアルディスプレイなどを含んでもよい。ディスプレイサブシステムは、陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）またはプラズマディスプレイを使うものなどのフラットパネルデバイス、投影デバイス、タッチスクリーンなどであってもよい。一般に、「出力デバイス」という語の使用は、コンピュータシステム２２００からユーザまたは他のコンピュータに情報を出力するための全ての考えられ得るタイプのデバイスおよび機構を含むよう意図される。たとえば、ユーザインターフェイス出力デバイスは、モニタ、プリンタ、スピーカ、ヘッドフォン、自動車ナビゲーションシステム、プロッタ、音声出力デバイスおよびモデムなどの、テキスト、グラフィックスおよび音声／映像情報を視覚的に伝えるさまざまな表示デバイスを含んでもよいが、それらに限定されるものではない。
【０２３２】
コンピュータシステム２２００は、現在のところシステムメモリ２２１０内に位置しているものとして示されているソフトウェア要素を備えるストレージサブシステム２２１８を備えてもよい。システムメモリ２２１０は、処理ユニット２２０４上でロード可能および実行可能なプログラム命令と、これらのプログラムの実行中に生成されるデータとを格納してもよい。
【０２３３】
コンピュータシステム２２００の構成およびタイプによって、システムメモリ２２１０は、揮発性であってもよく（ランダムアクセスメモリ（ＲＡＭ）など）、および／または、不揮発性であってもよい（リードオンリメモリ（ＲＯＭ）、フラッシュメモリなど）。ＲＡＭは、一般に、処理ユニット２２０４にすぐにアクセス可能であり、および／または、処理ユニット２２０４によって現在動作および実行されているデータおよび／またはプログラムモジュールを含む。いくつかの実現例では、システムメモリ２２１０は、スタティックランダムアクセスメモリ（ＳＲＡＭ）またはダイナミックランダムアクセスメモリ（ＤＲＡＭ）などの複数の異なるタイプのメモリを含んでもよい。いくつかの実現例では、起動中などにコンピュータシステム２２００内の要素間における情報の転送を助ける基本的なルーティンを含むベーシックインプット／アウトプットシステム（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ：ＢＩＯＳ）は、一般に、ＲＯＭに格納されてもよい。一例として、限定を伴うことなく、システムメモリ２２１０は、クライアントアプリケーション、ウェブブラウザ、中間層アプリケーション、リレーショナルデータベース管理システム（ｒｅｌａｔｉｏｎａｌ  ｄａｔａｂａｓｅ  ｍａｎａｇｅｍｅｎｔ  ｓｙｓｔｅｍ：ＲＤＢＭＳ）などを含んでもよいアプリケーションプログラム２２１２、プログラムデータ２２１４およびオペレーティングシステム２２１６も示す。一例として、オペレーティングシステム２２１６は、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ａｐｐｌｅ  Ｍａｃｉｎｔｏｓｈ（登録商標）および／もしくはＬｉｎｕｘオペレーティングシステム、さまざまな市場で入手可能なＵＮＩＸ（登録商標）またはＵＮＩＸのようなオペレーティングシステム（さまざまなＧＮＵ／Ｌｉｎｕｘオペレーティングシステム、Ｇｏｏｇｌｅ  Ｃｈｒｏｍｅ（登録商標）ＯＳなどを含むがそれらに限定されない）、ならびに／または、ｉＯＳ、Ｗｉｎｄｏｗｓ（登録商標）  Ｐｈｏｎｅ、Ａｎｄｒｏｉｄ（登録商標）  ＯＳ、ＢｌａｃｋＢｅｒｒｙ（登録商標）Ｚ０  ＯＳ、およびＰａｌｍ（登録商標）  ＯＳオペレーティングシステムなどのモバイルオペレーティングシステムのさまざまなバージョンを含んでもよい。
【０２３４】
ストレージサブシステム２２１８は、いくつかの実施形態の機能を提供する基本的なプログラミングおよびデータ構造を格納するための有形のコンピュータ読取可能な記憶媒体も提供してもよい。プロセッサによって実行されたときに上記の機能を提供するソフトウェア（プログラム、コードモジュール、命令）は、ストレージサブシステム２２１８に格納されてもよい。これらのソフトウェアモジュールまたは命令は、処理ユニット２２０４によって実行されてもよい。ストレージサブシステム２２１８はまた、本発明に従って使用されるデータを格納するためのリポジトリを提供してもよい。
【０２３５】
ストレージサブシステム２２００は、コンピュータ読取可能な記憶媒体２２２２にさらに接続可能なコンピュータ読取可能記憶媒体リーダ２２２０も含んでもよい。システムメモリ２２１０とともに、およびオプションとしてシステムメモリ２２１０との組み合わせで、コンピュータ読取可能な記憶媒体２２２２は、コンピュータ読取可能な情報を一時的および／またはより永久的に収容、格納、伝送および検索取得するための、遠隔の、ローカルな、固定された、および／またはリムーバブルなストレージデバイスに記憶媒体を加えたものを包括的に表わしてもよい。
【０２３６】
コードまたはコードの一部を含むコンピュータ読取可能な記憶媒体２２２２は、記憶媒体および通信媒体を含む、当該技術分野において公知であるまたは使用されるいずれかの適切な媒体も含んでもよく、当該媒体は、情報の格納および／または伝送のための任意の方法または技術において実現される揮発性および不揮発性の、リムーバブルおよび非リムーバブルな媒体などであるが、それらに限定されるものではない。これは、ＲＡＭ、ＲＯＭ、電気的に消去可能なプログラム可能ＲＯＭ（ｅｌｅｃｔｒｏｎｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ：ＥＥＰＲＯＭ）、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、または他の光学式ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または他の有形のコンピュータ読取可能な媒体などの有形のコンピュータ読取可能な記憶媒体を含んでもよい。指定される場合には、これは、データ信号、データ伝送、または所望の情報を伝送するために使用可能でありコンピューティングシステム２２００によってアクセス可能であるその他の媒体などの無形のコンピュータ読取可能媒体も含んでもよい。
【０２３７】
一例として、コンピュータ読取可能な記憶媒体２２２２は、非リムーバブル不揮発性磁気媒体に対して読み書きするハードディスクドライブ、リムーバブル不揮発性磁気ディスクに対して読み書きする磁気ディスクドライブ、ＣＤ  ＲＯＭ、ＤＶＤおよびブルーレイ（登録商標）ディスクなどの、リムーバブル不揮発性光ディスクに対して読み書きする光ディスクドライブ、または他の光学式媒体を含んでもよい。コンピュータ読取可能記憶媒体２２２２は、Ｚｉｐ（登録商標）ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブ、セキュアデジタル（ＳＤ）カード、ＤＶＤディスク、デジタルビデオテープなどを含んでもよいが、それらに限定されるものではない。コンピュータ読取可能な記憶媒体２２２２は、フラッシュメモリベースのＳＳＤ、エンタープライズフラッシュドライブ、ソリッドステートＲＯＭなどの不揮発性メモリに基づくソリッドステートドライブ（ｓｏｌｉｄ−ｓｔａｔｅ  ｄｒｉｖｅ：ＳＳＤ）、ソリッドステートＲＡＭ、ダイナミックＲＡＭ、スタティックＲＡＭなどの揮発性メモリに基づくＳＳＤ、ＤＲＡＭベースのＳＳＤ、磁気抵抗ＲＡＭ（ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  ＲＡＭ：ＭＲＡＭ）ＳＳＤ、およびＤＲＡＭとフラッシュメモリベースのＳＳＤとの組み合わせを使用するハイブリッドＳＳＤも含んでもよい。ディスクドライブおよびそれらの関連付けられたコンピュータ読取可能な媒体は、コンピュータ読取可能な命令、データ構造、プログラムモジュールおよび他のデータの不揮発性ストレージをコンピュータシステム２２００に提供してもよい。
【０２３８】
通信サブシステム２２２４は、他のコンピュータシステムおよびネットワークに対するインターフェイスを提供する。通信サブシステム２２２４は、他のシステムとコンピュータシステム２２００との間のデータの送受のためのインターフェイスとして働く。たとえば、通信サブシステム２２２４は、コンピュータシステム２２００がインターネットを介して１つ以上のデバイスに接続することを可能にしてもよい。いくつかの実施形態では、通信サブシステム２２２４は、（たとえば、セルラー電話技術、ＺＧ、４ＧもしくはＥＤＧＥ（グローバル進化のための高速データレート）などの先進データネットワーク技術、ＷｉＦｉ（ＩＥＥＥ８０２．１１ファミリー規格、もしくは他のモバイル通信技術、またはそれらのいずれかの組み合わせを用いて）無線音声および／またはデータネットワークにアクセスするための無線周波数（ＲＦ）送受信機コンポーネント、グローバルポジショニングシステム（ＧＰＳ）受信機コンポーネント、ならびに／または他のコンポーネントを含んでもよい。いくつかの実施形態では、通信サブシステム２２２４は、無線インターフェイスに加えて、またはその代わりに、有線ネットワーク接続（たとえば、イーサネット）を提供することができる。
【０２３９】
また、いくつかの実施形態では、通信サブシステム２２２４は、コンピュータシステム２２００を使用し得る１人以上のユーザの代わりに、構造化されたおよび／または構造化されていないデータフィード２２２６、イベントストリーム２２２８、イベント更新情報２２３０などの形式で入力通信を受信してもよい。たとえば、通信サブシステム２２２４は、ソーシャルネットワークおよび／またはＴｗｉｔｔｅｒ（登録商標）フィード、Ｆａｃｅｂｏｏｋ（登録商標）更新情報、Ｒｉｃｈ  Ｓｉｔｅ  Ｓｕｍｍａｒｙ（ＲＳＳ）フィードなどのウェブフィード、および／もしくは１つ以上の第三者情報源からのリアルタイム更新情報などの他の通信サービスのユーザからリアルタイムでデータフィード２２２６を受信（または送信）するように構成されてもよい。
【０２４０】
さらに、また、通信サブシステム２２２４は、連続データストリームの形式でデータを受信するように構成されてもよく、当該連続データストリームは、明確な終端を持たない、本来は連続的または無限であり得るリアルタイムイベントのイベントストリーム２２２８および／またはイベント更新情報２２３０を含んでもよい。連続データを生成するアプリケーションの例としては、たとえば、センサデータアプリケーション、金融株式相場表示板、ネットワーク性能測定ツール（たとえば、ネットワーク監視およびトラフィック管理アプリケーション）、クリックストリーム解析ツール、自動車交通監視などを挙げることができる。また、通信サブシステム２２２４は、構造化されたおよび／または構造化されていないデータフィード２２２６、イベントストリーム２２２８、イベント更新情報２２３０などを、コンピュータシステム２２００に結合される１つ以上のストリーミングデータソースコンピュータと通信し得る１つ以上のデータベースに出力するよう構成されてもよい。
【０２４１】
コンピュータシステム２２００は、手持ち式の携帯デバイス（たとえば、ｉＰｈｏｎｅ（登録商標）携帯電話、ｉＰａｄ（登録商標）コンピューティングタブレット、ＰＤＡ）、ウェアラブルデバイス（たとえば、Ｇｏｏｇｌｅ  Ｇｌａｓｓ（登録商標）頭部装着型ディスプレイ）、ＰＣ、ワークステーション、メインフレーム、キオスク、サーバラック、またはその他のデータ処理システムを含む、さまざまなタイプのもののうちの１つであり得る。常に変化するコンピュータおよびネットワークの性質のため、図に示されるコンピュータシステム２２００の記載は、単に具体的な例として意図される。図に示されるシステムよりも多くのコンポーネントまたは少ないコンポーネントを有する多くの他の構成が可能である。たとえば、カスタマイズされたハードウェアも使用されてもよく、および／または、特定の要素が、ハードウェア、ファームウェア、ソフトウェア（アプレットを含む）、または組み合わせで実現されてもよい。さらに、ネットワーク入力／出力デバイスなどの他のコンピューティングデバイスへの接続が利用されてもよい。本明細書における開示および教示に基づいて、当業者は、さまざまな実施形態を実現するための他の態様および／または方法を理解するであろう。
【０２４２】
前述の説明では、説明の目的で、本発明の様々な実施形態の完全な理解のために多数の特定の詳細が述べられた。しかしながら、本発明の実施形態がこれらの具体的な詳細のいくつかなしに実施されてもよいことは当業者には明らかであろう。他の例では、周知の構造および装置がブロック図の形で示される。
【０２４３】
前述の説明は例示的な実施形態のみを提供するものであり、本開示の範囲、適用性、または構成を限定することを意図するものではない。むしろ、前述の例示的な実施形態の説明は、例示的な実施形態を実施することを可能にする説明を当業者に提供するであろう。特許請求の範囲に記載されている本発明の精神および範囲から逸脱することなく、要素の機能および配置をさまざまに変更できることが理解されるべきである。
【０２４４】
実施の形態の十分な理解のために前述の記載において具体的な詳細が述べられた。しかしながら、実施の形態がこれらの特定の詳細なしに実施されてもよいことは当業者には理解されるであろう。たとえば、不必要な詳細により実施形態を曖昧にすることのないように、回路、システム、ネットワーク、プロセスおよび他のコンポーネントは、ブロック図の形式でコンポーネントとして示されたかもしれない。他の例では、実施形態を曖昧にすることを回避するために、周知の回路、プロセス、アルゴリズム、構造および技術は、不必要な詳細なしで示されたかもしれない。
【０２４５】
また、個々の実施形態は、フローチャート、フロー図、データフロー図、構造図またはブロック図として示されるプロセスとして説明されたかもしれない。フローチャートは動作をシーケンシャルなプロセスとして説明したかもしれないが、動作の多くは並列または同時に実行されてもよい。さらに、動作の順序は並べ替えられてもよい。プロセスは、その動作が完了すると終了するが、図に含まれていないさらなるステップを有していてもよい。プロセスは、メソッド、関数、プロシージャ、サブルーチン、サブプログラムなどに対応し得る。プロセスが関数に対応している場合、その終了は、その関数を呼出し関数またはmain関数に返すことに対応し得る。
【０２４６】
「コンピュータ読取可能な媒体」という語は、命令および／またはデータを記憶したり、含んでいたり、または担持したりすることができる携帯型または固定式のストレージデバイス、光学式ストレージデバイス、無線チャネルおよびさまざまな他の媒体を含むが、これらに限定されるものではない。コードセグメントまたは機械実行可能な命令は、プロシージャ、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または、命令、データ構造もしくはプログラム文のいずれかの組合せを表し得る。コードセグメントは、情報、データ、引数、パラメータまたはメモリコンテンツを受け渡すおよび／または受信することによって、別のコードセグメントまたはハードウェア回路に結合されてもよい。情報、引数、パラメータ、データなどは、メモリ共有、メッセージ受け渡し、トークン受け渡し、ネットワーク送信などを含む任意の好適な手段によって受け渡されたり、転送されたり、または送信されたりしてもよい。
【０２４７】
さらに、実施形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはそれらの任意の組合せによって実現されてもよい。ソフトウェア、ファームウェア、ミドルウェアまたはマイクロコードで実現される場合、必要なタスクを実行するためのプログラムコードまたはコードセグメントは、機械読取可能な媒体に記憶されてもよい。プロセッサが必要なタスクを実行してもよい。
【０２４８】
上記の明細書では、本発明の局面についてその具体的な実施形態を参照して説明しているが、本発明はそれに限定されるものではないということを当業者は認識するであろう。上記の発明のさまざまな特徴および局面は、個々にまたは一緒に用いられてもよい。さらに、実施形態は、明細書のさらに広い精神および範囲から逸脱することなく、本明細書に記載されているものを超えて、さまざまな環境および用途で利用することができる。したがって、明細書および図面は、限定的ではなく例示的であると見なされるべきである。
【０２４９】
加えて、説明の目的で、方法は、ある特定の順序で記載された。代替例では当該方法は記載されている順序とは異なる順序で実行されてもよい、ということが理解されるべきである。また、上記の方法はハードウェアコンポーネントによって実行されてもよく、または機械によって実行可能な一連の命令で実施されてもよく、当該機械によって実行可能な命令を使用して、命令でプログラミングされた汎用もしくは特殊目的プロセッサまたは論理回路などの機械に方法を実行させてもよい、ということが理解されるべきである。これらの機械によって実行可能な命令は、ＣＤ−ＲＯＭもしくは他のタイプの光ディスク、フロッピー（登録商標）ディスク、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気もしくは光カード、フラッシュメモリ、または電子命令を格納するのに適した他のタイプの機械読取可能な媒体などの１つ以上の機械読取可能な媒体に格納されてもよい。代替的に、当該方法は、ハードウェアとソフトウェアとの組み合わせによって実行されてもよい。
【０２５０】
また、特許権者によってそうではないと明示的かつ明確に規定されていない限り、特許請求の範囲における用語は、それらの明白な通常の意味を有する。特許請求の範囲で使用される不定冠詞「ａ」または「ａｎ」は、特定の冠詞が紹介する要素のうちの１つまたは複数を意味するように本明細書では定義され、そしてそれに続く定冠詞「the」の使用はその意味を否定するものではない。さらに、特許請求の範囲における異なる要素を明確にするための「第１」、「第２」などのような序数の用語の使用は、序数の用語が適用されている要素に対して一連の特定の位置、または任意の他の連続する文字もしくは順序を与えることを意図しない。
【図１】
2020506462.tif 000003
【図２】
2020506462.tif 000004
【図３Ａ】
2020506462.tif 000005
【図３Ｂ】
2020506462.tif 000006
【図３Ｃ】
2020506462.tif 000007
【図３Ｄ】
2020506462.tif 000008
【図４】
2020506462.tif 000009
【図５】
2020506462.tif 000010
【図６】
2020506462.tif 000011
【図７】
2020506462.tif 000012
【図８】
2020506462.tif 000013
【図９】
2020506462.tif 000014
【図１０】
2020506462.tif 000015
【図１１】
2020506462.tif 000016
【図１２】
2020506462.tif 000017
【図１３】
2020506462.tif 000018
【図１４】
2020506462.tif 000019
【図１５】
2020506462.tif 000020
【図１６】
2020506462.tif 000021
【図１７】
2020506462.tif 000022
【図１８】
2020506462.tif 000023
【図１９】
2020506462.tif 000024
【図２０】
2020506462.tif 000025
【図２１】
2020506462.tif 000026
【図２２】
2020506462.tif 000027
【国際調査報告】
2020506462.tif 000028
2020506462.tif 000029