(57)【特許請求の範囲】
【請求項１】
命令を含むプログラムであって、前記命令は、１つまたは複数のプロセッサによって実行されると、
ファイルシステムに、コマンド名と、特定のフラグと、第１の引数とを含む第１のコマンドを受信させ、前記特定のフラグは、前記第１の引数とは別個に格納され、前記命令は、さらに、
前記第１のコマンドをパースしている間に、前記ファイルシステムの外部のシステムの外部アプリケーションプログラミングインターフェース（ＡＰＩ）を介してアクセス可能な第２のコマンドを前記第１のコマンドの前記第１の引数が含むということを示す前記特定のフラグに遭遇させ、
前記第２のコマンドは、前記コマンド名によって識別される前記第１のコマンドとは異なり、前記命令は、さらに、
前記ファイルシステムに、前記外部ＡＰＩを使用して前記第２のコマンドを実行させて、前記第２のコマンドの結果を取得させ、
前記第２のコマンドの結果を使用して前記第１のコマンドを実行させる、プログラム。
【請求項２】
前記ファイルシステムの外部の前記システムは、クラウドサービスである、請求項１に記載のプログラム。
【請求項３】
前記第２のコマンドを実行することは、前記ファイルシステム内のデータを操作することを含む、請求項１または２に記載のプログラム。
【請求項４】
前記第２のコマンドを実行することは、前記データをクラウドサービスから前記ファイルシステムに転送することをさらに含む、請求項３に記載のプログラム。
【請求項５】
前記第２のコマンドを実行することは、前記ファイルシステムと関連付けられたメタデータを取得することを含む、請求項１に記載のプログラム。
【請求項６】
前記第２のコマンドを実行することは、クラウドサービスに照会して、前記メタデータを取得することをさらに含む、請求項５に記載のプログラム。
【請求項７】
前記第２のコマンドは、コマンドグループ識別子および第２のコマンド名を含む、請求項１〜６のいずれか１項に記載のプログラム。
【請求項８】
前記第１のコマンドを受信することは、前記ファイルシステムが、ファイルシステムスクリプトを実行している間に前記第１のコマンドに遭遇することを含む、請求項１〜７のいずれか１項に記載のプログラム。
【請求項９】
前記第１の引数は、システムパスをさらに含み、
前記１つまたは複数のプロセッサによって実行されると、前記命令は、さらに、前記システムパスから前記第２のコマンドへのシンボリックリンクを生成させる、請求項１〜８のいずれか１項に記載のプログラム。
【請求項１０】
前記１つまたは複数のプロセッサによって実行されると、前記命令は、さらに、
前記ファイルシステムに、前記システムパスを含む第３のコマンドを受信させ、
前記第３のコマンドを実行させ、
前記第３のコマンドを実行することは、
（ａ）前記システムパスを使用して前記シンボリックリンクにアクセスすることと、
（ｂ）前記シンボリックリンクにアクセスしたことに応答して前記第２のコマンドを再実行することとを含む、請求項９に記載のプログラム。
【請求項１１】
前記第１の引数は、前記第２のコマンドに関連付けられた属性をさらに含み、前記第２のコマンドを実行することは、前記属性を使用して前記第２のコマンドを実行することを含む、請求項１〜１０のいずれか１項に記載のプログラム。
【請求項１２】
前記属性を使用することは、前記属性によって示される時刻において前記第２のコマンドを実行することを含む、請求項１１に記載のプログラム。
【請求項１３】
前記第１のコマンドは、前記ファイルシステムの標準読み込みコマンドである、請求項１〜９のいずれか１項に記載のプログラム。
【請求項１４】
前記１つまたは複数のプロセッサによって実行されると、前記命令は、さらに、
前記ファイルシステムに、第２の引数を含む第３のコマンドを受信させ、
前記第３のコマンドは、前記標準読み込みコマンドであり、
前記第２の引数は、前記ファイルシステム内のファイルのパスであり、前記命令は、さらに、
前記第２の引数をパースして、前記第２の引数が別のコマンドを含むということを示す前記特定のフラグを前記第３のコマンドが含まないということを判断させ、
前記ファイルシステムに、前記ファイルについての前記標準読み込みコマンドを実行させる、請求項１３に記載のプログラム。
【請求項１５】
前記第２のコマンドを実行することは、
リクエストを前記ファイルシステムの外部の前記システムに送信することを含み、前記ファイルシステムの外部の前記システムは、クラウドサービスであり、前記第２のコマンドを実行することは、
前記リクエストに対するレスポンスを受信することをさらに含み、
前記レスポンスは、前記クラウドサービスからのデータを含み、
前記第２のコマンドを実行することは、前記ファイルシステム内の前記データを操作することを含み、
前記第１のコマンドは、前記ファイルシステムの標準読み込みコマンドであり、
前記命令は、さらに、
（ａ）前記ファイルシステムに、前記第２のコマンドの実行結果を使用して前記第１のコマンドを実行させ、
（ｂ）前記ファイルシステムに、第２の引数を含む第３のコマンドを受信させ、
前記第３のコマンドは、前記標準読み込みコマンドであり、
前記第２の引数は、前記ファイルシステム内のファイルのパスであり、前記命令は、さらに、
（ｃ）前記第２の引数をパースして、前記第２の引数が別の第２のコマンドを含むということを示す前記特定のフラグを前記第３のコマンドが含まないということを判断させ、
（ｄ）前記ファイルシステムに、前記ファイルについての前記標準読み込みコマンドを実行させる、請求項１に記載のプログラム。
【請求項１６】
前記特定のフラグは、前記第１の引数の左側に格納される、請求項１〜１５のいずれか１項に記載のプログラム。
【請求項１７】
システムであって、
ハードウェアプロセッサを含む少なくとも１つのデバイスを備え、
前記システムは、動作を実行するように構成され、前記動作は、
ファイルシステムが、コマンド名と、特定のフラグと、第１の引数とを含む第１のコマンドを受信することを含み、前記特定のフラグは、前記第１の引数とは別個に格納され、前記動作は、
前記第１のコマンドをパースしている間に、前記ファイルシステムの外部のシステムの外部アプリケーションプログラミングインターフェース（ＡＰＩ）を介してアクセス可能な第２のコマンドを前記第１のコマンドの前記第１の引数が含むということを示す前記特定のフラグに遭遇することをさらに含み、
前記第２のコマンドは、前記コマンド名によって識別される前記第１のコマンドとは異なり、前記動作は、
前記ファイルシステムが、前記外部ＡＰＩを使用して前記第２のコマンドを実行し、前記第２のコマンドの結果を取得することと、
前記第２のコマンドの結果を使用して前記第１のコマンドを実行することとをさらに含む、システム。
【請求項１８】
方法であって、
ファイルシステムが、コマンド名と、特定のフラグと、第１の引数とを含む第１のコマンドを受信することを含み、前記特定のフラグは、前記第１の引数とは別個に格納され、前記方法は、
前記第１のコマンドをパースしている間に、前記ファイルシステムの外部のシステムの外部アプリケーションプログラミングインターフェース（ＡＰＩ）を介してアクセス可能な第２のコマンドを前記第１のコマンドの前記第１の引数が含むということを示す前記特定のフラグに遭遇することをさらに含み、
前記第２のコマンドは、前記コマンド名によって識別される前記第１のコマンドとは異なり、前記方法は、
前記ファイルシステムが、前記外部ＡＰＩを使用して前記第２のコマンドを実行し、前記第２のコマンドの結果を取得することと、
前記第２のコマンドの結果を使用して前記第１のコマンドを実行することとをさらに含み、
前記方法は、ハードウェアプロセッサを含む少なくとも１つのデバイスによって実行される、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
本発明は、ファイルシステム内でコマンドを実行することに関する。特に、本発明は、複合コマンドの実行に関する。
【背景技術】
【０００２】
背景
コンピューティングでは、ファイルシステムは、構造およびルールの組である。データは、ファイルと称される単位へとグループ分けされる。ファイルシステムは、各ファイルの構造を判断する。ファイルシステムはまた、ファイルメタデータ、すなわち、ファイルについての追加情報を提供するデータを管理するために使用される。多くの異なるファイル構造およびルールを有する多くの異なる種類のファイルシステムが存在する。ファイルシステムは、ハードディスク、フラッシュ媒体、光学ドライブ等を含む多くの異なる種類のストレージデバイスおよび媒体とともに使用され得る。加えて、ファイルシステムは、複数のストレージデバイスとともに使用され得る。たとえば、ファイルシステムは、コンピュータネットワークを介して互いに接続されるハードドライブまたは複数のストレージデバイスのアレイを使用してファイルを格納し得る。多くの異なる構成のファイルシステムストレージが存在する。
【０００３】
多くのファイルシステムは、ファイルシステム内でコマンドを実行するための内部アプリケーションプログラミングインターフェース（ＡＰＩ）を含む。ユーザは、ファイルシステムのＡＰＩにコマンドラインインタフェース（ＣＬＩ）を通してアクセスし得、そこでユーザは、コマンドをターミナルウィンドウ内にタイプする。代替的に、ユーザは、ファイルシステムコマンドを実行するために、ファイルシステムのＡＰＩに、ユーザがグラフィカル要素（たとえば、ウィンドウ、アイコン等。）を操作することを可能とするグラフィカルユーザインターフェース（ＧＵＩ）を通してアクセスし得る。多くのファイルシステムは、標準のポータブルオペレーティングインターフェイス（ＰＯＳＩＸ）ファミリによって、またはその変形によって規定されるものといった標準化されたＡＰＩを使用する。
【０００４】
ユーザが、ファイルシステムコマンドを実行しようと試みるときに、ファイルシステムは、（認証ポリシーとしても知られる）内部ルールを適用して、ユーザが、そのコマンドを実行することを許可されるかどうかを判断する。たとえば、あるコマンドへのアクセスは、異なるユーザに対して異なり得る。加えて、あるファイルまたはファイルグループ（たとえば、ディレクトリまたはコンテナ）へのアクセスは、異なるユーザに対して異なり得る。ＧＵＩが、コマンドを実行するために使用される場合、ＧＵＩがファイルシステムの認証ポリシーを厳守して、ファイルへの悪意のあるまたはそうでなければ望まないアクセスを阻止することが重要である。ファイルシステムの認証ポリシーを適切に厳守しないＧＵＩは、ファイルシステムおよびファイルシステムを使用するアプリケーション並びにサービスの適切な動作を脅かすセキュリティ脆弱性を引き起こす可能性がある。
【０００５】
典型的なファイルシステムＡＰＩ内で利用できるコマンドの組は、制限され、予め規定される。ファイルシステム内で利用できるコマンドは、読み込み、書き込み、実行、等を含み得る。標準的なファイルシステムコマンドは、より複雑な種類のデータ動作を可能としない。たとえば、ファイルシステムは、アーカイビング、キャッシング、等といったクラウドストレージの特徴にアクセスするためのコマンドを典型的に含まない。
【０００６】
ファイルシステムを通して直接的に利用できない特徴のために、ファイルシステムとは独立に実行するアプリケーションまたはサービスは、使用され得る。別個のアプリケーションまたはサービスを使用することは、追加特徴へのアクセスを提供する特殊化されたＧＵＩにアクセスすることを含み得る。たとえば、ウェブアプリケーションは、クラウドサービスの特徴を管理するために使用され得る。しかし、上記のように、特殊化されたＧＵＩを使用することは、ＧＵＩがファイルシステムの認証ポリシーを正しく厳守しない場合に、セキュリティ脆弱性をもたらす可能性がある。さらに、いくつかのコマンドがＣＬＩ内で実行され、他のコマンドがＧＵＩを介して実行される場合、ユーザワークフローは、コンピューティングコンテキストの切り替えに伴う時間と非効率性のために悪影響を受ける可能性がある。
【０００７】
このセクションにおいて記載されたアプローチは、特許請求可能なアプローチであり、既知のまたは特許請求されたアプローチとはかぎらない。したがって、特に明記しない限り、このセクションに記載されたアプローチのいずれかが、単にこのセクションに含まれているという理由だけで、先行技術として認められると想定されるべきではない。
【０００８】
図面の簡単な説明
実施形態は、添付の図面の図において限定ではなく例として示される。本開示における「ある」または「１つ」の実施形態への言及は、必ずしも同じ実施形態への言及ではなく、少なくとも一つを意味することに留意されたい。
【図面の簡単な説明】
【０００９】
【図１】１つまたは複数の実施形態に従うシステムを示す。
【図２】１つまたは複数の実施形態に従う複合コマンドを示す。
【図３】１つまたは複数の実施形態に従う埋め込まれたコマンドを実行するための例示的動作の組を示す。
【図４Ａ】１つまたは複数の実施形態に従う埋め込まれたコマンドを使用する例を図示する。
【図４Ｂ】１つまたは複数の実施形態に従う埋め込まれたコマンドを使用する例を図示する。
【図４Ｃ】１つまたは複数の実施形態に従う埋め込まれたコマンドを使用する例を図示する。
【図４Ｄ】１つまたは複数の実施形態に従う埋め込まれたコマンドを使用する例を図示する。
【図４Ｅ】１つまたは複数の実施形態に従う埋め込まれたコマンドを使用する例を図示する。
【図５】１つまたは複数の実施形態に従うコンピュータシステムを図示するブロック図を示す。
【発明を実施するための形態】
【００１０】
詳細な説明
以下の説明では、説明の目的で、完全な理解を提供するために多くの特定の詳細が述べられる。１つまたは複数の実施形態は、これらの特定の詳細なしで、実施されることができる。１つの実施形態で説明される特徴は、異なる実施形態で説明される特徴と組み合わせることができる。いくつかの例では、本発明を不必要に不明瞭にすることを避けるために、ブロック図形式を参照して既知の構造およびデバイスを説明する。
【００１１】
１．  一般概要
２．  システムアーキテクチャ
３．  複合コマンドアーキテクチャ
４．  複合コマンドの処理
５．  埋め込まれたコマンドの例示的実施形態
６．  コンピュータネットワークおよびクラウドネットワーク
７．  その他、拡張
８．  ハードウェア概要
【００１２】
１．  一般概要
１つまたは複数の実施形態は、複合コマンドを実行するように構成されるファイルシステムを含む。ファイルシステムは、埋め込まれていないコマンドおよび引数を含む複合コマンドを受信する。ファイルシステムは、引数をパースする。引数をパースしている間に、ファイルシステムは、引数が埋め込まれたコマンドを含むということを示す特定のフラグに遭遇する。ファイルシステムは、アプリケーションプログラミングインターフェース（ＡＰＩ）使用して埋め込まれたコマンドを実行する。
【００１３】
１つまたは複数の実施形態では、埋め込まれたコマンドは、ファイルシステムの内部コマンド、すなわち、ファイルシステムの内部ＡＰＩを介してアクセス可能なコマンドである。代替的に、埋め込まれたコマンドは、外部コマンド、すなわち、ファイルシステムの外部のシステムのコマンドであり得る。埋め込まれたコマンドが外部コマンドである場合、ファイルシステムは、外部システムのＡＰＩを呼び出し、レスポンスを受信する。レスポンスは、埋め込まれていないコマンドへの入力として使用され得る。埋め込まれていないコマンドは、ファイルシステムの内部コマンドであり得、複合コマンドではない他のコマンド内で使用され得る。
【００１４】
１つまたは複数の実施形態では、複合コマンドの引数はまた、システムパスを含む。ファイルシステムは、システムパスから埋め込まれたコマンドへのシンボリックリンクを生成し得る。ファイルシステムは、シンボリックリンクを参照する後続のコマンドを受信し得る。シンボリックリンクにアクセスすることは、埋め込まれたコマンドを再実行することをもたらし得る。
【００１５】
本明細書に記載されおよび／または特許請求の範囲に記載される１つまたは複数の実施形態は、この一般概要セクションに含まれていない場合がある。
【００１６】
２．  システムアーキテクチャ
図１は、１つまたは複数の実施形態に従うシステム１００を示す。図１において示されるように、システム１００は、クライアント１１６、ファイルシステム１０２、および外部システム１１８を含む。１つまたは複数の実施形態では、システム１００は、図１において示されたコンポーネントよりも多いまたは少ないコンポーネントを含み得る。図１において示されたコンポーネントは、互いにローカルまたは互いからリモートにあり得る。図１に示されたコンポーネントは、ソフトウェアおよび／またはハードウェア内に実装され得る。各コンポーネントは、複数のアプリケーションおよび／またはマシンにわたって分散され得る。複数のコンポーネントは、１つのアプリケーションおよび／またはマシンへと組み合わされ得る。１つのコンポーネントに対して記載された動作は、代わりに別のコンポーネントによって行われ得る。コンピュータネットワークに関する追加の実施形態および／または例は、「コンピュータネットワークおよびクラウドネットワーク」と題された後述のセクション６に記載される。
【００１７】
１つまたは複数の実施形態では、ファイルシステム１０２は、システム１００内のローカルデータ１０４を格納し取得するための構造およびルールの組を提供する。具体的には、ファイルシステム１０２は、ローカルデータ１０４を格納し取得するための内部コマンド１０６の組を含む。内部コマンド１０６は、それらがファイルシステム１０２それ自体の一部であるのである、すなわち、それらがファイルシステム１０２のコードベースの一部であるので、「内部」と称される。異なるファイルシステムは、異なる内部コマンドの組を含む。たとえば、ポータブルオペレーティングシステムインターフェイス（ＰＯＳＩＸ）標準に準拠するファイルシステムは、ｃａｔ（１つまたは複数のファイルの内容を標準出力に送信する）、ｃｈｍｏｄ（ファイルパーミッションを変更する）、ｃｐ（ファイルをコピーする）、ｍｖ（ファイルを移動またはリネームする）、およびｒｍ（ファイルまたはディレクトリを削除する）などのオペレーティングシステムコマンドを使用してアクセスできる内部コマンドを含む。
【００１８】
１つまたは複数の実施形態では、ローカルデータ１０４は、それが内部コマンド１０６を使用してアクセス可能であるので「ローカル」と称される。「ローカル」という用語は、必ずしも物理的近接を暗示するものではない。ローカルデータ１０４は、データを格納するための任意の種類のストレージユニットおよび／またはデバイスを使用して格納され得る。さらに、ローカルデータ１０４は、複数の異なるストレージユニットおよび／またはデバイスを含み得る。複数の異なるストレージユニットおよび／またはデバイスは、同じ種類であってもなくてもよく、同じ物理サイトに配置されてもされなくてもよい。さらに、ローカルデータ１０４は、ファイルシステム１０２のような同じコンピューティングシステム上に格納され得る。代替的または追加的に、ローカルデータ１０４は、ファイルシステム１０２とは別個のコンピューティングシステム上に格納され得る。ローカルデータ１０４は、ファイルシステム１０２に直接接続を介してまたはネットワークを介して通信可能に結合され得る。
【００１９】
１つまたは複数の実施形態では、ファイルシステム１０２は、コマンドをクライアント１１６から受信するように構成される。クライアント１１６は、ローカルデータ１０４を格納し取得するためにファイルシステム１０２を使用するように構成される任意の種類のハードウェアおよび／またはソフトウェアである。たとえば、クライアント１１６は、ユーザがコマンドをファイルシステム１０２に発行するコマンドラインインタフェース（ＣＬＩ）またはグラフィカルユーザインターフェースを含み得る。ファイルシステム１０２は、コマンドをクライアント１１６から内部アプリケーションプログラミングインターフェース（ＡＰＩ）１０８を介して受信する。内部ＡＰＩ１０８は、それがファイルシステム１０２それ自体の一部である、すなわち、それがファイルシステム１０２のコードベースの一部であるため「内部」と称される。異なるファイルシステムは、利用可能な内部コマンドに対応する異なる内部ＡＰＩを提供する。
【００２０】
１つまたは複数の実施形態では、外部システム１１８は、ファイルシステム１０２のコードベースの一部ではないアプリケーションまたはサービスであり、したがってファイルシステム１０２とは別個に（すなわち、「外部で」）実行する。具体的には、外部システム１１８は、ファイルシステム１０２の内部コマンド１０６ではない外部コマンド１２０を含む。外部システム１１８は、外部コマンド１２０を外部アプリケーションプログラミングインターフェース（ＡＰＩ）１２２を介して公開する。
【００２１】
１つまたは複数の実施形態では、外部コマンド１２０は、内部コマンド１０６によってサポートされていない方法でローカルデータ１０４を格納し取得するためのコマンドを含む。代替的または追加的に、外部コマンドは、リモートデータ１２４を格納しおよび／または取得するために使用され得る。リモートデータ１２４は、それが、ファイルシステム１０２の内部コマンド１０６を使用してローカルデータ１０４と同じ方法で格納されおよび／または取得されることができないので「リモート」とも称される。「リモート」という用語は、必ずしも物理的距離を暗示するものではない。リモートデータ１２４は、１つまたは複数の異なるデバイス（複数可）を使用してローカルデータ１０４として格納され得る。代替的または追加的に、リモートデータ１２４は、１つまたは複数の同じデバイス（複数可）使用してローカルデータ１０４として格納され得る。
【００２２】
１つまたは複数の実施形態では、ファイルシステム１０２は、コマンドパーサ１１０、コマンド実行エンジン１１２、および／またはコマンドディスパッチャ１１４を含む。コマンドパーサ１１０、コマンド実行エンジン１１２、およびコマンドディスパッチャ１１４は、ファイルシステム１０２の機能を指し、これらは、ファイルシステム１０２の任意の数の機能的コンポーネント（たとえば、メソッド、関数、プロシジャ、サブルーチン等。）内に実装され得る。コマンドパーサ１１０、コマンドエンジン１１２、およびコマンドディスパッチャ１１４を実装するために使用される１つまたは複数の機能的コンポーネントの間には、重複があり得る。代替的に、コマンドパーサ１１０、コマンドエンジン１１２、およびコマンドディスパッチャ１１４は、ファイルシステム１０２の異なる機能的コンポーネントとして実装され得る。
【００２３】
１つまたは複数の実施形態では、ファイルシステム１０２は、複合コマンドおよび埋め込まれたコマンドを処理するように構成される。ファイルシステム１０２がクライアント１１６からコマンドを受信するとき、コマンドパーサ１１０は、は、コマンドのシンタックスを調べて、どの特定のコマンド（複数可）が発行されたかを識別する。コマンドが内部コマンド１０６のうちの１つである場合、コマンド実行エンジン１１２は、コマンドをローカルに、すなわち、ファイルシステム１０２のコードベース内部で実行する。コマンドが複合コマンドである場合、それは、埋め込まれたコマンドを含む。埋め込まれたコマンドは、内部コマンド１０６のうちの１つまたは外部コマンド１２０のうちの１つであり得る。埋め込まれたコマンドが内部コマンド１０６のうちの１つである場合、コマンド実行エンジン１１２は、埋め込まれたコマンドをローカルに実行する。埋め込まれたコマンドが外部コマンド１２０のうち１つである場合、コマンドディスパッチャ１１４は、外部システム１１８によって処理するために、コマンドを外部ＡＰＩ１２２へとディスパッチする。複合コマンドおよび埋め込まれたコマンドの例は、後述される。複合コマンドおよび埋め込まれたコマンドを処理するための動作の例はまた、後述される。
【００２４】
１つまたは複数の実施形態では、ファイルシステム１０２は、プラグインインターフェース１２６を含み、これを通してＡＰＩコマンドは、埋め込まれたコマンドとして使用するために登録され得る。具体的には、プラグインインターフェース１２６を介して、コマンドグループは、そのコマンドグループに属するコマンドおよびコマンドグループに対する一意の識別子（ＩＤ）を登録する。コマンドがＪａｖａ（登録商標）プログラミング言語において実装される場合、コマンドグループは、コマンドを包含するＪａｖａクラスを登録し得る。たとえば、クラウドストレージ動作へのアクセスを提供するコマンドグループは、「クラウド」および「クラウド−オブジェクト−カウント」、「アップロード保留」、「クラウド−チェックサム」、等といったコマンドの一意のコマンドグループＩＤを有するＪａｖａクラスを登録し得る。プラグインインターフェース１２６はまた、複合コマンドが無効である場合に出力されるべきヘルプ情報を登録するために使用され得る。たとえば、無効な複合コマンドは、埋め込まれたコマンド名を含まないコマンドグループＩＤを含み得、無効な埋め込まれたコマンド名を含み得る。ヘルプ情報は、たとえば、コマンドグループと関連付けられた埋め込まれたコマンドのリストを含み得る。
【００２５】
実施形態では、システム１００は、１つまたは複数のデジタルデバイス上に実装される。「デジタルデバイス」という用語は一般に、プロセッサを含む任意のハードウェアデバイスを指す。デジタルデバイスは、アプリケーションまたは仮想マシンを実行する物理デバイスを指し得る。デジタルデバイスの例は、コンピュータ、タブレット、ラップトップ、デスクトップ、ネットブック、サーバ、ウェブサーバ、ネットワークポリシーサーバ、プロキシサーバ、汎用マシン、機能固有のハードウェアデバイス、ハードウェアルータ、ハードウェアスイッチ、ハードウェアファイアウォール、ハードウェアファイアウォール、ハードウェアネットワークアドレストランスレータ（ＮＡＴ）、ハードウェアロードバランサ、メインフレーム、テレビ、コンテンツ受信機、セットトップボックス、プリンタ、モバイルハンドセット、スマートフォン、パーソナルデジタルアシスタント（「ＰＤＡ」）、無線受信機および／または送信機、基地局、通信管理デバイス、ルータ、スイッチ、コントローラ、アクセスポイント、および／またはクライアントデバイスを含む。
【００２６】
３．  複合コマンドアーキテクチャ
図２は、１つまたは複数の実施形態に従う複合コマンド２００を示す。複合コマンド２００は、ファイルシステムによって処理されるべき命令の組である。たとえば、ファイルシステムは、クライアントから複合コマンド２００を、内部ＡＰＩを介して、上述のように受信し得る。１つまたは複数の実施形態では、複合コマンド２００は、コマンドラインインタフェース（ＣＬＩ）内でユーザによって入力されたテキストコマンドである。複合コマンド２００のコンポーネントは、テキストのセグメントを指し得る。複合コマンド２００のコンポーネントは、図２に示されるように左から右の順序付けされ得る。代替的または追加的に、異なる順序付けは、使用され得る。１つまたは複数の実施形態では、複合コマンド２００は、図２において示されたコンポーネントよりも多いまたは少ないコンポーネントを含み得る。
【００２７】
１つまたは複数の実施形態では、複合コマンド２００は、コマンド名２０２および引数２０４を含む。コマンド名２０２は、ファイルシステムによって実行されるべきコマンドを識別する。具体的には、コマンド名２０２は、ファイルシステムの内部コマンドを指し得る。たとえば、ＰＯＳＩＸ−準拠ファイルシステムでは、コマンド名２０２は、「ｃａｔ」という語であり得る。コマンド名２０２は、特定のファイルシステムおよびユーザの意図に依存して多くの異なるコマンドを指し得る。
【００２８】
１つまたは複数の実施形態では、引数２０４は、コマンド名２０２において識別されたコマンドの実行前に、中に、および／または後に処理されるべき追加情報を提供する。具体的には、引数２０４は、システムパス２０６を含み得る。システムパス２０６は、コマンド名２０２におけるコマンドによってデータが格納されおよび／または取得され得る識別されたファイルシステム内の場所を示す。１つまたは複数の実施形態では、システムパス２０６は、シンボリックリンクの場所を示す。シンボリックリンクを生成し使用するための動作の例は、後述される。
【００２９】
１つまたは複数の実施形態では、複合コマンド２００は、引数２０４が埋め込まれたコマンド２１０を含むので「複合」とも称される。以下でさらに詳しく説明するように、埋め込まれたコマンド２１０は、コマンド名２０２によって識別されたコマンドとは別個のコマンドを識別する。対照的に、埋め込まれたコマンドを含まない引数を有するコマンドは、「単項」コマンドとも称され得る。
【００３０】
１つまたは複数の実施形態では、引数２０４は、フラグ２０８を含む。フラグ２０８（すなわち、「フラグ（複数）」）は、引数２０４が埋め込まれたコマンド２１０を含むということを示す。複合コマンド２００がテキストコマンドである場合、フラグ２０８は、キャラクタの特定のシーケンスであり得る。一般的に、フラグ２０８がファイルシステム内で他の目的に使用される可能性が低いキャラクタのシーケンスであることが好ましくあり得る。たとえば、フラグ２０８は、３つのコロンの連続（「：：：」であり得る）。多くの異なるキャラクタのシーケンスは、フラグ２０８に対して使用され得る。フラグ２０８は、埋め込まれたコマンド２１０のすぐ左側に、またはコマンドパーサが埋め込まれたコマンド２１０を識別するのを支援する引数２０４内の他の任意の場所に配置することができる。
【００３１】
１つまたは複数の実施形態では、引数２０４は、埋め込まれたコマンド属性２１２を含む。埋め込まれたコマンド属性２１２は、ファイルシステムが埋め込まれたコマンド２１０を処理するのを助ける追加情報（すなわち、１つまたは複数の「属性」）を提供し得る。たとえば、埋め込まれたコマンド属性２１２は、埋め込まれたコマンド２１０を完全に処理する前に待機する特定の時間量を示し得る。別の例として、属性は、埋め込まれたコマンド２１０を完全に処理する前に完了しなければならないバックグランドプロセスを示し得る。この例を続けると、バックグランドプロセスは、ファイルをクラウドストレージサービスにコピーするために使用され得る。クラウドストレージサービスへとディスパッチされるべき後続の埋め込まれたコマンド２１０のために、埋め込まれたコマンド属性２１２は、埋め込まれたコマンド２１０をクラウドストレージサービスへとディスパッチする前にコピー動作が完了しなければならないということを示し得る。別の例として、埋め込まれたコマンド属性２１２は、埋め込まれたコマンド２１０を実行する間に使用するためのログレベルを示し得る。この例を続けると、「ＤＥＢＵＧ」という埋め込まれたコマンド属性２１２は、「ＩＮＦＯ」という埋め込まれたコマンド属性２１２よりも大量のログデータを提供し得る。他の例は、たとえば、関連付けられたファイルＩＤが埋め込まれたコマンド属性２１２として与えられたときにファイルのパスを判断するために設計された埋め込まれたコマンドを含み得る。多くの異なる種類の埋め込まれたコマンド属性２１２は、多くの異なる種類の埋め込まれたコマンド２１０と関連付けられ使用され得る。
【００３２】
１つまたは複数の実施形態では、埋め込まれたコマンド属性２１２は、コロンといった特殊なキャラクタを使用して埋め込まれたコマンド２１０とは分離される。 たとえば、「ＤＥＢＵＧ」ログレベルを使用して実行されるべき埋め込まれた診断コマンドは、「：：：ｄｉａｇ：ｌｏｇ−ｌｅｖｅｌ：ＤＥＢＵＧ」のようにタイピングされ得る。この例では、３つのコロンは、上述のようにフラグ２０８であり、「ｄｉａｇ」は、後述のように埋め込まれたコマンド名２１６であり、「ｌｏｇ−ｌｅｖｅｌ：ＤＥＢＵＧ」は、埋め込まれたコマンド属性２１２である。
【００３３】
１つまたは複数の実施形態では、埋め込まれたコマンド２１０は、ファイルシステムによって処理されるべきコマンドについての情報を、コマンド名２０２によって識別されたコマンドとは別個に含む。具体的には、埋め込まれたコマンド２１０は、追加のコマンドを識別する埋め込まれたコマンド名２１６を含む。埋め込まれたコマンド名２１６は、ファイルシステムの内部コマンドを識別し得る。代替的または追加的に、埋め込まれたコマンド名２１６は、外部コマンド、すなわち、ｉ外部システムの一部でありおよび外部ＡＰＩを使用してアクセス可能な、コマンドを上述のように識別し得る。
【００３４】
１つまたは複数の実施形態では、埋め込まれたコマンド２１０を使用してアクセス可能であるコマンドは、コマンドグループへと組織化される。埋め込まれたコマンド２１０は、埋め込まれたコマンド名２１６に対応する特定のコマンドグループを識別するコマンドグループ識別子（ＩＤ）２１４を含み得る。たとえば、クラウドストレージゲートウェイを介してデータを格納し取得するために使用されるコマンド（たとえば、アーカイブ、復元、チェックサムまたはデータインテグリティの検証、ローカルデータキャッシュの状態の確認、他のクラウドストレージ関連コマンドの状態の確認、ローカルデータのキャッシュまたは永続ポリシーの管理、暗号化の管理、ファイルのセグメンテーションポリシーの管理など）は、「アーカイブ」というＩＤを有するコマンドグループへとグループ化され得る。メタデータについての情報を取得するために使用されるコマンド（たとえば、ローカルデータおよび／またはリモートデータ内に格納されたファイル、オブジェクト、等）は、「ｍｅｔａ」というＩＤを有するコマンドグループへとグループ化され得る。ネットワークリソースを管理するために使用されるコマンドは、「ネットワーク」というＩＤを有するコマンドグループへとグループ化され得る。システム診断を行うために使用されるコマンド（たとえば、テスト、トラブルシューティング、利用可能なメモリのチェック、サービスの開始および／または停止、サービスおよび／またはスレッドのステータスのチェック、ランタイム環境でのログレベルの変更など）は、は、「ｄｉａｇ」というＩＤを有するコマンドグループへとグループ化され得る。これらのグルーピングを識別するために使用される多くの異なる種類のコマンド、コマンドのグルーピング、およびＩＤは、使用され得る。コマンドグループＩＤ２１４は、特に、異なる機能性を有するコマンドが同じ埋め込まれたコマンド名２１６を有し得る実施形態で有用であり得る。
【００３５】
１つまたは複数の実施形態では、埋め込まれたコマンド２１０は、埋め込まれた引数２１８を含む。埋め込まれた引数２１８は、埋め込まれたコマンド名２１６内で識別されたコマンドを実行する前に、実行している間に、および／または実行した後に処理されるべき追加情報を提供する。たとえば、引数２０４に関して、埋め込まれた引数２１８は、埋め込まれたコマンド名２１６内で識別されたコマンドを実行する前に、実行している間に、および／または実行した後に使用するためのシステムパスまたは属性を含み得る。さらに、埋め込まれた引数２１８は、追加の埋め込まれたコマンドを含み得、埋め込まれた引数２１８が追加の埋め込まれたコマンドを含むということを示す追加フラグを含み得る。換言すると、複合コマンド２００は、複数のレベルの入れ子にされた埋め込まれたコマンドを含み得る。
【００３６】
４．  複合コマンドの処理
図３は、１つまたは複数の実施形態に従う複合コマンドの処理のための例示的動作の組を示す。図３において示された１つまたは複数の動作は、変形され、再配置され、またはすべて省略され得る。従って、図３に示される特定の動作シーケンスは、１つまたは複数の実施形態の範囲を限定するものとして解釈されるべきではない。
【００３７】
１つまたは複数の実施形態では、ファイルシステムは、コマンドを受信する（動作３０２）。具体的には、ファイルシステムは、コマンドをクライアントから、内部ＡＰＩを介して受信し得る。ファイルシステムがコマンドを受信した時刻において、それは、コマンドが複合コマンド（すなわち、埋め込まれたコマンドを含むコマンド）であるか単項コマンド（すなわち、埋め込まれたコマンドを含まないコマンド）であるかを知らされ得ない。ファイルシステムは、ユーザ定義されたスクリプトを実行しながら、コマンドを受信し得る。スクリプトは、繰り返される使用のために格納された一連のコマンドである。たとえば、ＵＮＩＸ（登録商標）オペレーティングシステムは、コマンドラインインタプリタによって実行され得るシェルスクリプトをサポートする。スクリプトは、さまざまな異なるスクリプティング言語を使用して実装され得る。
【００３８】
１つまたは複数の実施形態では、ファイルシステムは、コマンドをパースする（動作３０４）。コマンドをパースすることは、既知のコマンドシンタックスに基づきコマンドのコンポーネントを判断することを含む。たとえば、ファイルシステムのコマンドパーサは、［コマンド名称］［引数］の形式のコマンドを予期し得る。コマンドパーサはまた、引数をパースして引数のコンポーネントを識別する。
【００３９】
１つまたは複数の実施形態では、ファイルシステムは、コマンドが複合コマンドであるかを判断する（動作３０６）。たとえば、コマンドは、コマンドが複合コマンドであるということを示す特定のフラグにコマンドパーサが遭遇する場合に、複合コマンドであり得る。コマンドパーサは、特定のフラグに遭遇しない場合、コマンドは単項コマンドである。
【００４０】
１つまたは複数の実施形態では、コマンドが複合コマンドではない、すなわち、コマンドが単項コマンドである場合、ファイルシステムは、コマンドを完了する（動作３２０）。単項コマンドを完了することは、単純にコマンド名によって示されたコマンドを提供される引数を使用して実行することを含み得る。
【００４１】
１つまたは複数の実施形態では、コマンドが複合コマンドである（たとえば、特定のフラグがコマンドパース中に遭遇される）とファイルシステムが判断する場合に、ファイルシステムは、埋め込まれたコマンドを識別する（動作３０８）。埋め込まれたコマンドを識別することは、埋め込まれたコマンド名を識別することを含む。埋め込まれたコマンドがコマンドグループへと組織化される場合に、埋め込まれたコマンドを識別することはまた、コマンドグループ識別子（ＩＤ）を識別することを含み得る。代替的または追加的に、埋め込まれたコマンドを識別することは、関連付けられた埋め込まれたコマンド属性を識別することを含み得る。たとえば、コマンドパーサは、埋め込まれたコマンド名において示されたコマンドを実行するように特定の時刻を指定する埋め込まれたコマンド属性を引数が含むと判断し得る。
【００４２】
１つまたは複数の実施形態では、ファイルシステムは、埋め込まれたコマンドを実行するために、外部呼び出しが必要とされるかを判断する（動作３１０）。具体的には、埋め込まれたコマンド名が、内部コマンド、すなわち、ファイルシステムのコードベースの一部であるコマンドを指す場合に、外部呼び出しは、必要とされない。ファイルシステムは、それ自身のコマンド実行エンジンを使用して内部コマンドを実行し得る（動作３１４）。具体的には、ファイルシステムは、内部コマンドをファイルシステムの内部ＡＰＩを呼び出すことによって実行し得る。しかし、埋め込まれたコマンド名が外部コマンド、すなわち、ファイルシステムのコードベースの一部ではないコマンドを指す場合に、埋め込まれたコマンドを実行するために、ファイルシステムは、外部ＡＰＩに対する呼び出しを発行することを必要とし得る。
【００４３】
１つまたは複数の実施形態では、外部コマンド処理するときに、ファイルシステムは、シンボリックリンクを生成する（動作３１２）。具体的には、ファイルシステムは、（ａ）コマンド内で提供されるシステムパスと（ｂ）外部コマンドとの間のシンボリックリンクを生成し得る。いくつかのファイルシステムは、コマンド実行結果をキャッシュし、これにより同じコマンドへの後続の呼び出しは、コマンドを再実行するよりもむしろキャッシュの内容を受信することをもたらし得る。しかし、ファイルシステムは、シンボリックリンクを介して返されたデータのより少ない積極的キャッシング（またはキャッシングがまったくない）を有し得る。このため、外部コマンドにシンボリックリンクを介してアクセスすることは、毎回現在のデータを受信することをより確実し得る。一般的に、シンボリックリンクをこのような方法で使用することは、外部コマンドをしばしば変化するデータにアクセスするために使用するときに有用であり得る。たとえば、外部コマンドは、クラウドストレージゲートウェイ内のアーカイブ動作のステータスを返却し得る。ファイルシステムがコマンド結果をキャッシュする場合に、外部コマンドへの後続の呼び出しは、アーカイブ動作の現在のステータスを取得するために外部コマンドを再実行することよりもむしろ、アーカイブ動作のキャッシュされたステータスを受信することをもたらし得る。外部コマンドにシンボリックリンクを介してアクセスすることは、アーカイブ動作の現在のステータスを取得するために外部コマンドが毎回再実行されるということを確実にし得る。このため、１つまたは複数の実施形態では、シンボリックリンクを使用することは、アクセスされるときに返却として受信されたデータがより現在のものであり、したがってより有用なということを確実にするシンボリックにリンクされたシステムパスを提供することによってファイルシステムの動作を改善する。加えて、ファイルシステムは、それが、複合コマンドを受信した都度、別個のシンボリックリンクを生成し得、これにより同じ外部コマンドを呼び出している異なるユーザは、互いのデータを受信しない。
【００４４】
１つまたは複数の実施形態では、ファイルシステムは、外部システムへの呼び出しを発行することによって外部コマンドを実行する（動作３１６）。具体的には、ファイルシステムは、外部システムの外部ＡＰＩを呼び出す。外部システムが外部コマンドを実行したとき、ファイルシステムは、外部システムからレスポンスを受信する（動作３１８）。多くの異なる種類のレスポンスは、受信され得る。たとえば、外部システムがクラウドストレージゲートウェイである場合、アーカイブコマンドを実行するための呼び出しは、アーカイブ動作のステータスについての情報を返却し得る。データをクラウドストレージゲートウェイから取得するための呼び出しは、リクエストされたデータのストリームを返却し得る。外部システムと関連付けられたメタデータを提供するための呼び出しは、メタデータを含み得る。外部システムへの呼び出しが正しい形式ではない、またはファイルシステムが適切な認証を欠く、または外部コマンドが、いくつかの他の理由のために実行されることができない場合、呼び出しは、エラーメッセージを返却し得る。一般的に、１つまたは複数の実施形態では、外部システムへの呼び出しは、ファイルシステムそれ自体の内部コマンドのみを使用してアクセスできないデータを返却する。このため、１つまたは複数の実施形態は、ファイルシステムそれ自体へと発行される複合コマンドを使用して外部データへのアクセスおよび／またはさもなければ利用できない機能性を提供することによってファイルシステムの機能を改善する。
【００４５】
１つまたは複数の実施形態では、埋め込まれた内部コマンド（動作３１４）または埋め込まれた外部コマンド（動作３１２、３１６、３１８）を実行した後、ファイルシステムは、コマンド２２０を完了する。複合コマンドの場合、コマンドを完了することは、埋め込まれていないコマンドを実行することを含み得る。埋め込まれていないコマンドを実行することは、埋め込まれたコマンドの結果を埋め込まれていないコマンドへの入力として使用することを含み得る。たとえば、ファイルシステムがＰＯＳＩＸ準拠であり、埋め込まれていないコマンドが「ｃａｔ」である場合に、ファイルシステムは、埋め込まれたコマンドの結果を標準的な出力へとダンプする。埋め込まれたコマンドの結果は、多くの異なる方法で埋め込まれていないコマンドへの入力として使用され得る。
【００４６】
１つまたは複数の実施形態では、ここで説明され得る複合コマンドは、ファイルシステムの機能をさまざまな方法で改善し得る。たとえば、上記のように、複合コマンドが埋め込まれた外部コマンドを含むことを可能とすることは、ファイルシステムを介してさもなければ利用できない外部データおよび／または機能性へのアクセスを提供し得る。別の例として、複合コマンドを使用することは、ファイルシステムを介して発行されるコマンドがファイルシステムの認証ポリシーの対称となるので、ファイルシステムのセキュリティを改善し得る。上記のように、別個のＧＵＩまたは他の特殊化されたインターフェイスは、ファイルシステムの認証ポリシーを正しく厳守しない可能性がある。別の例として、複合コマンドを使用することは、外部コマンドを実行するためにユーザがファイルシステムのＣＬＩを終了してＧＵＩまたはその他の専用インターフェイスにアクセスする必要がなくなるため、ユーザのワークフローを改善する。
【００４７】
５．  埋め込まれたコマンドの例示的実施形態
以下の例は、明瞭さの目的のために説明される以下で説明されるコンポーネントおよび／または動作は、特定の実施形態に適用できない場合がある１つの特定の例として理解されるべきである。したがって、以下で説明されるコンポーネントおよび／または動作は、任意の請求項の範囲を限定するものと解釈されるべきではない。
【００４８】
図４Ａは、１つまたは複数の実施形態に従う複合コマンド４０２の例の図を示す。複合コマンドアーキテクチャを参照して説明された上記の用語を使用して、コマンド名は「ｃａｔ」、システムパスは「／ｕｓｅｒｓ／ｊｏｈｎ／ｄｏｃｕｍｅｎｔｓ／ｆｉｌｅ１」、フラグは「：：：」、コマンドグループ識別子（ＩＤ）は「ａｒｃｈｉｖｅ」、埋め込まれたコマンド名は「ｒｅｓｔｏｒｅ」である。この例では、複合コマンド４０２は、ファイルシステムがデータをリストアするために、すなわち、リモートデータをローカルデータにコピーするために、クラウドストレージゲートウェイを呼び出すことをもたらす。ファイルシステムは、リストアコマンドのために、ファイルパスからシンボリックリンクを生成する。埋め込まれていないコマンドが「ｃａｔ」であるので、ファイルシステムがクラウドストレージゲートウェイからレスポンスを受信したときに、ファイルシステムは、レスポンスを標準的な出力へとダンプする。たとえば、レスポンスは、リストアコマンドが始まったことを示すメッセージであり得る。この文脈において、「ｃａｔ」コマンドは、読み込み動作として効果的に機能する。
【００４９】
例を続けると、図４Ｂは、１つまたは複数の実施形態に従う複合コマンド４０４の例の図を示す。複合コマンドアーキテクチャを参照して説明された上記の用語を使用して、コマンド名は「ｃａｔ」、システムパスは「／ｕｓｅｒｓ／ｊｏｈｎ／ｄｏｃｕｍｅｎｔｓ／ｆｉｌｅ１」、フラグは「：：：」、コマンドグループ識別子（ＩＤ）は「ａｒｃｈｉｖｅ」、埋め込まれたコマンド名は「ｒｅｓｔｏｒｅ−ｓｔａｔｕｓ」である。この例では、複合コマンド４０４は、ファイルシステムが図４Ａのリストアコマンドのステータスを判断するために、クラウドストレージゲートウェイを呼び出すことをもたらす。埋め込まれていないコマンドが「ｃａｔ」であるので、ファイルシステムがクラウドストレージゲートウェイからレスポンスを受信したときに、ファイルシステムは、レスポンスを標準的な出力へとダンプする。たとえば、レスポンスは、リストアコマンドが５０パーセント完了したということを示すメッセージであり得る。
【００５０】
例を続けると、図４Ｃは、１つまたは複数の実施形態に従う複合コマンド４０６の例の図を示す。複合コマンドアーキテクチャを参照して説明された上記の用語を使用して、コマンド名は「ｃａｔ」、システムパスは「／ｕｓｅｒｓ／ｊｏｈｎ／ｄｏｃｕｍｅｎｔｓ／ｆｉｌｅ１」、フラグは「：：：」、コマンドグループ識別子（ＩＤ）は「ａｒｃｈｉｖｅ」、埋め込まれたコマンド名は「ａｒｃｈｉｖｅ」である。この例では、図４Ａのリストアコマンドが完了されたと想定して、複合コマンド４０６は、ローカルデータをリモートデータへとアーカイブするためにファイルシステムがクラウドストレージゲートウェイを呼び出すことをもたらす。埋め込まれていないコマンドが「ｃａｔ」であるので、ファイルシステムがクラウドストレージゲートウェイからレスポンスを受信したときに、ファイルシステムは、レスポンスを標準的な出力へとダンプする。たとえば、レスポンスは、アーカイブコマンドが始められたということを示すメッセージであり得る。
【００５１】
例を続けると、図４Ｄは、１つまたは複数の実施形態に従う複合コマンド４０８の例の図を示す。複合コマンドアーキテクチャを参照して説明された上記の用語を使用して、コマンド名は「ｃａｔ」、システムパスは「／ｕｓｅｒｓ／ｊｏｈｎ／ｄｏｃｕｍｅｎｔｓ／ｆｉｌｅ１」、フラグは「：：：」、コマンドグループ識別子（ＩＤ）は「ａｒｃｈｉｖｅ」、埋め込まれたコマンド名は「ａｒｃｈｉｖｅ−ｓｔａｔｕｓ」である。この例では、図４Ｃのアーカイブコマンドのステータスを判断するために、複合コマンド４０６は、ファイルシステムがクラウドストレージゲートウェイを呼び出すことをもたらす。埋め込まれていないコマンドが「ｃａｔ」であるので、ファイルシステムがクラウドストレージゲートウェイからレスポンスを受信したときに、ファイルシステムは、レスポンスを標準的な出力へとダンプする。たとえば、レスポンスは、アーカイブコマンドが完了されたということを示すメッセージであり得る。
【００５２】
図４Ｅは、１つまたは複数の実施形態に従う複合コマンド４１０の例の図を示す。この例では、複合コマンド４１０は、それがコマンドグループＩＤ（「キャッシュ」）を含むが対応する埋め込まれたコマンド名を含まないので無効である。（たとえば、複合コマンド４１０をＣＬＩを使用して入力することによって）無効な複合コマンド４１０を実行しようとする試みは、ヘルプ情報４１２を受信することをもたらし得る。たとえば、図４Ｅに示されるように、ヘルプ情報４１２は、指定されたコマンドグループＩＤと関連付けられたコマンドのリストを含み得る。
【００５３】
６．  コンピュータネットワークおよびクラウドネットワーク
１つまたは複数の実施形態では、コンピュータネットワークは、ノードの組の間の接続性を提供する。ノードは、互いにローカルおよび／またはリモートにある。ノードはリンクの組によって接続される。リンクの例は、同軸ケーブル、シールドなしツイストケーブル、銅線ケーブル、光ファイバー、仮想リンクを含む。
【００５４】
ノードのサブセットは、コンピュータネットワークを実装する。そのようなノードの例は、スイッチ、ルータ、ファイアウォール、およびネットワークアドレス変換（ＮＡＴ）を含む。ノードの別のサブセットは、コンピュータネットワークを使用する。そのようなノード（「ホスト」とも称される）は、クライアントプロセスやサーバプロセスを実行し得る。クライアントプロセスは、コンピューティングサービス（特定のアプリケーションの実行、特定の量のデータの保存など）のリクエストを行う。サーバプロセスは、リクエストされたサービスを実行し、および／または対応するデータを返却することによって応答する。
【００５５】
コンピュータネットワークは、物理リンクで接続された物理ノードを含む物理ネットワークであり得る。物理ノードは、任意のデジタルデバイスである。物理ノードは、ハードウェアスイッチ、ハードウェアルータ、ハードウェアファイアウォール、ハードウェアＮＡＴなど、機能固有のハードウェアデバイスである。追加的または代替的に、物理ノードは、さまざまな仮想マシンおよび／またはそれぞれの機能を実行するアプリケーションを実行するように構成された汎用マシンとされ得る。物理リンクは、２つ以上の物理ノードを接続する物理媒体である。リンクの例は、同軸ケーブル、シールドなしツイストケーブル、銅ケーブル、光ファイバーを含む。
【００５６】
コンピュータネットワークはオーバーレイネットワークであり得る。オーバーレイネットワークは、別のネットワーク（物理ネットワークなど）の上に実装される論理ネットワークである。オーバーレイネットワークの各ノードは、アンダーレイネットワークの各ノードに対応する。したがって、オーバーレイネットワークの各ノードは、（オーバーレイノードへのアドレス指定のための）オーバーレイアドレスと（オーバーレイノードを実装するアンダーレイノードのアドレス指定のための）アンダーレイアドレスの両方に関連付けられる。オーバーレイノードは、デジタルデバイスおよび／またはソフトウェアプロセス（仮想マシン、アプリケーションインスタンス、スレッドなど）であり得る。オーバーレイノードを接続するリンクは、アンダーレイネットワークを通るトンネルとして実装される。トンネルの両端のオーバーレイノードは、それらの間のアンダーレイマルチホップパスを単一の論理リンクとして扱う。トンネリングは、カプセル化とデカプセル化によって行われる。
【００５７】
実施形態では、クライアントは、コンピュータネットワークに対してローカルおよび／またはリモートであり得る。クライアントは、プライベートネットワークまたはインターネットといった、他のコンピュータネットワーク経由でコンピュータネットワークにアクセスし得る。クライアントは、ハイパーテキスト転送プロトコル（ＨＴＴＰ）などの通信プロトコルを使用して、コンピュータネットワークにリクエストを通信し得る。リクエストは、クライアントインターフェイス（Ｗｅｂブラウザなど）、プログラムインターフェイス、またはアプリケーションプログラミングインターフェイス（ＡＰＩ）などのインターフェイスを介して通信される。
【００５８】
実施形態では、コンピュータネットワークは、クライアントとネットワークリソースとの間の接続性を提供する。ネットワークリソースは、サーバプロセスを実行するように構成されたハードウェアやソフトウェアを含む。ネットワークリソースの例は、プロセッサ、データストレージ、仮想マシン、コンテナ、および／またはソフトウェアアプリケーションを含む。ネットワークリソースは、複数のクライアント間で共有される。クライアントは、互いに独立してコンピュータネットワークにコンピューティングサービスをリクエストする。ネットワークリソースは、リクエストおよび／またはクライアントにオンデマンドで動的に割り当てられる。各リクエストおよび／またはクライアントに割り当てられたネットワークリソースは、たとえば、（ａ）特定のクライアントによってリクエストされたコンピューティングサービス、（ｂ）特定のテナントによってリクエストされた集約されたコンピューティングサービス、および／または（ｃ）コンピュータネットワークのリクエストされた集約されたコンピューティングサービスに基づきスケールダウンまたはスケールアップされ得る。このようなコンピュータネットワークは、「クラウドネットワーク」とも称され得る。
【００５９】
実施形態では、サービスプロバイダは、１人または複数のエンドユーザにクラウドネットワークを提供する。Ｓｏｆｔｗａｒｅ−ａｓ−ａ−Ｓｅｒｖｉｃｅ（ＳａａＳ）、Ｐｌａｔｆｏｒｍ−ａｓ−ａ−Ｓｅｒｖｉｃｅ（ＰａａＳ）、Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ−ａｓ−ａ−Ｓｅｒｖｉｃｅ（ＩａａＳ）といったさまざまなサービスモデルは、クラウドネットワークによって実装され得る。ＳａａＳでは、サービスプロバイダは、ネットワークリソースで実行しているサービスプロバイダのアプリケーションを使用する機能をエンドユーザに提供する。ＰａａＳでは、サービスプロバイダは、カスタムアプリケーションをネットワークリソースに配備する機能をエンドユーザに提供する。カスタムアプリケーションは、サービスプロバイダがサポートするプログラミング言語、ライブラリ、サービス、およびツールを使用して作成され得る。ＩａａＳでは、サービスプロバイダは、処理、ストレージ、ネットワーク、およびネットワークリソースによって提供されるその他の基本的なコンピューティングリソースを提供する機能をエンドユーザに提供する。オペレーティングシステムを含む任意のアプリケーションは、ネットワークリソース上に配備され得る。
【００６０】
実施形態では、コンピュータネットワークによって、プライベートクラウド、パブリッククラウド、およびハイブリッドクラウドを含むがこれらに限定されないさまざまな配備モデルは実装されることができる。プライベートクラウドでは、ネットワークリソースは、１つまたは複数のエンティティの特定のグループによる排他的使用のために提供される（ここで使用される「エンティティ」という用語は、企業、組織、個人、または他のエンティティを指す）。ネットワークリソースは、エンティティの特定のグループの施設に対してローカルおよび／またはリモートであり得る。パブリッククラウドでは、クラウドリソースは、互いに独立した複数のエンティティ（「テナント」または「顧客」とも称される）に対して提供される。コンピュータネットワークとそのネットワークリソースは、異なるテナントに対応するクライアントによってアクセスされる。そのようなコンピュータネットワークは、「マルチテナントコンピュータネットワーク」とも称され得る。いくつかのテナントは、異なる時刻および／または同じ時刻に同じ特定のネットワークリソースを使用し得る。ネットワークリソースは、テナントの設備内にローカルにおよび／またはリモートにあり得る。ハイブリッドクラウドでは、コンピュータネットワークは、プライベートクラウドとパブリッククラウドを備える。プライベートクラウドとパブリッククラウド間のインターフェイスは、データとアプリケーションのポータビリティを可能とする。プライベートクラウドに格納されたデータとパブリッククラウドに格納されたデータは、インターフェイスを介して交換され得る。プライベートクラウドにおいて実装されたアプリケーションとパブリッククラウドにおいて実装されたアプリケーションは、互いに依存関係にあり得る。プライベートクラウドにおけるアプリケーションからパブリッククラウドにおけるアプリケーションへの呼び出し（およびその逆）は、インターフェイスを介して実行され得る。
【００６１】
実施形態では、マルチテナントコンピュータネットワークのテナントは、互いに独立である。たとえば、あるテナントのビジネスまたはオペレーションは、別のテナントのビジネスまたはオペレーションとは異なり得る。異なるテナントは、コンピュータネットワークの異なるネットワーク要件を要求し得る。ネットワーク要件の例は、処理速度、データストレージの量、セキュリティ要件、パフォーマンス要件、スループット要件、遅延要件、復元性要件、サービス品質（ＱｏＳ）要件、テナントの分離、および／または一貫性を含む。同じコンピュータネットワークは、異なるテナントによってリクエストされた異なるネットワーク要件を実装する必要があり得る。
【００６２】
１つまたは複数の実施形態では、マルチテナントコンピュータネットワークにおいて、異なるテナントのアプリケーションおよび／またはデータが互いに共有されないことを確実するために、テナント分離が実装される。さまざまなテナント分離アプローチは、使用され得る。
【００６３】
実施形態では、各テナントは、テナントＩＤに関連付けられる。マルチテナントコンピューターネットワークの各ネットワークリソースは、テナントＩＤをタグ付けされる。テナントと特定のネットワークリソースが同じテナントＩＤに関連付けられる場合のみ、テナントは、特定のネットワークリソースへのアクセスを許可される。
【００６４】
実施形態では、各テナントは、テナントＩＤに関連付けられる。コンピュータネットワークによって実装された各アプリケーションは、テナントＩＤをタグ付けされる。追加的または代替的に、コンピュータネットワークによって格納された各データ構造および／またはデータセットは、テナントＩＤをタグ付けされる。テナントと特定のアプリケーション、データ構造、および／またはデータセットとが同じテナントＩＤに関連付けられる場合にのみ、テナントは、特定のアプリケーション、データ構造、および／またはデータセットへのアクセスを許可される。
【００６５】
例として、マルチテナントコンピューターネットワークによって実装された各データベースは、テナントＩＤをタグ付けされ得る。対応するテナントＩＤに関連付けられたテナントのみが、特定のデータベースのデータにアクセスし得る。別の例として、マルチテナントコンピューターネットワークによって実装されたデータベース内の各エントリは、テナントＩＤをタグ付けされ得る。対応するテナントＩＤに関連付けられたテナントのみが、特定のエントリのデータにアクセスし得る。しかし、データベースは、複数のテナントで共有され得る。
【００６６】
実施形態では、サブスクリプションリストは、どのテナントがどのアプリケーションにアクセスする許可を有するかを示す。アプリケーションごとに、アプリケーションへのアクセスが許可されるテナントのテナントＩＤのリストが格納される。テナントのテナントＩＤが特定のアプリケーションに対応するサブスクリプションリストに含まれる場合にのみ、テナントは、特定のアプリケーションへのアクセスを許可される。
【００６７】
実施形態では、異なるテナントに対応する（デジタルデバイス、仮想マシン、アプリケーションインスタンス、およびスレッドといった）ネットワークリソースは、マルチテナントコンピューターネットワークによって維持されるテナント固有のオーバーレイネットワークに分離される。例として、テナントオーバーレイネットワーク内のソースデバイスからのパケットは、同じテナントオーバーレイネットワーク内の他のデバイスにのみ伝送され得る。カプセル化トンネルは、テナントオーバーレイネットワーク上のソースデバイスから他のテナントオーバーレイネットワーク内のデバイスへの任意の伝送を禁止するために使用される。具体的には、ソースデバイスから受信されたパケットは、外側パケット内にカプセル化される。外側パケットは、第１のカプセル化トンネルエンドポイント（テナントオーバーレイネットワークのソースデバイスと通信する）から第２のカプセル化トンネルエンドポイント（テナントオーバーレイネットワークの宛先デバイスと通信する）へと伝送される。第２のカプセル化トンネルエンドポイントは、外側パケットをデカプセル化して、ソースデバイスによって伝送された元のパケットを取得する。元のパケットは、同じ特定のオーバーレイネットワーク内の第２のカプセル化トンネルエンドポイントから宛先デバイスに伝送される。
【００６８】
７．  その他、拡張
実施形態は、ハードウェアプロセッサを含み、本明細書に記載および／または添付の特許請求の範囲のいずれかに列挙される動作のいずれかを実行するように構成される１つまたは複数のデバイスを有するシステムに向けられる。
【００６９】
実施形態では、非一時的なコンピュータ可読記憶媒体は、１つまたは複数のハードウェアプロセッサによって実行されると、本明細書に記載されたおよび／または請求項のいずれかに記載された動作を実行させる命令を含む。
【００７０】
本明細書で説明される特徴および機能の任意の組み合わせは、１つまたは複数の実施形態に従って使用され得る。上述の明細書において、実施形態は、実装ごとに異なり得る多数の特定の詳細を参照して説明されてきた。したがって、明細書および図面は、限定的な意味ではなく、例示的な意味で考えられるべきである。本発明の範囲の唯一かつ排他的な指標および本出願人が本発明の範囲とすることを意図するものは、本出願から発行される特許請求の範囲の文言通りおよび均等の範囲であり、そのような特許請求の範囲は、特定の形式において後の訂正を含む。
【００７１】
８．ハードウェア概要
１つの実施形態に従って、ここで説明される技法は、１つまたは複数の特定用途のコンピューティングデバイスによって実装される。特定用途コンピューティングデバイスは、技法を実行するために有ラインであり得、または技法を実行するために永続的にプログラムされた１つまたは複数の特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、またはネットワーク処理ユニット（ＮＰＵ）といったデジタル電子デバイスを含み得、またはファームウェア、メモリ、他のストレージ、または組み合わせにおけるプログラム命令に従って技法を実行するようにプログラムされた１つまたは複数の汎用ハードウェアプロセッサを含み得る。そのような特定用途コンピューティングデバイスは、カスタム有ラインロジック、ＡＳＩＣ、ＦＰＧＡ、またはＮＰＵをカスタムプログラミングと組み合わせて、技法を実現し得る。特定用途コンピューティングデバイスは、であるクトップコンピュータシステム、ポータブルコンピューターシステム、ハンドヘルドデバイス、ネットワークデバイス、または技法を実装するための有ラインおよび／またはプログラムロジックを組み込んだ任意の他のデバイスであり得る。
【００７２】
たとえば、図５は、本発明の実施形態がその上に実装され得るコンピュータシステム５００を示すブロックダイアグラムである。コンピュータシステム５００は、情報を通信するためのバス５０２または他の通信機構、および情報を処理するためにバス５０２と結合されたハードウェアプロセッサ５０４を含む。ハードウェアプロセッサ５０４は、たとえば、汎用マイクロプロセッサであり得る。
【００７３】
コンピュータシステム５００はまた、プロセッサ５０４によって実行される情報および命令を格納するためにバス５０２に結合されたランダムアクセスメモリ（ＲＡＭ）または他の動的ストレージデバイスなどのメインメモリ５０６含む。メインメモリ５０６はまた、プロセッサ５０４によって実行される命令の実行中に一時変数または他の中間情報を格納するために使用され得る。そのような命令は、プロセッサ５０４がアクセス可能な非一時的記憶媒体に格納されると、コンピュータシステム５００を、命令において特定された動作を実行するようにカスタマイズされた特定用途マシンにする。
【００７４】
コンピュータシステム５００は、プロセッサ５０４に対する静的情報および命令を格納するためにバス５０２に結合された読み出し専用メモリ（ＲＯＭ）５０８または他の静的ストレージデバイスをさらに含む。磁気ディスクまたは光ディスクなどの記憶装置５１０が提供され、情報および命令を格納するためにバス５０２に結合される。
【００７５】
コンピュータシステム５００は、情報をコンピュータユーザに表示するために、バス５０２を介して陰極ライン管（ＣＲＴ）などのディスプレイ５１２に結合され得る。英数字および他のキーを含む入力デバイス５１４は、情報およびコマンド選択をプロセッサ５０４に伝達するためにバス５０２に結合される。別の種類のユーザ入力デバイスは、方向情報およびコマンド選択をプロセッサ５０４に伝達し、ディスプレイ５１２上のカーソル移動を制御するためのマウス、トラックボール、またはカーソル方向キーなどのカーソル制御５１６である。この入力デバイスは典型的に、第１軸（ｘなど）および第２軸（ｙなど）の２つの軸において２つの自由度があり、デバイスが平面内の位置を特定可能にする。
【００７６】
コンピュータシステム５００は、カスタマイズされた有ラインロジック、１つまたは複数のＡＳＩＣまたはＦＰＧＡ、ファームウェアおよび／またはプログラムロジックを使用して本明細書に記載の技法を実装し、これらはコンピュータシステムと組み合わせてコンピュータシステム５００を特定用途マシンにするまたはプログラムする。一実施形態によれば、本明細書の技法は、プロセッサ５０４がメインメモリ５０６に含まれる１つまたは複数の命令の１つまたは複数のシーケンスを実行したことに応答して、コンピュータシステム５００によって実行される。そのような命令は、ストレージデバイス５１０などの別の記憶媒体からメインメモリ５０６に読み込まれ得る。メインメモリ５０６に含まれる命令のシーケンスの実行により、プロセッサ５０４は本明細書に記載の処理ステップを実行する。代替実施形態では、ソフトウェア命令の代わりに、またはそれと組み合わせて、有ライン回路を使用することができる。
【００７７】
本明細書で使用される「記憶媒体」という用語は、マシンを特定の方法で動作させるデータおよび／または命令を記憶する任意の非一時的媒体を指す。そのような記憶媒体は、不揮発性媒体および／または揮発性媒体を含み得る。不揮発性媒体は、たとえば、ストレージデバイス５１０などの光ディスクまたは磁気ディスクが含まれる。揮発性媒体は、メインメモリ５０６などの動的メモリを含む。記憶媒体の一般的な形態は、たとえば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、ソリッドステートドライブ、磁気テープ、または他の磁気データ記憶媒体、ＣＤ−ＲＯＭ、その他の光学データ記憶媒体、穴のパターンを備えた物理媒体、ＲＡＭ、ＰＲＯＭ、およびＥＰＲＯＭ、フラッシュＥＰＲＯＭ、ＮＶＲＡＭ、その他のメモリチップまたはカートリッジ、連想メモリ（ＣＡＭ）、およびＴｅｒｎａｒｙ  Ｃｏｎｔｅｎｔ−を追加するｒｅｓｓａｂｌｅ  Ｍｅｍｏｒｙ（ＴＣＡＭ）を含む。
【００７８】
記憶媒体は、伝送媒体と別のものであるが、これと組み合わせて使用されることができる。伝送メディアは、記憶媒体間の情報の送信に関与する。たとえば、伝送媒体は、バス５０２を構成するワイヤを含む同軸ケーブル、銅ライン、光ファイバーを含む。伝送媒体は、電波および赤外ラインデータ通信中に生成される音波などの音響波または光波の形態を取ることができる。
【００７９】
さまざまな形態の媒体が、実行のためにプロセッサ５０４に１つまたは複数の命令の１つまたは複数のシーケンスを運ぶことに関与し得る。たとえば、命令は、初期的にリモートディスクの磁気ディスクまたはソリッドステートドライブで実行されることができる。リモートコンピュータは、命令を動的メモリにロードし、モデムを使用して電話回ラインで命令を送信することができる。コンピュータシステム５００に対してローカルなモデムは、電話ラインでデータを受信し、赤外ライン送信機を使用してデータを赤外ライン信号に変換することができる。赤外ライン検出器は、赤外ライン信号で運ばれるデータを受信でき、適切な回路は、データをバス５０２に配置することができる。バス５０２は、データをメインメモリ５０６に運び、プロセッサ５０４は、そこから命令を取り出して実行する。メインメモリ５０６によって受信された命令は、プロセッサ５０４による実行の前または後のいずれかに、ストレージデバイス５１０に任意に格納され得る。
【００８０】
コンピュータシステム５００はまた、バス５０２に結合された通信インターフェイス５１８を含む。通信インターフェイス５１８は、ローカルネットワーク５２２に接続されたネットワークリンク５２０に結合する双方向データ通信を提供する。例えば、通信インターフェイス５１８は、統合サービスデジタルネットワーク（ＩＳＤＮ）カード、ケーブルモデム、衛星モデム、または対応する種類の電話回ラインへのデータ通信接続を提供するモデムであり得る。別の例として、通信インターフェイス５１８は、互換性のあるＬＡＮへのデータ通信接続を提供するローカルエリアネットワーク（ＬＡＮ）カードであり得る。無ラインはまた、実装され得る。そのような実装では、通信インターフェイス５１８は、さまざまな種類の情報を表すデジタルデータストリームを運ぶ電気信号、電磁信号、または光信号を送受信する。
【００８１】
ネットワークリンク５２０は、典型的に、１つまたは複数のネットワークを介して他のデータデバイスへのデータ通信を提供する。たとえば、ネットワークリンク５２０は、ローカルネットワーク５２２を介してホストコンピューター５２４またはインターネットサービスプロバイダ（ＩＳＰ）５２６によって運営されるデータ機器への接続を提供することができる。ＩＳＰ５２６は、今日一般に「インターネット」５２８と呼ばれる世界規模のパケットデータ通信ネットワークを通じてデータ通信サービスを次いで提供する。ローカルネットワーク５２２およびインターネット５２８は両方とも、デジタルデータストリームを運ぶ電気信号、電磁信号または光信号を使用する。コンピュータシステム５００へとまたはそこへとデジタルデータを搬送する、さまざまなネットワークを介した信号、およびネットワークリンク５２０および通信インターフェイス５１８を介した信号は、伝送媒体の例示的な形態である。
【００８２】
コンピュータシステム５００は、ネットワーク（複数可）、ネットワークリンク５２０、および通信インターフェイス５１８を通じて、メッセージを送信し、プログラムコードを含むデータを受信することができる。インターネットの例では、サーバ５３０は、インターネット５２８、ＩＳＰ５２６、ローカルネットワーク５２２、および通信インターフェイス５１８を介して、アプリケーションプログラムにリクエストされたコードを送信する。
【００８３】
受信されたコードは、プロセッサ５０４が受信されたときにそれによって実行され、および／または後で実行するためにストレージデバイス５１０または他の不揮発性ストレージに格納され得る。
【００８４】
上述の明細書では、本発明の実施形態は、実装ごとに異なり得る多数の特定の詳細を参照して説明されてきた。したがって、明細書と図面は、限定的な意味ではなく、例示的な意味で考えられるべきである。本発明の範囲の唯一かつ排他的な指標および本出願人が本発明の範囲とすることを意図するものは、本出願から発行される特許請求の範囲の文言通りおよび均等の範囲であり、そのような特許請求の範囲は、特定の形式において後の訂正を含む。
【図１】
0006929377.tif 000002
【図２】
0006929377.tif 000003
【図３】
0006929377.tif 000004
【図４Ａ】
0006929377.tif 000005
【図４Ｂ】
0006929377.tif 000006
【図４Ｃ】
0006929377.tif 000007
【図４Ｄ】
0006929377.tif 000008
【図４Ｅ】
0006929377.tif 000009
【図５】
0006929377.tif 000010