(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-06
(45)【発行日】2023-11-14
(54)【発明の名称】クラウドデータストアにわたるファイルシステム階層ミラーリング
(51)【国際特許分類】
G06F 13/10 20060101AFI20231107BHJP
G06F 3/06 20060101ALI20231107BHJP
G06F 11/20 20060101ALI20231107BHJP
【FI】
G06F13/10 340A
G06F3/06 304F
G06F11/20 656
【外国語出願】
(21)【出願番号】P 2022104487
(22)【出願日】2022-06-29
(62)【分割の表示】P 2019536904の分割
【原出願日】2018-01-03
【審査請求日】2022-07-22
(32)【優先日】2017-01-06
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2017-05-31
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】メイビー,マーク
(72)【発明者】
【氏名】クレーマー,ジェームス
(72)【発明者】
【氏名】ルドリュ,パスカル
(72)【発明者】
【氏名】ギブソン,ギャビン
【審査官】和田 財太
(56)【参考文献】
【文献】米国特許出願公開第2013/0111262(US,A1)
【文献】特表2012-504790(JP,A)
【文献】特開2016-126364(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 13/10
G06F 3/06
G06F 11/20
(57)【特許請求の範囲】
【請求項1】
方法であって、
オブジェクトベースのファイルシステムの仮想デバイス層で動作するミラーデバイス
において、前記
オブジェクトベースのファイルシステムの前記仮想デバイス層内の第1のクラウドインターフェイスデバイス
の第1のクラウドオブジェクトストアおよび第2のクラウドインターフェイスデバイス
の第2のクラウドオブジェクトストアを識別すること
を備え、前記第1のクラウドオブジェクトストアは、前記第1のクラウドオブジェクトストアの中に記憶されるデータオブジェクトの、第1のネイティブセットの属性をサポートし、前記第2のクラウドオブジェクトストアは、前記第2のクラウドオブジェクトストアに記憶されるデータオブジェクトの、異なる第2のネイティブセットの属性をサポートし、前記方法はさらに、
前記ミラーデバイスが、前記第1のクラウドインターフェイスデバイスを介して、
前記第1のクラウドオブジェクトストアに記憶される第1のセットのクラウドストレージオブジェクトを取得するこ
とを備え、前記第1
のクラウド
インターフェイスデバイスは、ツリー階層の第1のインスタンスを記憶し、前記ツリー階層
は、前記第1のセットのクラウドストレージオブジェクトに対応する
論理データブロック
のマッピングを含み、前記方法はさらに、
前記ミラーデバイスによって、前記第2のクラウドインターフェイスデバイスを介して、前記第2のクラウドオブジェクトストアに前記ツリー階層の第2のインスタンスを記憶することを備え、前記ツリー階層の前記第1のインスタンスおよび前記第2のインスタンスは同一であり、前記方法はさらに、
前記ミラーデバイスが、前記第2のクラウドインターフェイスデバイスを介して、
前記ツリー階層の前記第2のインスタンスを用いて、前記第2のクラウドオブジェクトストアに記憶される
べき第2のセットのクラウドストレージオブジェクトを作成すること
と、
前記ツリー階層に関して少なくとも1つの読み取り操作を実行させ、前記少なくとも1つの読み取り操作は、前記第1のクラウドオブジェクトストアまたは前記第2のクラウドオブジェクトストアのいずれかから少なくとも1つのクラウドストレージオブジェクトを受信することを含む、方法。
【請求項2】
前記第1のセットのクラウドストレージオブジェクトに対応する前記論理データブロックは、前記第1のセットのクラウドストレージオブジェクトの各クラウドストレージオブジェクトに対応するメタデータを含む、請求項1に記載の方法。
【請求項3】
前記第1のクラウドオブジェクトストアおよび前記第2のクラウドオブジェクトストアに対応するパフォーマンスデータを取得することと、
前記パフォーマンスデータに基づいて、前記少なくとも1つの読み取り操作を、前記第2のクラウドオブジェクトストアの代わりに、前記第1のクラウドオブジェクトストア上で実行させることとをさらに備える、請求項1または2に記載の方法。
【請求項4】
前記パフォーマンスデータは、前記第1のクラウドオブジェクトストアおよび前記第2のクラウドオブジェクトストア
の各々によって実行された
いくつかの以前の読み取り操
作を含む、請求項
3に記載の方法。
【請求項5】
前記ツリー階層の前記第1のインスタンスおよび前記第2のインスタンスに対してチェックサム演算を実行して、前記ツリー階層の前記第1のインスタンスおよび前記第2のインスタンスが同一であることを検証することをさらに備える、請求項1~4のいずれか1項に記載の方法。
【請求項6】
前記ツリー階層に関して
少なくとも1つの読み取り操作を実行
させるこ
とは、前記第1のクラウドオブジェクトストアまたは前記第2のクラウドオブジェクトストアのいずれかから前記少なくとも1つのクラウドストレージオブジェクトを受信する
ために前記少なくとも1つの読み取り操作が実行されるときに前記ミラーデバイスを迂回することを
さらに含む、請求項1
~5のいずれか1項に記載の方法。
【請求項7】
前記ミラーデバイスが、前記第1のセットのクラウドストレージオブジェクトのうちの少なくとも1つのクラウドストレージオブジェクトに対して実行される書き込み操作を検出することと、
前記ミラーデバイスが、前記書き込み操作に従って、前記ツリー階層の前記第1のインスタンスおよび前記第2のインスタンスを更新することと、
前記ミラーデバイスが、前記ツリー階層の前記更新された第2のインスタンスに基づいて、前記第2のセットのクラウドストレージオブジェクトのうちの少なくとも1つのクラウドストレージオブジェクトに対して別の書き込み操作を実行させることとをさらに備える、請求項1~6のいずれか1項
に記載の方法。
【請求項8】
オブジェクトベースのファイルシステ
ムで動作するように構成されるミラーデバイスであって、
1以上のプロセッサを含む処理ユニットと、
前記処理ユニットと結合され、前記処理ユニットによって読み取り可能であり、命令のセットを中に記憶するメモリとを備え、前記命令のセットは前記処理ユニットによって実行されると、前記ミラーデバイスに、
前記
オブジェクトベースのファイルシステム
の仮想デバイス層
内で
、第1のクラウドインターフェイスデバイス
の第1のクラウドオブジェクトストアおよび第2のクラウドインターフェイスデバイス
の第2のクラウドオブジェクトストアを識別させ、
前記第1のクラウドオブジェクトストアは、前記第1のクラウドオブジェクトストアの中に記憶されるデータオブジェクトの、第1のネイティブセットの属性をサポートし、前記第2のクラウドオブジェクトストアは、前記第2のクラウドオブジェクトストアに記憶されるデータオブジェクトの、異なる第2のネイティブセットの属性をサポートし、さらに、前記ミラーデバイスに、
前
記第1のクラウドオブジェクトストアに記憶される第1のセットのクラウドストレージオブジェクトを取得させ、前記第1
のクラウド
インターフェイスデバイスは、ツリー階層の第1のインスタンスを記憶し、前記ツリー階層
は、前記第1のセットのクラウドストレージオブジェクトに対応する
論理データブロック
のマッピングを含み、さらに、前記ミラーデバイスに、
前記第2のクラウドオブジェクトストアに前記ツリー階層の第2のインスタンスを記憶させ、前記ツリー階層の前記第1のインスタンスおよび前記第2のインスタンスは同一であり、さらに、前記ミラーデバイスに、
前記ツリー階層の前記第2のインスタンスを用いさせて、前記第2のクラウドオブジェクトストアに記憶される
べき第2のセットのクラウドストレージオブジェクトを作成
し、
前記ツリー階層に関して少なくとも1つの読み取り操作を実行させ、前記少なくとも1つの読み取り操作は、前記第1のクラウドオブジェクトストアまたは前記第2のクラウドオブジェクトストアのいずれかから少なくとも1つのクラウドストレージオブジェクトを受信することを含む、ミラーデバイス。
【請求項9】
前記第1のセットのクラウドストレージオブジェクトに対応する前記論理データブロックは、前記第1のセットのクラウドストレージオブジェクトの各クラウドストレージオブジェクトに対応するメタデータを含む、請求項8に記載のミラーデバイス。
【請求項10】
前記メモリは、追加の命令を中に記憶し、前記追加の命令は、前記処理ユニットによって実行されると、前記ミラーデバイスに、
前記第1のクラウドオブジェクトストアおよび前記第2のクラウドオブジェクトストアに対応するパフォーマンスデータを取得させ、
前記パフォーマンスデータに基づいて、前記少なくとも1つの読み取り操作を、前記第2のクラウドオブジェクトストアの代わりに、前記第1のクラウドオブジェクトストア上で実行させる、請求項8
または9に記載のミラーデバイス。
【請求項11】
前記パフォーマンスデータは、前記第1のクラウドオブジェクトストアおよび前記第2のクラウドオブジェクトストア
の各々によって実行された
いくつかの以前の読み取り操
作を含む、請求項
10に記載のミラーデバイス。
【請求項12】
前記メモリは、追加の命令を中に記憶し、前記追加の命令は、前記処理ユニットによって実行されると、前記ミラーデバイスに、
前記ツリー階層の前記第1のインスタンスおよび前記第2のインスタンスに対してチェックサム演算を実行させて、前記ツリー階層の前記第1のインスタンスおよび前記第2のインスタンスが同一であることを検証する、請求項8
~11のいずれか1項に記載のミラーデバイス。
【請求項13】
前記ツリー階層に関して
少なくとも1つの読み取り操作を実行させ
ることは、前記第1のクラウドオブジェクトストアまたは前記第2のクラウドオブジェクトストアのいずれかから
前記少なくとも1つのクラウドストレージオブジェクトを受信する
ために前記少なくとも1つの読み取り操作が実行されるときに前記ミラーデバイスを迂回することを
さらに含む、請求項8
~12のいずれか1項に記載のミラーデバイス。
【請求項14】
前記メモリは、追加の命令を中に記憶し、前記追加の命令は、前記処理ユニットによって実行されると、前記ミラーデバイスに、
前記第1のセットのクラウドストレージオブジェクトのうちの少なくとも1つのクラウドストレージオブジェクトに対して実行される書き込み操作を検出させ、
前記書き込み操作に従って、前記ツリー階層の前記第1のインスタンスおよび前記第2のインスタンスを更新させ、
前記ツリー階層の前記更新された第2のインスタンスに基づいて、前記第2のセットのクラウドストレージオブジェクトのうちの少なくとも1つのクラウドストレージオブジェクトに対して別の書き込み操作を実行させる、請求項8
~13のいずれか1項に記載のミラーデバイス。
【請求項15】
コンピュータプログラ
ムであって、命令を含み、前記命令は、1以上のデータプロセッサに、
請求項1~7のいずれか1項に記載の方法を実行させるよう構成され
ている、コンピュータプログラ
ム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願との相互参照
本出願は、米国特許法第119条(e)のもと、”FILE SYSTEM HIERARCHIES AND FUNCTIONALITY WITH CLOUD OBJECT STORAGE(クラウドオブジェクトストレージを伴うファイ
ルシステム階層および機能)”と題される2017年1月6日に提出された米国仮出願第62/443,391号の非仮出願であり、その利益および優先権を主張するものであり、その内容の全体をここに引用により援用する。
【0002】
発明の技術分野
本開示は、一般に、データストレージのシステムおよび方法に関し、より詳細には、オブジェクトインターフェース上にファイルシステム機能を重層することに関する。
【背景技術】
【0003】
背景
インターネットの継続的な拡大は、コンピューティングネットワークおよびシステムの拡大ならびに高度化とともに、インターネットを介して記憶されアクセス可能なコンテンツの急増につながっている。その結果、大規模で洗練されたデータストレージシステムの必要性が高まっている。データストレージに対する需要が増大し続けているなか、より大きくより洗練されたストレージシステムが設計されそして展開されている。多くの大規模データストレージシステムは、物理的記憶媒体のアレイを含むストレージアプライアンスを利用する。これらのストレージアプライアンスは、驚くべき量のデータを記憶できる。例えば、現時点では、オラクルのSUN ZFS Storage ZS5-4アプライアンスは最大6.9ペ
タバイトのデータを記憶できる。さらに、複数のストレージアプライアンスを互いにネットワーク接続してストレージプールを形成することができ、これにより記憶されるデータの量をさらに増やすことができる。
【0004】
典型的には、これらのような大型ストレージシステムはファイルを記憶しアクセスするためのファイルシステムを含み得る。システムファイル(オペレーティングシステムファイル、デバイスドライバファイルなど)を記憶することに加えて、このファイルシステムは、ユーザデータファイルの記憶およびアクセスを提供する。これらのファイル(システムファイルおよび/またはユーザファイル)のいずれかに重要なデータが含まれている場合は、ファイルストレージデバイスに障害が発生しても重要なデータが失われないようにバックアップストレージ方式を採用すると有利である。
【0005】
従来、クラウドベースのストレージはオブジェクトベースであり、弾力性および規模を提供する。ただし、クラウドオブジェクトストレージにはいくつかの問題がある。クラウドオブジェクトストレージは、オブジェクト全体のgetおよびputに基づくインターフェースを提供する。クラウドオブジェクトストレージでは検索機能が制限されており、通常はレイテンシが長くなる。限られたクラウドベースのインターフェースは、ローカルファイルシステムアプリケーションのニーズと一致しない。レガシーアプリケーションを変換してオブジェクトインターフェースを用いることは、費用がかかり、実用的ではないか、または可能でさえないかもしれない。
【0006】
したがって、オブジェクトインターフェース上におけるファイルシステム機能の重層を提供するために、前述の問題に対処するシステムおよび方法が必要とされている。このニーズおよび他のニーズは本開示によって対処される。
【発明の概要】
【課題を解決するための手段】
【0007】
簡単な概要
本開示のある実施形態は、概してデータストレージのシステムおよび方法に関し、より詳細にはオブジェクトインターフェース上にファイルシステム機能を重層するためのシステムおよび方法に関する。
【0008】
本明細書では、オブジェクトインターフェース上におけるファイルシステム機能の重層を提供するための様々な技法(例えば、システム、方法、非一時的機械可読記憶媒体に有形に具現化されたコンピュータプログラム製品など)が記載される。特定の実施形態では、ファイルシステム機能は、レガシーアプリケーションから期待される機能を可能にしながらクラウドベースのストレージを提供するためにクラウドオブジェクトインターフェース上に重層することができる。例えば、POSIXインターフェースおよびセマンティクスを、データ編成が名前階層にある状態でファイルベースのアクセスと整合する態様でデータへのアクセスを提供しながら、クラウドベースのストレージ上に重層することができる。様々な実施形態はまた、メモリマップの変更と書き込みとの間の一貫性を確保しながらメモリマップの変更が永続的ストレージに反映されるようにデータのメモリマッピングを提供することもできる。例えば、ZFSファイルシステムのディスクベースのストレージをZFSクラウドベースのストレージに変換することによって、ZFSファイルシステムはクラウドストレージの弾力性を獲得する。
【0009】
本開示のさらなる適用分野は、以下に提供される詳細な説明から明らかになるであろう。詳細な説明および特定の例は、様々な実施形態を示しているが、例示の目的のためだけに意図されており、本開示の範囲を必ずしも限定することを意図されていないことを理解されたい。
【図面の簡単な説明】
【0010】
本開示による実施形態の性質および利点は添付の図面と併せて本明細書の残りの部分を参照することによってさらに理解され得る。
【
図1】本開示の特定の実施形態に従って使用され得るストレージネットワークの一例を示す。
【
図2】本開示のいくつかの実施形態による、ストレージ環境内で実行することができるファイルシステムのインスタンスを示す。
【
図3A】本開示のいくつかの実施形態による、ファイルシステムのコピーオンライトプロセスを示す図である。
【
図3B】本開示のいくつかの実施形態による、ファイルシステムのコピーオンライトプロセスを示す図である。
【
図3C】本開示のいくつかの実施形態による、ファイルシステムのコピーオンライトプロセスを示す図である。
【
図3D】本開示のいくつかの実施形態による、ファイルシステムのコピーオンライトプロセスを示す図である。
【
図4】本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステムの一例を示すハイレベル図である。
【
図5】本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステムの例示的なネットワークファイルシステムのインスタンスを示す図である。
【
図6】本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステムのクラウドインターフェースアプライアンスの追加の局面を示す図である。
【
図7】本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステムのためのCOWプロセスのいくつかの特徴に向けられた例示的な方法を示すブロック図である。
【
図8】本開示のいくつかの実施形態による、増分修正を処理するクラウドインターフェースアプライアンスの一例を示すハイレベル図である。
【
図9】本開示のいくつかの実施形態による、クラウド内の保全性、および最終的に整合性のあるオブジェクトモデルからの常に整合性のあるセマンティクスを保証するハイブリッドクラウドストレージシステムのいくつかの機能に向けられる例示的な方法を示すブロック図である。
【
図10】本開示のいくつかの実施形態による、チェックを処理するクラウドインターフェースアプライアンスの一例を示すハイレベル図である。
【
図11】本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステムの機能をさらに示す簡略化した例の図である。
【
図12】本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステムの機能をさらに示す簡略化された例の図である。
【
図13】本開示のいくつかの実施形態による、キャッシュ管理およびクラウドレイテンシマスキングのためのハイブリッドクラウドストレージシステムのいくつかの機能に向けられた例示的な方法を示すブロック図である。
【
図14】本開示のいくつかの実施形態による、同期ミラーリングを容易にするためのハイブリッドクラウドストレージシステムの例示的なネットワークファイルシステムのインスタンスを示す図である。
【
図15】本開示のいくつかの実施形態による、同期ミラーリングおよびクラウドレイテンシマスキングのためのハイブリッドクラウドストレージシステムのいくつかの機能に向けられた例示的な方法を示すブロック図である。
【
図16】本開示のいくつかの実施形態による、複数のクラウドデータオブジェクトストアにわたる同期ミラーリングを容易にするように構成された例示的なネットワークファイルシステムのいくつかの層のインスタンスを示す図である。
【
図17】本開示のいくつかの実施形態による、複数のクラウドデータオブジェクトストアおよび/またはローカルデータオブジェクトストアにわたる同期ミラーリングを容易にするように構成された例示的なネットワークファイルシステムのいくつかの層のインスタンスを示す図である。
【
図18】本開示のいくつかの実施形態による、複数のクラウドデータオブジェクトストアにわたる、ネットワークファイルシステムからのデータの同期ミラーリングに向けられた例示的な方法を示すブロック図である。
【
図19】本開示のいくつかの実施形態による、複数のクラウドデータオブジェクトストアおよび/またはローカルデータオブジェクトストアにわたるファイルシステムからのデータの同期ミラーリングをサポートするように構成されたネットワークファイルシステムによる要求の受信および処理に向けられた例示的な方法を示すブロック図である。
【
図20】本開示による特定の実施形態を実施するための分散型システムの簡略図である。
【
図21】本開示のいくつかの実施形態による、システムの1以上のコンポーネントによって提供されるサービスをクラウドサービスとして提供することができるシステム環境の1以上のコンポーネントの簡略ブロック図である。
【
図22】本発明の様々な実施形態を実施することができる例示的なコンピュータシステムを示す。
【発明を実施するための形態】
【0011】
添付の図面において、類似の構成要素および/または特徴は、同じ参照符号を有し得る。さらに、同じ種類の様々な構成要素は、参照符号の後にダッシュを付けること、および類似の構成要素を区別する第2のラベルによって区別する場合がある。本明細書において第1の参照符号のみが用いられる場合、その記載は、第2の参照符号に関係なく、同じ第1の参照符号を有する類似の構成要素のいずれにも適用可能である。
【0012】
詳細な記載
以下の説明は好ましい例示的実施形態のみを示し、本開示の範囲、適用性、または構成を限定することを意図しない。むしろ、以下の好ましい例示的な実施形態の説明は、本開示の好ましい例示的な実施形態を実施するための実施可能な説明を当業者に提供するであろう。特許請求の範囲に記載の本開示の精神および範囲から逸脱することなく、要素の機能および構成において様々な変更を加えることができることを理解されたい。
【0013】
上記のように、クラウドベースのストレージは弾力性および規模を提供するが、いくつかの問題を提示する。クラウドオブジェクトストレージは、オブジェクト全体のgetおよびputに基づくインターフェースを提供する。クラウドオブジェクトストレージでは検索機能が制限されており、通常はレイテンシが長くなる。限られたクラウドベースのインターフェースは、ローカルファイルシステムアプリケーションのニーズと一致しない。レガシーアプリケーションを変換してオブジェクトインターフェースを用いることは、費用がかかり、実用的ではないか、または可能でさえないかもしれない。したがって、複雑で高価になるという見込みのためクラウドオブジェクトストレージに直接アクセスするようファイルシステムアプリケーションを変更する必要がないようにするための解決策が必要とされている。
【0014】
解決策は、ローカルストレージシステムのデータをクラウド内のオブジェクトストレージにマッピングするために、様々なタイプのアダプテーション層を導入することなく、ネイティブのアプリケーションインターフェースが保存されることを可能にするべきである。したがって、本開示による特定の実施形態は、レガシーアプリケーションから期待される機能性を可能にしながらクラウドベースのストレージを提供するよう、クラウドオブジェクトインターフェース上にファイルシステム機能を重層してもよい。例えば、クラウドベースではないレガシーアプリケーションは、主にファイルとしてデータにアクセスし得、POSIXインターフェースおよびセマンティクス用に設定され得る。レガシーアプリケーションの観点からは、ファイルを書き換えることなくファイルの内容を修正できることが期待される。同様に、名前階層でデータを編成できるということが期待される。
【0015】
そのような期待に応えるために、特定の実施形態は、ユーザの観点から、データ編成が名前階層における状態でファイルベースのアクセスと一致する態様でデータへのアクセスを提供しながら、POSIXインターフェースおよびセマンティクスをクラウドベースのストレージに重層することができる。さらに、特定の実施形態は、メモリマップの変更と書き込みとの間の一貫性を確保しながら、メモリマップの変更が永続的ストレージに反映されるように、データのメモリマッピングを提供することができる。ZFSファイルシステムのディスクベースのストレージをZFSクラウドベースのストレージに変換することによって、ZFSファイルシステムはクラウドストレージの弾力性を獲得する。「ディスクブロック」をクラウドオブジェクトにマッピングすることで、ZFSファイルシステムのストレージ要件は、実際に用いられている「ブロック」のみになる。バッキングストレージが不足する危険性なしに、システムを常にシンプロビジョニングすることができる。逆に、クラウドストレージはZFSファイルシステムのセマンティクスおよびサービスを獲得する。ZFSファイルシステムが提供する追加のデータサービス(圧縮、暗号化、スナップショットなど)だけでなく、完全なPOSIXセマンティクスをクラウドクライアントに提供することができる。
【0016】
特定の実施形態は、クラウドとの間でデータを移行する能力を提供することができ、ハイブリッドクラウドストレージシステムによってローカルデータをクラウド内のデータと共存させることができ、クラウドストレージ上にZFSファイルシステム機能を重層しながら、ストレージの弾力性および規模を提供する。ZFSファイルシステムを拡張してクラウドオブジェクトストアにオブジェクトを記憶できるようにすることによって、すべて
のZFSファイルシステムデータサービスに加えてZFSファイルシステム機能を維持しながら、従来のオブジェクトストレージにブリッジを提供することができる。従来のローカルファイルシステムと様々なクラウドオブジェクトストアにデータを保存する能力との間のギャップを橋渡しすることで、パフォーマンスが大幅に向上する。
【0017】
さらに、本発明の実施形態は、従来のZFSデータサービスをハイブリッドクラウドストレージとともに用いることを可能にする。一例として、圧縮、暗号化、重複排除、スナップショット、およびクローンが、各々、本発明の特定の実施形態で利用可能であり、以下に詳細に説明される。本発明では、ユーザは、ストレージをクラウドに拡張するときにシームレスにZFSファイルシステムによって提供されるすべてのデータサービスを使用し続けることができる。例えば、Oracle Key Managerまたはそれに相当するものは、ユーザに対してローカルなキーを管理し、クラウドへの保存時にローカルで管理されるキーを使用したエンドツーエンドの安全な暗号化を可能にする。圧縮、暗号化、重複排除、スナップショットの作成、ディスクストレージ上でのクローンの作成に用いられるのと同じコマンドが、クラウドへの保存にも用いられる。その結果、ユーザはZFSの圧縮、暗号化、重複排除、スナップショット、およびクローンによって提供される効率ならびにセキュリティの恩恵を受け続ける。
【0018】
圧縮は典型的には、それがデータの保存および送信に必要な資源を低減するため、オンにされる。計算資源は、圧縮プロセスにおいて、および通常はプロセスの反転(解凍)において、消費される。データ圧縮は、時空間複雑性のトレードオフの影響を受ける。例えば、ある圧縮方式は、解凍されているときに消費されるのに十分な速く集中的な処理解凍を必要とし得る。データ圧縮方式の設計は、圧縮の程度やデータの圧縮および解凍に必要な計算資源を含む、様々な要素間のトレードオフを伴う。
【0019】
ZFS暗号化により、ローカルに保存された暗号化キーを使用したエンドツーエンドの安全なデータブロックシステムが可能になり、追加のセキュリティの層が与えられる。ZFS暗号化は、それ自体でデータブロックの不正使用を防がないが、インターセプタへのメッセージ内容を拒否する。ある暗号化方式では、意図されたデータブロックが暗号化アルゴリズムを用いて暗号化され、復号化された場合にのみ読み取ることができる暗号化テキストが生成される。技術的な理由から、ある暗号化方式は通常、アルゴリズムによって生成された擬似ランダム暗号化キーを用いる。鍵を所有せずにメッセージを復号化することは原則的に可能であるが、うまく設計された暗号化方式に対しては、大きな計算資源およびスキルが必要とされる。ZFSデータブロックは、キー長が128、192、および256のAES(Advanced Encryption Standard(高度暗号化規格))を用いて暗号化される。
【0020】
データブロック重複排除は、繰り返しデータブロックの重複コピーを取り除くための特殊なデータ圧縮技術である。データブロック重複排除は、ストレージ使用率を向上させるために用いられ、ネットワークデータ転送に適用して、メモリに保存するために送信する必要があるデータブロックの数を減らすこともできる。重複排除プロセスでは、分析プロセス中に一意のデータブロックが識別されて保存される。分析が続くにつれて、他のデータブロックが保存されているコピーと比較され、一致が生じるたびに、冗長データブロックは保存されているデータブロックを指し示す小さな参照と置き換えられる。同じデータブロックパターンが数十回、数百回、さらには数千回も発生する可能性があると仮定すると、保存または転送しなければならないデータブロックの数は重複排除を用いることにより実質的に低減される。
【0021】
クラウドオブジェクトストアに対するZFSストレージのスナップショットは、ZFSシステムでシームレスに作成される。スナップショットは、スナップショットに対するバ
ックアップが必要な場合に特定のデータおよびメタデータブロックが上書きされないように、特定のデータおよびメタデータブロックをフリーズする。ツリー階層は多数のスナップショットを持つことができ、各スナップショットは削除されるまで保存されることになる。スナップショットは、ローカルに保存することも、クラウドオブジェクトストアに保存することもできる。また、スナップショットは、スナップショットが指すルートブロックを作成する以外に追加のストレージ能力を必要としないため、ZFSシステムでは「無料」である。スナップショット参照からルートブロックへのアクセス時に、ルートブロックおよびそのルートブロックからの後続のすべてのブロックにコピーオンライト操作を行うことはできない。スナップショットが取られた後の次の進行で-新たなルートブロックがアクティブなルートブロックになる。
【0022】
クローンはスナップショットから作成されるが、スナップショットとは異なり、ルートブロックへのクローン参照を用いてアクセスされるブロックは、コピーオンライト操作に使用できる。クローンを用いると、アクティブなルートブロックおよびツリーを破損することなく、システム上で開発およびトラブルシューティングを行うことができる。クローンはスナップショットにリンクされており、スナップショットブロックにリンクしているクローンが存続する場合はスナップショットを削除できない。場合によっては、クローンをアクティブな階層ツリーに昇格させることができる。
【0023】
次に、添付の図面を、
図1から始めて参照しながら、様々な実施形態についてさらに詳細に論ずる。
【0024】
図1は、本開示による特定の実施形態にを実現するの用いられ得るストレージネットワーク100の一例を示す。
図1に示すハードウェアデバイスの選択および/または構成は、例示に過ぎず、限定を意味しない。
図1は、1以上のスイッチ回路122を介して接続される複数のストレージアプライアンス120を提供する。スイッチ回路122は、複数のストレージアプライアンス120を複数のI/Oサーバ136に接続することができ、複数のI/Oサーバ136は次いで、ローカルコンピュータシステム130、ネットワーク132を介して利用可能なコンピュータシステム、および/またはクラウドコンピューティングシステム134などのクライアントデバイスのために、複数のストレージアプライアンス120へのアクセスを提供することができる。
【0025】
各I/Oサーバ136は、複数の独立したファイルシステムインスタンスを実行することができ、それらの各々は、全体の記憶容量の一部の管理を担ってもよい。以下により詳細に説明されるように、これらのファイルシステムインスタンスは、Oracle ZFSファイルシステムを含み得る。I/Oサーバ136は、読み取りおよび/または書き込みデータアクセス要求を受信することによってクライアントデバイスと通信するためのホストポート124を含むブレードおよび/またはスタンドアロンサーバを備えることができる。ホストポート124は、各I/O要求をサービス処理するために正しいデータストレージコントローラ128を識別する外部インターフェースプロバイダ126と通信することができる。データストレージコントローラ128は各々、後述する1以上のストレージアプライアンス120内のデータ内容の一部を排他的に管理することができる。したがって、各データストレージコントローラ128は、ストレージプールの論理部分にアクセスし、外部インターフェースプロバイダ126から受信されるデータ要求を、それら自身のデータ内容にアクセスすることによって満たすことができる。データストレージコントローラ128を介したリダイレクションは、ホストポート124からの各I/O要求を、I/Oサーバ136上で実行され要求されたブロックを担当するファイルシステムインスタンス(例えば、ZFSインスタンス)にリダイレクションすることを含み得る。例えば、これは、1つのI/Oサーバ136-1上のホストポート124-1から別のI/Oサーバ136-n上のZFSインスタンスへのリダイレクションを含み得る。このリダイレ
クションは、利用可能な記憶容量の任意の部分に任意のホストポート124から到達することを可能にし得る。次いで、ZFSインスタンスは、要求を完了するために、必要なダイレクトI/Oトランザクションをストレージプール内の任意のストレージデバイスに発行することができる。次いで、確認応答および/またはデータが、発信元ホストポート124を介してクライアントデバイスに転送し戻されてもよい。
【0026】
低レイテンシのメモリマップネットワークは、ホストポート124、任意のファイルシステムインスタンス、およびストレージアプライアンス120を互いに結び付けることができる。このネットワークは、スケーラブルで高性能のクラスタを提供するために、オラクルのSun Data Center InfiniBand Switch 36などの、1以上のスイッチ回路122を用いて実現することができる。PCI Expressバスなどのバスプロトコルが、ストレージネッ
トワーク内で信号をルーティングしてもよい。I/Oサーバ136とストレージアプライアンス120とは、ピアとして通信することができる。リダイレクショントラフィックとZFSメモリトラフィックとは、両方とも同じスイッチファブリックを使用できる。
【0027】
様々な実施形態では、ストレージアプライアンス120の多くの異なる構成を
図1のネットワークで用いることができる。いくつかの実施形態では、Oracle ZFS Storage Applianceシリーズを用いることができる。ZFS Storage Applianceは、以下に説明するオラク
ルのZFSファイルシステム(「ZFS」)を伴うOracle Solarisカーネルに基づくストレージを提供する。処理コア114は、任意の選択されたデータ保護(例えば、ミラーリング、RAID-Zなど)、データ低減(例えば、インライン圧縮、重複など)、および任意の他の実現されるデータサービス(例えば、リモートレプリケーションなど)を実現するのに必要とされる任意の操作を処理する。いくつかの実施形態において、処理コアは、2.8GHzのIntel(登録商標)Xeon(登録商標)プロセッサの8×15コアを含み
得る。処理コアはまた、DRAMとフラッシュ112との両方における記憶されたデータのキャッシングを処理する。いくつかの実施形態において、DRAM/フラッシュキャッシュは、3TBのDRAMキャッシュを含み得る。
【0028】
いくつかの構成では、ストレージアプライアンス120は、データストレージコントローラ128からI/O要求を受け取るためにI/Oポート116を備え得る。各ストレージアプライアンス120は、それ自体の内部冗長電源および冷却システムを有する一体型ラックマウントユニットを含み得る。コンセントレータボード110または他の同様のハードウェアデバイスを用いて複数のストレージデバイスを相互接続してもよい。メモリボード、コンセントレータボード110、電源、および冷却装置などの能動部品は、活線挿抜可能であり得る。例えば、ストレージアプライアンス120は、フラッシュメモリ102、不揮発性RAM(NVRAM)104、ハードディスクドライブ105の様々な構成、テープドライブ、ディスクドライブのRAIDアレイ108などを含み得る。これらのストレージユニットは、メモリカード、電力、冷却および相互接続の活線挿抜ならびに内部冗長性を伴う高可用性のために設計されてもよい。いくつかの実施形態では、RAMは、電力損失時にそれを専用フラッシュにバックアップすることによって、不揮発性にすることができる。フラッシュカードとNVRAMカードとの組み合わせは設定可能であり、どちらも同じコネクタおよびボードプロファイルを使用できる。
【0029】
明示的には示されていないが、各I/Oサーバ136は、グローバル管理プロセス、またはデータストレージシステムマネージャを実行することができ、これは、グローバルなフラッシュウェアレベリング、設定変更、および/または障害回復のために、容量をZFSインスタンス間で再割り当てする必要があるときに介入する、擬似静的「ロータッチ」アプローチにおいてストレージシステムの動作を監督し得る。個々のZFSインスタンス間で容量を分割する「分割統治」戦略により、パフォーマンス、接続性、および容量の高度なスケーラビリティが可能になる。追加のパフォーマンスは、より多くのI/Oサーバ
136を水平方向に追加し、次いで、1つのZFSインスタンスあたりより少ない容量、および/または1つのI/Oサーバ136あたりより少ないZFSインスタンスを割り当てることによって、達成され得る。より高速のサーバを用いることで、パフォーマンスを垂直方向にスケーリングすることもできる。I/Oサーバ136内の利用可能なスロットを埋め、次いで追加のサーバを追加することによって、追加のホストポートを追加してもよい。追加のストレージアプライアンス120を追加し、新たなまたは既存のZFSインスタンスに新たな容量を割り当てることによって、追加の容量を達成することもできる。
【0030】
図2は、本開示のいくつかの実施形態による、
図1のストレージ環境を含むストレージ環境において実行され得る例示的なネットワークファイルシステム200のインスタンスを示す。例えば、ファイルシステム200は、非常に大きな容量(128ビット)、データ完全性、常に一貫性のあるオンディスクフォーマット、自己最適化性能、およびリアルタイムリモートレプリケーションを提供するOracle ZFSファイルシステム(「ZFS」)を含むことができる。他の方法の中でも、ZFSは、少なくとも別途のボリュームマネージャの必要性を排除することによって、従来のファイルシステムとは異なる。代わりに、ZFSファイルシステムは、ストレージデバイスの共通ストレージプールを共有し、ボリュームマネージャおよびファイルシステムの両方として機能する。したがって、ZFSには、物理ディスクおよびボリューム(それらの状態、ステータス、ボリュームへの論理配置を、それらに記憶されるすべてのファイルとともに含む)の両方に関する完全な知識がある。ファイルシステム容量要件が時間の経過とともに必要に応じて動的に増減するよう変化するにつれ、デバイスのプールに対する追加または削除を、基底のストレージプールを再分割する必要なく行うことができる。
【0031】
特定の実施形態では、システム200はオペレーティングシステムを介してアプリケーション202と対話することができる。オペレーティングシステムは、ファイルシステムと対話する機能を含むことができ、ファイルシステムはストレージプールとインターフェースする。オペレーティングシステムは典型的には、システムコールインターフェース208を介してファイルシステム200とインターフェースする。システムコールインターフェース208は、従来の、ファイルを読み取る、書き込む、開く、閉じるなどの動作、ならびにVFSアーキテクチャに特有のVNODE操作およびVFS操作を提供する。システムコールインターフェース208は、ファイルシステムとしてのZFSと対話するための主要インターフェースとして機能することができる。この層は、データ管理ユニット(DMU)218の間に存在し、そこに記憶されているファイルおよびディレクトリのファイルシステム抽象化を提示する。システムコールインターフェース208は、ファイルシステムインターフェースと基底のDMU218インターフェースとの間のギャップを橋渡しする役割を果たすことができる。
【0032】
システムコールインターフェース208のPOSIX層に加えて、ファイルシステム200のインターフェース層は、クラスタ/クラウドコンピューティングデバイス204と対話するための分散型ファイルシステムインターフェース210も提供することができる。例えば、サイズが小さなワークグループクラスタから大規模なマルチサイトクラスタまでの範囲にわたるコンピュータクラスタ用のファイルシステムを提供するために、Lustre(登録商標)インターフェースを提供してもよい。ボリュームエミュレータ212は、ブロック/キャラクタデバイスとして用いることができる論理ボリュームを作成するためのメカニズムも提供することができる。ボリュームエミュレータ212は、クライアントシステムがブロックとキャラクタとを区別することを可能にするだけでなく、クライアントシステムが所望のブロックサイズを指定することを可能にし、それによって「シンプロビジョニング」として知られるプロセスにおいて、より小さい疎なボリュームを作成することを可能にする。ボリュームエミュレータ212は外部デバイスへのrawアクセス206を提供する。
【0033】
インターフェース層の下には、トランザクショナルオブジェクト層がある。この層は、システムクラッシュ時に再生することができるデータセットごとのトランザクション履歴を記録するように構成されたインテントログ214を提供する。ZFSでは、インテントログ214は、ファイルシステムを変更するシステムコールのトランザクションレコードを、システムコールをリプレイすることができるよう十分な情報とともにメモリ内に保存する。これらは、DMU218がそれらをストレージプールにコミットし、それらが破棄され得るかまたはフラッシュされるまで、メモリに保存される。電源障害および/またはディスク障害が発生した場合、インテントログ214のトランザクションを再生して、ストレージプールを最新かつ一貫性のある状態に保つことができる。
【0034】
トランザクショナルオブジェクト層はまた、オブジェクト内で任意の{キー,値}関連付けをすることによってシステムコールインターフェース208のPOSIX層内にディレクトリを実現するために用いられ得る属性プロセッサ216を提供する。属性プロセッサ216は、DMU218の上に位置するモジュールを含むことができ、ZFS内で「ZAPオブジェクト」と呼ばれるオブジェクトに対して動作することができる。ZAPオブジェクトは、データセットについてのプロパティを記憶する、ファイルシステムオブジェクトをナビゲートする、および/またはストレージプールプロパティを記憶するのに用いることができる。ZAPオブジェクトには2つの形式:「マイクロザップ」オブジェクトと「ファットザップ」オブジェクトがあってもよい。マイクロザップオブジェクトは、ファットザップオブジェクトの軽量バージョンであってもよく、少数の属性エントリに対して単純かつ高速のルックアップメカニズムを提供してもよい。ファットザップオブジェクトは、より大きなディレクトリ、より長いキー、より長い値など、多数の属性を含むZAPオブジェクトに、より適している。
【0035】
トランザクショナルオブジェクト層はまた、DMUオブジェクトを階層的名前空間に集約するデータセットおよびスナップショット層220も提供し、オブジェクトセットのプロパティ間の関係を記述および管理するためのメカニズムを提供する。これにより、プロパティの継承、ならびにストレージプールでの割り当ておよび予約の強制実施が可能になる。DMUオブジェクトは、ZFSファイルシステムオブジェクト、クローンオブジェクト、CFSボリュームオブジェクト、およびスナップショットオブジェクトを含んでもよい。したがって、データおよびスナップショット層220は、スナップショットおよびクローンオブジェクトセットを管理することができる。スナップショットは、特定の時点におけるファイルシステム、クローン、および/またはボリュームの読み取り専用バージョンに対応し得る。クローンはスナップショットに源を発し、それらの初期の内容はそれらが源を発するスナップショットのそれと同じである。クローンはその起源を除いてファイルシステムと同一であってもよい。ZFSでは、スナップショットはシステム再起動後にわたって保持されるため、別途のストレージプールを用いる必要はない。代わりに、スナップショットは、それらが作成されたファイルシステムまたはボリュームと同じストレージプールから直接ディスク空間を消費する。スナップショットは、1つのアトミック表現として素早く再帰的に作成できる。スナップショットは、クローン化、バックアップ、ロールバックなどができる。通常、スナップショットは、ソフトウェアのインストールやシステムのアップグレードなどの危険なアクションが実行される前に、現在の安定したファイルシステムをバックアップするための高速で効率的な方法を提供する。
【0036】
DMU218は、ストレージプールによって提示されるフラットアドレス空間の上に構築されるトランザクショナルオブジェクトモデルを提示する。上述のモジュールは、オブジェクトセット、オブジェクト、およびトランザクションを介してDMU218と対話し、ここでオブジェクトは、データブロックのコレクションなど、ストレージプールからのストレージの一部である。DMU218を介した各トランザクションは、グループとして
ストレージプールにコミットされる一連の操作を含む。これは、ディスク上の一貫性がファイルシステム内で維持されるメカニズムである。別の言い方をすれば、DMU218はインターフェース層から命令を受け取り、それらをトランザクションバッチに変換する。データブロックを要求し、単一の読み取り/書き込み要求を送信するのではなく、DMU218は、これらを、ディスクアクティビティが発生する前に最適化することができるオブジェクトベースのトランザクションのバッチにまとめることができる。これが行われると、トランザクションのバッチはストレージプール層に渡され、要求されたデータブロックを取得/書き込みするために必要な生のI/Oトランザクションをスケジュールして集計する。以下に説明するように、これらのトランザクションはコピーオンライト(COW)ベースで書き込まれるため、トランザクションジャーナリングは不要である。
【0037】
ストレージプール層、または単に「ストレージプール」は、ストレージプールアロケータ(SPA)と呼ばれ得る。SPAは、ストレージプール設定を操作するためのパブリックインターフェースを提供する。これらのインターフェースは、様々な記憶媒体を作成、破棄、インポート、エクスポート、およびプールし、ストレージプールの名前空間を管理できる。いくつかの実施形態では、SPAは、SPAのためのメモリ管理のための中心点として機能する適応置換キャッシュ(ARC)222を含み得る。従来、ARCはキャッシュ管理のための基本的な最長未使用時間(LRU)オブジェクト置換アルゴリズムを提供する。ZFSでは、ARC222は、I/O作業負荷に基づいて調整することができる自己調整キャッシュを含む。さらに、ARC222は、DMU218によって用いられるデータ仮想アドレス(DVA)を定義する。いくつかの実施形態では、ARC222は、高いスループットを維持するためにメモリ圧力の結果としてキャッシュからメモリバッファを立ち退かせる能力を有する。
【0038】
SPAはまた、ARC222からのDVAを後述の各仮想デバイス(VDEV)226内の論理位置に変換するI/Oパイプライン224または「I/Oマネージャ」を含むことができる。I/Oパイプライン224は、アクティブVDEVにわたる動的ストライピング、圧縮、チェックサム機能、およびデータ冗長性を推進する。
図2には明示的に示されていないが、I/Oパイプライン224は、ストレージプールからデータを読み取りおよび/またはそこにデータを書き込むためにSPAによって用いられ得る他のモジュールを含み得る。例えば、I/Oパイプライン224は、圧縮モジュール、暗号化モジュール、チェックサムモジュール、およびメタスラブアロケータを含むことができるが、これらに限定されない。圧縮モジュールは、より大きい論理ブロックをより小さいセグメントに圧縮することができ、ここでセグメントは物理ディスク空間の領域である。暗号化モジュールは、不正アクセスを防止するために用いられ得る様々なデータ暗号化アルゴリズムを提供し得る。チェックサムモジュールは、以下により詳細に説明されるように、ストレージプール階層内でデータおよびメタデータについてチェックサムを計算することができる。チェックサムは、例えば、データが破損していないことを確認するために使用できる。いくつかの実施形態では、SPAは、メタスラブアロケータを用いて、ストレージプール内の記憶空間の割り当てを管理することができる。
【0039】
ZFSでは、ストレージプールはVDEVのコレクションで構成されてもよい。特定の実施形態では、ストレージプールの少なくとも一部は、自己記述型マークルツリー、すなわちデータとメタデータとの両方が論理ツリーのVDEVによって記憶される論理ツリーとして表すことができる。仮想デバイスには2つの種類がある。リーフVDEVと呼ばれる物理仮想デバイスと、内部VDEVと呼ばれる論理仮想デバイスである。物理VDEVは、ハードディスクまたはフラッシュドライブなどの書き込み可能メディアブロックデバイスを含み得る。論理VDEVは、物理VDEVを概念的にグループ化したものである。VDEVは、ツリー状に、物理VDEVが該ツリーのリーフとして存在する状態で、配置できる。ストレージプールには、ツリーのルートとなる「ルートVDEV」と呼ばれる特
別な論理VDEVがあってもよい。ルートVDEVの直接の子(物理的または論理的)はすべて「最上位」VDEVと呼ばれる。一般に、VDEVはデータのレプリケーション、ミラーリング、およびRAID-ZやRAID-Z2などのアーキテクチャを実現する。各リーフVDEVは、ファイルシステムによって提供されるデータを実際に記憶する1以上の物理ストレージデバイス228を表す。
【0040】
いくつかの実施形態では、ファイルシステム200は、データとメタデータとの両方がオブジェクトとして記憶されるオブジェクトベースのファイルシステムを含み得る。より具体的には、ファイルシステム200は、データと対応するメタデータとの両方をストレージプールに記憶する機能を含み得る。特定の操作(すなわち、トランザクション)を実行する要求は、オペレーティングシステムからシステムコールインターフェース208を介してDMU218に転送され、DMU218は、オブジェクトに対して操作を実行する要求を、ストレージプール内での物理位置で読み取りまたは書き込み操作を実行する要求(つまり、I/O要求)に、直接変換する。SPAはDMU218から要求を受信し、COWプロシージャを用いてブロックをストレージプールに書き込む。COWトランザクションはファイルへのデータ書き込み要求に対して実行されてもよい。書き込み操作で既存のブロックを上書きするのではなく、書き込み要求により、修正されたデータに対して新たなセグメントが割り当てされる。したがって、取得されたデータブロックおよび対応するメタデータは、データブロックおよびメタデータの修正バージョンがコミットされるまで、決して上書きされない。したがって、DMU218は、すべての修正されたデータブロックをストレージプール内の未使用セグメントに書き込み、その後、対応するブロックポインタをストレージプール内の未使用セグメントに書き込む。COWトランザクションを完了するために、SPAは修正されたデータブロックを参照するようI/O要求を発行する。
【0041】
図3A~
図3Dは、本開示のいくつかの実施形態による、ファイルシステム200などのファイルシステムのためのCOWプロセスを示す。例えば、上記のZFSシステムは、ファイルシステム内のすべてのブロックポインタが、ターゲットブロックの読み取り時に検証される当該ターゲットブロックの256ビットチェックサムを含み得る、COWトランザクショナルモデルを用いる。上述したように、アクティブなデータを含むブロックはその場で上書きされない。代わりに、新たなブロックが割り当てられ、修正されたデータがそれに書き込まれ、それを参照しているメタデータブロックが単純に読み取され、再割り当てされ、そして再書き込みされる。新たなデータが書き込まれるとき、古いデータを含むブロックは保持され、ファイルシステムのスナップショットバージョンを維持できる。スナップショット内のすべてのデータはすでに記憶されているため、スナップショットは迅速に作成できる。変更されていないデータはファイルシステムおよびそのスナップショットの間で共有されるため、スナップショットは空間効率が非常に高くもある。
【0042】
図3Aは、いくつかの実施形態による、1以上のファイルに対応するデータおよびメタデータのファイルシステムストレージの論理ツリー300としての簡易スナップショットを示す。論理ツリー300、および本明細書で説明されている他の論理ツリーは、データおよびメタデータが論理ツリー300のブロックとして記憶される自己記述型のマークルツリーであり得る。ルートブロック302は、論理ツリー300のルート、すなわち「ユーバーブロック(uberblock)」を表してもよい。論理ツリー300は、ルート302の
各子ノード304、306を通ってナビゲートすることによってファイルおよびディレクトリを通ってトラバースすることができる。各非リーフノードは、ノード308、310、312、および314などのディレクトリまたはファイルを表す。いくつかの実施形態では、各非リーフノードは、その子ノードの値のハッシュを割り当てられてもよい。各リーフノード316、318、320、322は、ファイルのデータブロックを表す。
【0043】
図3Bは、書き込み操作の初期段階後の論理ツリー300-1のスナップショットを示す。この例では、ノード324および326によって表されるデータブロックはファイルシステム200によって書き込まれている。ノード316および318内のデータを上書きする代わりに、新たなデータブロックがノード324および326に割り当てられる。したがって、この操作の後、ノード316および318内の古いデータは、ノード324および326内の新たなデータとともにメモリ内に存続する。
【0044】
図3Cは、書き込み操作が続くときの論理ツリー300-2のスナップショットを示す。ノード324および326において新たに書き込まれたデータブロックを参照するために、ファイルシステム200は、古いノード316および318を参照するノード308および310を判断する。新たなノード328および330が、ノード324および326内の新たなデータブロックを参照するために割り当てられる。変更されたノードを参照する各ノードが新たなノードを指すように再割り当てされるまで、同じプロセスがファイルシステム階層を通して上方向に再帰的に繰り返される。
【0045】
ポインタブロックが階層内の新たなノードに割り当てられると、各ノードのアドレスポインタは、メモリ内の割り当てられた子の新たな位置を指すように更新される。さらに、各データブロックは、アドレスポインタによって参照されるデータブロックによって計算されるチェックサムを含む。例えば、ノード328内のチェックサムは、ノード324内のデータブロックを用いて計算される。この構成は、チェックサムが、それが計算されるデータブロックとは別に記憶されることを意味する。これにより、新たなデータが書き込まれることのない、いわゆる「ゴースト書き込み」を防ぐことができるが、データブロックとともに記憶されるチェックサムは、そのブロックが正しかったことを示すであろう。論理ツリー300の完全性は、論理ツリー300をトラバースし、子ノードに基づいて各レベルでチェックサムを計算することによって、迅速にチェックすることができる。
【0046】
書き込み操作を確定させるために、ルート302を再割り当てして更新することができる。
図3Dは、書き込み操作の終わりにおける論理ツリー300-3のスナップショットを示す。ルート302が更新される準備ができると、新たに割り当てられた子ノード332および334を指すように、新たなユーバーブロックルート336を割り当てて初期化することができる。次いで、ルート336は、論理ツリー300-3の状態を確定するために、アトミック操作において論理ツリー300-3のルートにすることができる。
【0047】
本明細書で説明されている実施形態は、
図1~
図3で上述されているシステムで実施され得る。例えば、システムは、
図1の様々なサーバ、ストレージアプライアンス、および/またはスイッチング回路の1以上のプロセッサを備えることができる。1以上のプロセッサにファイルシステムの機能に影響を及ぼす様々な動作を実行させる命令をシステムの1以上のメモリデバイスに記憶することができる。様々な方法のステップを、
図1~
図2のシステムのプロセッサ、メモリデバイス、インターフェース、および/または回路によって実行することができる。
【0048】
ここで
図4を参照して、
図4は、本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステム400の一例を示すハイレベル図である。ハイブリッドクラウドストレージシステム400は、ZFSファイルシステムなどのネットワークファイルシステムを、ファイルシステムデータサービスを含むファイルシステムの機能がファイルシステムから遠隔のクラウドオブジェクトストアに重層されるクラウド対応ファイルシステムに変換することができる。示される図のように、ハイブリッドクラウドストレージシステム400は、ネットワークファイルシステム200(本明細書では「ローカルファイルシステム200」とも呼ばれる)を含むことができる。ローカルファイルシステム200は、クラウドオブジェクトストレージ404に通信可能に結合することができる。いくつ
かの実施形態では、クラウドオブジェクトストレージ404は、
図2に示されるクラスタ/クラウド204に対応し得る。ローカルファイルシステム200は、クラウドインターフェースアプライアンス402を介してクラウドオブジェクトストレージ404に通信可能に結合することができる。クラウドインターフェースアプライアンス402は、クラウドオブジェクトストア404のためのアクセスポイントとしてローカルファイルシステム200によって用いられてもよい。
【0049】
ハイブリッドクラウドストレージシステム400は、クラウドオブジェクトストレージの従来の制限を克服するための解決策を提供する。従来のクラウドオブジェクトプロトコルは、制限されたデータ/オブジェクトアクセスセマンティクスに制限されている。クラウドオブジェクトストアは、従来、インターフェースおよびプリミティブが制限されており、POSIX準拠ではない。例えば、いったんオブジェクトが書き込まれると、そのオブジェクトはそれ以降は修正できず、それは、削除され、新たに作成したオブジェクトに置き換えられるだけである。別の例として、従来のクラウドオブジェクトストレージは、名前空間が単純化され最上位のコンテナのみに限定されるように、名前空間の制限を有する。しかしながら、ハイブリッドクラウドストレージシステム400は、クラウドオブジェクトストア404との間でデータを移行できるだけでなく、クラウドベースのストレージを提供するようクラウドオブジェクトストレージへのクラウドオブジェクトインターフェース上にローカルファイルシステム200のファイルシステム機能を重層することもできる。
【0050】
ローカルファイルシステム200は、POSIXインターフェースおよびセマンティクス用に構成することができる。例えば、ローカルファイルシステム200は、ファイルとしてのデータへのアクセスをユーザに提供し、ファイルを書き換えることなくファイルの内容を修正することを可能にする。ローカルファイルシステム200は、ZFSファイルシステムに典型的であるように、名前階層におけるデータの編成も提供することもできる。ZFSファイルシステムのすべての機能は、ローカルファイルシステム200のユーザに利用可能であり得る。クラウドインターフェースアプライアンス402は、クラウドオブジェクトプロトコルの上にファイルシステムセマンティクスを重層することを可能にし(例えば、名前空間を構築する、ファイルを作成する、ディレクトリを作成するなどの能力を提供し)、そのような能力をクラウドオブジェクトストレージ404との間で移行されるデータに関して拡張してしてもよい。クラウドインターフェースアプライアンス402は、プラグアンドプレイオブジェクトストレージソリューションを容易にすることにより、ZFSファイルシステムデータサービスをサポートしながら、ローカルファイルシステム200を改善することができる。
【0051】
クラウドインターフェースアプライアンス402は、オブジェクトAPI(アプリケーションプログラミングインターフェース)を提供するように構成されてもよい。いくつかの実施形態では、クラウドインターフェースアプライアンス402は、いくつかのAPI変換プロファイルを用いるように構成され得る。特定の実施形態によれば、API変換プロファイルは、クラウドストレージと対話するように本来設計されていない可能性があるモジュールおよび機能(例えばデータサービスおよびモジュール)、POSIXインターフェースおよびセマンティクス、ならびに他のコンポーネントを統合することができる。API変換プロファイルは、いくつかの実施形態では、クラウドデータストア404との対話を可能にするために(例えば、APIコールによって)ファイルシステム200のプロトコル、フォーマット、およびルーチンを変換することができる。そのような統合のための情報は、クラウドインターフェースアプライアンス402と同じ場所に配置され得るかまたはそうでなければクラウドインターフェースアプライアンス402に通信可能に結合され得るAPI変換データストアに記憶され得る。クラウドインターフェースアプライアンス402は、その情報を利用して、POSIXインターフェースおよびセマンティク
スを密接に統合して、セマンティクスを維持しながら、クラウドデータストア404とインターフェースをとってもよい。
【0052】
ハイブリッドクラウドストレージシステム400は、ローカルファイルシステム200がクラウドオブジェクトストレージ404を「ドライブ」として用いることを可能にし得る。様々なインスタンスにおいて、ファイル410は、メタデータオブジェクトとともにデータオブジェクトとして、および/または関連するメタデータとともにデータブロックとして、記憶されてもよい。クラウドインターフェースアプライアンス402は、ローカルファイルシステム200との間でファイル410を送受信することができる。様々な実施形態において、ローカルファイルシステム200は、NFS(ネットワークファイルシステム)プロトコル、SMB(サーバメッセージブロックプロトコル)などを介してファイル410を送受信することができる。いくつかの実施形態では、クラウドインターフェースアプライアンス402は、ファイル410をオブジェクト412に変換することができる。ファイル410の変換は、いずれもファイル410に対応し得る、データブロックおよび関連するメタデータおよび/またはメタデータオブジェクトに関連するデータオブジェクトを変換することを含むことができる。いくつかの実施形態では、変換は、クラウドインターフェースアプライアンス402がいくつかのAPI変換プロファイルを用いてAPI変換を実行することを含み得る。いくつかの実施形態によれば、変換は、クラウドインターフェースアプライアンス402がファイル410、オブジェクト、および/またはブロックからデータおよび/またはメタデータを抽出することを含み得る。クラウドインターフェースアプライアンス402は、抽出されたデータを少なくとも部分的に用いることによって、ファイル410、オブジェクト、および/またはブロックをクラウドストレージオブジェクトに変換することができる。いくつかの実施形態では、クラウドインターフェースアプライアンス402は、抽出データが、クラウドオブジェクトストア404に向けられるput要求に埋め込まれた、対応するクラウドストレージオブジェクトを作成することができる。同様に、クラウドデータストア404にインターフェースするためにクラウドインターフェースアプライアンス402が行う変換のいずれかを用いて、クラウドインターフェースアプライアンス402は、いくつかの実施形態では、ローカルファイルシステム200のローカルコンポーネントとインターフェースするために、変換プロセスを逆転し得る。
【0053】
クラウドインターフェースアプライアンス402は、クラウドオブジェクトストレージ404との間でオブジェクト412を転送および受信することができる。いくつかの実施形態では、クラウドインターフェースアプライアンス402は、HTTPSなどを介してオブジェクト412を送受信することができる。いくつかの実施形態では、クラウドインターフェースアプライアンス402は、ローカルファイルシステム200と同じ場所に配置されてもよい。他の実施形態では、クラウドインターフェースアプライアンス402は、少なくともなんらかの機器がクラウドオブジェクトストア404を容易にする状態で、または他の何らかの通信可能に結合されたサイトでなど、ローカルファイルシステム200から離れて配置され得る。
【0054】
本明細書でさらに開示されるように、ローカルファイルシステム200内のファイルは、「ディスクブロック」、つまりファイルに対応するデータオブジェクトおよびメタデータが論理ツリー300(例えば、データおよびメタデータがブロックとして記憶される自己記述型のマークル木)として記憶される仮想記憶ブロックとして記憶され得る。クラウドインターフェースアプライアンス402は、データのツリー300内の各論理ブロックからクラウドオブジェクトストア404内のクラウドオブジェクト414への直接マッピング406を作成することができる。いくつかの実施形態は、1対1のブロック対オブジェクトマッピングを採用し得る。追加的または代替的に、他の実施形態は、例えば複数のブロックを1つのクラウドオブジェクトにマッピングするために、クラウドオブジェクト
に対するブロックの、他の任意の好適な比率を用いることができる。そのような実施形態のいくつかのインスタンスでは、ブロックの論理ツリー全体を単一のクラウドオブジェクトにマッピングすることができる。他のインスタンスでは、ブロックの論理ツリーの一部のみが単一のクラウドオブジェクトにマッピングされ得る。
【0055】
いくつかの実施形態では、ブロックがクラウドオブジェクトに変換されると、アドレスポインタが更新される。ブロックが1対1のブロック対オブジェクト変換方式でクラウドオブジェクトに変換されるとき、階層内の非リーフクラウドオブジェクトがクラウドオブジェクトストア404内の子クラウドオブジェクトを指すようにアドレスポインタを更新することができる。例として、アドレスポインタは、子クラウドオブジェクトのオブジェクト名およびパス指定に対応することができ、それは、オブジェクト名、バケット指定などのようなパラメータを含み得る。したがって、いくつかの実施形態は、論理ツリー300のブロックを論理ツリー300Aのクラウドオブジェクトに変換することができる。いくつかの実施形態では、そのような変換は、クラウドオブジェクトのアドレスポインタを利用してクラウドインターフェースアプライアンス402がクラウドオブジェクトの論理ツリー300Aをトラバースすることを可能にし得る。
【0056】
いくつかの実施形態では、論理ツリー300の一部が1つのクラウドオブジェクトに変換されるようにブロックが複数対1のブロック対オブジェクト変換方式でクラウドオブジェクトに変換されると、論理ツリー300Aを構成するクラウドオブジェクトのアドレスポインタは、階層内の非リーフクラウドオブジェクトがクラウドオブジェクトストア404内の子クラウドオブジェクトを指すように、同様に、ただしより低い粒度に更新されてもよい。そのような変換は、1対1のブロック対オブジェクト変換方式によって容易されるトラバーサルよりも粒度は低いが、より速い態様で、クラウドインターフェースアプライアンス402がクラウドオブジェクトのアドレスポインタを利用してクラウドオブジェクトの論理ツリー300Aをトラバースできるようにしてもよい。さらに、いくつかの実施形態では、チェックサムを変換プロセスとともに更新してもよい。個々のクラウドオブジェクトのチェックサムを更新し、親クラウドオブジェクトに別々に保存することができる。複数対1のブロック対オブジェクト変換方式を採用する変換では、ブロックのセットに対応するクラウドオブジェクトに対して単一のチェックサムを計算することができる。
【0057】
したがって、マッピング406の実現により、1以上のネットワークを介したクラウドオブジェクトストア404への通信が可能になり、クラウドオブジェクトストア404とのインターフェースは、ブロックベースではなくオブジェクトベースであってもよい。本明細書でさらに開示されるように、クラウドインターフェースアプライアンス402がローカルファイルシステム200とクラウドオブジェクトストア404との間にある状態で、ハイブリッドクラウドストレージシステム400は、従来のZFSファイルシステムとは異なる特性および障害モードを有し得る。クラウドインターフェースアプライアンス402は、クライアント側でローカルファイルシステム202のファイルシステムインターフェースを変換することができ、データを読み書きするためにクラウドオブジェクトストア404にオブジェクトプロトコルを介して調整することができる。クラウドインターフェースアプライアンス402を介して、クラウドオブジェクト414は、NFS、SMBなどを介してローカルファイルシステム200によってアクセス可能なままであり得る。
【0058】
論理ブロックとしてのクラウドオブジェクト414のマッピング406を用いて、クラウドオブジェクト414のコレクションを、自己完結型コレクションとしてZFSストレージプールをホストするドライブを形成するようにグループ化してもよい。ドライブの内容は、割り当てられた論理ブロックに対してのみクラウドオブジェクトが作成されるように、弾力性があってもよい。いくつかの実施形態では、クラウドインターフェースアプライアンス402は、(例えば、異なるデータ型に対して)可変オブジェクトサイズを割り
当てて、より大きなストレージの柔軟性を可能にする能力を有してもよい。データは特定のバイトサイズに限定される必要はない。必要に応じてメタデータを修正することによってストレージサイズを拡張してもよい。いくつかの実施形態では、クラウドベースのプールを任意のサーバ上にインポートしてもよい。インポートされると、クラウドベースのプールは、すべてのZFSサービスがクラウドベースのプールに対してサポートされるローカルストレージとして現れ得る。クラウドベースのプールは、新たなタイプのストレージプールとして示されてもよい。それでも、ユーザの観点からは、クラウドベースのプールからのデータは、ネイティブプールと区別がつかないように見えてもよい。
【0059】
図5は、本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステム400の例示的なネットワークファイルシステム200-1のインスタンスを示す。ファイルシステム200-1はファイルシステム200に対応し得るが、クラウドデバイス管理はZFS制御スタックに直接統合される。ファイルシステム200に関して開示されたものを超えて、ファイルシステム200-1は、ファイルシステム200-1のための記憶媒体としてクラウドオブジェクトストア404の活用を容易にするクラウドインターフェースデバイス502を含み得る。クラウドインターフェースデバイス502は、少なくとも部分的にクラウドストレージをデバイス抽象化にマッピングすることによって、クラウドドライブを容易にすることができる。
【0060】
いくつかの実施形態では、クラウドインターフェースデバイス502は、ZFSファイルシステムアーキテクチャ内の別のVDEVタイプのデバイスドライバインターフェースの1以上のVDEVに対応し得る。ZFSは、クラウドインターフェースデバイス502と直接通信することができる。クラウドインターフェースデバイス502は、ファイルシステム200-1のドライバ層の真上の仮想デバイス層にあってもよい。クラウドインターフェースデバイス502のいくつかの実施形態は、ZFSアーキテクチャ内のデバイスドライバインターフェースの抽象化に対応し得る。ファイルシステム200-1の他のコンポーネントは、クラウドインターフェースデバイス502と、あたかもそれがVDEV226などの別のデバイスタイプの別のVDEVであるかのように、通信することができる。他のVDEV226よりもクラウドインターフェースデバイス502を介して、より多くの情報を通過させることを可能にするために、クラウドインターフェースデバイス502に関連するインターフェースは、より多くの情報をI/Oパイプライン224およびクラウドインターフェースデバイス502を通してクラウドオブジェクトデータストア404に渡すために、より広くてもよい。
【0061】
いくつかの実施形態では、クラウドインターフェースデバイス502は、クライアント側でファイルシステムインターフェースを変換してもよい。いくつかの実施形態では、完全なPOSIXファイルシステムセマンティクスを提供するために、クラウドインターフェースデバイス502は、ファイルシステムインターフェース要求を、クラウドオブジェクトストア404に向けられたオブジェクトインターフェース要求に変換してもよい。いくつかの実施形態では、クラウドインターフェースデバイス502は、データを読み書きするために、オブジェクトプロトコルを介してクラウドオブジェクトストア404に通信することが可能であり得る。
【0062】
図6は、本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステム400-1のクラウドインターフェースアプライアンス402-1の追加の局面を示す図である。図示された例に示されるように、クラウドインターフェースアプライアンス402のいくつかの実施形態は、仮想ストレージプール602およびクラウドインターフェースデーモン604を含み得る。仮想ストレージプール602はファイルシステム200-1のカーネルにあり得、クラウドインターフェースデーモン604はファイルシステム200-1のユーザ空間にあり得る。様々な実施形態において、クラウドインターフェー
スデーモン604は、
図5に示されるアプリケーション202および/またはクラスタ/クラウド204のクラウドインターフェースコンポーネントに対応し得る。
【0063】
いくつかの実施形態では、仮想ストレージプール602は、少なくとも1つのクラウドインターフェースデバイス502、インテントログ214-2、およびキャッシュ222-1を含み得る。インテントログ214-2およびキャッシュ222-1は、
図1および
図2に関して上に、および
図7に関して以下に説明される。クラウドインターフェースデバイス502は、マッピング406に少なくとも部分的に基づいてクラウドオブジェクトデータストア404に関する操作を調整するようクラウドインターフェースデーモン604と対話することができる。クラウドインターフェースデーモン604は、クラウドオブジェクトデータストア404とインターフェースをとるためのクラウドクライアントインターフェース608を含み得る。いくつかの実装形態では、クラウドクライアントインターフェース608は、クラウドオブジェクトデータストア404とのSwift/S3互換性を提供するエンドポイントを含み得る。クラウドクライアントインターフェース608の動作は、クラウドオブジェクトデータストア404への読み書きアクセスを容易にするために、全データオブジェクト412をgetおよびputすることに少なくとも部分的に基づいてもよい。
【0064】
図4および
図5に戻って、いくつかの実施形態による動作においては、1以上のファイルに関して1以上のトランザクションを実行する要求は、ファイルシステム200-1のアプリケーション層でアプリケーション202から、ファイルシステム200-1のインターフェース層のシステムコールインターフェース208を通じて受信され得る。要求はPOSFXに準拠していてもよく、クラウドオブジェクトストア404に記憶される論理ツリー300のクラウドベースのインスタンス化300Aに関して1以上の操作を実行するために、ファイルシステム200-1の1以上のコンポーネントによって1以上のオブジェクトインターフェース要求に変換され得る。例えば、いくつかの実施形態では、クラウドインターフェースアプライアンス402は、POSFX準拠の要求、またはPOSFX準拠の要求によって引き起こされた中間要求を、対応するオブジェクトインターフェース要求に変換することができる。いくつかの実施形態では、DMU218は、POSFX準拠の要求をI/O操作を実行するためのI/O要求に変換してもよく、クラウドインターフェースアプライアンス402は、I/O要求を、対応するオブジェクトインターフェース要求に変換し、マッピング406を用いてオブジェクトインターフェース要求を調整してもよい。
【0065】
いくつかのインスタンスでは、トランザクションは、ファイルをローカルに記憶させるための操作に対応し得る。いくつかのインスタンスでは、ファイルシステム200-1は、データオブジェクトおよび対応するメタデータを、1以上のVDEV226および1以上の物理ストレージデバイス228によって提供されるシステムストレージプール416に記憶することができる。データオブジェクトは、1以上のファイルに対応し得る。上で開示したように、1以上のファイルに対応するデータオブジェクトおよびメタデータは、論理ツリー300として記憶することができる。したがって、論理ツリー300の記憶はシステムストレージプール416内にローカルに記憶することができる。
【0066】
いくつかの実施形態によるさらなる操作では、ファイルシステム200-1は、論理ツリー300のデータオブジェクトおよび対応するメタデータをクラウドオブジェクトストア404に記憶させることができる。いくつかの実施形態では論理ツリー300はクラウドストレージに移行される前に最初にローカルストレージプールに記憶され得るが、他の実施形態では論理ツリー300はクラウドオブジェクトストア404に記憶される前にローカルストレージプールに記憶されなくてもよい。例えば、いくつかの実施形態は、論理ツリー300の少なくとも一部をキャッシュ内に作成し、次いでそれをクラウドオブジェ
クトストア404に移行することができる。したがって、様々な実施形態が可能であることを理解されたい。
【0067】
論理ツリー300のデータオブジェクトおよび対応するメタデータをクラウドオブジェクトストア404に記憶するために、クラウドインターフェースデバイス502は、論理ツリー300内の各論理ブロックからクラウドオブジェクトストア404内のそれぞれのクラウドオブジェクト414へのマッピング406を作成することができる。いくつかの実施形態では、DMU218は、システムストレージプール416から(例えばローカルプールのRAIDZまたはRAID2から)データを読み取り、そのデータを、マッピング406を作成するための基礎としてクラウドインターフェースデバイス502に与えることができる。いくつかの実施形態では、クラウドインターフェースデバイス502は、別のVDEV226と直接的または間接的に通信して、マッピング406の基礎としてデータを読み取ることができる。いくつかの実施形態では、マッピング406は、オブジェクトを、物理ドライブ内に表されるブロックに直接マッピングすることができる。マッピング406は、ファイル部分をオブジェクトにマッピングするよりも精密にすることができ、それはより下位でマッピングしてもよい。したがって、マッピング406は、オブジェクトごとのマッピング406であり得る。マッピング406は、論理ツリー300Aによって示されるように、論理ツリー300がクラウドオブジェクトストア404内に表されるように、仮想ストレージブロックをクラウドオブジェクトストア404内のオブジェクトにマッピングすることができる。ローカルファイルシステム200-1がクラウドオブジェクトストア404内のデータオブジェクト416とインターフェースするとき、論理ツリー300Aは、ローカルファイルシステム200-1が通信することができる新たなデバイスタイプに準拠する。
【0068】
マッピング406は、I/O操作ごとに、またはクラウドオブジェクトストア404への書き込み操作とともにのみ、更新されてもよい。いくつかの実施形態では、マッピング406は、すべてのクラウドオブジェクト414をインデックス付けするオブジェクトディレクトリを含み得る。クラウドオブジェクト状態は、オブジェクトごとにインデックス付けされ得る、インデックス、テーブル、インデックス編成されたテーブルなどに保持され得る。いくつかの実施形態では、マッピング406は、クラウドオブジェクト414のうちのいくつかのみをインデックス付けするオブジェクトディレクトリを含み得る。例えば、そのような実施形態は、ユーバーブロックに対応するクラウドオブジェクト414のみをインデックス付けすることができる。いくつかの実施形態では、各リーフパスに対する各オブジェクトについてのクラウドオブジェクト状態がインデックス付けされ得る。いくつかの実施形態では、オブジェクトディレクトリは、オブジェクト名およびパス指定に対応し得るアドレスポインタによってクラウドオブジェクト414を参照することができる。いくつかの実施形態では、オブジェクトディレクトリはURLによってクラウドオブジェクト414を参照することができる。
【0069】
マッピング406でインデックス付けされたクラウドオブジェクト状態は、オブジェクト要求をルーティングするために用いられてもよい。インデックスを利用して、クラウドインターフェースデバイス502は、少なくとも部分的にユーバーブロックに基づいてクラウドオブジェクトを要求することができる。第1の方法によれば、そのような要求は、論理ツリー300A全体が要求に応答して転送されるクラウドオブジェクトのセットによって表されるように、特定のユーバーブロックに関連するクラウドオブジェクトのセットを要求することを伴い得る。第2の方法によれば、そのような要求は、所望の1以上のクラウドオブジェクトがクラウドオブジェクトストア404から読み取られるまで論理ツリー300A全体を反復的にトラバースするために、特定のユーバーブロックに関連するクラウドオブジェクトのサブセットに対する反復要求を必要とし得る。特定の実施形態では、クラウドインターフェースデバイス502は、様々な論理ツリー300Aを表すクラウ
ドオブジェクトのサイズに少なくとも部分的に基づいて、2つの方法のうちの一方を選択的に用いることができる。例えば、クラウドインターフェースデバイス502は、クラウドオブジェクトのサイズが集約サイズの閾値よりも小さいときには1つの方法を利用し、クラウドオブジェクトのサイズが集約サイズの閾値を満たすまたは超えるときには他の方法に移行することができる。
【0070】
いくつかの実施形態は、オブジェクトディレクトリがオブジェクトごとにクラウドオブジェクトにインデックスを付け、クラウドレベルでツリーのトラバーサルなしにクラウドオブジェクトを直接要求するのに用いられることができる、別の方法を採用することができる。いくつかの実施形態は、論理ツリー300Aのメタデータのローカルスナップショットを保持し得る。そのような実施形態は、ローカルスナップショットを利用して、クラウドオブジェクトを直接的または間接的に要求することができる。さらに、いくつかの実施形態は、論理ツリー300Aに対するチェックサムをオブジェクトディレクトリまたはローカルスナップショットに保持することができ、このチェックサムは、クラウドデータストア404から取得されたクラウドオブジェクトを検証するために用いることができる。
【0071】
したがって、ファイルシステム200-1は、データのツリーを維持し、そのツリーをクラウドオブジェクトストア404にマッピングすることができる。ツリー300Aの名前空間は、ツリー300Aのノード内に記憶されるメタデータに対応し得る。ファイルシステム200-1は、階層ツリー表現を用い続けてもよいが、データを記憶する方法として、階層ツリー表現をクラウドオブジェクトストアにマッピングしてもよい。
【0072】
再び
図6を参照して、クラウドオブジェクトストア404に関してI/O操作を実行するために、クラウドインターフェースデバイス502はクラウドインターフェースデーモン604に要求を送信することができる。例えば、いくつかの実装形態では、クラウドインターフェースデバイス502は、ファイルシステム200-1のトランザクショナルオブジェクト層およびインターフェース層を介してクラウドインターフェースデーモン604に要求を送信することができる。クラウドインターフェースデバイス502によって送信される要求は、アプリケーション202を介して受信されるPOSIX準拠の要求に少なくとも部分的に基づいてもよく、および/または(例えば、POSIX準拠要求に応答して)DMU218によって作成されるI/O要求に少なくとも部分的に基づいてもよく、それを、クラウドインターフェースデバイス502はクラウドインターフェースデーモン604に対する要求に変換してもよい。
【0073】
いくつかの実施形態では、クラウドインターフェースデバイス502によってクラウドインターフェースデーモン604に送信される要求は、クラウドクライアントインターフェース608のためにget要求およびput要求に変換され得る。いくつかの実施形態では、クラウドインターフェースデバイス502によって送信される要求は、get要求およびput要求であり得;他の実施形態では、クラウドインターフェースデーモン604は、クラウドインターフェースデバイス502によって送信された要求をget要求およびput要求に変換することができる。いずれにせよ、クラウドインターフェースデバイス502によって送信された要求に応答して、クラウドインターフェースデーモン604は、1以上のネットワークを介してオブジェクトプロトコルを介して、クラウドオブジェクトストア404と通信して、データオブジェクト414に関して、対応するI/O操作を実行することができる。
【0074】
例えば、クラウドオブジェクトストア404への通信は、マッピング406に少なくとも部分的に基づいて、クラウドオブジェクトストア404における論理ツリー300Aのデータオブジェクトおよび対応するメタデータの記憶を指定することを含むことができる
。いくつかの実施形態では、通信は、例えば異なるデータ型に対して異なるオブジェクトサイズを指定することができる。したがって、クラウドインターフェースアプライアンス402は、1つのデータ型であると識別される特定のデータオブジェクトを記憶するために特定のオブジェクトサイズを指定し、異なるデータ型であると識別される他のデータオブジェクトを記憶するために異なるオブジェクトサイズを指定し得る。
【0075】
図7は、本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステム400のためのCOWプロセスのいくつかの特徴に向けられた例示的な方法700を示すブロック図である。特定の実施形態によれば、方法700は、ブロック702によって示されるように開始し得る。しかしながら、本開示の教示は様々な構成で実施することができる。したがって、方法700および/または本明細書に開示された他の方法を含む特定のステップの順序は、任意の適切な態様でシャッフルまたは組み合わされてもよく、選択される実現例に依存してもよい。さらに、以下のステップは説明のために分離され得るが、特定のステップは同時または実質的に同時に実行することができることを理解されたい。
【0076】
ブロック702によって示されるように、特定の操作(すなわち、トランザクション)を実行するためのPOSIX準拠の要求が、アプリケーション202から受け取られ得る。そのような操作は、データの書き込みおよび/または修正に対応し得る。ブロック704によって示されるように、POSIX準拠の要求は、オペレーティングシステムからシステムコールインターフェース208を介してDMU218に転送され得る。様々な実施形態においては、DMU218を介して行われるトランザクションは、システムストレージプール416およびクラウドオブジェクトストア404の一方または両方にグループとしてコミットされる一連の操作を含み得る。これらのトランザクションはCOWベースで書かれ得る。
【0077】
ブロック706によって示されるように、DMU218は、データオブジェクトに対する操作を実行するための要求を、システムストレージプール416および/またはクラウドオブジェクトストア404内の物理的位置に向けられる書き込み操作を実行するための要求(すなわちI/O要求)に直接変換し得る。いくつかのモードでは、最初に、ローカルに記憶されたデータオブジェクトに対して操作が実行され、次にDMU218が特定の変更を指示することによって、またはDMU218がクラウドインターフェースアプライアンス402に指示して、直接的または間接的に他のVDEV226で変更を読み取ることによって、データオブジェクトに対する変更が対応するクラウドに記憶されるデータオブジェクトに伝播され得る。他のモードでは、操作は、ローカルに記憶されたデータオブジェクトおよび対応するクラウドに記憶されたデータオブジェクトに対して同時または実質的に同時に実行されてもよい。さらに他のモードでは、操作はクラウドに記憶されたデータオブジェクトに対してのみ実行されてもよい。例えば、いくつかの実装形態は、ローカルツリー300を有さず、クラウドベースのバージョンの論理ツリー300Aのみを有し得る。様々な実施形態は、1以上のモードのユーザ選択を可能にするように構成され得る。
【0078】
ブロック708によって示されるように、SPAはDMU218からI/O要求を受け取り得る。そして、要求に応答して、SPAは、COWプロシージャを用いてシステムストレージプール416および/またはクラウドオブジェクトストア404へのデータオブジェクトの書き込みを開始し得る。ブロック710によって示されるように、データオブジェクトの書き込みが、クラウドオブジェクトストア404へのデータオブジェクトの書き込みの前に、またはそれと同時に、ローカルに記憶されたデータオブジェクトに対して実行されるモードでは、(例えば、
図3A~
図3Dを考慮して)上に開示されたCOWプロシージャはシステムストレージプール416に関して進み得る。
【0079】
ブロック712によって示されるように、クラウドインターフェースアプライアンス402は、I/O要求を受信し、論理ツリー300Aに対する増分修正を識別し得る。増分修正は、書き込み要求を実行するためにCOWプロセスから生じる新たなツリー部分に対応し得る。クラウドインターフェースアプライアンス402は、I/O要求を対応するオブジェクトインターフェース要求に変換し得る。I/O要求から、またはローカルに記憶されたデータオブジェクトに対する変更の読み取りから、修正されたデータを有するので、クラウドインターフェースデバイス502は、クラウドオブジェクトストア404内のクラウドストレージオブジェクト414のマッピング406を用いてオブジェクトインターフェース要求を調整し得る。
【0080】
例えば、いくつかの実施形態では、増分修正は、論理ツリー300への変更を反映するためにローカルに記憶されるデータオブジェクトへの変更に少なくとも部分的に基づいて判断することができる。いくつかのインスタンスでは、クラウドインターフェースアプライアンス402は、論理ツリー300または少なくともそれに対する変更を読み取って、増分修正を判断することができる。そのようなデータは、DMU218またはミラーVDEVなどの、ファイルシステムの別のコンポーネントによって、クラウドインターフェースアプライアンス402に渡されてもよい。いくつかの実施形態では、増分修正をクラウドインターフェースアプライアンス402に転送してもよい。
【0081】
しかしながら、いくつかの実施形態では、クラウドインターフェースアプライアンス402は、COW方法論を論理ツリー300のコピーもしくはスナップショットおよび/または論理ツリー300Aのスナップショットに適用することに少なくとも部分的に基づいて、増分修正を判断することができる。クラウドインターフェースアプライアンス402が論理ツリー300Aのスナップショットを用いる実施形態では、スナップショットはマッピング406に保持されるか、そうでなければメモリおよび/または物理層に記憶されてもよい。本明細書に開示されるように、スナップショットは、スナップショットキャプチャ時のツリーイメージに対応し得る。スナップショットは、データのツリートラバーサルデータインスタンス内に保持することができるメタデータを含むことができる。ツリーの時点イメージを保持するために、スナップショットは最小限の量のデータを記憶するのみでもよい。スナップショットは、スナップショットによって保持されるように指定/要求される、参照されるブロックのデータを保持するデータの要約表現であり得る。したがって、書き込み要求およびスナップショットが与えられた場合、増分修正は、本明細書に記載のCOW方法論に鑑みて判断することができる。
【0082】
図8は、本開示のいくつかの実施形態による、クラウドインターフェースアプライアンスが増分修正を処理する一例を示すハイレベル図である。図示のように、クラウドインターフェースアプライアンス402は、クラウドオブジェクトストア404に記憶されている論理ツリー300Aのスナップショット301を用いて、増分修正303を作成することができる。例として、増分修正303は新たなリーフノード324、326;新たな非リーフノード328、330、332、334;および新たなルートノード336で示される。
【0083】
図7を再び、より特定的に参照して、ブロック714によって示されるように、増分修正の判断は、新たなリーフノード(例えば、リーフノード324、326)を作成することを含んでもよい。書き込み操作の初期段階の後、新たなデータブロック(すなわちリーフノード)がメモリ内に割り当てられており、書き込み操作ごとのデータがクラウドインターフェースアプライアンス402によって新たなデータブロックに書き込まれており、一方、前のデータおよびデータブロックも同様にメモリに存続する。
【0084】
ブロック716によって示されるように、新たな非リーフノード(例えば、非リーフノード326、330)が作成され得る。書き込み操作が続くにつれて、クラウドインターフェースアプライアンス402は、以前のバージョンのノードを参照する非リーフノードを判断し得る。新たに書き込まれたデータを参照するため、リーフノード内の新たなデータブロックを参照するために新たな非リーフノードが割り当てられる。変更されたノードを参照する各非リーフノードが新たなノードを指すように再割り当てされるまで、スナップショット301によって反映される、論理ツリー300Aの階層を通して、同じプロセスが再帰的に上向きに繰り返され得る。ポインタブロックが階層内の新たなノードに割り当てられると、各ノードのアドレスポインタは、メモリ内の割り当てられた子の新たな位置を指すように更新され得る。ブロック718によって示されるように、書き込み操作を確定するために、ルートノードを再割り当てし更新することができる(例えば、ルートノード336)。ルートノードを更新する準備ができたら、新たなルートノード(ユーバーブロック)を割り当てて初期化し、新たなルートノードの下において新たに割り当てられた子ノードを指すようにすることができる。
【0085】
書き込み操作の一部として、トランザクショナル書き込み操作に伴うツリーのすべての部分のメタデータがチェックサムで更新される。作成された各ノードは、アドレスポインタによって参照されるノードを用いて計算されるチェックサムを含む。この構成は、チェックサムが、それが計算される元のノードとは別に記憶されることを意味する。各ノードのチェックサムを、そのノード自体ではなく、それの親ノードポインタに記憶することで、ツリー内のすべてのノードにそのすべての子についてのチェックサムが含まれる。これは、
図3A~
図3Dの例に関してさらなるに詳細に示される。こうすることで、各ツリーは自動的に自己検証され、読み取り操作で矛盾を検出することが常に可能になる。
【0086】
ブロック720によって示されるように、増分修正に対応するデータオブジェクトおよびメタデータは、クラウドオブジェクトストア404に記憶され得る。様々な実施形態では、クラウドインターフェースアプライアンス402は、増分修正に対応するデータオブジェクトおよびメタデータを作成、読み取り、転送、定義、および/またはそうでなければ指定することができる。ブロック722によって示されるように、いくつかの実施形態において、データオブジェクトおよびメタデータの記憶は、少なくとも部分的に、クラウドインターフェースデバイス502がクラウドインターフェースデーモン604に要求を送信することによって、引き起こされ得る。ブロック724によって示されるように、クラウドインターフェースデバイス502によってクラウドインターフェースデーモン604に送信される要求は、クラウドクライアントインターフェース608のためにput要求に変換され得る。いくつかの実施形態では、クラウドインターフェースデバイス502によって送信される要求は、put要求であり得;他の実施形態では、クラウドインターフェースデーモン604は、クラウドインターフェースデバイス502によって送信される要求をput要求に変換することができる。
【0087】
ブロック726によって示されるように、クラウドインターフェースデバイス502によって送信された要求に応答して、クラウドインターフェースデーモン604は、1以上のネットワークを介してオブジェクトプロトコルを介してクラウドオブジェクトストア404と通信して、増分変更に対応するオブジェクトデータおよびメタデータを新たなクラウドオブジェクトとして記憶させ得る。ブロック728によって示されるように、クラウドインターフェースアプライアンス402は、クラウドオブジェクトストア404に記憶される増分修正に対応するデータオブジェクトおよびメタデータを考慮してマッピング406を更新し得る。
【0088】
再び、より特定的に
図8を参照すると、増分修正303に対応するデータオブジェクトおよびメタデータの記憶が示されている。クラウドベースのCOWプロセスに従って、新
たなクラウドオブジェクト414Aが、増分変更303に対応するデータオブジェクトおよびメタデータに割り当てられ、増分変更303のクラウドベースのインスタンス化が、増分変更303Aとして示されている。そして、新たなルートノードは、修正された論理ツリー300A-1の状態を確定するための記憶操作で、修正された論理ツリー300A-1のルートとすることができる。修正された論理ツリー300A-1は、増分修正303Aによって修正された論理ツリー300Aに対応し得る。したがって、例示的なスナップショット301などのスナップショット、およびルート336、336-1に対応するルートなどのユーバーブロックを利用して、クラウドオブジェクトストア404は、最後のスナップショット以降に変更されたノードのサブセットに関してのみ更新され得る。そして、増分303Aのその更新は、ルートノードを介してクラウド内のツリー300Aのバージョンにフックすることができ、修正された論理ツリー300A-1全体の任意の部分にアクセスすることができる。
【0089】
増分修正303Aの記憶で、アクティブなデータを含む(クラウドデータオブジェクト414として保存される)論理ツリー300Aのブロックは、その場で上書きされなくてもよい。新たなクラウドデータオブジェクト414Aが割り当てられてもよく、修正された/新たなデータおよびメタデータがクラウドデータオブジェクト414Aに書き込まれてもよい。以前のデータのバージョンを保持して、論理ツリー300Aのスナップショットバージョンを維持することを可能にしてもよい。いくつかの実施形態では、変更されていないデータを、修正された論理ツリー300A-1およびその関連スナップショットの間で共有してもよい。
【0090】
したがって、特定の実施形態は、クラウドから(複数の増分更新を適用せずに)最適に復元する能力に加えて、非常に効率的な常時増分(永久増分としても知られる)バックアップ機能を提供することができる。当該業界における従来のバックアップ方法では、コピーをクラウドにプッシュする必要がある。しかし、本開示によるある実施形態は、新たなデータオブジェクトのみがクラウドストレージに書き込まれるクラウドベースのコピーオンライトファイルシステムを可能にする。新たな修正されたデータのみを送信する必要があるクラウドストレージは、クラウドプロバイダからのバックアップおよびクラウドプロバイダからのバックアップからの復元に対する非常に効果的な解決策を提供する。古いデータオブジェクトは修正する必要はない。これらの実施形態は、トランザクショングループを用いる一貫性モデルとともに、一貫性を常に確認することができる永久増分バックアップをともなってクラウドストレージを容易にする。
【0091】
フルバックアップが最初に作成された後(例えば、クラウドデータオブジェクト414および論理ツリー300A)、増分バックアップ(例えば、増分修正303A)が潜在的に無期限に行われ得る。すべての各増分は、それが送信された後、フルバックアップにマージされ得、現在のフルバックアップが常に存在するようになる。マージするたびに、フルバックアップの、単一のデータインスタンスが生成される。多数の増分を収集することが望ましくない場合には、その必要性を回避するために、別のフルバックアップを定期的に行ってもよい。実現例によっては、必要に応じて複数のフルバックアップのバージョンを保持することができる。したがって、特定の実施形態は、間隔、スナップショット、およびバックアップの完全な制御を提供する。
【0092】
オブジェクトをクラウドに書き込み、その後そのオブジェクトをクラウドから読み取ることに伴う主な問題の1つは、読み取られたオブジェクトの整合性が保証されないことである。クラウドストレージに付随するデータの劣化(例えば、ストレージの損失、伝送の失敗、ビットロット(ビットの劣化)など)のリスクがある。さらに、オブジェクトの複数のバージョンが関与すると、望ましくないオブジェクトのバージョンを読み取る危険性がある。例えば、オブジェクトの更新が不完全である場合の最新のバージョンなど、所望
のオブジェクトの、以前のバージョンが読み取られ得る。
【0093】
従来のオブジェクトストアアーキテクチャはデータのコピーに依存し、最初にクォーラム(すなわち2つのコピー)が満たされ、追加のコピー(例えば第3のコピー)が非同期的に更新される。これは、すべてのコピーが更新される前にクライアントがデータのコピーを受け取り、その結果、そのデータの、一貫性のないビューを得る可能性を呈する。オブジェクトストアの一貫性のための典型的な解決策は、データが入手可能になる前にすべてのコピーが作成されることを保証することであるが、この解決策で一貫性を保証することは通常現実的でも達成可能でもない。オブジェクトのチェックサムがオブジェクトのメタデータにオブジェクトと一緒に、または他の場所の参照データベースに記憶される、オブジェクトベースのアプローチでは、オブジェクトの内容は検証できるが、オブジェクトの正しいバージョンは検証できないであろう。さらに、オブジェクトのバージョン化および単一の場所からのチェックを用いるかもしれない解決策では、クラウドストレージの目的および意図が多少損なわれるであろう。
【0094】
しかしながら、本開示による特定の実施形態は、クラウド内で保証された完全性を保証することができ、かつ最終的に一貫したオブジェクトモデルから常に一貫したセマンティクスを保証することができる一貫性モデルを提供することができる。例えば、特定の実施形態は、本明細書に開示される論理ツリーを用いることによって障害の分離および一貫性を提供することができる。クラウドオブジェクトストアに対するすべてのトランザクショナル書き込み操作で、自己記述型マークルツリーのメタデータにおけるチェックサムを更新し得る。上述のように、チェックサムを、そのチェックサムが計算されるノードとは別に記憶することによって、各ツリーが自動的に自己検証的であることが保証される。すべてのツリー層で、下のノードはチェックサムを含むノードポインタによって参照される。したがって、オブジェクトがクラウドから読み取られると、そのオブジェクトが正しいかどうかがを判断され得る。
【0095】
図9は、本開示の特定の実施形態による、クラウドにおける保証された完全性および最終的に整合性のあるオブジェクトモデルからの常に整合性のあるセマンティクスを保証するハイブリッドクラウドストレージシステム400の特定の機能に関する方法例900を示すブロック図である。特定の実施形態によれば、方法900は、ブロック902によって示されるように開始し得る。しかしながら、上記で明らかにされたように、本開示の教示は、本明細書に開示された方法の特定のステップの順序が任意の好適な態様でシャッフルまたは組み合わされ、選択された実現例に依存してもよいように、様々な構成で実現され得る。さらに、以下のステップは説明のために分離され得るが、特定のステップは同時または実質的に同時に実行することができることを理解されたい。
【0096】
ブロック902によって示されるように、1以上の特定の操作(すなわち、1以上のトランザクション)を実行するためのPOSIX準拠の要求をアプリケーション202から受信し得る。そのような操作は、データを読み取ること、またはそうでなければデータにアクセスすることに対応し得る。ブロック904によって示されるように、POSIX準拠の要求は、オペレーティングシステムからシステムコールインターフェース208を介してDMU218に転送され得る。ブロック906によって示されるように、DMU218は、データオブジェクトに対して操作を実行するための要求を、クラウドオブジェクトストア404に向けられる1以上の読み取り操作を実行するための要求(すなわち、1以上のI/O要求)に直接変換し得る。ブロック908によって示されるように、SPAはDMU218からI/O要求を受信し得る。要求に応答して、SPAはクラウドオブジェクトストア404から1以上のデータオブジェクトの読み取りを開始し得る。
【0097】
ブロック910によって示されるように、クラウドインターフェースアプライアンス4
02は、I/O要求を受け取り、対応するクラウドインターフェース要求をクラウドオブジェクトストア404に送信し得る。いくつかの実施形態では、クラウドインターフェースアプライアンス402は、I/O要求を対応するオブジェクトインターフェース要求に変換し得る。クラウドインターフェースデバイス502は、クラウドオブジェクトストア404内のクラウドストレージオブジェクト414のマッピング406を用いてオブジェクトインターフェース要求を調整し得る。例えば、クラウドインターフェースアプライアンス402は、論理ツリーに従ってクラウドデータオブジェクトとして記憶されるファイルの全部または一部を識別して要求することができる。
【0098】
ブロック912によって示されるように、クラウドインターフェースアプライアンス402は、オブジェクトインターフェース要求に応答してデータオブジェクトを受信し得る。ブロック914によって示されるように、データオブジェクトは、論理ツリー内の親ノードからのチェックサムでチェックされ得る。様々な実施形態において、チェックはクラウドインターフェースアプライアンス402および/またはI/Oパイプライン224によって実行されてもよい。
【0099】
図10は、本開示のいくつかの実施形態による、チェックを処理するクラウドインターフェースアプライアンス402の一例を示すハイレベル図である。ここでも、他の実施形態では、システム400の他のコンポーネントがチェックを実行してもよい。しかしながら、
図10では、クラウドインターフェースアプライアンス402は、論理ツリー300A-1に従って記憶されたデータを読み取るためにクラウドオブジェクトストア404にアクセスしたものとして示されている。図示の例では、クラウドストレージアプライアンス402は、論理ツリー300A-1に対応するクラウドオブジェクト414Aにアクセスしたものとして示されている。クラウドストレージアプライアンス402は、非リーフノード326-2、334-2およびルートノード336-2のアドレスを介してリーフノード324-2にアクセスした。
【0100】
本明細書で説明されるように、論理ツリーからノードを読み取るとき、そのノードは論理ツリー内のより上位のノードのポインタを用いて読み取られる。そのポインタは、読み取られると予想されるデータに対するチェックサムを含み、データがクラウドから引き出されるときにデータがそのチェックサムでチェックされる。データの実際のチェックサムは、計算され、クラウドインターフェースアプライアンス402および/またはI/Oパイプライン224によってすでに得られている予想されたチェックサムと比較されてもよい。図示の例では、非リーフノード326-2は、リーフノード324-2のためのチェックサムを含む。
【0101】
いくつかの実施形態では、チェックサムはクラウドデータストアから1つのオブジェクトとともに受信されてもよく、チェックサムでチェックされるべきデータは異なるオブジェクトとともに受信される。いくつかの実施形態によれば、チェックサムは、異なるオブジェクトをチェックされるべきデータとともに受信する前に、クラウドデータストアから別個のオブジェクトとともに受信されてもよい。いくつかの実施形態は、特定のオブジェクトインターフェース要求に応答して、チェックサムを有するオブジェクトが受信され、後続のオブジェクトインターフェース要求に応答して、チェックされるべきデータを有するオブジェクトが受信されるように、反復オブジェクトインターフェース要求プロセスを採用し得る。さらに、いくつかの実施形態では、後続のオブジェクトインターフェース要求は、特定のオブジェクトインターフェース要求とともに受信され、チェックされるべきデータを有するオブジェクトを指すアドレス指定情報を用いて行われ得る。いくつかの実施形態では、反復プロセスの代わりに、クラウドデータストアから複数のオブジェクトが受け取られ、その後、チェックが複数のオブジェクトに対して実行され得る。論理ツリーの完全性は、論理ツリーをトラバースして、親ノードに基づいて各レベルで子ノードのチ
ェックサムを計算することによって、迅速にチェックできる。代替実施形態では、クラウドインターフェースアプライアンス402および/またはI/Oパイプライン224は、読み取り操作を開始する前にチェックサムを得てもよく、および/または別のソースからチェックサムを得てもよい。例えば、そのような代替実施形態では、チェックサムは、マッピング406、論理ツリーのスナップショット、および/またはローカルデータストアに保持されてもよい。
【0102】
再び
図9を参照すると、ブロック916によって示されるように、データオブジェクトの実際のチェックサムを用いて論理ツリー内の親ノードからのチェックサムによってデータオブジェクトを検証するかどうかが判断され得る。ブロック918によって示されるように、データオブジェクトが検証される場合、データが破損しておらず不正確なバージョンではないと判定されたので、システム400の読み取りおよび/またはさらなる処理操作が進行し得る。必要に応じて、すべてのオブジェクトがチェックサムされ、親オブジェクトポインタメタデータによって検証されるまで、チェックは追加のオブジェクトで行われ得る。
【0103】
データオブジェクトの実際のチェックサムと予想されるチェックサムとの不一致の場合には、エラー状態が識別され得る。これは
図10に示される場合であり、ここで、(リーフノード324-2に対応する)オブジェクトD’の実際のチェックサムは、(オブジェクトC’に対応する)親ノード326-2によって指定されたチェックサムと一致していない。エラー状態では、
図9の処理フローはブロック920に進むことができる。実際のチェックサムと予想されるチェックサムとの不一致は、最新ではない誤ったバージョンのデータの取得、クラウドストレージ障害によるデータの劣化、ビットロット、伝送損失などの状況に対応し得る。ブロック920によって示されるように、対応策が開始され得る。いくつかの実施形態では、対応策は、クラウドオブジェクトストア404に1以上のクラウドインターフェース要求を再発行することを含み得る。再発行された各要求に応答して、プロセスフローはブロック912に戻ってもよく、ここでクラウドインターフェースアプライアンス402は1以上のデータオブジェクトを受信してもよく、チェックプロセスの別の反復が進んでもよい。
【0104】
1以上のクラウドインターフェース要求の再発行は、クラウドオブジェクトストア404が要求されたオブジェクトの正しいバージョンを見つけようと、より懸命に試みる要求に対応し得る。いくつかの実施形態では、クラウドインターフェースアプライアンス402は、正しいバージョンが取得されるまでクラウドノード/デバイスを繰り返し通ることができる。いくつかの実施形態は、クラウドオブジェクトストア404に記憶され得るツリー部分の以前のバージョンのスナップショットを繰り返しチェックし得る。いくつかの実施形態は、閾値が満たされた後にクラウドインターフェースアプライアンス402が他の対応策手段に進み得るように、閾値を採用することができる。閾値は、1以上のクラウドインターフェース要求の再発行の数に対応し得る。代替的にまたは追加的に、閾値は、ノードおよび/またはスナップショットの検索範囲に関する制限に対応し得る。例えば、閾値は、クラウドインターフェースアプライアンス402が異なる対応策手段に進む前に、何個のノードおよび/または何個のスナップショットが検索されるべきかを司り得る。
【0105】
クラウドインターフェースアプライアンス402が採用することができる別の対応策手段は、ブロック924によって示されるように、マルチクラウド実現例において別のクラウドオブジェクトストアからの正しいバージョンのデータを要求することである。マルチクラウドストレージの特定の実施形態が、本明細書でさらに説明される。第2のクラウドオブジェクトストアのレコードを調べて、データのコピーが第2のクラウドオブジェクトストアに記憶されているかどうかを判断してもよい。いくつかの実施形態では、レコードは、第2のクラウドオブジェクトストアに固有の別のマッピング406に対応し得る。デ
ータのコピーが第2のクラウドオブジェクトストアに記憶されていると判断されたので、クラウドインターフェースアプライアンス402は、所望のデータを取得するために、第2のクラウドオブジェクトストアへの1以上のオブジェクトインターフェース要求を開始し得る。
【0106】
そのような実施形態では、対象のオブジェクトに対する要求は、クラウドオブジェクトストア404に対する再発行要求の閾値が、正しいバージョンを首尾よく受け取ることなく満たされた後に、第2のクラウドオブジェクトストアに対してなされ得る。代替的に、いくつかの実装形態は、クラウドオブジェクトストア404に要求を再発行するのではなく、第1のデフォルトとして第2のクラウドオブジェクトストアに頼り得る。いずれにせよ、第2のクラウドオブジェクトストアへの要求に応答して、プロセスフローはブロック912に戻ってもよく、ここでクラウドインターフェースアプライアンス402は1以上のデータオブジェクトを受信し得、チェックプロセスの別の反復が進行し得る。正しいデータが第2のクラウドオブジェクトストアから取得されて検証される場合、ブロック918によって示されるように、システム400の読み取りおよび/またはさらなる処理操作を進めることができる。さらに、第2のクラウドオブジェクトストアから正しいデータを受信したので、システム400は、ブロック926によって示されるように、正しいデータをクラウドオブジェクトストア404に書き込むことができる。正しいデータの書き込みは、
図4に関して開示されているように、増分修正を適用するよう、COWプロシージャを用いて行われてもよい。
【0107】
いくつかの実施形態において、正しいデータが対応策プロセスを介して取得可能でない場合、ブロック928によって示されるように、エラーメッセージおよびデータの最新バージョンが返され得る。場合によっては、データの最新バージョンが取得できないことがある。例えば、データを指すべきメタデータが破損しているかもしれず、データの最新バージョンを参照および取得できない。そのような場合、データの最新バージョンなしでエラーメッセージが返され得る。ただし、データの最新バージョンが取得可能な場合は、それも返され得る。したがって、エンドツーエンドのチェックサムモデルでは、特定の実施形態は、クライアントからクラウドへの、そして再び戻ってくる、データのエンドツーエンドのトラバースをカバーし得る。特定の実施形態は、ツリー全体のチェックサムおよびエラーの検出を提供するだけでなく、回復力およびデータスクラビングを通じてツリーの部分を訂正する能力も提供することができる。
【0108】
図11は、本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステム400-2の特徴をさらに示す単純化した例の図である。ハイブリッドクラウドストレージシステム400-2は、ハイブリッドストレージプール1100がどのようにシステムストレージプール416と仮想ストレージプール602-1とから少なくとも部分的に形成されるのかを示す。システムストレージプール416および仮想ストレージプール602-1の各々について、読み取り操作および書き込み操作の流れが示される。
【0109】
いくつかの実施形態では、ARC222はARC222-2を含み得る。システムストレージプール416の読み取り操作は、ARC222-2およびシステムストレージブロック228-1によって容易にされ得る。示されるように、ARC222-2の特定の実施形態は、DRAMを用いて実装され得る。同じく示されるように、システムストレージブロック228-1の特定の実施形態は、SAS/SATAベースのインプリメンテーションを有し得る。いくつかの実施形態では、システムストレージプール416の読み取り操作は、キャッシュサイズを拡張することができるL2ARCデバイス222-3によってさらに容易にされ得る。いくつかの実施形態では、ARC222は、L2ARCデバイス222-3を含めて参照されてもよい。
図11に示すように、L2ARCデバイス222-3の特定の実施形態は、SSDベースのインプリメンテーションを有することができ
る。システムストレージプール416の書き込み操作は、システムストレージブロック228-1およびインテントログ214-3によって容易にされ得る。示されるように、インテントログ214-3の特定の実施形態は、SSDベースのインプリメンテーションを有し得る。
【0110】
ローカルシステムにとって、仮想ストレージプール602-1は、論理ディスクのように見え得、論理ディスクのように振舞い得る。システムストレージプール416と同様に、仮想ストレージプール602-1の読み取り操作は、ARC222-4およびクラウドストレージオブジェクトブロック414-1によって容易にされ得る。いくつかの実施形態ではARC222-4はARC222-4を含むものとして参照され得るが、いくつかの実施形態ではARC222-4は1以上の別個のデバイスを用いて実装され得る。
図11に示すように、ARC222-4の特定の実施形態は、DRAMを用いて実施することができる。いくつかの実施形態では、ARC222-4はARC222-2と同じキャッシュであり得、他の実施形態では、ARC222-4は、ARC222-2とは異なる仮想ストレージプール602-1の別個のキャッシュであり得る。示されるように、クラウドストレージオブジェクトブロック414-1を容易にする特定の実施形態は、HTTPベースのインプリメンテーションを有し得る。
【0111】
いくつかの実施形態では、仮想ストレージプール602-1の読み取り操作は、L2ARCデバイス222-5によってさらに容易にすることができる。いくつかの実施形態では、ARC222は、L2ARCデバイス222-5を含めて参照されてもよい。いくつかの実施形態では、LSARCデバイス222-5は、L2ARCデバイス222-3と同じキャッシュであり得、他の実施形態では、LSARCデバイス222-5は、L2ARCデバイス222-3とは異なる仮想ストレージプール602-1の別個のキャッシュデバイスであり得る。示されるように、L2ARCデバイス222-5の特定の実施形態は、SSDベースまたはHDDベースのインプリメンテーションを有し得る。
【0112】
クラウドストレージオブジェクトブロック414-1に対する仮想ストレージプール602-1の書き込み操作は、インテントログ214-4によって容易にすることができる。いくつかの実施形態では、インテントログ214-4はインテントログ214-3と同じであり得、他の実施形態では、インテントログ214-4はインテントログ214-3とは別個の異なるものであり得る。示されるように、インテントログ214-4の特定の実施形態は、SSDベースまたはHDDベースのインプリメンテーションを有し得る。
【0113】
クラウドストレージへの遷移はいくつかの利点(例えば、コスト、規模、および地理的局所性)を提供するが、従来のように用いられる場合、クラウドストレージはいくつかの制限を伴う。アプリケーションクライアントがオンプレミスに位置し、クラウドに共存していない場合、レイテンシは、従来の技術では、多くの場合、大きな懸念となる。しかしながら、ハイブリッドクラウドストレージシステム400はその懸念を排除することができる。ハイブリッドクラウドストレージシステム400の特定の実施形態は、性能、移行、および可用性を容易にするよう、ミラーリング機能を提供することができる。
【0114】
ハイブリッドクラウドストレージシステム400では、システムストレージプール416の読み取り操作のレイテンシと仮想ストレージプール602-1の読み取り操作のレイテンシとの間の差を最小にすることができる。いくつかの実施形態では、2つのプールのARCおよびL2ARCデバイスはローカル実装であり得る。そして、2つのプールのARCおよびL2ARCデバイスにおけるレイテンシは、等価または実質的に等価であり得る。例えば、ARCの読み取り操作に対する典型的なレイテンシは0.01ms以下であり、L2ARCに対する典型的なレイテンシは0.10ms以下である。クラウドストレージオブジェクトブロック414-1からの読み取り操作のレイテンシはより長くあり得
るが、ハイブリッドクラウドストレージシステム400はより長いレイテンシを最小にするために両方のプールをインテリジェントに管理し得る。
【0115】
特定の実施形態は、ファイルシステムセマンティクスを用いてレイテンシの少ないダイレクトクラウドアクセスを提供することができる。特定の実施形態は、アプリケーションセマンティクスを維持しながらクラウドストレージからの実行を容易にすることができる。特定の実施形態は、クラウド内の全データのレプリケーションされたコピーを保持しながら、ローカルストレージ読み取りパフォーマンスを可能にすることができる。これらの機能を提供するために、特定の実施形態は、オンプレミスキャッシングデバイスを利用し、ハイブリッドストレージプールキャッシングアルゴリズムを活用し得る。クラウドストレージに効果的なキャッシングおよびファイルシステムセマンティクスを提供することによって、クラウドストレージはバックアップおよび復元以外にも使用できる。ハイブリッドストレージシステムはクラウドストレージを「ライブ」で用い得る。別の言い方をすれば、オンプレミスのキャッシングデバイスをインテリジェントに用いることで、全コピーまたは複数のコピーをローカルに保存する必要なしに、フルパフォーマンスの利益をローカルシステムに提供することができる。
【0116】
図12は、本開示のいくつかの実施形態による、ハイブリッドクラウドストレージシステム400-2の機能をさらに示す単純化した例の図である。効果的なキャッシングデバイスおよびキャッシングアルゴリズムを用いて、ハイブリッドクラウドストレージシステム400-2は、ファイルレベルではなくブロックレベルでキャッシングし得、したがって、大きなオブジェクト(例えば大きなデータベース)へのアクセスはオブジェクト全体のキャッシングを必要としない。様々な実施形態では、示されている例は、仮想ストレージプール602-1およびシステムストレージプール416のうちの1つまたはそれらの組合せに対応し得る。
【0117】
ハイブリッドクラウドストレージシステム400-2は、システム動作に必要とされるオブジェクトの大部分を捕捉するために適応I/Oステージング(staging)を採用する
ことができる。ハイブリッドクラウドストレージシステム400-2は、適応I/Oステージングを提供するよう、複数のキャッシュデバイスを構成することができる。図示の例では、適応I/OステージングはARC222-5を用いて実施される。しかし、様々な実施形態において、ハイブリッドクラウドストレージシステム400-2は、適応I/Oステージングを提供するために複数のARC222および/またはL2ARC222を用いるように構成されてもよい。以下の説明では一例としてARC222を用いているが、様々な実施形態は、開示された特徴を提供するために複数のARC222を1以上のL2ARC2221とならんで用いることができることを理解されたい。
【0118】
いくつかの実施形態では、ARC222-5は、ARC222-5がI/O作業負荷に基づいて調整することができるように自己調整することができる。例として、ハイブリッドクラウドストレージシステム400-2が単にバックアップおよび移行のためだけではなくライブモードでクラウドストレージを用いる実施形態では、ARC222-5は優先順位に従ってオブジェクトをステージングするキャッシングアルゴリズムを提供し得る。キャッシングのためのその優先順位は、最も最近用いられた(MRU)オブジェクト、最も頻繁に用いられた(MFU)オブジェクト、最も頻繁に用いられなかった(LFU)オブジェクト、および最も最近用いられなかった(LRU)オブジェクトに対応し得る。各I/O操作で、ARC222-5はステージングされたデータオブジェクトの自己調整が必要かどうかを判断することができる。ある実施形態では、L2ARC225-5はARC222-5と協働して1以上のステージを容易にし得ることに留意されたい。一例として、ARC222-5よりも高いレイテンシを有し得るL2ARC225-5は、LRUステージおよび/またはLFUステージなどの下位ランク付けされた1以上のステージに
用いられ得る。いくつかの実施形態において、ハイブリッドクラウドストレージシステム400-2の他のコンポーネントは、これらの実施形態に従ってキャッシングを引き起こし得る。例として、クラウドストレージアプライアンス402は、読み書き要求のキャッシングおよびサービスを調整し得る。さらに、クラウドストレージアプライアンス402は、いくつかの実施形態によれば、ARC222-5、L2ARC222-5、および/またはインテントログ214-4を含むことができる。
【0119】
各I/O操作で、ARC222-5は、以前にある程度ステージングされた1以上のオブジェクトのステージングを調整し得る。少なくとも、調整は、少なくとも1つのオブジェクトのアクセスの追跡を更新することを含み得る。調整は、より低いステージへの降格、立ち退き、またはより高いステージへの昇格を含み得る。昇格および降格の遷移基準は、現在のステージから別のステージへの遷移、または立ち退きへの遷移ごとに異なり得る。本明細書で開示されるように、ARC222-5は、高いスループットを維持するために、および/または使用量閾値を満たすために、メモリ圧力の結果としてキャッシュからメモリバッファを追い出す能力を有し得る。
【0120】
所与のI/O操作で、そのI/O操作に対応する1以上のオブジェクトがMRUオブジェクトとしてまだステージングされていない場合、その1以上のオブジェクトはMRUオブジェクトとして新たにステージングされ得る。しかし、I/O操作に対応する1以上のオブジェクトがMRUオブジェクトとして既にステージングされている場合、ARC222-5はその1以上のオブジェクトに遷移基準を適用して、その1以上のオブジェクトを異なるステージに遷移するかどうかを判断し得る。遷移基準が満たされない場合、I/O操作のサービスでステージングすることにおける変更は必要はない。
【0121】
図13は、本開示のいくつかの実施形態による、キャッシュ管理およびクラウドレイテンシマスキングのためのハイブリッドクラウドストレージシステム400-3のいくつかの機能に向けられた例示的な方法1300を示すブロック図である。特定の実施形態によれば、方法1300はブロック1302によって示されるように開始することができる。しかしながら、上記で明らかにされたように、本明細書に開示された方法の特定のステップは、任意の好適な態様でシャッフルされ、組み合わされ、および/または同時もしくは実質的に同時に実行され、選択された実現例に依存してもよい。
【0122】
ブロック1302によって示されるように、特定の操作(すなわちトランザクション)を実行するためのPOSIX準拠の要求が、アプリケーション202から受信され得る。そのような操作は、データの読み取り、書き込みおよび/または修正に対応し得る。ブロック1304によって示されるように、POSIX準拠の要求は、オペレーティングシステムからシステムコールインターフェース208を介してDMU218に転送され得る。ブロック1306によって示されるように、DMU218は、オブジェクトに対して操作を実行するための要求を、クラウドオブジェクトストア404内の物理的な場所に向けられたI/O操作を実行するための要求に直接変換し得る。DMU218は、I/O要求をSPAに転送し得る。
【0123】
ブロック1308によって示されるように、SPAはDMU218からI/O要求を受信し得る。そして、要求に応答して、SPAはI/O操作の実行を開始し得る。ブロック1310によって示されるように、書き込み操作の場合、SPAはCOWプロシージャを用いてクラウドオブジェクトストア404へのオブジェクトの書き込みを開始し得る。例えば、クラウドインターフェースアプライアンス402は、クラウドオブジェクトストア404に関して(例えば、
図7に照らして)上に開示されたCOWプロシージャを進め得る。ブロック1312によって示されるように、読み取り操作の場合、SPAはオブジェクトの読み取りを開始し得る。ARC222-5は、1以上の要求されたオブジェクトに
ついてチェックされ得る。いくつかの実施形態では、ブロック1314によって示されるように、I/O要求に対応する1以上の検証されたデータオブジェクトがARC222-5内に存在するかどうかを判断することができる。これは、読み取り要求に対応する1以上のオブジェクトがARC222-5から取得可能であるかどうかをSPAが最初に判断することを含み得る。次に、そのような1以上のオブジェクトが取得可能である場合、そのオブジェクトは、論理ツリー内の1以上の親ノードからの1以上のチェックサムでチェックされ得る。様々な実施形態において、チェックは、ARC222-5、クラウドストレージアプライアンス402、および/またはI/Oパイプライン224によって実行され得る。ブロック1316によって示されるように、データオブジェクトが検証される場合(または、検証を使用しないいくつかの実施形態では、単純なヒットの場合)、システム400の読み取りおよび/またはさらなる処理操作が進み得る。
【0124】
いくつかの実施形態では、ブロック1318によって示されるように、データオブジェクトが検証されない場合(または、検証を使用しないいくつかの実施形態では、単純なヒットなしの場合)、SPAはローカルストレージ228から1以上のオブジェクトの読み取りを開始し得る。いくつかの実施形態では、1以上のオブジェクトへのポインタがキャッシュされ、ローカルストレージ228から1以上のオブジェクトを読み取るために用いられ得る。いくつかの実装形態は、そのようなポインタがキャッシュされない場合、1以上のオブジェクトについてローカルストレージ228をチェックしなくてもよい。1以上のオブジェクトが取得可能である場合、その1以上のオブジェクトは、論理ツリー内の1以上の親ノードからの1以上のチェックサムでチェックされ得る。ここでも、様々な実施形態において、チェックは、ARC222-5、クラウドストレージアプライアンス402、および/またはI/Oパイプライン224によって実行され得る。オブジェクトが検証される場合、プロセスフローはブロック1316に遷移し得、システム400の読み取りおよび/またはさらなる処理操作が進行し得る。
【0125】
ブロック1320によって示されるように、データオブジェクトが検証されない場合(または、検証を使用しないいくつかの実施形態では、単純なヒットなしの場合)、SPAはクラウドオブジェクトストア404から1以上のデータオブジェクトの読み取りを開始し得る。様々な実施形態において、読み取りの模倣が、DMU218、ARC222-5、I/Oパイプライン224、および/またはクラウドインターフェースアプライアンス402のうちの1つまたはそれらの組み合わせによって実行されてもよい。クラウドオブジェクトストア404からの1以上のオブジェクトの読み取りは、例えば
図9に関して本明細書で上に開示されたステップを含み得る。そのようなステップは、上で詳述した、クラウドインターフェースアプライアンス402にI/O要求を発行すること、クラウドストレージオブジェクト414のマッピング406を用いてクラウドオブジェクトストア404に対応するクラウドインターフェース要求を送信すること、オブジェクトインターフェース要求に応答してデータオブジェクトを受信することなどの1つまたは組み合わせを含み得る。ブロック1324によって示されるように、検証されたオブジェクトがクラウドオブジェクトストア404から取得されたかどうかが判断され得る。ここでも、これは、例えば
図9に関して本明細書で先に開示されたステップを含むことができ、論理ツリー内の親ノードからのチェックサムによってデータオブジェクトを検証するかどうかが判断される。
【0126】
データオブジェクトの実際のチェックサムと予想されるチェックサムとの不一致の場合、プロセスフローはブロック1326に遷移し得、そこで対応策プロセスが開始され得る。これは、例えば、
図9に関して本明細書で先に開示された、対応策プロセスが開示されるステップを含み得る。しかしながら、データが検証される場合、プロセスフローはブロック1316に遷移し得、システム400の読み取りおよび/またはさらなる処理操作が進行し得る。
【0127】
ブロック1328によって示されるように、1以上のオブジェクトを取得して、キャッシュステージングを調整し得る。場合によっては、キャッシュステージングの調整は、ブロック1330によって示されるように、1以上のオブジェクトをMRUオブジェクトとして新たにキャッシュすることを含み得る。所与のI/O操作に対応する1以上のオブジェクトがMRUオブジェクトとしてまだステージングされていない場合、その1以上のオブジェクトはMRUオブジェクトとして新たにステージングされ得る。
【0128】
しかし、場合によっては、I/O操作に対応する1以上のオブジェクトがMRU、MFU、LFU、またはLRUオブジェクトとして既にステージングされている場合、ARC222-5は1以上のオブジェクトに遷移基準を適用して、ブロック1332によって示されるように、1以上のオブジェクトを異なるステージに遷移させるかどうかを判断し得る。ただし、遷移基準が満たされていない場合、ステージングすることにおける変更は、I/O操作のサービスでは必要でなくてもよい。
【0129】
いくつかの実施形態では、オブジェクトをステージングすることは、少なくとも部分的にはオブジェクトのアクセスの最近度の関数であり得る。ブロック1334によって示されるように、いくつかの実施形態では、キャッシュステージングの調整は、1以上の最近度属性を更新することを含み得る。ARC222-5は、1以上の新たなオブジェクトのアクセスの最近度を追跡するために、1以上の新たなオブジェクトの最近度属性を定義することができる。最近度属性は、1以上のオブジェクトに対応する最後のアクセス時間を示す時間パラメータ(例えば、絶対時間、システム時間、時間差などによる)および/または他のオブジェクトの最近度属性が対比され得る1以上のオブジェクトに対応するアクセス数を示す順次パラメータに対応し得る。
【0130】
様々な実施形態において、遷移基準は、オブジェクトが現在のステージからの遷移に対して適格となるために定義される1以上の最近度閾値を含み得る。例えば、ARC222-5は、1以上のオブジェクトに割り当てられた最近度属性の値に少なくとも部分的に基づいて、1以上のオブジェクトをLFUステージまたはLRUステージ(または立ち退き)に遷移すべきかどうかを判断することができる。いくつかの実施形態では、最近度閾値は、1以上のステージで他のオブジェクトに対して定義される最近度属性の関数として調整される動的閾値であり得る。例えば、既にMFUオブジェクトとしてステージングされた任意のオブジェクトについて定義される最近度属性の値が昇順または降順でソートされる場合、最近度閾値は、ステージングされたオブジェクトについて定義される任意の最近度属性の最小値の関数であり得る。
【0131】
追加または代替として、いくつかの実施形態では、オブジェクトをステージングすることは少なくとも部分的にオブジェクトのアクセスの頻度の関数であり得る。ブロック1336によって示されるように、いくつかの実施形態では、キャッシュステージングの調整は、1以上の頻度属性を更新することを含み得る。特定のI/O操作では、ARC222-5は、1以上のオブジェクトのアクセスの頻度を追跡するために、1以上のオブジェクトについて定義される頻度属性を増分することができる。頻度属性は、任意の好適な期間にわたるアクセス数を示し得、それは、絶対期間、アクティビティベースの期間(例えば、ユーザセッション、または最小アクティビティ閾値を満たす最後のアクセスアクティビティ量以降の時間)などであり得る。
【0132】
様々な実施形態において、遷移基準は、オブジェクトが現在のステージからの遷移に適格となるために定義される1以上の頻度閾値を含み得る。例えば、頻度属性の値の変化の結果として、ARC222-5は、1以上のオブジェクトをMFUオブジェクトとして(または別のステージにおけるオブジェクトとして)ステージングすべきかどうかを判断す
ることができる。そのような判断は、更新された頻度属性を頻度閾値と比較することに少なくとも部分的に基づいて行われ得る。いくつかの実施形態では、頻度閾値は、他のステージングされたオブジェクト(例えば、MFUオブジェクトとしてステージングされたオブジェクトまたは別のステージにおけるオブジェクト)に対して定義される頻度属性の関数として調整される動的閾値であり得る。例えば、既にMFUオブジェクトとしてステージングされた任意のオブジェクトについて定義される頻度属性の値が昇順または降順でソートされる場合、頻度閾値は、ステージングされたオブジェクトについて定義される任意の頻度属性の最小値の関数であり得る。
【0133】
ブロック1338によって示されるように、追加または代替として、いくつかの実施形態によれば、キャッシュステージングの調整は、1以上の他のステージング属性を指定することを含み得る。ステージング属性は操作タイプを示すことができる。いくつかの実施形態では、オブジェクトをステージングすることは少なくとも部分的に操作タイプの関数であり得る。例えば、ステージングアルゴリズムは、読み取り操作でアクセスされたオブジェクトのみがMFUオブジェクトとしてステージングされ得るように、読み取り操作に対する書き込み操作の区別を用いることができる。そのような実施形態では、書き込み操作で参照されるオブジェクトは、最初はMRUオブジェクトとして維持され、その後、LFUステージング基準に従って降格の対象となり得る。代替として、そのような実施形態では、書き込み操作で参照されるオブジェクトは、最初はMRUオブジェクトとして維持され、その後LRUステージング基準に従って降格され、次いで立ち退きの対象となり、LFUステージングを効果的にスキップしてもよい。別の代替案として、書き込み操作で参照されるオブジェクトは、最初はMRUオブジェクトとして維持され、その後立ち退きの対象となり、LFUステージングおよびLRUステージングを効果的にスキップしてもよい。そのような代替案では、ARC222-5は、クラウドオブジェクトを、後続の読み取り操作に必要とされる可能性が低いものとして、クラウドオブジェクトストア404にコミットするよう、書き込み操作を区別し、したがって、仮にそのような潜在的な操作が生じた場合にそのような操作がクラウドアクセスレイテンシを招くことを可能にする。
【0134】
ステージング属性はデータ型を示すことができる。追加または代替として、いくつかの実施形態では、オブジェクトをステージングすることは少なくとも部分的にデータ型の関数であり得る。例えば、いくつかの実施形態は、データとの関係において、メタデータに対して、より高い優先順位を与え得る。この、より高い優先順位は、すべてのメタデータオブジェクトを保持すること、およびデータオブジェクトをステージングすることを含み得る。代替的に、この、より高い優先順位は、ステージング遷移(現在のステージからの昇格および/または降格)についての異なる基準をデータオブジェクトとの関係においてメタデータオブジェクトに対して適用することを含み得る。例えば、データオブジェクトが降格に対して適格であると定義される閾値(例えば、最近度、頻度、および/または同様の閾値)は、メタデータが降格に対して適格であると定義される閾値より低くあり得る(したがって、より容易に満たされ得る)。代替的に、他の実施形態は、メタデータとの関係において、データに対して、より高い優先順位を与えてもよい。いくつかの実施形態では、クラウドオブジェクトの一部は、使用頻度に関係なく常にキャッシュされるように定義され得る。
【0135】
ステージング属性は操作特性を示すことができる。追加または代替として、いくつかの実施形態では、オブジェクトをステージングすることは少なくとも部分的に読み取り操作特性の関数であり得る。例えば、いくつかの実施形態は、読み取られるオブジェクトのサイズがサイズ閾値を満たすようにサイズ特性を有する読み取り操作に高い優先順位を与えてもよい。追加的または代替的に、読み取られるオブジェクトのシーケンスがシーケンス閾値を満たすように、シーケンシャルな特性を有する読み取り操作に、より高い優先順位が与えられてもよい。したがって、大きな、シーケンシャルなストリーミング読み取り操
作は、より小さな、より分離された読み取り操作よりも、キャッシングに対して、より高い優先順位が与えられてもよい。このようにして、より大きい、シーケンシャルなストリーミング読み取り操作に対する、より高いクラウドアクセスレイテンシが、回避される。
【0136】
ARC222-5のいくつかの実施形態は、各ステージに対して、異なる関数、遷移基準、および/または閾値を採用することができる。いくつかの実施形態では、ARC222-5はステージングスコアリングシステムを採用してもよい。いくつかの実施形態は、例えばステージングスコアなどの数値表現でオブジェクトにスコアを付けることができる。ステージングスコアは、遷移基準などの任意の好適な基準に関するオブジェクトの資格を反映し得る。例えば、オブジェクトに対する所与のステージングスコアは、アクセスの頻度、アクセスの最近度、操作タイプ、データ型、操作特性、オブジェクトサイズなどの基準に従ったスコアリングの累積的なものとすることができる。与えられたオブジェクトは、各基準に関してスコア付けされ得る。例えば、頻度属性、最近度属性などの属性の比較的より大きい値には、より大きいスコアが与えられてもよい。同様に、スコアは他の基準および優先順位を考慮して割り当てられてもよい。オブジェクトの累積ステージングスコアは、キャッシュに記憶される他のオブジェクトのステージングスコアとともに、優先順位に従ってオブジェクトをランク付けするために使用できる。ここでも、優先順位は、オブジェクトを異なるステージに、および/または立ち退きに向かって遷移させるために用いることができる。
【0137】
ARC222-5は、1以上のキャッシュ使用量および容量の制約を満たすようにそこに記憶されているステージおよびオブジェクトを適合させることができる。例えば1TBのDRAMのキャッシュデバイス容量を考えると、ARC222-5は、80%の最大キャッシュ使用量を維持するよう、そこに記憶されているステージおよびオブジェクトを適合させてもよい。さらに、いくつかの実施形態は、1以上の速度制約を満たすよう、中に記憶されているステージおよびオブジェクトを適合させてもよい。例えば、ARC222-5は、ローカルアクセスおよびクラウドアクセスの両方があるとして、多少のキャッシングを用いて1以上のレイテンシ許容範囲を満足すべきかどうかを判断するために、許容可能な量のアクセスレイテンシ(例えば、平均アクセスレイテンシ)を維持するよう、スループットを監視してもよい。そのような適応制約に鑑み、中に記憶されるステージおよびオブジェクトの適合は、オブジェクトを優先順位でソートするために各ステージについて異なる機能および閾値を適用することを含み得る。優先順位は、適応制約を満たすために、ARC222-5によって利用されて、記憶されたオブジェクトを立ち退きの方へシフトさせることができる。
【0138】
ブロック1340によって示されるように、いくつかの実施形態において、キャッシュステージング調整は、異なるキャッシングモードへの遷移を含み得る。いくつかの実施形態は、使用およびレイテンシの制約を満たしながら負荷バランスをとるために動作モードを動的に変更することができる。初期動作モードまたはデフォルト動作モードは、オブジェクトが最初にキャッシュから、次に必要に応じてクラウドからアクセスされるように、ライブ方式でクラウドから動作することに対応し得る。ARC222-5のいくつかの実施形態は、最初に(例えば、あるセッションまたは期間内に)I/O操作でアクセスされるすべてのオブジェクトをキャッシュし、次いでキャッシュ使用が1以上の閾値を満たすとステージングの使用に遷移してもよい。ステージングへの遷移は、1以上の二次動作モードで増分的であり得る。例えば、ステージングは、最初にMRUおよびMFUステージングに追いやられ、次に、1以上のキャッシュ使用閾値(最大キャッシュ使用閾値より前であってそれより低い)が満たされると1以上の他のステージに拡張されてもよい。
【0139】
キャッシュ使用が使用制約に近づき、1以上の使用閾値を満たすことを考慮して、特定の遷移基準を1以上の追加の動作モードで増分的に適用することができる。例えば、書き
込み操作に対応するオブジェクトは、最初は区別されないかもしれない。しかし、キャッシュ使用が使用制約に近づくにつれて、その区別基準は、1以上の使用閾値が満たされた後、適用され得る。
【0140】
別の例として、キャッシュ使用がさらに使用制約に近づき、1以上の使用閾値を満たすと、ハイブリッドクラウドストレージシステム400-2は、より低いランクのステージ(例えば、LRUおよび/またはLFUステージ)に対して、1以上のL2ARCデバイス(1以上の、低レイテンシサイドに対応する)で、拡張されたキャッシュを利用し始めることができる。さらに別の例として、キャッシュ使用がさらに使用制約に近づき、1以上の使用閾値を満たすと、ハイブリッドクラウドストレージシステム400-2は、1以上の三次動作モードでレイテンシ許容範囲に適合するためにローカルストレージ228を使用し始めることができる。より具体的な例として、将来の低レイテンシアクセスに対してプロビジョニングすることなく大規模なシーケンシャルなストリーミング読み取り操作を排除するのではなく、操作の拡張および対応するオブジェクトのアクセス頻度は、オブジェクトがローカルストレージ228に遷移されるようにサイズおよび頻度の閾値を満たすのに十分であってもよい。このようにして、ハイブリッドクラウドストレージシステム400-2は、大規模なシーケンシャルな読み取り操作をもう一度呼び出す場合に、(他の大量のシーケンシャルな読み取り操作を必要とする可能性がある)他の低レイテンシアクセスのためにキャッシュ容量を解放し、クラウドレイテンシをペイすることを回避しながら、オブジェクトをローカルレイテンシ読み取り操作に対して利用可能に保つ。オブジェクトレベルでのローカルストレージ228とクラウドストレージとの両方のこのような選択的な利用は、レイテンシ許容範囲内で動作するためにクラウドストレージとローカルストレージ228との間の時間および負荷平衡の大部分キャッシュを使用しながらクラウドレイテンシのマスキングをさらに容易にする。様々な実施形態では、この三分された記憶適応は、フォールバック動作モードまたは特定のタイプの操作に対する初期デフォルトが特定の特性を有するときに開始されることができる。
【0141】
したがって、いくつかの実施形態は、オブジェクトアクセスの特性に少なくとも部分的に基づいてキャッシングモードおよび技法を変更し得る。特定の実施形態は、クラウドベースの操作についてレイテンシをマスキングするために、キャッシング機能、クラウドストレージ、およびローカルストレージ228を活用することができる。そのような実施形態では、操作の大部分は、ほとんどの場合ローカルレイテンシをもたらす、キャッシュヒット率が典型的には90%以上を超える状態でキャッシュからサービス処理されてもよい。ローカルオブジェクトが欠落しているか破損している場合は、そのオブジェクトのクラウドコピーにアクセスし得る。いくつかの実施形態では、クラウドオブジェクトストア404からの読み取りは、キャッシュヒットがなく、読み取り要求がローカルストレージ228からサービス処理され得ない場合にのみ必要であってもよい。
【0142】
いくつかの実施形態では、上で開示されたARCチェック、ローカルストレージチェック、および/またはクラウドオブジェクトストアチェックの代わりに、マッピング406を用いて、対象の1以上のオブジェクトの位置を識別することができる。上述したように、マッピング406はオブジェクトディレクトリを含み、各I/O操作で更新されるオブジェクト状態を維持することができる。クラウドオブジェクト状態は、オブジェクトごとにインデックス付けされ得るインデックス、テーブル、インデックス編成テーブルなどに保持され得る。オブジェクト状態は、オブジェクトキャッシュ状態を含み得る。オブジェクトキャッシュ状態は、ARC、L2ARC、適応ステージ、ローカルストレージ、および/またはクラウドストレージのうちのいずれか1つまたはそれらの組合せにおけるオブジェクトの位置を示すことができる。マッピング406を利用することによって、クラウドインターフェースデバイス402は、対象の1以上のオブジェクトの位置を直接識別することができる。いくつかの実施形態では、クラウドインターフェースデバイス402は
、ARCチェックに従ってヒットがない場合にのみマッピング406を利用することができる。
【0143】
いくつかの実施形態では、キャッシングに加えてまたはその代わりに、インテリジェントプール管理は、クラウドオブジェクトストレージ404と連続的に同期するミラーを維持することを含む。クラウドオブジェクトデータストアを仮想デバイスとして少なくとも部分的にサポートすることによって、特定の実施形態は、ローカルストレージとクラウドストレージとの間のミラーリングを提供することができる。クラウドストレージをローカルストレージとミラーリングすると、クラウド内においてすべてのデータのレプリケーションされたコピーを保持しながら、ローカルストレージの読み取りパフォーマンスを向上させることができる。ミラーを用いることで、複数のコピーをローカルに保存しなくても、フルパフォーマンスの利点をローカルシステムに提供し得る。ローカルデータが欠落しているか破損している場合は、データのクラウドコピーにアクセスすることができる。同期ミラーリングクラウドおよびローカルデバイスは、より高いレベルのパフォーマンスを促進し得る。
【0144】
そのような同期ミラーリングを容易にするために、特定の実施形態はミラーVDEVを含み得る。
図14は、本開示のいくつかの実施形態による、同期ミラーリングを容易にするためのハイブリッドクラウドストレージシステム400の例示的ネットワークファイルシステム200-2のインスタンスを示す。ファイルシステム200-2は、ファイルシステム200-1に対応し得るが、ミラー管理がZFS制御スタックに直接統合されている。ファイルシステム200-1に関して開示されたものを超えて、ファイルシステム200-2は、データのクラウドコピーを容易にするが、データを読み取るためにローカルアクセス時間/速度を除くデータのコピーを容易にするミラーVDEV1402を含み得る。
【0145】
いくつかの実施形態では、ミラーVDEV1402は、ZFSファイルシステムアーキテクチャ内のデバイスドライバインターフェースの別のVDEVタイプの1以上のVDEVに対応し得る。ZFSはミラーVDEV1402と直接通信することができ、ミラーVDEV1402はファイルシステム200-2のドライバ層の真上の仮想デバイス層にあり得、いくつかの実施形態ではZFSアーキテクチャ内のデバイスドライバインターフェースの抽象化に対応し得る。ファイルシステム200-2は、ミラーVDEV1402をI/O操作のためのファネルとなるように作成することができる。いくつかの実施形態では、ミラーVDEV1402は、ファイルシステム200-2の他のコンポーネントが主に通信することができるポイントであり得る。例えば、いくつかの実施形態では、トランザクショナルオブジェクト層からの通信は、ミラーVDEV1402を介して物理層に進むことができる。より具体的には、DMU218からの通信は、I/Oパイプライン224およびミラーVDEV1402に向けられ得る。そのような通信に応答して、ミラーVDEV1402は、VDEV226およびクラウドインターフェースデバイス502などの他のVDEVに通信を向けることができる。したがって、ミラーVDEV1402は、ローカルストレージ228およびクラウドオブジェクトストレージ404に関してI/O操作を調整することができる。
【0146】
いくつかの実施形態では、ミラーVDEV1402は、読み取り操作がミラーVDEV1402を通過する必要がないように、ローカルストレージ228およびクラウドオブジェクトストレージ404に関して書き込み操作のみを調整することができる。そのような実施形態では、VDEV226およびクラウドインターフェースデバイス502などの他のVDEVは、読み取り操作についてはミラーVDEV1402を迂回することができる。代替実施形態では、ミラーVDEV1402はすべてのI/O操作を調整することができる。
【0147】
有利なことに、ミラーVDEV1402は、各書き込み操作が、ローカルストレージ228に関しては1以上のVDEV226を介して、およびクラウドオブジェクトストア404に関してはクラウドインターフェースデバイス502を介して、同期的に実行されるように、書き込み操作を調整することができる。各I/O操作のこのような同期ミラーリングは、ファイルレベルではなくオブジェクトレベルで実行される。各I/O操作でのデータレプリケーションは、ハイブリッドクラウドストレージシステム400がクラウドアクセスのレイテンシをマスキングするローカルストレージ読み取りパフォーマンスを達成することを可能にする。デフォルトとして、ハイブリッドクラウドストレージシステム400は、大部分の読み取り操作についてクラウドのレイテンシをペイすることを回避するためにローカルストレージ228から読み取ることができる。ハイブリッドクラウドストレージシステム400が、ローカルデータが欠落しているか破損していると判断した場合にのみ、ハイブリッドクラウドストレージシステム400はクラウドオブジェクトストア404にアクセスして所望のデータのクラウドコピーを読み取る必要がある。そのような例外は、クラウドアクセスのレイテンシが最小化されるように、オブジェクト単位で実行されてもよい。
【0148】
図15は、本開示のいくつかの実施形態による、同期ミラーリングおよびクラウドレイテンシマスキングのためのハイブリッドクラウドストレージシステム400のいくつかの特徴に向けられた例示的な方法1500を示すブロック図である。特定の実施形態によれば、方法1500はブロック1502によって示されるように開始することができる。しかしながら、上記で明らかにされたように、本明細書に開示された方法の特定のステップは、任意の好適な態様でシャッフルされ、組み合わされ、および/または同時もしくは実質的に同時に実行され、選択された実現例に依存してもよい。
【0149】
ブロック1502によって示されるように、特定の操作(すなわちトランザクション)を実行するためのPOSIX準拠の要求が、アプリケーション202から受信され得る。そのような操作は、データの書き込みおよび/または修正に対応し得る。ブロック1504によって示されるように、POSIX準拠の要求は、オペレーティングシステムからシステムコールインターフェース208を介してDMU218に転送され得る。ブロック1506によって示されるように、DMU218は、データオブジェクトに対する操作を実行するための要求を、システムストレージプール416および/またはクラウドオブジェクトストア404内の物理的位置に向けられる書き込み操作を実行するための要求(すなわちI/O要求)に直接変換し得る。DMU218は、I/O要求をSPAに転送し得る。
【0150】
SPAのミラーVDEV1402は、(例えば、ARC222およびI/Oパイプライン224を介して)I/O要求を受信し得る。ブロック1508によって示されるように、ミラーVDEV1402は、I/O操作ごとに同期レプリケーションでデータオブジェクトの書き込みを開始し得る。ミラーVDEV1402の一部はローカルストレージを指し得、ミラーVDEV1402の一部はクラウドストレージアプライアンス402のクラウドインターフェースデバイス502を指し得る。ブロック1510によって示されるように、ミラーVDEV1402は、書き込み操作の第1のインスタンスを1以上のVDEV226に向け得る。いくつかの実施形態では、ブロック1514によって示されるように、データオブジェクトをローカルシステムストレージに書き込むために、(例えば、
図3A~
図3Dを考慮して)上で開示されたCOWプロシージャが進行し得る。
【0151】
ブロック1512によって示されるように、ミラーVDEV1402は、書き込み操作の第2のインスタンスをクラウドストレージアプライアンス402のクラウドインターフェースデバイス502に向け得る。いくつかの実施形態では、ブロック1516によって
示されるように、データオブジェクトをローカルシステムストレージに書き込むために、上で開示されたCOWプロシージャが進行し得る。例えば、方法1500は、ブロック712または方法700の他のステップに遷移してもよい。
【0152】
各書き込み操作がローカルストレージ228およびクラウドオブジェクトストア404に関して同期的に実行されると、ハイブリッドクラウドストレージシステム400はその後クラウドアクセスのレイテンシをマスキングするローカルストレージ読み取りパフォーマンスを達成するために読み取り操作をインテリジェントに調整し得る。レプリケーションを与えるデータストレージの完成後の任意の好適な時点で、ハイブリッドクラウドストレージシステム400はそのような読み取り操作を調整し得る。再び
図15を参照すると、ブロック1518によって示されるように、1以上の特定の操作(すなわち、1以上のトランザクション)を実行するためのPOSIX準拠の要求がアプリケーション202から受信され得る。そのような操作は、データを読み取ること、またはそうでなければデータにアクセスすることに対応し得る。ブロック1520によって示されるように、POSIX準拠の要求は、オペレーティングシステムからシステムコールインターフェース208を介してDMU218に転送され得る。ブロック1522によって示されるように、DMU218は、データオブジェクトに対して操作を実行するための要求を、ローカルストレージ228に向けられる1以上の読み取り操作を実行するための要求(すなわち1以上のI/O要求)に直接変換し得る。SPAは、DMU218からI/O要求を受信し得る。ブロック1524によって示されるように、要求に応答して、SPAはローカルストレージ228からの1以上のデータオブジェクトの読み取りを開始し得る。いくつかの実施形態では、ARC222は、1以上のデータオブジェクトのキャッシュされたバージョンについて最初にチェックされ、キャッシュされたバージョンが見つからない場合、ローカルストレージ228から1以上のデータオブジェクトを読み取る試みが行われ得る。
【0153】
ブロック1526によって示されるように、I/O要求に対応する1以上の検証されたデータオブジェクトが存在するかどうかを判断し得る。これは、SPAが、1以上のI/O要求に対応する1以上のオブジェクトがローカルストレージ228から取得可能であるかどうかをまず判断することを含み得る。次いで、そのような1以上のオブジェクトが取得可能である場合、そのオブジェクトは、論理ツリー内の親ノードからのチェックサムでチェックされ得る。様々な実施形態では、チェックは、VDEV226、ミラーVDEV1402、および/またはI/Oパイプライン224のうちの1つまたは複数によって実行され得る。ブロック1528によって示されるように、データオブジェクトが検証される場合、データが破損しておらず不正確なバージョンではないと判定されたので、システム400の読み取りおよび/またはさらなる処理操作が進行し得る。
【0154】
しかしながら、I/O要求に対応する検証されたデータオブジェクトが存在しないとSPAが判断した場合、プロセスフローはブロック1530に遷移し得る。そのような判断は、1以上のI/O要求に対応する取得可能なデータオブジェクトが存在しないことに対応し得、その場合、エラー状態が識別され得る。同様に、そのような判断は、1以上のI/O要求に対応するデータオブジェクトの実際のチェックサムと予想されるチェックサムとの不一致に対応し得、その場合も、エラー状態が識別され得る。いずれの場合も、ブロック1530によって示されるように、SPAはクラウドオブジェクトストア404から1以上のデータオブジェクトの読み取りを開始することができる。様々な実施形態において、読み取りの開始は、DMU218、ミラーVDEV1402、I/Oパイプライン224、および/またはクラウドインターフェースアプライアンス402のうちの1つまたはそれらの組み合わせによって実行されることができる。
【0155】
クラウドオブジェクトストア404からの1以上のデータオブジェクトの読み取りは、例えば
図9に関して本明細書で上に開示されたステップを含み得る。そのようなステップ
は、上で詳述した、クラウドインターフェースアプライアンス402にI/O要求を発行すること、クラウドストレージオブジェクト414のマッピング406を用いてクラウドオブジェクトストア404に対応するクラウドインターフェース要求を送信すること、オブジェクトインターフェース要求に応答してデータオブジェクトを受信することなどの1つまたは組み合わせを含み得る。ブロック1532によって示されるように、検証されたデータオブジェクトがクラウドオブジェクトストア404から取得されたかどうかが判断され得る。ここでも、これは、例えば
図9に関して本明細書で先に開示されたステップを含むことができ、論理ツリー内の親ノードからのチェックサムによってデータオブジェクトを検証するかどうかが判断される。
【0156】
データが検証される場合、プロセスフローはブロック1528に遷移し、システム400の読み取りおよび/またはさらなる処理操作が進行し得る。さらに、ブロック1534によって示されるように、正しいデータがローカルシステムストレージに書き込まれ得る。様々な実施形態において、訂正プロセスは、DMU218、ミラーVDEV1402、I/Oパイプライン224、および/またはクラウドインターフェースアプライアンス402のうちの1つまたはそれらの組み合わせによって実行されてもよい。いくつかの実施形態では、プロセスフローはブロック1514に遷移してもよく、そこで正しいデータをローカルシステムストレージに書き込むためにCOWプロシージャが進行してもよい。
【0157】
しかし、データオブジェクトの実際のチェックサムと予想されるチェックサムとが一致しない場合、プロセスフローはブロック1536に遷移し、そこで対応策プロセスが開始され得る。これは、例えば、
図9に関して本明細書で先に開示された、対応策プロセスが開示されるステップを含み得る。例えば、対応策プロセスは、1以上のクラウドインターフェース要求を再発行すること、別のクラウドオブジェクトストアに対してデータの正しいバージョンを要求することなどを含み得る。
【0158】
有利なことに、ハイブリッドクラウドストレージシステム400によって維持されるデータ量が特定の量を超えると、
図12および
図13に関して開示された実施形態に従って、上に開示されたミラーリングモードからキャッシングモードに遷移することは、より費用効果的に最適になり得る。特定の実施形態はその遷移を自動的に行い得る。ハイブリッドクラウドストレージシステム400は、ミラーリング技法で始まり得、1以上の閾値に達するまで進む。そのような閾値は、ストレージ使用の観点から定義され得る。例えば、ローカルストレージ容量の使用が、ある閾値パーセンテージ(または絶対値、相対値など)に達すると、ハイブリッドクラウドストレージシステム400は適応I/Oステージングに遷移し得る。このようにして、ハイブリッドクラウドストレージシステム400は、操作モードをシフトすることによってローカルストレージに与えられる負荷を均衡させることができる。次いで、ハイブリッドクラウドストレージシステム400は、最も関連性のあるX量のデータ(例えば、10TBなど)をし、残りのデータをクラウドストレージにシャント(shunt)し得る。この負荷均衡は、増加する量のデータストレージに対応し
ながら、より少ないストレージデバイスを可能にし得る。
【0159】
図16を参照して、ネットワークファイルシステム1600の他の例が示されている。以下でより詳細に論じるように、この例示的ネットワークファイルシステム1600は、異なるクラウドプロバイダによって動作され得る、複数のクラウドデータオブジェクトストア404にわたる同期ミラーリングをサポートするように構成され得る。この例では、プールストレージ層(例えば、仮想デバイス層)および物理ストレージ層内のコンポーネントなど、ファイルシステム1600の特定のコンポーネントのみが示されているが、この例のファイルシステム1600は、ファイルシステム200-1および/またはファイルシステム200-2のような、上述したZFSファイルシステムの実施形態のうちの1つまたは複数に対応し得ることを理解されたい。例えば、ファイルシステム220-2に
おけるように、ファイルシステム1600は、ファイルシステム1600のデータおよびメタデータのファイルシステムストレージのスナップショットに対応する論理ツリー300の同期レプリケーション(またはミラーリング)ならびにストレージをサポートするように構成されるミラーVDEV1402を含み得る。ファイルシステム200-2におけるように、ファイルシステム1600は、ミラーVDEV1402がデータの複数のクラウドコピーを容易にし得る、ZFS制御スタックに直接統合されるミラー管理をサポートすることができる。
【0160】
上述のように、ミラーVDEV1402は、ドライバ層のすぐ上にあり得るZFSファイルシステムアーキテクチャの仮想デバイス層内の仮想デバイスとして実装されてもよい。いくつかの実施形態において、ミラーVDEV1402は、ZFSアーキテクチャ内のデバイスドライバインターフェースの抽象化に対応し得る。ファイルシステム1600は、I/O操作のためのファネルとなるようにミラーVDEV1402を作成することができ、および/またはミラーVDEV1402は、ファイルシステム1600の他のコンポーネントがそれを介して通信することができるポイントとなることができる。この例に示されるように、トランザクショナルオブジェクト層(例えば、データ管理ユニット218(図示せず))からの通信は、I/Oパイプライン224を通ってミラーVDEV1402へ、そして次に物理層へ進み得る。そのような通信に応答して、ミラーVDEV1402は他のVDEV226および/またはクラウドインターフェースデバイス502に通信を向けることができる。したがって、ミラーVDEV1402は、ローカルデータオブジェクトストア228およびクラウドオブジェクトストア404に関してI/O操作を調整することができる。
【0161】
例示的なファイルシステム1600などのネットワークファイルシステムを用いて、複数の異なるクラウドプロバイダのクラウドストレージ間でデータをミラーリングする様々な技法を実現し得る。例えば、後述するように、ZFSファイルシステム1600のファイルデータおよびメタデータを表す論理データブロックの完全なツリー階層を記憶するデータオブジェクトのセットが、複数の異なるクラウドオブジェクトストア404間でミラーリングされてもよい。この例に示すように、第1の論理ツリー階層300Aが、第1のクラウドプロバイダの第1のクラウドオブジェクトストア404aに記憶され、同じツリー階層300Bの同一のミラーリングされたインスタンスが、第2のクラウドプロバイダの第2のクラウドオブジェクトストア404bに記憶される。
【0162】
様々な実施形態において、本明細書に記載されているミラーリング技法は、クラウドレプリケーション、クラウド移行、クラウドベースの展開(例えば、開発テスト)環境、および様々な他の目的に用いることができる。例えば、クラウドレプリケーションは障害回復を提供し、クラウドストア障害からZFSファイルシステムを保護する。クラウド移行は、例えばクラウドストアの性能、価格、信頼性などに基づいて、クラウドストア/クラウドプロバイダ間で評価し変更する能力をZFSファイルシステム1600に提供することができる。後述するように、そのような移行は、ほとんど(または完全に)ZFSファイルシステムアーキテクチャの下位レベル内(例えば、プーリングされたストレージ層および物理ストレージ層内)で開始および実行できるので、クラウド移行はインターフェース層およびZFSファイルシステム1600上に構築されたすべてのアプリケーションに関して完全に透明に実行され得る。
【0163】
さらに、後述するように、そのような移行は、(例えば、単純なファイルごとの移行とは対照的に、)ファイルデータとメタデータとの両方を含む論理データブロックの同じツリー階層をミラーリングすることによって実行され得るので、ファイルシステムデータは、ファイルシステムデータや属性を失うことなく、異なるクラウドプロバイダ間で移行され得ることが保証され得る。すなわち、たとえ異なるクラウドオブジェクトストア404
aおよび404bが、そこに記憶されたデータオブジェクトについて、異なるネイティブの属性セットをサポートするとしても、ファイルシステムデータを、ファイルデータおよび/または別途の対応するメタデータを有する両方のブロックを含む論理データブロックのツリー階層として、編成、記憶、および移行することは、移行/レプリケーションプロセス中にファイルデータまたは対応するメタデータのいずれも失うことも変更することもなく、異なるクラウドオブジェクトストア404aおよび404b間で移行を確実に実行し得る。加えて、特定のファイルシステム属性および他の拡張された属性(例えば、ファイルシステムのバージョン履歴など)は、ツリー階層の論理データブロック内に明示的に記憶されてもよく、したがって異なる特性を有する異なるクラウドオブジェクトストア404a、404b間の移行またはレプリケーション中に失われない。さらに、同様の理由で、異なるクラウドオブジェクトストア404aおよび404bに存在するツリー階層の異なるインスタンスを用いて作成されたZFSファイルシステムオブジェクト、クローンオブジェクト、CFSボリュームオブジェクト、およびスナップショットオブジェクトなどのDMUオブジェクトは、それらが生成されたクラウドオブジェクトストア404に関わらず、同一であってもよい。
【0164】
加えて、クラウドプロバイダ間のデータミラーリングは、論理データブロックの同一の階層を含むクラウドベースの展開環境の直接的な作成を可能にし得る。したがって、そのような展開環境を用いることにより、クラウドデータオブジェクトストア404内に作業環境を作成し、アプリケーション開発者がクラウドベースの展開環境内で新たなアプリケーション/機能を構築およびテストし、次いで、(例えば新たな機能のテスト及び検証後に)クラウドベースの展開環境をZFSファイルシステム1600の一次ストレージシステム(例えば、ローカルデータオブジェクトストアまたはクラウドデータオブジェクトストア)に移行してもよい。
【0165】
さらに、本明細書に記載の、複数のクラウドプロバイダにわたってZFSファイルシステム1600のデータオブジェクトストレージをミラーリングする例は、各トランザクションの完了でデータの完全に同期されたコピーを保証し得る同期レプリケーション技法を用い得る。さらに、本明細書に記載のファイルシステムのアーキテクチャは、複数のクラウドデータオブジェクトストアにわたる効率的な同期レプリケーションを可能にし得、それによってミラーVDEV1402は複数のクラウドデータオブジェクトストアにデータ修正を送信し得、すべてのクラウドデータオブジェクトストアから、成功したデータ書き込みを示す確認を待つ必要がない。例えば、クラウドデータミラーリングを用いてファイルシステム1600上で書き込み操作を実行するとき、およびファイルシステム1600が本明細書で説明される様々な同期、データ回復、および/または検証技法をサポートするとき、ミラーVDEV1402は、書き込み操作がクラウドデータストア404の少なくとも1つで成功する限り、ファイルシステム1600の同期、データ回復、および/または検証機能が、書き込み操作が失敗する可能性がある他の任意のクラウドデータストア404で書き込み操作を完了することになることを保証され得る。さらに、複数のクラウドデータオブジェクトストア404間の最初の移行またはレプリケーションの後、ファイルシステム1600の特定の実施形態は、クラウドデータオブジェクトストア(例えば、404a、404b、…)内の階層ツリー全体(例えば300A、300B、...)の複数のインスタンスのチェックサムを提供し得る。
【0166】
以下により詳細に説明されるように、クラウドデータミラーリングの例は、論理ツリー階層300Aの第1のインスタンスを、1つのクラウドオブジェクトストア404aから、別のクラウドオブジェクトストア404bにおける論理ツリー階層300Bの同一の第2のインスタンスにレプリケーションおよび/または移行することを含み得る。ミラーVDEV1402は、論理ツリー階層300Aを記憶するクラウドオブジェクトストア404aからデータオブジェクトの取得を開始し、続いて、論理ツリー階層300Bの同一の
インスタンスを記憶するクラウドオブジェクトストア404b上において同一のデータオブジェクトのセットの作成および書き込みを開始することによって、クラウドデータミラーリングを調整し得る。さらに、後述するように、最初のクラウドデータミラーリングの後、ミラーVDEV1402はまた、ファイルシステム1600のアプリケーション層から生じる読み取りおよび/または書き込み操作を調整することもできる。
【0167】
いくつかの実施形態では、クラウドデータミラーリングの制約は、クラウドデータを他の任意のクラウドオブジェクトストア404とミラーリングする各クラウドオブジェクトストア404に対してツリー階層の論理ブロックのクラウドデータオブジェクトへの同じマッピングを使用しなければならないことを必要とし得る。すなわち、ファイルデータを含む論理ブロックおよび/またはメタデータを含む論理ブロックの同じ構成、ならびにクラウドオブジェクトストア404内に記憶される物理データオブジェクトへのそれらの論理ブロックの同じ配置を、各クラウドオブジェクトストア404とともに(および/またはファイルシステム1600のデータのミラーリングを実行することもできるローカルデータオブジェクトストア内で)用い得る。しかし、他の実施形態では、クラウドデータミラーリング技法は、同じミラーリング制約なしで実現され得る。そのような実施形態では、異なるクラウドオブジェクトストア404aおよび404bは、各異なるクラウドオブジェクトストア404上の物理データオブジェクトがファイルシステム1600を表す論理データブロックの同じツリー階層を記憶する限り、異なる数、サイズ、および/または構成の物理データオブジェクトを記憶し得る。
【0168】
最後に、ファイルシステム1600の例に示されるように、ミラーVDEV1402は、読み取り操作がミラーVDEV1402を介して行われる必要はないように、クラウドデータオブジェクトストア404に関して(および/または場合によってはローカルストレージ228に関して)書き込み操作を調整するだけかもしれない。そのような実施形態では、アプリケーション層から始まる書き込み操作を調整するとき、ミラーVDEV1402は、対応するクラウドインターフェースデバイス502を用いて、各書き込み操作が複数のクラウドオブジェクトストア404に関して同期的に実行されるように、書き込み操作を調整し得る。読み取り操作については、上流コンポーネント(例えば、I/Oパイプライン224、DMU218など)は、読み取り操作についてはミラーVDEV1402を迂回し得、クラウドオブジェクトストア404のうちの1つでの読み取り操作を実行するためにクラウドインターフェースデバイス502のうちの1つに直接読み取り操作をルーティングし得る。この例に示されるように、クラウドストアパフォーマンスモニタコンポーネント1625を用いて、クラウドストアパフォーマンスデータを受信/判断し、パフォーマンスデータに基づいて特定のクラウドオブジェクトストア404に読み取り操作をルーティングし得る。例えば、クラウドストアパフォーマンスモニタ1625(I/Oパイプライン内、DMU218内、デバイス層内の別個の仮想デバイス226として、またはファイルシステム1600内の他の場所に実装され得る)は、ミラーリングされたクラウドオブジェクトストア404の各々によって実行されたある数の以前の読み取り操作を評価および分析し得る。以前の読み取り操作を実行する際のクラウドオブジェクトストア404のパフォーマンスの評価に基づいて、クラウドストアパフォーマンスモニタ1625は、クラウドオブジェクトストア404の最も高性能なもののリアルタイム選択を実行し、読み取り操作をそのクラウドオブジェクトストア404にルーティングし得る。これらの例は、ミラーVDEV1402がクラウドデータオブジェクトストア404に関して(および/またはローカルストレージ228に関して)読み取り操作を調整しない実施形態に関するものであるが、他の実施形態では、ミラーVDEV1402は、ファイルシステム1600のアプリケーション層から生じる読み取りおよび書き込みI/O操作の両方を調整し得る。
【0169】
ここで
図17を参照して、ネットワークファイルシステム1700のさらに別の例が示
されている。この例におけるネットワークファイルシステム1700は、上述のファイルシステム1600と同様の(または同一の)態様で実装されてもよい。上記の例のように、ファイルシステム1700は、複数(例えば、2つ以上)のクラウドデータオブジェクトストア404にわたる同期ミラーリングをサポートするように構成され得る。さらに、この例では、ファイルシステム1700は、クラウドデータオブジェクトストア404および別個のローカルデータオブジェクトストア416の両方にわたって同期ミラーリングをサポートすることができる。したがって、この例のファイルシステム1700は、ハイブリッドクラウドストレージシステム400のネットワークファイルシステム200-2の例のように、上述したZFSファイルシステムの様々な実施形態と同様のコンポーネントを含み得る。その例のように、ファイルシステム1700は、1以上のクラウドデータオブジェクトストアとオンプレミスで(例えば同じデータセンター内に)残りのファイルシステム1700のコンポーネントとともに記憶されるローカルデータストア416との間の同期ミラーリングをサポートするように構成される。例示的なツリー階層はこの例には示されていないが、ローカルデータストア416および各別々のクラウドストア404の両方は、ファイルシステム1700のための論理ブロックツリー階層を含む同一のデータブロックのセットを記憶し得る。加えて、DMU218からの通信は、I/Oパイプライン224およびミラーVDEV1402に向けられ得、そのような通信に応答して、ミラーVDEV1402は、様々なバックエンドデータストア上でデータ操作を実行するために、通信をVDEV226およびクラウドインターフェースデバイス502に向けてもよい。したがって、ミラーVDEV1402は、ローカルストレージ228とクラウドデータオブジェクトストア404の両方に関してI/O操作を調整することができる。したがって、上述のクラウドデータミラーリング技法および例をファイルシステム1700において同様に(または同一に)実行して、1以上のクラウドオブジェクトストア404とローカルデータストア416との間の移行、レプリケーション、および他の同期ミラーリング技法をサポートし得る。
【0170】
いくつかの実施形態では、ファイルシステム1700で用いられる同期ミラー技法は、各クラウドオブジェクトストア404内およびローカルデータストア416内においても、ファイルデータを含む論理ブロックおよび/またはメタデータを含む論理ブロックの同じ構成、ならびにそれらの論理ブロックの、記憶される物理データオブジェクトへの同じ配置を記憶することを含み得る。しかしながら、他の実施形態では、クラウドオブジェクトストア404およびローカルデータストア416がファイルシステム1700に対応する論理データブロックの同じツリー階層を記憶する限り、クラウドオブジェクトストア404は、ローカルデータストア416内に記憶される物理データオブジェクトとは異なる数、サイズ、および/または構成の物理データオブジェクトを記憶し得る。
【0171】
上記のように、各I/O操作の同期ミラーリングは、ファイルレベルではなくオブジェクトレベルで実行されてもよい。各I/O操作でのデータレプリケーションは、ファイルシステム1700がクラウドアクセスのレイテンシをマスキングするローカルストレージ読み取りパフォーマンスを達成することを可能にし得る。したがって、この例に示されるように、ファイルシステム1700は、大部分の読み取り操作に対するクラウドレイテンシを回避するために、ローカルデータストア416から読み取りを行い得る。ファイルシステム1700が、データストア416内のローカルデータが欠落しているか破損していると判断した場合にのみ、ファイルシステム1700は、所望のデータのクラウドコピーを読み取るために、クラウドオブジェクトストア404の1つにアクセスする必要がある。そのような例外は、クラウドアクセスのレイテンシが最小化されるように、オブジェクト単位で実行されてもよい。したがって、この例に示されるように、いくつかの実施形態におけるファイルシステム1700は、上述のように、様々なタイプの読み取り操作に関してクラウドストアパフォーマンスを分析するためにクラウドストアパフォーマンスモニタ1625を含む必要はない。むしろ、この例では、すべての読み取り操作は、ミラーV
DEV1402を迂回して、ローカルデータオブジェクトストア416にアクセスするように構成されたVDEV226に直接与えることができる。しかし、上記の例のように、ファイルシステム1700内のミラーVDEV1402は、クラウドデータオブジェクトストア404およびローカルデータストア416に関する書き込み操作を調整するためにも用いられ得る。アプリケーション層から始まる書き込み操作を調整するとき、ミラーVDEV1402は、各書き込み操作が、複数のクラウドオブジェクトストア404に関しては対応するクラウドインターフェースデバイス502を用い、ローカルデータストア416に関しては適切なVDEV226を用いて、同期的に実行されるように、書き込み操作を調整し得る。
【0172】
ここで
図18を参照して、ネットワークファイルシステムから複数のクラウドデータオブジェクトストアにわたるデータの同期ミラーリングの例示的なプロセスを示すブロック図が示されている。この例で説明される同期ミラーリングプロセスは、上述のように、クラウドデータの移行、レプリケーション、および/または一時的なクラウドベースの展開(例えば開発テスト)環境の作成に対応し得る。さらに、この例示的なプロセスにおけるステップは、ファイルシステム1600に示されるように、1つのクラウドオブジェクトストア404aから別のクラウドオブジェクトストア404bへのファイルシステムデータの同期ミラーリングに関して説明される。しかしながら、他の例では、類似のまたは同一の技法を、クラウドオブジェクトストア404からローカルデータストア416への、またはその逆の、ファイルシステムデータの同期ミラーリングのために用いることができる。
【0173】
このプロセスのステップは、例えば、様々なクラウドインターフェースデバイス502および他のVDEV226と関連して、ミラーVDEV1402、I/Oパイプライン224、および/またはDMU218などの、上述したファイルシステム1600および/またはファイルシステム1700内のコンポーネントによって実行することができる。例えば、上述のように、ミラーVDEV1402は、論理ツリー階層を記憶する第1のクラウドオブジェクトストア404a内の特定のデータオブジェクトの取得を開始し、続いて、第2のクラウドオブジェクトストア404b上において同一のデータオブジェクトのセットの作成および書き込みを開始し、それによって論理ツリー階層の同一のインスタンスを記憶することによって、クラウドデータ移行および/またはレプリケーションプロセスを調整し得る。しかしながら、他の実施形態では、以下に説明するステップは、I/Oパイプライン224および/またはDMU218など、ミラーVDEV1402以外のファイルシステムコンポーネントによって部分的にまたは全体的に実行され得る。また、本明細書に記載のプロセス機能は、上記のファイルシステム(例えば、1600および1700)の特定の実施形態に限定されず、本明細書でサポートされている様々な他のコンピューティング環境上で実行することができることも理解されたい。
【0174】
ブロック1802において、ファイルシステムデータを記憶する(少なくとも)1つのクラウドオブジェクトストア404aを有するファイルシステム1600内のミラーVDEV1402は、ファイルシステムデータがミラーリングされるべき第2のクラウドオブジェクトストア404bを検出し得る。上述のように、ブロック1802で第2のクラウドオブジェクトストア404bへの同期ミラーリングを開始するという判断は、2つのクラウドオブジェクトストア404aと404bとの間のクラウドデータ移行の開始、二次バックアップクラウドオブジェクトストア404bへのクラウドデータレプリケーションの開始、および/または第2のクラウドオブジェクトストア404b上の一時的な展開環境の作成に対応する。
【0175】
ブロック1802における判断は、ファイルシステム管理者を介して受信された命令および/またはミラーVDEV1402ソフトウェアによって実行される様々な自動化され
た判断に対応し得る。例えば、ミラーVDEV1402は、利用可能なクラウドインターフェースデバイス502および/または各関連付けられたクラウドオブジェクトストア404で記憶されている現在のデータオブジェクトのセットを監視するように構成され得、特定の状態またはイベントの検出に基づいて自動的にクラウド間同期ミラーリングを開始し得る。一例として、ミラーVDEV1402は、第1のクラウドオブジェクトストア404aに関連する潜在的な性能または信頼性の問題(例えば、今後の予定されているメンテナンス、システムエラー、クラウドストレージサイズ制限の接近など)を検出した場合、ミラーVDEV1402は、ブロック1802において、第1のクラウドオブジェクトストア404aから第2のクラウドオブジェクトストア404bへのデータの移行またはレプリケーションを自動的に開始し得る。そのような例では、同期されたミラーリングプロセスが開始されるべきであると判断するためにミラーVDEV1402によって実行される自動化されたプロセスは、複数の利用可能なクラウドデータオブジェクトストア404の分析、ならびにストレージの可用性、価格、性能および/またはその他の要因に基づく、移行/レプリケーションプロセスの受信側となる特定のクラウドデータオブジェクトストア404bの選択を含み得る。追加または代替として、ブロック1802における判断は、ファイルシステムデータのツリー階層を記憶する第1のクラウドオブジェクトストア404aと第2のクラウドオブジェクトストア404bとの間の同期されたミラーリングプロセスを開始するよう管理ユーザインターフェースを介して受信される要求または命令に対応し得る。
【0176】
ブロック1804で、ミラーVDEV1402は、第1のクラウドインターフェースデバイス502aを介して、第1のクラウドオブジェクトストア404aにデータオブジェクトを要求しそれを受信することを開始し得る。例えば、ミラーVDEV1402は、1以上のデータオブジェクト要求を第1のクラウドインターフェースデバイス502aに送信し得、第1のクラウドインターフェースデバイス502aはその要求を受信し得、対応するクラウドインターフェース要求をクラウドオブジェクトストア404aに送信し得る。いくつかの実施形態では、第1のクラウドインターフェースデバイス502aは、クラウドオブジェクトストア404a内のクラウドストレージオブジェクトのマッピングを用いて要求を調整し得る。例えば、クラウドインターフェースデバイス502aは、論理ツリー階層に従ってクラウドデータオブジェクトとして記憶されるファイルシステムデータの全部または一部を識別して要求し得る。要求に応答して、クラウドインターフェースデバイス502aは、オブジェクトインターフェース要求に応答してデータオブジェクトを受信し、そ(れら)のデータオブジェクトをミラーVDEV1402に返し得る。
【0177】
ブロック1806では、ミラーVDEV1402は、ブロック1804で受信したデータオブジェクトの第2のクラウドオブジェクトストア404bへの書き込みを開始し得る。例えば、ミラーVDEV1402は、同一のデータオブジェクトのセットの作成を開始し、同一のデータのセット(例えば、ファイルシステムに対応するファイルデータおよび/または別途のメタデータを有する様々な論理ブロック)を記憶するよう、一連のオブジェクト作成コマンドおよび/または書き込み操作を判断し得る。ブロック1806において、ミラーVDEV1402は、判断された作成/書き込み操作を、論理ツリー階層の移行および/またはレプリケーションコピーが作成されることになる第2のクラウドオブジェクトストア404bに関連するクラウドインターフェースデバイス502bに送信し得る。いくつかの実施形態では、この例の様々なステップは、上で論じた順序ではなく同時に実行することができる。例えば、ミラーVDEV1402の一部は第1のクラウドオブジェクトストア404aのクラウドインターフェースデバイス502aを指し得、ミラーVDEV1402の別の一部は第1のクラウドオブジェクトストア404bのクラウドインターフェースデバイス502bを指し得、その後、第1のクラウドオブジェクトストア404bから第2のクラウドオブジェクトストア404bへのファイルシステムデータのミラーリングされたコピーを生成するために、迅速な一連の読み書き操作が実行されても
よい。
【0178】
ブロック1802~1808の操作を介して実行される同期ミラーリングは、ファイルレベルではなくオブジェクトレベルで実行されてもよい。すなわち、様々な実施形態において、ステップ1804および1808はファイルの取得および記憶に対応しない。むしろ、第1のクラウドオブジェクトストア404aに記憶される各データオブジェクトは、取得され、コピーされ、第2のクラウドオブジェクトストア404bに同一のデータオブジェクトとして記憶されてもよく、各データオブジェクトは、ファイルデータまたは別途記憶されたメタデータに対応する1以上の論理データブロックを記憶する。したがって、この例におけるブロック1802~1808の完了時に、第1および第2のクラウドオブジェクトストア404aおよび404bは、ファイルデータを含む論理ブロックおよび/またはメタデータを含む論理ブロックの同じ構成、ならびにそれらのそれぞれの物理ストレージシステム内に記憶される同一のデータオブジェクトのセットへのそれらの論理ブロックの同じ配置を記憶することができる。
【0179】
ここで
図19を参照して、複数のクラウドデータオブジェクトストア404および/またはローカルデータオブジェクトストア416にわたるファイルシステムデータの同期ミラーリングをサポートするネットワークファイルシステムによって要求を受信および処理する例示的なプロセスを示すブロック図が示されている。この例における要求は、ファイルシステム1600内のファイルデータおよび/またはファイルの対応するメタデータ属性の取得、修正、および/または削除の要求に対応し得る。この例示的なプロセスは、ファイルシステム1600および1700で上述したように、複数のクラウドオブジェクトストア404間および/またはクラウドオブジェクトストア404とローカルデータストア416との間のファイルシステムデータの同期ミラーリングに関して以下に説明される。したがって、このプロセスのステップは、例えば、様々なクラウドインターフェースデバイス502および他のVDEV226との関連でミラーVDEV1402によって実行され得る。しかしながら、他の実施形態では、以下に説明するステップは、I/Oパイプライン224および/またはDMU218など、ミラーVDEV1402以外のファイルシステムコンポーネントによって部分的にまたは全体的に実行され得る。また、本明細書に記載のプロセス機能は、上記のファイルシステム(例えば、1600および1700)の特定の実施形態に限定されず、本明細書でサポートされている様々な他のコンピューティング環境上で実行することができることも理解されたい。
【0180】
ブロック1902で、ファイルシステム1600(または1700など)は、例えばファイルデータの取得、データの書き込みおよび/または修正などの特定の操作を実行するためのPOSIX準拠の要求を受信し得る。ブロック1902の要求は、アプリケーションから、ファイルシステム1600のアプリケーション層またはインターフェース層を介して受信されてもよい。ブロック1904で、POSIX準拠の要求は、オペレーティングシステムからシステムコールインターフェース208を介してDMU218に転送され得る。ブロック1906において、DMU218は、データオブジェクトに対する操作を実行するための要求を、1以上のクラウドオブジェクトストア404および/またはローカルシステムストレージ416内の物理的位置に向けられる読み取りおよび/または書き込み操作を実行するための要求(例えば、I/O要求)に直接変換し得る。次に、DMU218は、I/O要求をSPA内の1以上のコンポーネント、例えばI/Oパイプライン224(および/またはミラーVDEV1402)に転送し得る。
【0181】
ブロック1908において、I/Oパイプライン224は、変換された要求がクラウドオブジェクトストア404および/またはローカルシステムストレージ416内で実行されるべき何らかの読み取り操作を必要とするかどうかを判定し得る。例えば、アプリケーションから受信されるファイルデータ、ファイルプロパティ、および類似の要求の、当該
アプリケーションからの取得は、バックエンド物理ストレージシステム上で実行されるべき読み取り操作を必要としてもよい。
【0182】
そのような場合(1908:Yes)、ブロック1910において、I/Oパイプライン224は、どのオブジェクトストレージプール(したがってどの対応するバックエンド物理ストレージシステム)が要求された読み取り操作を実行するかを判断し得る。例えば、ファイルシステム1600に関して上述したように、I/Oパイプライン224、DMU218などは、読み取り操作に対してミラーVDEV1402を迂回し、読み取り操作を実行のためにクラウドインターフェースデバイス502のうちの1つに直接ルーティングすることができる。例えば、ブロック1910は、クラウドストアパフォーマンスモニタコンポーネント1625および/または同様のコンポーネントを用いて、複数のクラウドオブジェクトストア404についてパフォーマンスデータを受信し評価することを含み得る。例えば、クラウドストアパフォーマンスモニタ1625は、ミラーリングされたクラウドオブジェクトストア404の各々によって実行されるいくつかの以前の読み取り操作を評価および分析し、その評価に基づいて、読み取り操作を処理するための最も高性能なクラウドオブジェクトストア404を選択し得る。他の例では、同様のクラウドストアパフォーマンスモニタコンポーネント1625は、ブロック1910での判断を、要求されたデータを記憶する利用可能なクラウドオブジェクトストア404の性能に基づかせるかわりに、またはそうすることに加えて、価格、信頼性、現在の処理負荷などの他のクラウドオブジェクトストア特性に基づいて、実行し得る。
【0183】
他の実施形態では、例えば、ファイルシステム1700を参照して上述したように、大部分の読み取り操作に対して存在し得るクラウドレイテンシを回避するために、I/Oパイプライン224は、ローカルデータオブジェクトストア416にアクセスするように構成されたVDEV226に大部分(またはすべて)の読み取り操作を直接ルーティングするように構成され得る。例えば、I/Oパイプライン224は、データストア416内のローカルデータが欠落または破損していると判断した場合にのみ、I/Oパイプライン224は読み取り要求をクラウドオブジェクトストア404のうちの1つにルーティングし得る。そのような例外は、クラウドアクセスのレイテンシが最小化されるように、オブジェクト単位で実行されてもよい。
【0184】
ブロック1912において、I/Oパイプライン224は、ブロック1910において判断されたバックエンドオブジェクトストア(例えば、404a、404b、416など)からの1以上のデータオブジェクトの読み取りを開始することができる。いくつかの実施形態では、ARC222は、1以上のデータオブジェクトのキャッシュされたバージョンについて最初にチェックされ、キャッシュされたバージョンが見つからない場合、ローカルオブジェクトストア416または判断されたクラウドオブジェクトストア404から1以上のデータオブジェクトを読み取る試みが行われ得る。様々な実施形態において、ブロック1912における読み取りの開始は、DMU218、ミラーVDEV1402、I/Oパイプライン224、および/または選択されたオブジェクトストアに対応するクラウドインターフェースデバイス502もしくはVDEV226のうちの1つまたはそれらの組み合わせによって実行されることができる。
【0185】
ブロック1914において、I/Oパイプライン224は、変換された要求がクラウドオブジェクトストア404および/またはローカルシステムストレージ416内で実行されるべき何らかの書き込み操作を必要とするかどうかを判定し得る。例えば、ファイルの修正の作成、ファイル属性の更新、およびアプリケーションから受信される同様の要求は、バックエンド物理ストレージシステム上で実行されるべき書き込み操作を必要とし得る。この例では、ブロック1908の読み取り操作の判断はブロック1914の書き込み操作の判断の前に行われるが、これらの判断およびその後の関連するブロックの順序は逆に
されてもよく、または他の例では並行して行われてもよい。
【0186】
ブロック1916で、I/Oパイプライン224は、各バックエンドオブジェクトストア(例えば、ローカルオブジェクトストア416および/またはクラウドオブジェクトストア404)にI/O操作ごとに同期データレプリケーションで1以上のデータオブジェクトの書き込みを開始し得る。I/Oパイプライン224は、判断された書き込み操作をミラーVDEV1402に渡し得、ミラーVDEV1402は、各書き込み操作が、複数のクラウドオブジェクトストア404に関しては対応するクラウドインターフェース502を用い、ローカルデータストア416に関しては適切なVDEV226を用いて、同期的に実行されるように、アプリケーション層で始まる書き込み操作を調整することができる。
【0187】
例えば、ブロック1918によって示されるように、ミラーVDEV1402は、書き込み操作の第1のインスタンスを1以上のVDEV226に向け得る。いくつかの実施形態では、データオブジェクトをローカルデータストア416に書き込むために、(例えば、
図3A~
図3Dを考慮して)上に開示されたCOWプロシージャが進行し得る。加えて、ブロック1920によって示されるように、ミラーVDEV1402は、書き込み操作の第2のインスタンスをクラウドストレージアプライアンス404のクラウドインターフェースデバイス502に向け得る。この実施形態では書き込み操作のインスタンスは2つしか示されていないが、ファイルシステムデータのツリー階層は、追加のデータオブジェクトストア(例えば、複数のクラウドオブジェクトストア404)にわたって同期してミラーリングされ得、したがって、他の実施形態においては、書き込み操作の追加のインスタンスを開始し得る。
【0188】
図20は、本開示に従うある実施形態を実現するための分散型システム2000の簡略図を示す。示されている実施形態では、分散型システム2000は、1つ以上のクライアントコンピューティングデバイス2002,2004,2006および2008を含み、それらは、1つ以上のネットワーク2010を介してウェブブラウザ、所有権付きクライアント(たとえばオラクルフォームズ(Oracle Forms))などのクライアントアプリケーションを実行および動作させるように構成される。サーバ2012は、リモートクライアントコンピューティングデバイス2002,2004,2006および2008とネットワーク2010を介して通信可能に結合されてもよい。
【0189】
さまざまな実施形態では、サーバ2012は、システムのコンポーネントのうちの1つ以上によって提供される1つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合されてもよい。いくつかの実施形態では、これらのサービスは、ウェブベースのサービスもしくはクラウドサービスとして、またはソフトウェア・アズ・ア・サービス(SaaS)モデルの下で、クライアントコンピューティングデバイス2002,2004,2006および/または2008のユーザに対して提供されてもよい。クライアントコンピューティングデバイス2002,2004,2006および/または2008を動作させるユーザは、次いで、1つ以上のクライアントアプリケーションを利用してサーバ2012と対話して、これらのコンポーネントによって提供されるサービスを利用してもよい。
【0190】
図に示される構成では、システム2000のソフトウェアコンポーネント2018,2020および2022は、サーバ2012上で実現されるものとして示されている。他の実施形態では、システム2000のコンポーネントのうちの1つ以上および/またはこれらのコンポーネントによって提供されるサービスは、クライアントコンピューティングデバイス2002,2004,2006および/または2008のうちの1つ以上によって実現されてもよい。クライアントコンピューティングデバイスを動作させるユーザは、次
いで、1つ以上のクライアントアプリケーションを利用して、これらのコンポーネントによって提供されるサービスを用いてもよい。これらのコンポーネントは、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせで実現されてもよい。分散型システム2000とは異なってもよいさまざまな異なるシステム構成が可能であることが理解されるべきである。図に示される実施形態は、したがって、実施形態のシステムを実現するための分散型システムの一例であり、限定的であるよう意図されるものではない。
【0191】
クライアントコンピューティングデバイス2002,2004,2006および/または2008は、携帯可能な手持ち式のデバイス(たとえば、iPhone(登録商標)、セルラー電話、iPad(登録商標)、コンピューティングタブレット、携帯情報端末(PDA))またはウェアラブルデバイス(たとえばGoogle Glass(登録商標)頭部装着型ディスプレイ)であってもよく、Microsoft Windows Mobile(登録商標)などのソフトウェア、および/もしくは、iOS、Windows Phone、Android、BlackBerry、Palm OSなどのさまざまなモバイルオペレーティングシステムを実行し、インターネット、電子メール、ショートメッセージサービス(SMS)、BlackBerry(登録商標)、または他のイネーブルにされた通信プロトコルであってもよい。クライアントコンピューティングデバイスは、汎用パーソナルコンピュータであってもよく、一例として、Microsoft Windows(登録商標)、Apple Macintosh(登録商標)および/またはLinux(登録商標)オペレーティングシステムのさまざまなバージョンを実行するパーソナルコンピュータおよび/またはラップトップコンピュータを含むことができる。クライアントコンピューティングデバイスは、たとえばGoogle Chrome OSなどのさまざまなGNU/Linuxオペレーティングシステムを限定を伴うことなく含む、さまざまな市場で入手可能なUNIX(登録商標)またはUNIXのようなオペレーティングシステムのいずれかを実行するワークステーションコンピュータであり得る。代替的に、または加えて、クライアントコンピューティングデバイス2002,2004,2006および2008は、ネットワーク2010を介して通信することができる、シンクライアントコンピュータ、インターネットにより可能化されるゲームシステム(たとえば、Kinect(登録商標)ジェスチャ入力デバイスを伴うかまたは伴わないMicrosoft Xboxゲームコンソール)および/または個人メッセージ伝達デバイスなどの任意の他の電子デバイスをであってもよい。
【0192】
例示の分散型システム2000は、4つのクライアントコンピューティングデバイスとともに示されているが、任意の数のクライアントコンピューティングデバイスがサポートされてもよい。センサを伴うデバイスなど、他のデバイスがサーバ2012と対話してもよい。
【0193】
分散型システム2000におけるネットワーク2010は、TCP/IP(伝送制御プロトコル/インターネットプロトコル)、SNA(システムネットワークアーキテクチャ)、IPX(インターネットパケット交換)、AppleTalkなどを限定を伴うことなく含む、さまざまな市場で入手可能なプロトコルのうちのいずれかを用いてデータ通信をサポートすることができる、当業者が精通している任意のタイプのネットワークであってもよい。単に一例として、ネットワーク2010は、イーサネット(登録商標)、トークンリングなどに基づくものなどのローカルエリアネットワーク(LAN)であってもよい。ネットワーク2010は、ワイドエリアネットワークおよびインターネットであってもよい。ネットワーク2010は、仮想ネットワークを含み得て、当該仮想ネットワークは、仮想プライベートネットワーク(virtual private network:VPN)、イントラネット、エクストラネット、公衆交換電話網(public switched telephone network:PSTN)、赤外線ネットワーク、無線ネットワーク(たとえば、米国電気電子学会(IEEE)802.11のプロトコ
ル一式、ブルートゥース(登録商標)、および/もしくはその他の無線プロトコルのうちのいずれかの下で動作するネットワーク)、ならびに/またはこれらのいずれかの組み合わせおよび/もしくは他のネットワークを含むが、それらに限定されるものではない。
【0194】
サーバ2012は、1つ以上の汎用コンピュータ、専用のサーバコンピュータ(一例としてPC(パーソナルコンピュータ)サーバ、UNIX(登録商標)サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウント型サーバなどを含む)、サーバファーム、サーバクラスタ、またはその他の適切な構成および/もしくは組み合わせで構成されてもよい。さまざまな実施形態において、サーバ2012は、前述の開示に記載される1つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合されてもよい。たとえば、サーバ2012は、本開示の実施形態に従って上記の処理を実行するためのサーバに対応してもよい。
【0195】
サーバ2012は、上記のもののうちのいずれかを含むオペレーティングシステム、および任意の市場で入手可能なサーバオペレーティングシステムを実行してもよい。サーバ2012は、HTTP(ハイパーテキスト転送プロトコル)サーバ、FTP(ファイル転送プロトコル)サーバ、CGI(コモンゲートウェイインターフェイス)サーバ、JAVA(登録商標)サーバ、データベースサーバなどを含むさまざまなさらに他のサーバアプリケーションおよび/または中間層アプリケーションのうちのいずれかも実行してもよい。例示的なデータベースサーバは、オラクル、マイクロソフト、サイベース、IBM(インターナショナルビジネスマシンズ)などから市場で入手可能なものを含むが、それらに限定されるものではない。
【0196】
いくつかの実現例では、サーバ2012は、クライアントコンピューティングデバイス2002,2004,2006および2008のユーザから受信されるデータフィードおよび/またはイベント更新情報を解析および整理統合するための1つ以上のアプリケーションを含んでもよい。一例として、データフィードおよび/またはイベント更新情報は、センサデータアプリケーション、金融株式相場表示板、ネットワーク性能測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム解析ツール、自動車交通監視などに関連するリアルタイムのイベントを含んでもよい、1つ以上の第三者情報源および連続データストリームから受信される、Twitter(登録商標)フィード、Facebook(登録商標)更新情報またはリアルタイムの更新情報を含んでもよいが、それらに限定されるものではない。サーバ2012は、データフィードおよび/またはリアルタイムのイベントをクライアントコンピューティングデバイス2002,2004,2006および2008の1つ以上の表示デバイスを介して表示するための1つ以上のアプリケーションも含んでもよい。
【0197】
分散型システム2000は、1つ以上のデータベース2014および2016も含んでもよい。データベース2014および2016は、さまざまな位置にあってもよい。一例として、データベース2014および2016のうちの1つ以上は、サーバ2012に局在する(および/またはサーバ2012に常駐する)非一時的な記憶媒体にあってもよい。代替的に、データベース2014および2016は、サーバ2012から遠隔にあり、ネットワークベースまたは専用の接続を介してサーバ2012と通信してもよい。一組の実施形態では、データベース2014および2016は、記憶域ネットワーク(storage-area network:SAN)にあってもよい。同様に、サーバ2012に帰する機能を実行するための任意の必要なファイルが、適宜、サーバ2012上においてローカルに、および/または遠隔で格納されてもよい。一組の実施形態では、データベース2014および2016は、SQLフォーマットされたコマンドに応答してデータを格納、更新および検索取得するように適合される、オラクルによって提供されるデータベースなどのリレーショナルデータベースを含んでもよい。
【0198】
図21は、本開示のある実施形態に従って、システムの1つ以上のコンポーネントによって提供されるサービスがクラウドサービスとして提供されてもよいシステム環境2100の1つ以上のコンポーネントの簡略ブロック図である。示される実施形態において、システム環境2100は、クラウドサービスを提供するクラウドインフラストラクチャシステム2102と対話するようユーザによって用いられてもよい1つ以上のクライアントコンピューティングデバイス2104,2106および2108を含む。クライアントコンピューティングデバイスは、クラウドインフラストラクチャシステム2102と対話して、クラウドインフラストラクチャシステム2102によって提供されるサービスを用いるよう、クライアントコンピューティングデバイスのユーザによって用いられてもよい、ウェブブラウザ、所有権付きクライアントアプリケーション(たとえばOracle Forms)または何らかの他のアプリケーションなどのようなクライアントアプリケーションを動作させるよう構成されてもよい。
【0199】
図に示されるクラウドインフラストラクチャシステム2102は図示されるもの以外のコンポーネントを有してもよいことが理解されるべきである。さらに、図に示される実施形態は、本発明の実施形態を組み込んでもよいクラウドインフラストラクチャシステムの一例に過ぎない。いくつかの他の実施形態において、クラウドインフラストラクチャシステム2102は、図に示されるよりも多いかもしくは少ないコンポーネントを有してもよく、2つ以上のコンポーネントを組み合わせてもよく、またはコンポーネントの異なる構成もしくは配置を有してもよい。
【0200】
クライアントコンピューティングデバイス2104,2106および2108は、2002,2004,2006および2008に対して上記されたものと同様のデバイスであってもよい。
【0201】
例示的なシステム環境2100は3つのクライアントコンピューティングデバイスとともに示されているが、任意の数のクライアントコンピューティングデバイスがサポートされてもよい。センサを伴うデバイスなどのような他のデバイスがクラウドインフラストラクチャシステム2102と対話してもよい。
【0202】
ネットワーク2110はクライアント2104,2106および2108とクラウドインフラストラクチャシステム2102との間におけるデータの通信および交換を容易にし得る。各ネットワークは、ネットワーク2010に対して上記されたものを含む、さまざまな市場で入手可能なプロトコルの任意のものを用いてデータ通信をサポートすることができる、当業者が精通している任意のタイプのネットワークであってもよい。クラウドインフラストラクチャシステム2102は、サーバ2012に対して上記されたものを含んでもよい1つ以上のコンピュータおよび/またはサーバを備えてもよい。
【0203】
特定の実施形態において、クラウドインフラストラクチャシステムによって提供されるサービスは、オンラインデータストレージおよびバックアップソリューション、ウェブに基づくeメールサービス、運営管理されるオフィススイートおよびドキュメントコラボレーションサービス、データベース処理、管理される技術サポートサービスなどのような、オンデマンドでクラウドインフラストラクチャシステムのユーザに利用可能にされるサービスのホストを含んでもよい。クラウドインフラストラクチャシステムによって提供されるサービスは動的にスケーリングしてそのユーザのニーズを満たすことができる。クラウドインフラストラクチャシステムによって提供されるあるサービスのある具体的なインスタンス化は本明細書では「サービスインスタンス」と呼ばれる。一般的に、クラウドサービスプロバイダのシステムからインターネットなどのような通信ネットワークを介してユーザに利用可能にされる任意のサービスは「クラウドサービス」と呼ばれる。典型的には
、パブリックなクラウド環境においては、クラウドサービスプロバイダのシステムを形成するサーバおよびシステムは顧客自身のオンプレミスのサーバおよびシステムとは異なる。たとえば、クラウドサービスプロバイダのシステムはアプリケーションを運営管理してもよく、ユーザは、インターネットなどのような通信ネットワークを介して、オンデマンドで、アプリケーションをオーダーし使用してもよい。
【0204】
いくつかの例では、コンピュータネットワーククラウドインフラストラクチャにおけるサービスは、ストレージ、運営管理されるデータベース、運営管理されるウェブサーバ、ソフトウェアアプリケーション、またはクラウドベンダーによってユーザに提供されるかもしくは他の態様で当該技術分野において公知であるような他のサービスに対する保護されたコンピュータネットワークアクセスを含んでもよい。たとえば、サービスは、クラウド上の遠隔ストレージに対するインターネットを介してのパスワード保護されたアクセスを含むことができる。別の例として、サービスは、ネットワーク接続された開発者による個人的な使用のために、ウェブサービスに基づく運営管理されたリレーショナルデータベースおよびスクリプト言語ミドルウェアエンジンを含むことができる。別の例として、サービスは、クラウドベンダーのウェブサイトにおいて運営管理されるeメールソフトウェアアプリケーションに対するアクセスを含むことができる。
【0205】
特定の実施形態において、クラウドインフラストラクチャシステム2102は、セルフサービスの、サブスクリプションに基づく、順応性を持ってスケーラブルで、信頼性があり、非常に利用可能性があり、およびセキュリティ上安全な態様で顧客に対して配送されるアプリケーションの組、ミドルウェア、データベースサービス提供を含んでもよい。そのようなクラウドインフラストラクチャシステムの一例は本譲受人によって提供されるOracle Public Cloudである。
【0206】
さまざまな実施形態において、クラウドインフラストラクチャシステム2102は、クラウドインフラストラクチャシステム2102によって提供されるサービスに対する顧客のサブスクリプションを自動的にプロビジョニング、管理、およびトラッキングするように構成されてもよい。クラウドインフラストラクチャシステム2102はクラウドサービスを異なる開発モデルを介して提供してもよい。たとえば、サービスは、クラウドインフラストラクチャシステム2102が(たとえばOracleによって所有される)クラウドサービスを販売する組織によって所有され、サービスが一般大衆または異なる業界エンタープライズに対して利用可能にされるパブリッククラウドモデルの下で提供されてもよい。別の例として、サービスは、クラウドインフラストラクチャシステム2102が単一の組織に対してのみ動作され、その組織内における1つ以上のエンティティに対してサービスを提供してもよい、プライベートクラウドモデルの下で提供されてもよい。クラウドサービスは、さらに、クラウドインフラストラクチャシステム2102およびクラウドインフラストラクチャシステム2102によって提供されるサービスが関係付けられるコミュニティにおけるいくつかの組織によって共有されるコミュニティクラウドモデルの下で提供されてもよい。クラウドサービスは、さらに、2つ以上の異なるモデルの組合せであるハイブリッドクラウドモデルの下で提供されてもよい。
【0207】
いくつかの実施形態において、クラウドインフラストラクチャシステム2102によって提供されるサービスは、Software as a Service(SaaS)カテゴリ、Platform as a Service(PaaS)カテゴリ、Infrastructure as a Service(IaaS)カテゴリ、またはハイブリッドサービスを含む他のサービスのカテゴリの下で提供される、1つ以上のサービスを含んでもよい。顧客は、サブスクリプションオーダーを介して、クラウドインフラストラクチャシステム2102によって提供される1つ以上のサービスをオーダーしてもよい。クラウドインフラストラクチャシステム2102は、次いで、処理を実行して、顧客のサ
ブスクリプションオーダーにおけるサービスを提供する。
【0208】
いくつかの実施形態において、クラウドインフラストラクチャシステム2102によって提供されるサービスは、限定を伴わずに、アプリケーションサービス、プラットフォームサービスおよびインフラストラクチャサービスを含んでもよい。いくつかの例では、アプリケーションサービスはクラウドインフラストラクチャシステムによってSaaSプラットフォームを介して提供されてもよい。SaaSプラットフォームは、SaaSカテゴリに入るクラウドサービスを提供するよう構成されてもよい。たとえば、SaaSプラットフォームは、一式のオンデマンドアプリケーションを統合された開発およびデプロイプラットフォーム上で構築し配送する能力を提供してもよい。SaaSプラットフォームは、SaaSサービスを提供するための基底のソフトウェアおよびインフラストラクチャを管理および制御してもよい。SaaSプラットフォームによって提供されるサービスを利用することによって、顧客はクラウドインフラストラクチャシステムにおいて実行されるアプリケーションを利用することができる。顧客は、別のライセンスおよびサポートを購入する必要なくアプリケーションサービスを獲得することができる。さまざまな異なるSaaSサービスが提供されてもよい。その例は、限定を伴うことなく、大きな組織に対する売上実績管理、エンタープライズ統合、および事業柔軟性に対するソリューションを提供するサービスを含む。
【0209】
いくつかの実施形態において、プラットフォームサービスはクラウドインフラストラクチャシステムによってPaaSプラットフォームを介して提供されてもよい。PaaSプラットフォームはPaaSカテゴリの下におけるクラウドサービスを提供するよう構成されてもよい。プラットフォームサービスの例は、限定を伴わずに、(Oracleなどのような)組織が既存のアプリケーションを共有される共通のアーキテクチャにおいて整理統合することができるサービス、およびプラットフォームによって提供される共有されるサービスをてこ入れする新たなアプリケーションを構築する能力を含んでもよい。PaaSプラットフォームはPaaSサービスを提供するための基底のソフトウェアおよびインフラストラクチャを管理および制御してもよい。顧客は、クラウドインフラストラクチャシステムによって提供されるPaaSサービスを、別のライセンスおよびサポートを購入する必要なく獲得することができる。プラットフォームサービスの例は、限定を伴わずに、Oracle Java Cloud Service(JCS)、Oracle Database Cloud Service(DBCS)などを含む。
【0210】
PaaSプラットフォームによって提供されるサービスを利用することによって、顧客は、クラウドインフラストラクチャシステムによってサポートされるプログラミング言語およびツールを使用することができ、デプロイされたサービスを制御することもできる。いくつかの実施形態において、クラウドインフラストラクチャシステムによって提供されるプラットフォームサービスは、データベースクラウドサービス、ミドルウェアクラウドサービス(たとえばOracle Fusion(登録商標) Middlewareサービス)、およびJavaクラウドサービスを含んでもよい。一実施形態において、データベースクラウドサービスは、組織がデータベース資源をプールし、顧客にDatabase as a Serviceをデータベースクラウドの形式で提供することを可能にする、共有されるサービスデプロイモデルをサポートしてもよい。ミドルウェアクラウドサービスは、顧客のためのプラットフォームを提供してさまざまなビジネスアプリケーションを開発およびデプロイしてもよく、Javaクラウドサービスは顧客のためのプラットフォームを提供してJavaアプリケーションをクラウドインフラストラクチャシステムにおいてデプロイしてもよい。
【0211】
さまざまな異なるインフラストラクチャサービスがIaaSプラットフォームによってクラウドインフラストラクチャシステムにおいて提供されてもよい。インフラストラクチ
ャサービスは、SaaSプラットフォームおよびPaaSプラットフォームによって提供されるサービスを利用する顧客に対するストレージ、ネットワーク、他の基礎的計算資源などのような基底の計算資源の管理および制御を容易にする。
【0212】
特定の実施形態において、クラウドインフラストラクチャシステム2102は、さらに、クラウドインフラストラクチャシステムの顧客に対してさまざまなサービスを提供するよう用いられる資源を提供するためのインフラストラクチャ資源2130を含んでもよい。一実施形態において、インフラストラクチャ資源2130は、PaaSプラットフォームおよびSaaSプラットフォームによって提供されるサービスを実行するよう、サーバ、ストレージおよびネットワーク接続資源などのような、ハードウェアの予め統合され最適化された組合せを含んでもよい。
【0213】
いくつかの実施形態において、クラウドインフラストラクチャシステム2102における資源は、複数のユーザによって共有され、要望に付き動的に再割当てされてもよい。加えて、資源はユーザに対して異なる時間ゾーンで割当てられてもよい。たとえば、クラウドインフラストラクチャシステム2130は、第1の時間ゾーンにおける第1の組のユーザがクラウドインフラストラクチャシステムの資源をある特定化された時間数の間利用することを可能にし、次いで、異なる時間ゾーンに位置する別の組のユーザに対する同じ資源の再割当てを可能にし、それによって、資源の利用を最大限にしてもよい。
【0214】
特定の実施形態において、クラウドインフラストラクチャシステム2102の異なるコンポーネントまたはモジュール、およびクラウドインフラストラクチャシステム2102によって提供されるサービスによって共有される、ある数の内部の共有されるサービス2132が提供されてもよい。これらの内部の共有されるサービスは、限定を伴うことなく、セキュリティおよびアイデンティティサービス、統合サービス、エンタープライズリポジトリサービス、エンタープライズマネージャサービス、ウイルススキャンおよびホワイトリストサービス、高可用性、バックアップおよびリカバリサービス、クラウドサポートを可能にするためのサービス、eメールサービス、通知サービス、ファイル転送サービスなどを含んでもよい。
【0215】
特定の実施形態において、クラウドインフラストラクチャシステム2102は、クラウドインフラストラクチャシステムにおいてクラウドサービス(たとえばSaaS、PaaS、およびIaaSサービス)の包括的な管理を提供してもよい。一実施形態において、クラウド管理機能は、クラウドインフラストラクチャシステム2102によって受信される顧客のサブスクリプションをプロビジョニングし、管理し、およびトラッキングする能力などを含んでもよい。
【0216】
ある実施形態において、図に示されるように、クラウド管理機能は、オーダー管理モジュール2120、オーダーオーケストレーションモジュール2122、オーダープロビジョニングモジュール2124、オーダー管理およびモニタリングモジュール2126、ならびにアイデンティティ管理モジュール2128などのような1つ以上のモジュールによって提供されてもよい。これらのモジュールは、1つ以上のコンピュータおよび/またはサーバを含むかもしくはそれらを用いて提供されてもよく、それらは汎用コンピュータ、特殊化されたサーバコンピュータ、サーバファーム、サーバクラスタ、または任意の他の適切な構成および/もしくは組合せであってもよい。
【0217】
例示的な動作2134においては、クライアントデバイス2104、2106または2108などのようなクライアントデバイスを用いる顧客は、クラウドインフラストラクチャシステム2102によって提供される1つ以上のサービスを要求すること、およびクラウドインフラストラクチャシステム2102によって提供される1つ以上のサービスに対
するサブスクリプションに対するオーダーを行うことによって、クラウドインフラストラクチャシステム2102と対話してもよい。特定の実施形態において、顧客は、クラウドユーザインターフェイス(UI)、クラウドUI2112、クラウドUI2114および/またはクラウドUI2116にアクセスし、サブスクリプションオーダーをこれらのUIを介して行ってもよい。顧客がオーダーを行うことに応答してクラウドインフラストラクチャシステム2102によって受取られるオーダー情報は、顧客を識別する情報、およびクラウドインフラストラクチャシステム2102によって提供される、その顧客が利用することを意図する1つ以上のサービスを含んでもよい。
【0218】
オーダーが顧客によってなされた後、オーダー情報はクラウドUI2112、2114および/または2116を介して受取られてもよい。
【0219】
動作2136において、オーダーはオーダーデータベース2118に格納される。オーダーデータベース2118は、クラウドインフラストラクチャシステム2118によって動作されるいくつかのデータベースの1つであり得、他のシステム要素との関連において動作され得る。
【0220】
動作2138で、オーダー情報はオーダー管理モジュール2120に転送される。いくつかの例では、オーダー管理モジュール2120は、オーダーを検証すること、および検証でそのオーダーを予約することなど、オーダーに関係付けられる請求および課金機能を実行するよう構成されてもよい。
【0221】
動作2140で、オーダーに関する情報がオーダーオーケストレーションモジュール2122に通信される。オーダーオーケストレーションモジュール2122は、オーダー情報を利用して、顧客によってなされたオーダーに対してサービスおよび資源のプロビジョニングをオーケストレーションしてもよい。いくつかの例では、オーダーオーケストレーションモジュール2122は、資源のプロビジョニングをオーケストレーションして、利用されるサービスを、オーダープロビジョニングモジュール2124のサービスを用いてサポートしてもよい。
【0222】
特定の実施形態において、オーダーオーケストレーションモジュール2122は、各オーダーに関連付けられるビジネスプロセスの管理を可能にし、ビジネスロジックを適用して、オーダーがプロビジョニングに進むべきかどうかを判断する。動作2142で、新たなサブスクリプションに対するオーダーが受取られると、オーダーオーケストレーションモジュール2122は、オーダープロビジョニングモジュール2124に対して、資源を割当て、サブスクリプションオーダーを満たすよう必要とされる資源を構成するよう、要求を送る。オーダープロビジョニングモジュール2124は、顧客によってオーダーされたサービスに対する資源の割当てを可能にする。オーダープロビジョニングモジュール2124は、クラウドインフラストラクチャシステム2100によって提供されるクラウドサービスと、要求されたサービスを提供するための資源をプロビジョニングするよう用いられる物理的インプリメンテーション層との間におけるある抽象レベルを与える。オーダーオーケストレーションモジュール2122は、したがって、サービスおよび資源がオンザフライで実際にプロビジョニングされるか、または予めプロビジョニングされ、要求でのみ割当て/分配されるかどうかなど、インプリメンテーション詳細から隔離されてもよい。
【0223】
動作2144で、サービスおよび資源がプロビジョニングされると、提供されるサービスの通知が、クラウドインフラストラクチャシステム302のオーダープロビジョニングモジュール2124によってクライアントデバイス2104、2106および/または2108における顧客に送信されてもよい。動作2146で、顧客のサブスクリプションオ
ーダーはオーダー管理およびモニタリングモジュール2126によって管理およびトラッキングされてもよい。いくつかの例では、オーダー管理およびモニタリングモジュール2126は、用いられるストレージの量、転送されるデータ量、ユーザの数、システムアップ時間およびシステムダウン時間の量などのような、サブスクリプションオーダーにおけるサービスに対する使用統計を収集するよう構成されてもよい。
【0224】
特定の実施形態において、クラウドインフラストラクチャシステム2100はアイデンティティ管理モジュール2128を含んでもよい。アイデンティティ管理モジュール2128は、クラウドインフラストラクチャシステム2100におけるアクセス管理および承認サービスなどのようなアイデンティティサービスを提供するよう構成されてもよい。いくつかの実施形態において、アイデンティティ管理モジュール2128は、クラウドインフラストラクチャシステム2102によって提供されるサービスを利用することを望む顧客についての情報を制御してもよい。そのような情報は、そのような顧客のアイデンティティを認証する情報、およびそれらの顧客がさまざまなシステム資源(たとえばファイル、ディレクトリ、アプリケーション、通信ポート、メモリセグメントなど)に対してどのアクションを実行するよう承認されるかを記述する情報を含むことができる。アイデンティティ管理モジュール2128は、さらに、各顧客についての記述的情報およびどのように誰によってその記述的情報がアクセスおよび修正され得るかの管理を含んでもよい。
【0225】
図22は、本発明のさまざまな実施形態を実現することができる例示的なコンピュータシステム2200を示す。システム2200は、上記のコンピュータシステムのうちのいずれかを実現するよう用いられてもよい。図に示されるように、コンピュータシステム2200は、多数の周辺サブシステムとバスサブシステム2202を介して通信する処理ユニット2204を含む。これらの周辺サブシステムは、処理加速ユニット2206、I/Oサブシステム2208、ストレージサブシステム2218および通信サブシステム2224を含んでもよい。ストレージサブシステム2218は、有形のコンピュータ読取可能な記憶媒体2222およびシステムメモリ2210を含む。
【0226】
バスサブシステム2202は、コンピュータシステム2200のさまざまなコンポーネントおよびサブシステムに意図されるように互いに通信させるための機構を提供する。バスサブシステム2202は単一のバスとして概略的に示されているが、バスサブシステムの代替的実施例は、複数のバスを利用してもよい。バスサブシステム2202は、さまざまなバスアーキテクチャのうちのいずれかを用いるメモリバスまたはメモリコントローラ、周辺バスおよびローカルバスを含むいくつかのタイプのバス構造のうちのいずれかであってもよい。たとえば、そのようなアーキテクチャは、業界標準アーキテクチャ(Industry Standard Architecture:ISA)バス、マイクロチャネルアーキテクチャ(Micro Channel Architecture:MCA)バス、エンハンストISA(Enhanced ISA:EISA)バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(Video Electronics Standards Association:VESA)ローカルバス、およびIEEE P1386.1規格に従って製造される中二階バスとして実現され得る周辺コンポーネントインターコネクト(Peripheral Component Interconnect:PCI)バスを含んでもよい。
【0227】
1つ以上の集積回路(たとえば、従来のマイクロプロセッサまたはマイクロコントローラ)として実現可能な処理ユニット2204は、コンピュータシステム2200の動作を制御する。1つ以上のプロセッサが処理ユニット2204に含まれてもよい。これらのプロセッサは、シングルコアプロセッサを含んでもよく、またはマルチコアプロセッサを含んでもよい。特定の実施形態では、処理ユニット2204は、シングルコアまたはマルチコアプロセッサが各処理ユニットに含まれる1つ以上の独立した処理ユニット2232お
よび/または2234として実現されてもよい。他の実施形態では、処理ユニット2204は、2つのデュアルコアプロセッサを単一のチップに統合することによって形成されるクアッドコア処理ユニットとして実現されてもよい。
【0228】
さまざまな実施形態では、処理ユニット2204は、プログラムコードに応答してさまざまなプログラムを実行することができ、複数の同時に実行されるプログラムまたはプロセスを維持することができる。任意の所与の時点で、実行されるべきプログラムコードの一部または全ては、プロセッサ2204、および/または、ストレージサブシステム2218に常駐することができる。好適なプログラミングを介して、プロセッサ2204は、上記のさまざまな機能を提供することができる。コンピュータシステム2200は、デジタル信号プロセッサ(digital signal processor:DSP)、特殊目的プロセッサなどを含み得る処理加速ユニット2206をさらに含んでもよい。いくつかの実施形態では、処理加速ユニット2206は、コンピュータシステムの機能を向上させるために、本明細書に開示されているものなどの加速エンジンを含むかまたはそれとともに動作してもよい。
【0229】
I/Oサブシステム2208は、ユーザインターフェイス入力デバイスおよびユーザインターフェイス出力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、キーボード、マウスまたはトラックボールなどのポインティングデバイス、ディスプレイに組み込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイアル、ボタン、スイッチ、キーパッド、音声コマンド認識システムを伴う音声入力デバイス、マイクロフォン、および他のタイプの入力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、たとえば、ジェスチャおよび話し言葉コマンドを用いて、ナチュラルユーザインターフェイスを介して、Microsoft Xbox(登録商標)2260ゲームコントローラなどの入力デバイスをユーザが制御して対話することを可能にするMicrosoft Kinect(登録商標)モーションセンサなどのモーション感知および/またはジェスチャ認識デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、ユーザから目の動き(たとえば、写真を撮っている間および/またはメニュー選択を行なっている間の「まばたき」)を検出し、アイジェスチャを入力デバイス(たとえばGoogle Glass(登録商標))への入力として変換するGoogle Glass(登録商標)瞬き検出器などのアイジェスチャ認識デバイスも含んでもよい。また、ユーザインターフェイス入力デバイスは、ユーザが音声コマンドを介して音声認識システム(たとえばSiri(登録商標)ナビゲータ)と対話することを可能にする音声認識感知デバイスを含んでもよい。
【0230】
ユーザインターフェイス入力デバイスは、三次元(3D)マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、ならびにスピーカ、デジタルカメラ、デジタルカムコーダ、ポータブルメディアプレーヤ、ウェブカム、画像スキャナ、指紋スキャナ、バーコードリーダ3Dスキャナ、3Dプリンタ、レーザレンジファインダ、および視線追跡デバイスなどの聴覚/視覚デバイスも含んでもよいが、それらに限定されるものではない。また、ユーザインターフェイス入力デバイスは、たとえば、コンピュータ断層撮影、磁気共鳴撮像、ポジションエミッショントモグラフィー、医療用超音波検査デバイスなどの医療用画像化入力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、たとえば、MIDIキーボード、デジタル楽器などの音声入力デバイスも含んでもよい。
【0231】
ユーザインターフェイス出力デバイスは、ディスプレイサブシステム、インジケータライト、または音声出力デバイスなどの非ビジュアルディスプレイなどを含んでもよい。ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)またはプラズマディスプレイを使うものなどのフラットパネルデバイス、投影デバイス、タッチス
クリーンなどであってもよい。一般に、「出力デバイス」という語の使用は、コンピュータシステム2200からユーザまたは他のコンピュータに情報を出力するための全ての考えられ得るタイプのデバイスおよび機構を含むよう意図される。たとえば、ユーザインターフェイス出力デバイスは、モニタ、プリンタ、スピーカ、ヘッドフォン、自動車ナビゲーションシステム、プロッタ、音声出力デバイスおよびモデムなどの、テキスト、グラフィックスおよび音声/映像情報を視覚的に伝えるさまざまな表示デバイスを含んでもよいが、それらに限定されるものではない。
【0232】
コンピュータシステム2200は、現在のところシステムメモリ2210内に位置しているものとして示されているソフトウェア要素を備えるストレージサブシステム2218を備えてもよい。システムメモリ2210は、処理ユニット2204上でロード可能および実行可能なプログラム命令と、これらのプログラムの実行中に生成されるデータとを格納してもよい。
【0233】
コンピュータシステム2200の構成およびタイプによって、システムメモリ2210は、揮発性であってもよく(ランダムアクセスメモリ(RAM)など)、および/または、不揮発性であってもよい(リードオンリメモリ(ROM)、フラッシュメモリなど)。RAMは、一般に、処理ユニット2204にすぐにアクセス可能であり、および/または、処理ユニット2204によって現在動作および実行されているデータおよび/またはプログラムモジュールを含む。いくつかの実現例では、システムメモリ2210は、スタティックランダムアクセスメモリ(SRAM)またはダイナミックランダムアクセスメモリ(DRAM)などの複数の異なるタイプのメモリを含んでもよい。いくつかの実現例では、起動中などにコンピュータシステム2200内の要素間における情報の転送を助ける基本的なルーティンを含むベーシックインプット/アウトプットシステム(basic input/output system:BIOS)は、一般に、ROMに格納されてもよい。一例として、限定を伴うことなく、システムメモリ2210は、クライアントアプリケーション、ウェブブラウザ、中間層アプリケーション、リレーショナルデータベース管理システム(relational database management system:RDBMS)などを含んでもよいアプリケーションプログラム2212、プログラムデータ2214およびオペレーティングシステム2216も示す。一例として、オペレーティングシステム2216は、Microsoft Windows(登録商標)、Apple Macintosh(登録商標)および/もしくはLinuxオペレーティングシステム、さまざまな市場で入手可能なUNIX(登録商標)またはUNIXのようなオペレーティングシステム(さまざまなGNU/Linuxオペレーティングシステム、Google Chrome(登録商標)OSなどを含むがそれらに限定されない)、ならびに/または、iOS、Windows(登録商標) Phone、Android(登録商標) OS、BlackBerry(登録商標)Z0 OS、およびPalm(登録商標) OSオペレーティングシステムなどのモバイルオペレーティングシステムのさまざまなバージョンを含んでもよい。
【0234】
ストレージサブシステム2218は、いくつかの実施形態の機能を提供する基本的なプログラミングおよびデータ構造を格納するための有形のコンピュータ読取可能な記憶媒体も提供してもよい。プロセッサによって実行されたときに上記の機能を提供するソフトウェア(プログラム、コードモジュール、命令)は、ストレージサブシステム2218に格納されてもよい。これらのソフトウェアモジュールまたは命令は、処理ユニット2204によって実行されてもよい。ストレージサブシステム2218はまた、本発明に従って使用されるデータを格納するためのリポジトリを提供してもよい。
【0235】
ストレージサブシステム2200は、コンピュータ読取可能な記憶媒体2222にさらに接続可能なコンピュータ読取可能記憶媒体リーダ2220も含んでもよい。システムメ
モリ2210とともに、およびオプションとしてシステムメモリ2210との組み合わせで、コンピュータ読取可能な記憶媒体2222は、コンピュータ読取可能な情報を一時的および/またはより永久的に収容、格納、伝送および検索取得するための、遠隔の、ローカルな、固定された、および/またはリムーバブルなストレージデバイスに記憶媒体を加えたものを包括的に表わしてもよい。
【0236】
コードまたはコードの一部を含むコンピュータ読取可能な記憶媒体2222は、記憶媒体および通信媒体を含む、当該技術分野において公知であるまたは使用されるいずれかの適切な媒体も含んでもよく、当該媒体は、情報の格納および/または伝送のための任意の方法または技術において実現される揮発性および不揮発性の、リムーバブルおよび非リムーバブルな媒体などであるが、それらに限定されるものではない。これは、RAM、ROM、電気的に消去可能なプログラム可能ROM(electronically erasable programmable ROM:EEPROM)、フラッシュメモリもしくは他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD)、または他の光学式ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または他の有形のコンピュータ読取可能な媒体などの有形のコンピュータ読取可能な記憶媒体を含んでもよい。指定される場合には、これは、データ信号、データ伝送、または所望の情報を伝送するために使用可能でありコンピューティングシステム2200によってアクセス可能であるその他の媒体などの無形のコンピュータ読取可能媒体も含んでもよい。
【0237】
一例として、コンピュータ読取可能な記憶媒体2222は、非リムーバブル不揮発性磁気媒体に対して読み書きするハードディスクドライブ、リムーバブル不揮発性磁気ディスクに対して読み書きする磁気ディスクドライブ、CD ROM、DVDおよびブルーレイ(登録商標)ディスクなどの、リムーバブル不揮発性光ディスクに対して読み書きする光ディスクドライブ、または他の光学式媒体を含んでもよい。コンピュータ読取可能記憶媒体2222は、Zip(登録商標)ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス(USB)フラッシュドライブ、セキュアデジタル(SD)カード、DVDディスク、デジタルビデオテープなどを含んでもよいが、それらに限定されるものではない。コンピュータ読取可能な記憶媒体2222は、フラッシュメモリベースのSSD、エンタープライズフラッシュドライブ、ソリッドステートROMなどの不揮発性メモリに基づくソリッドステートドライブ(solid-state drive:SSD)、ソリッドステートRAM、ダイナミックRAM、スタティックRAMなどの揮発性メモリに基づくSSD、DRAMベースのSSD、磁気抵抗RAM(magnetoresistive RAM:MRAM)SSD、およびDRAMとフラッシュメモリベースのSSDとの組み合わせを使用するハイブリッドSSDも含んでもよい。ディスクドライブおよびそれらの関連付けられたコンピュータ読取可能な媒体は、コンピュータ読取可能な命令、データ構造、プログラムモジュールおよび他のデータの不揮発性ストレージをコンピュータシステム2200に提供してもよい。
【0238】
通信サブシステム2224は、他のコンピュータシステムおよびネットワークに対するインターフェイスを提供する。通信サブシステム2224は、他のシステムとコンピュータシステム2200との間のデータの送受のためのインターフェイスとして働く。たとえば、通信サブシステム2224は、コンピュータシステム2200がインターネットを介して1つ以上のデバイスに接続することを可能にしてもよい。いくつかの実施形態では、通信サブシステム2224は、(たとえば、セルラー電話技術、ZG、4GもしくはEDGE(グローバル進化のための高速データレート)などの先進データネットワーク技術、WiFi(IEEE802.11ファミリー規格、もしくは他のモバイル通信技術、またはそれらのいずれかの組み合わせを用いて)無線音声および/またはデータネットワークにアクセスするための無線周波数(RF)送受信機コンポーネント、グローバルポジショ
ニングシステム(GPS)受信機コンポーネント、ならびに/または他のコンポーネントを含んでもよい。いくつかの実施形態では、通信サブシステム2224は、無線インターフェイスに加えて、またはその代わりに、有線ネットワーク接続(たとえば、イーサネット)を提供することができる。
【0239】
また、いくつかの実施形態では、通信サブシステム2224は、コンピュータシステム2200を使用し得る1人以上のユーザの代わりに、構造化されたおよび/または構造化されていないデータフィード2226、イベントストリーム2228、イベント更新情報2230などの形式で入力通信を受信してもよい。たとえば、通信サブシステム2224は、ソーシャルネットワークおよび/またはTwitter(登録商標)フィード、Facebook(登録商標)更新情報、Rich Site Summary(RSS)フィードなどのウェブフィード、および/もしくは1つ以上の第三者情報源からのリアルタイム更新情報などの他の通信サービスのユーザからリアルタイムでデータフィード2226を受信(または送信)するように構成されてもよい。
【0240】
さらに、また、通信サブシステム2224は、連続データストリームの形式でデータを受信するように構成されてもよく、当該連続データストリームは、明確な終端を持たない、本来は連続的または無限であり得るリアルタイムイベントのイベントストリーム2228および/またはイベント更新情報2230を含んでもよい。連続データを生成するアプリケーションの例としては、たとえば、センサデータアプリケーション、金融株式相場表示板、ネットワーク性能測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム解析ツール、自動車交通監視などを挙げることができる。また、通信サブシステム2224は、構造化されたおよび/または構造化されていないデータフィード2226、イベントストリーム2228、イベント更新情報2230などを、コンピュータシステム2200に結合される1つ以上のストリーミングデータソースコンピュータと通信し得る1つ以上のデータベースに出力するよう構成されてもよい。
【0241】
コンピュータシステム2200は、手持ち式の携帯デバイス(たとえば、iPhone(登録商標)携帯電話、iPad(登録商標)コンピューティングタブレット、PDA)、ウェアラブルデバイス(たとえば、Google Glass(登録商標)頭部装着型ディスプレイ)、PC、ワークステーション、メインフレーム、キオスク、サーバラック、またはその他のデータ処理システムを含む、さまざまなタイプのもののうちの1つであり得る。常に変化するコンピュータおよびネットワークの性質のため、図に示されるコンピュータシステム2200の記載は、単に具体的な例として意図される。図に示されるシステムよりも多くのコンポーネントまたは少ないコンポーネントを有する多くの他の構成が可能である。たとえば、カスタマイズされたハードウェアも使用されてもよく、および/または、特定の要素が、ハードウェア、ファームウェア、ソフトウェア(アプレットを含む)、または組み合わせで実現されてもよい。さらに、ネットワーク入力/出力デバイスなどの他のコンピューティングデバイスへの接続が利用されてもよい。本明細書における開示および教示に基づいて、当業者は、さまざまな実施形態を実現するための他の態様および/または方法を理解するであろう。
【0242】
前述の説明では、説明の目的で、本発明の様々な実施形態の完全な理解のために多数の特定の詳細が述べられた。しかしながら、本発明の実施形態がこれらの具体的な詳細のいくつかなしに実施されてもよいことは当業者には明らかであろう。他の例では、周知の構造および装置がブロック図の形で示される。
【0243】
前述の説明は例示的な実施形態のみを提供するものであり、本開示の範囲、適用性、または構成を限定することを意図するものではない。むしろ、前述の例示的な実施形態の説
明は、例示的な実施形態を実施することを可能にする説明を当業者に提供するであろう。特許請求の範囲に記載されている本発明の精神および範囲から逸脱することなく、要素の機能および配置をさまざまに変更できることが理解されるべきである。
【0244】
実施の形態の十分な理解のために前述の記載において具体的な詳細が述べられた。しかしながら、実施の形態がこれらの特定の詳細なしに実施されてもよいことは当業者には理解されるであろう。たとえば、不必要な詳細により実施形態を曖昧にすることのないように、回路、システム、ネットワーク、プロセスおよび他のコンポーネントは、ブロック図の形式でコンポーネントとして示されたかもしれない。他の例では、実施形態を曖昧にすることを回避するために、周知の回路、プロセス、アルゴリズム、構造および技術は、不必要な詳細なしで示されたかもしれない。
【0245】
また、個々の実施形態は、フローチャート、フロー図、データフロー図、構造図またはブロック図として示されるプロセスとして説明されたかもしれない。フローチャートは動作をシーケンシャルなプロセスとして説明したかもしれないが、動作の多くは並列または同時に実行されてもよい。さらに、動作の順序は並べ替えられてもよい。プロセスは、その動作が完了すると終了するが、図に含まれていないさらなるステップを有していてもよい。プロセスは、メソッド、関数、プロシージャ、サブルーチン、サブプログラムなどに対応し得る。プロセスが関数に対応している場合、その終了は、その関数を呼出し関数またはmain関数に返すことに対応し得る。
【0246】
「コンピュータ読取可能な媒体」という語は、命令および/またはデータを記憶したり、含んでいたり、または担持したりすることができる携帯型または固定式のストレージデバイス、光学式ストレージデバイス、無線チャネルおよびさまざまな他の媒体を含むが、これらに限定されるものではない。コードセグメントまたは機械実行可能な命令は、プロシージャ、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または、命令、データ構造もしくはプログラム文のいずれかの組合せを表し得る。コードセグメントは、情報、データ、引数、パラメータまたはメモリコンテンツを受け渡すおよび/または受信することによって、別のコードセグメントまたはハードウェア回路に結合されてもよい。情報、引数、パラメータ、データなどは、メモリ共有、メッセージ受け渡し、トークン受け渡し、ネットワーク送信などを含む任意の好適な手段によって受け渡されたり、転送されたり、または送信されたりしてもよい。
【0247】
さらに、実施形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはそれらの任意の組合せによって実現されてもよい。ソフトウェア、ファームウェア、ミドルウェアまたはマイクロコードで実現される場合、必要なタスクを実行するためのプログラムコードまたはコードセグメントは、機械読取可能な媒体に記憶されてもよい。プロセッサが必要なタスクを実行してもよい。
【0248】
上記の明細書では、本発明の局面についてその具体的な実施形態を参照して説明しているが、本発明はそれに限定されるものではないということを当業者は認識するであろう。上記の発明のさまざまな特徴および局面は、個々にまたは一緒に用いられてもよい。さらに、実施形態は、明細書のさらに広い精神および範囲から逸脱することなく、本明細書に記載されているものを超えて、さまざまな環境および用途で利用することができる。したがって、明細書および図面は、限定的ではなく例示的であると見なされるべきである。
【0249】
加えて、説明の目的で、方法は、ある特定の順序で記載された。代替例では当該方法は記載されている順序とは異なる順序で実行されてもよい、ということが理解されるべきである。また、上記の方法はハードウェアコンポーネントによって実行されてもよく、また
は機械によって実行可能な一連の命令で実施されてもよく、当該機械によって実行可能な命令を使用して、命令でプログラミングされた汎用もしくは特殊目的プロセッサまたは論理回路などの機械に方法を実行させてもよい、ということが理解されるべきである。これらの機械によって実行可能な命令は、CD-ROMもしくは他のタイプの光ディスク、フロッピー(登録商標)ディスク、ROM、RAM、EPROM、EEPROM、磁気もしくは光カード、フラッシュメモリ、または電子命令を格納するのに適した他のタイプの機械読取可能な媒体などの1つ以上の機械読取可能な媒体に格納されてもよい。代替的に、当該方法は、ハードウェアとソフトウェアとの組み合わせによって実行されてもよい。
【0250】
また、特許権者によってそうではないと明示的かつ明確に規定されていない限り、特許請求の範囲における用語は、それらの明白な通常の意味を有する。特許請求の範囲で使用される不定冠詞「a」または「an」は、特定の冠詞が紹介する要素のうちの1つまたは複数を意味するように本明細書では定義され、そしてそれに続く定冠詞「the」の使用は
その意味を否定するものではない。さらに、特許請求の範囲における異なる要素を明確にするための「第1」、「第2」などのような序数の用語の使用は、序数の用語が適用されている要素に対して一連の特定の位置、または任意の他の連続する文字もしくは順序を与えることを意図しない。