(57)【特許請求の範囲】
【請求項１】
少なくとも１つのプロセッサと、
プログラム命令を含むメモリであって、前記プログラム命令が、１つまたは複数の入出力ポートを介してローカルネットワーク上で、１つまたは複数のクライアントプロセスから書込み要求を含む入出力要求を受信し、前記書込み要求によって示される書込みデータをローカルデータストア上の書込みログのインメモリ部分に付加して、書込みデータを前記書込みログからリモートデータストアにアップロードする、ストレージゲートウェイプロセスを実現するように前記少なくとも１つのプロセッサによって実行可能である、メモリと
を備える装置であって、
前記プログラム命令が、更新パッケージをリモートネットワークからダウンロードし、前記ストレージゲートウェイプロセスにシャットダウンするように指示して、前記ダウンロードされた更新パッケージに従って前記メモリ内で更新されたストレージゲートウェイプロセスのインスタンスを生成するように、前記少なくとも１つのプロセッサによってさらに実行可能であり、
シャットダウンする前記指示の受信に応答して、前記ストレージゲートウェイプロセスが、前記１つまたは複数の入出力ポートの指示を含むストレージゲートウェイ設定を保存し、書込みデータを前記書込みログの前記インメモリ部分から前記ローカルデータストアにフラッシュして、前記１つまたは複数の入出力ポートを解放し、
前記更新されたストレージゲートウェイプロセスが前記保存されたストレージゲートウェイ設定をロードし、前記ストレージゲートウェイプロセスが前記１つまたは複数の入出力ポートを解放した後、ストレージゲートウェイ動作を前記ストレージゲートウェイプロセスから引き継ぐ、
装置。
【請求項２】
ストレージゲートウェイ動作を前記ストレージゲートウェイプロセスから引き継ぐために、前記更新されたゲートウェイプロセスが、前記１つまたは複数の入出力ポートが前記ストレージゲートウェイプロセスによって解放されていることを検出し、前記１つまたは複数の入出力ポートを開き、前記１つまたは複数の入出力ポートを介して前記１つまたは複数のクライアントプロセスからの書込み要求を含む入出力要求の受信および処理を開始する、請求項１に記載の装置。
【請求項３】
前記更新されたゲートウェイプロセスによって前記１つまたは複数のクライアントプロセスから受信された前記書込み要求が、前記書込みログのインメモリ部分からの書込みデータの前記フラッシュ中に、前記ストレージゲートウェイプロセスによって受け入れられなかった書込み要求の少なくとも１つの再試行を含む、請求項２に記載の装置。
【請求項４】
前記１つまたは複数の入出力ポートを介して前記１つまたは複数のクライアントプロセスから受信された前記書込み要求を処理するために、前記更新されたゲートウェイプロセスが、前記書込み要求によって示される書込みデータを前記書込みログに付加し、前記書込みデータを前記書込みログから前記リモートデータストアにアップロードする、請求項２に記載の装置。
【請求項５】
書込みデータを前記書込みログの前記インメモリ部分から前記ローカルデータストアにフラッシュするために、前記ストレージゲートウェイプロセスが：
書込み要求を含む新しい入出力要求を前記１つまたは複数の入出力ポート上で受け入れて、前記新しい書込み要求によって示される新しい書込みデータを前記書込みログの前記インメモリ部分に付加する間に、前記書込みログの前記インメモリ部分内の現在の書込みデータを前記ローカルデータストアにフラッシュし、かつ
前記書込みログの前記インメモリ部分内の前記現在の書込みデータを前記ローカルデータストアにフラッシュした後、前記１つまたは複数の入出力ポート上での後続の書込み要求の受入れを停止して、前記書込みログの前記インメモリ部分内の前記新しい書込みデータを前記ローカルデータストアにフラッシュする、
請求項１に記載の装置。
【請求項６】
それぞれのクライアントプロセスに前記書込み要求を再試行するように通知するために、前記ストレージゲートウェイプロセスが前記後続の書込み要求の各々に応答する、請求項５に記載の装置。
【請求項７】
前記ストレージゲートウェイプロセスが、指定された更新ウィンドウの間、前記ストレージゲートウェイ設定を保存し、前記書込みデータを前記書込みログの前記インメモリ部分から前記ローカルデータストアにフラッシュして、前記１つまたは複数の入出力ポートを解放する、請求項１に記載の装置。
【請求項８】
前記更新されたストレージゲートウェイプロセスが、前記指定された更新ウィンドウの間、前記保存されたストレージゲートウェイ設定をロードして、ストレージゲートウェイ動作を前記ストレージゲートウェイプロセスから引き継ぐ、請求項７に記載の装置。
【請求項９】
前記１つまたは複数の入出力ポートの前記解放の後、前記ストレージゲートウェイプロセスが終了する、請求項１に記載の装置。
【請求項１０】
１つまたは複数の入出力ポートを介して、ローカルネットワーク上で１つまたは複数のクライアントプロセスから書込み要求を含む入出力要求を受信すること、前記書込み要求によって示される書込みデータをローカルデータストア上の書込みログのインメモリ部分に付加すること、および書込みデータを前記書込みログからリモートデータストアにアップロードすることを含むストレージゲートウェイ動作を、ストレージゲートウェイによって、実行することと、
更新されたストレージゲートウェイが前記ストレージゲートウェイ動作を引き継ぐことができるように、シャットダウンする指示を受信することと、
前記指示の受信に応答して、前記更新されたストレージゲートウェイが前記ストレージゲートウェイ動作を引き継ぐことができるように、前記１つまたは複数の入出力ポートの指示を含むストレージゲートウェイ設定を保存し、書込みデータを前記書込みログの前記インメモリ部分から前記ローカルデータストアにフラッシュして、前記１つまたは複数の入出力ポート解放することと
を含む方法。
【請求項１１】
ストレージゲートウェイ動作を引き継ぐために、前記更新されたストレージゲートウェイが、前記１つまたは複数の入出力ポートが前記ストレージゲートウェイによって解放されていることを検出し、前記１つまたは複数の入出力ポートを開き、前記１つまたは複数の入出力ポートを介して前記１つまたは複数のクライアントプロセスから書込み要求を含む入出力要求を受信して処理する、請求項１０に記載の方法。
【請求項１２】
書込みデータを前記書込みログの前記インメモリ部分から前記ローカルデータストアにフラッシュするために、前記方法が：
新しい書込み要求を含む入出力要求を前記１つまたは複数の入出力ポート上で受け入れて、前記新しい書込み要求によって示される新しい書込みデータを前記書込みログの前記インメモリ部分に付加する間に、前記書込みログの前記インメモリ部分内の現在の書込みデータを前記ローカルデータストアにフラッシュすることと、
前記書込みログの前記インメモリ部分内の前記現在の書込みデータを前記ローカルデータストアにフラッシュした後、前記１つまたは複数の入出力ポート上での後続の書込み要求を拒否している間に、前記書込みログの前記インメモリ部分内の前記新しい書込みデータを前記ローカルデータストアにフラッシュすることと
をさらに含む、請求項１０に記載の方法。
【請求項１３】
前記後続の書込み要求の各々に応答して、それぞれのクライアントプロセスに前記書込み要求を再試行するように通知することをさらに含む、請求項１２に記載の方法。
【請求項１４】
指定された更新ウィンドウの間、前記ストレージゲートウェイ設定を保存することと、前記書込みデータを前記書込みログの前記インメモリ部分から前記ローカルデータストアにフラッシュすることと、前記１つまたは複数の入出力ポートを解放することとをさらに含む、請求項１０に記載の方法。
【請求項１５】
前記１つまたは複数の入出力ポートの前記解放の後、シャットダウンすることをさらに含む、請求項１０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
多くの企業および他の組織は、多数のコンピューティングシステムを、例えば、コンピューティングシステムを同一場所に（例えば、ローカルネットワークの一部として）配置して、または代わりに、複数の異なる地理的位置に（例えば、１つもしくは複数のプライベートまたは公共の中間ネットワークを経由して接続して）配置して、それらの動作をサポートするために、相互接続するコンピュータネットワークを運用する。例えば、単一の組織によって、または組織の代わりに運用されているプライベートのデータセンター、および顧客にコンピューティングリソースを提供するビジネスとして、事業体によって運用されている公共データセンターなどの、かなりの数の相互接続されたコンピューティングシステムを収容するデータセンターが当たり前になっている。いくつかの公共データセンターの運営事業体は、様々な顧客によって所有されているハードウェアに対して、ネットワークアクセス、電力、および安全な設置施設を提供するが、一方、他の公共データセンターの運営事業体は、それらの顧客による使用が可能なハードウェアリソースも含む、「完全なサービス」施設を提供する。しかし、通常のデータセンターの規模および範囲が拡大するにつれて、物理的コンピューティングリソースをプロビジョニング、運営、および管理するタスクがますます複雑になっている。
【背景技術】
【０００２】
コモディティハードウェアに対する仮想化技術の出現は、多様なニーズをもつ多数の顧客に対する大規模なコンピューティングリソースの管理に関して利益をもたらし、様々なコンピューティングリソースが効果的かつ安全に複数の顧客によって共有可能になった。例えば、仮想化技術は、単一の物理コンピューティングマシンによってホストされた１つまたは複数の仮想マシンを各ユーザーに提供することにより、単一の物理コンピューティングマシンが複数のユーザー間で共有できるようにし得るが、各かかる仮想マシンは、ユーザーに、彼らが所与のハードウェアリソースの唯一のオペレータおよび管理者であるという錯覚をもたらす、別個の論理コンピューティングシステムとして機能し、同時に、様々な仮想マシン間でのアプリケーションの分離およびセキュリティも提供する、ソフトウェアシミュレーションである。さらに、いくつかの仮想化技術は、複数の別個の物理コンピューティングシステムにわたる複数の仮想プロセッサを有する単一の仮想マシンなど、２つ以上の物理リソースにわたる仮想リソースを提供できる。
【０００３】
別の例として、仮想化技術は、複数のデータ記憶装置にわたって分散され得る仮想化データストアを各ユーザーに提供することにより、データ記憶ハードウェアが、複数のユーザー間で共有できるようにし得るが、各かかる仮想化データストアは、ユーザーに、彼らがそのデータ記憶リソースの唯一のオペレータおよび管理者であるという錯覚をもたらす、別個の論理データストアとして機能する。
【０００４】
〔ウェブサービス〕
従来型のウェブモデルは、ウェブブラウザなどの、ＨＴＴＰクライアントプログラムを経由して、クライアントがウェブリソース（例えば、アプリケーション、サービス、およびデータ）にアクセスできるようにする。ウェブサービスと呼ばれる技術は、ウェブリソースへのプログラムによるアクセスを提供するために開発された。ウェブサービスは、ウェブサービスインタフェースを経由したウェブサーバーシステムなどのウェブ接続されたコンピュータ上でホストされる技術的プラットフォーム（例えば、アプリケーションおよびサービス）およびデータ（例えば、製品カタログおよび他のデータベース）を含め、ウェブリソースへのプログラムによるアクセスを提供するために使用され得る。一般的に言えば、ウェブサービスインタフェースが、何らかのサービスが実行されることを要求しているクライアントとサービスプロバイダとの間の通信のために、標準的なクロスプラットフォームＡＰＩ（アプリケーションプログラミングインタフェース）を提供するように設定され得る。いくつかの実施態様では、ウェブサービスインタフェースが、サービス要求およびその要求に対する応答を記述する情報を含む文書またはメッセージの交換をサポートするように設定され得る。かかる文書、またはメッセージは、例えば、ハイパーテキスト転送プロトコル（ＨＴＴＰ）などの、標準ウェブプロトコルを使用して交換され得、また、例えば、拡張マークアップ言語（ＸＭＬ）などの、プラットフォームに依存しないデータフォーマットでフォーマットされ得る。
【図面の簡単な説明】
【０００５】
【図１】少なくともいくつかの実施形態に従った、サービスプロバイダ例およびサービス顧客例を含む、ネットワーキング環境例のハイレベルブロック図である。
【図２】少なくともいくつかの実施形態に従った、ストレージゲートウェイのためのアーキテクチャ例およびその構成要素を示す。
【図３】ストレージゲートウェイの実施形態が実現され得るネットワーク環境例のハイレベルブロック図である。
【図４】少なくともいくつかの実施形態に従った、サービス顧客ネットワークとサービスプロバイダネットワーク上のストレージサービスとの間のインタフェースとして機能する、サービス顧客ネットワークでのオンサイトのストレージゲートウェイを含むネットワーク環境例のブロック図である。
【図５】少なくともいくつかの実施形態に従って、ストレージサービスおよびハードウェア仮想化サービスをサービスプロバイダの顧客に対して提供する、サービスプロバイダ例のブロック図である。
【図６】ストレージゲートウェイの一実施形態がキャッシュゲートウェイとして設定される、ネットワーク環境例のアーキテクチャおよびその中のデータフローを大まかに示すハイレベルブロック図である。
【図７】ストレージゲートウェイの一実施形態がシャドーイングゲートウェイとして設定される、ネットワーク環境例のアーキテクチャおよびその中のデータフローを大まかに示すハイレベルブロック図である。
【図８】少なくともいくつかの実施形態に従った、ネットワーク環境例内でのシャドーイングゲートウェイのブートストラップを大まかに示すハイレベルブロック図である。
【図９】少なくともいくつかの実施形態に従った、シャドーイングゲートウェイのためのブートストラッププロセスの流れ図である。
【図１０】少なくともいくつかの実施形態に従って、パススルーモードに入り、それから回復するシャドーイングゲートウェイの流れ図である。
【図１１】少なくともいくつかの実施形態に従って、ゲートウェイからリモートデータストアへブロックをアップロード、更新、および追跡するための方法の流れ図である。
【図１２】少なくともいくつかの実施形態に従った、シャドーイングゲートウェイのための最適化されたブートストラッププロセスの流れ図である。
【図１３】少なくともいくつかの実施形態に従った、ストレージゲートウェイセキュリティモデルの態様を示す。
【図１４】少なくともいくつかの実施形態に従った、ストレージゲートウェイの有効化、設定、および動作中の、ゲートウェイセキュリティモデルの少なくともいくつかの態様を示す、流れ図である。
【図１５】少なくともいくつかの実施形態に従って、ゲートウェイ有効化プロセスに関与する、サービス顧客およびサービスプロバイダ構成要素または事業体を示すネットワーキング環境例のハイレベルブロック図である。
【図１６Ａ−１６Ｂ】少なくともいくつかの実施形態に従って、ゲートウェイ有効化プロセス中に、図１５に示す構成要素間のやりとりを示すプロセス流れ図である。
【図１７Ａ】少なくともいくつかの実施形態に従って、ストレージゲートウェイの観点から見た、アクティブ化プロセスの流れ図である。
【図１７Ｂ】少なくともいくつかの実施形態に従って、ストレージゲートウェイの観点から見た、アクティブ化プロセスの流れ図である。
【図１８】少なくともいくつかの実施形態において採用され得るゲートウェイ制御アーキテクチャ例を示すハイレベルブロック図である。
【図１９】少なくともいくつかの実施形態に従って、ゲートウェイ開始接続およびロングポーリング技術を使用したリモートゲートウェイ管理のための方法の流れ図である。
【図２０】いくつかの実施形態に従って、ゲートウェイ制御サーバーがゲートウェイ要求をそのピアサーバーにブロードキャストするための方法の流れ図である。
【図２１】いくつかの実施形態に従って、ゲートウェイ要求を適切なゲートウェイ制御サーバーに対して送達するための代替方法の流れ図である。
【図２２】少なくともいくつかの実施形態に従って、ゲートウェイ開始接続を確立、監視、および維持するための方法の流れ図である。
【図２３Ａ】少なくともいくつかの実施形態に従って、ゲートウェイプロキシプレーン（ｐｒｏｘｙ  ｐｌａｎｅ）を含む、サービスプロバイダネットワークのためのアーキテクチャを大まかに示すブロック図である。
【図２３Ｂ】少なくともいくつかの実施形態に従い、ゲートウェイプロキシプレーンを通じて、ゲートウェイにメッセージ送信するゲートウェイ制御サーバーを示す。
【図２３Ｃ】少なくともいくつかの実施形態に従い、ゲートウェイプロキシプレーンを通じて、ゲートウェイ制御サーバー要求に応答するゲートウェイを示す。
【図２３Ｄ】少なくともいくつかの実施形態に従った、ゲートウェイプロキシプレーンに対するｐｉｎｇメッセージ交換を示す。
【図２４】少なくともいくつかの実施形態に従った、キャッシュゲートウェイのための全体アーキテクチャおよびそのデータ入出力動作を示す。
【図２５】少なくともいくつかの実施形態に従った、シャドーイングゲートウェイのための全体アーキテクチャおよびそのデータ入出力動作を示す。
【図２６】少なくともいくつかの実施形態に従って、ブロックデータストア上の書込みログに書き込むための方法の流れ図である。
【図２７】キャッシュゲートウェイの少なくともいくつかの実施形態に従って、読取り要求を満足するための方法の流れ図である。
【図２８Ａ】少なくともいくつかの実施形態に従って、実行中のゲートウェイ制御プロセスを更新するための技術の構成要素および動作を図で示す。
【図２８Ｂ】少なくともいくつかの実施形態に従って、実行中のゲートウェイ制御プロセスを更新するための技術の構成要素および動作を図で示す。
【図２８Ｃ】少なくともいくつかの実施形態に従って、実行中のゲートウェイ制御プロセスを更新するための技術の構成要素および動作を図で示す。
【図２８Ｄ】少なくともいくつかの実施形態に従って、実行中のゲートウェイ制御プロセスを更新するための技術の構成要素および動作を図で示す。
【図２９】少なくともいくつかの実施形態に従って、実行中のストレージゲートウェイプロセスを更新するための方法の流れ図を示す。
【図３０】いくつかの実施形態で使用され得るコンピュータシステム例を示すブロック図である。
【０００６】
本明細書では、実施形態が、いくつかの実施形態に対する例および例示的な図によって説明されているが、当業者は、実施形態は、説明された実施形態または図に制限されないことを理解するであろう。加えて、図およびそれに対する詳細な説明は、実施形態を開示した特定の形態に制限することを意図せず、逆に、意図は、添付の請求項で定義される精神および範囲内に含まれる、全ての修正、均等物、および代替手段を包含することが理解されるはずである。本明細書で使用される見出しは、編成目的のためだけであり、記述または請求項の範囲を制限するために使用されることを意図していない。本願全体で使用されるように、「〜し得る（ｍａｙ）」という用語は、強制的な意味（すなわち、〜しなければならない（ｍｕｓｔ）という意味）よりもむしろ、許可的な意味（すなわち、〜する可能性があるという意味）で使用される。同様に、「を含む（ｉｎｃｌｕｄｅ）」、「を含み（ｉｎｃｌｕｄｉｎｇ）」、および「を含む（ｉｎｃｌｕｄｅｓ）」という用語は、限定されないが、含むことを意味する。
【発明を実施するための形態】
【０００７】
リモートストレージに対してローカルゲートウェイを提供するための方法、装置、およびコンピュータアクセス可能記憶媒体の様々な実施形態が説明される。ストレージゲートウェイの実施形態が、本明細書では、インターネットなどの中間ネットワークを通じて、ストレージサービスを、サービスプロバイダの１つまたは複数の顧客に提供する、サービスプロバイダのコンテキストで説明される。ストレージゲートウェイは、顧客のデータセンターにおいてオンプレミス（ｏｎ−ｐｒｅｍｉｓｅ）（その建物内）4でインストールされ、顧客のデータセンターとストレージサービスとの間でゲートウェイとして機能する、仮想または物理アプライアンスとして実装され得る。ストレージゲートウェイは、ストレージサービスを経由してリモートで提供される一次記憶装置へのインタフェースとして、およびそれに対するローカルキャッシュとして設定され得るか、かつ／またはストレージサービスによって提供されたリモートストレージへの顧客のネットワーク上に実装された一次記憶装置をシャドーイングするインタフェースとして設定され得る。ストレージゲートウェイは、アプライアンスのフロントエンドで、顧客のアプリケーションに対する標準データアクセスインタフェースを提示し、アプライアンスのバックエンドで、そのデータアクセスをストレージサービス要求に変換し、ストレージサービスインタフェースに従って、そのデータをネットワークを通じてストレージサービスに伝達し得る。少なくともいくつかの実施形態では、ストレージサービスインタフェースは、ウェブサービスインタフェースとして実装され得る。
【０００８】
ストレージゲートウェイの実施形態は、オンプレミスインタフェースを、ストレージサービスを通じて提供された、実質的に無制限で、柔軟な、拡張可能リモートストレージに提供し得る。ストレージゲートウェイは、従来型のオンプレミスストレージソリューションに対して、費用効率が高く、柔軟で、さらに容易に拡張可能な代替手段を提供し得る。記憶装置の費用は減少しているが、従来型のオンプレミスストレージソリューションの管理、ならびに他のソフトウェアおよびハードウェアの費用は比較的一定のままであるか、または場合によって増加している。ストレージゲートウェイの実施形態は、サービスプロバイダの顧客が、ストレージの総所有費用を下げることを可能にし得、少なくともいくらかの管理および他の費用をサービスプロバイダに渡す。
【０００９】
少なくともいくつかの実施形態では、ストレージサービスは、ブロックストレージ技術に従って、リモートデータストア内に顧客のデータを格納し得る。少なくともいくつかの実施形態では、ストレージゲートウェイは、ブロックストレージプロトコル（例えば、ｉＳＣＳＩ、ＧＮＢＤ（グローバルネットワークブロックデバイス）など）、ファイルストレージプロトコル（例えば、ＮＦＳ（ネットワークファイルストレージ）、ＣＩＦＳ（共通インターネットファイルシステム）など）、および／またはオブジェクトストレージプロトコル（例えば、ＲＥＳＴ（Ｒｅｐｒｅｓｅｎｔａｔｉｏｎｌ  Ｓｔａｔｅ  Ｔｒａｎｓｆｅｒ：表現状態転送））を、顧客のアプリケーションに対するフロントエンドで公開し得る。ｉＳＣＳＩなどのブロックストレージプロトコルは、リモートデータストアの基礎となるデータブロックへの直接アクセスを可能にする。
【００１０】
ストレージゲートウェイによって公開されたＮＦＳまたはＣＩＦＳなどのファイルストレージプロトコルを介してアプリケーションによりリモートデータストアに書き込まれたファイルは、ブロックストレージ技術に従って、リモートデータストアに格納され得る。ＮＦＳおよびＣＩＦＳなどの公開されたファイルストレージプロトコルを通じて、ストレージゲートウェイは、ブロックストレージ技術に従ってリモートデータストアに格納された、顧客のデータを、それらがゲートウェイから顧客のネットワークを通じて顧客のアプリケーションに伝送される前に、顧客のアプリケーションにファイルとして提示する。例えば、ｉＳＣＳＩなどの公開されたブロックストレージプロトコルは、ブロックを顧客のアプリケーションに伝送し、従って、そのアプリケーションが、データブロックの解釈を、そのアプリケーションが期待するどんなフォーマットにも処理することを要求する。
【００１１】
ｉＳＣＳＩなどのブロックストレージプロトコルは、低レベルブロックストレージプロトコルであり、従って、ＮＦＳおよびＣＩＦＳなどのファイルストレージプロトコルよりも広い範囲の使用事例を可能にし得る。ブロックストレージプロトコルは、通常、Ｍｉｃｒｏｓｏｆｔ（登録商標）  ＳｈａｒｅＰｏｉｎｔ（登録商標）およびＯｒａｃｌｅ（登録商標）データベースなどの、ブロックストアに書き込むアプリケーションに対するサポートを可能にし得、ＣＩＦＳまたはＮＦＳファイルサーバーに対する基礎となるストレージを提供するようにも設定され得る。それ故、ストレージゲートウェイの少なくともいくつかの実施形態では、ｉＳＣＳＩなどのブロックストレージプロトコルが、顧客のアプリケーションに対して公開されたインタフェースとして採用され得る。
【００１２】
図１は、少なくともいくつかの実施形態に従った、サービスプロバイダ例およびサービス顧客例を含む、ネットワーキング環境例のハイレベルブロック図である。ストレージゲートウェイ８４は、いくつかのリモートデータ記憶機能のうちの１つまたは複数をクライアントネットワーク８０上の顧客プロセス（単数または複数）８８に提供するために、サービス顧客ローカルネットワークまたはデータセンター（例えば、クライアントネットワーク８０）内で、仮想または物理アプライアンスとして、インストール、有効化、および設定され得る。顧客プロセス８８は、クライアントネットワーク８０上に存在し、ゲートウェイ８４のデータポートのデータプロトコル（例えば、ｉＳＣＳＩプロトコル）を介して、ストレージゲートウェイ８４と接続して通信できる、任意のハードウェア、ソフトウェア、および／またはそれらの組合せであり得る。ストレージゲートウェイ８４は、例えば、オンプレミス記憶装置として、および／またはクライアントネットワーク８０上の顧客プロセス（単数または複数）８８と、サービスプロバイダ６０によって提供されるストレージサービス６４との間のインタフェースとして、機能し得る。ストレージサービス６４に加えて、サービスプロバイダ６０は、ハードウェア仮想化サービスを含むが、それに限らず、他のサービスも、サービスプロバイダ６０の顧客に提供し得ることに留意されたい。
【００１３】
サービスプロバイダ６０の顧客は、本明細書では、サービス顧客または単に顧客と呼ばれ得るが、ローカルネットワークまたはネットワーク上の１人または複数のユーザーに、サービスプロバイダ６０によってリモートで提供される１つまたは複数のサービスを含め、ネットワーク化コンピューティングサービスを提供するために、インターネットなどの中間ネットワーク５０に結合された、コンピュータネットワークまたは複数のネットワークを実装する任意の事業体であり得る。サービス顧客は、企業、教育機関、政府機関、または、ネットワーク化コンピューティングサービスをユーザーに提供するコンピュータネットワークまたは複数のネットワークを実装する、一般的な任意の事業体であり得る。図１は、単一のクライアントネットワーク８０を示しているが、複数のクライアントネットワーク８０があり得る。各クライアントネットワーク８０は、異なるサービス顧客に対応し得るか、または２つ以上のクライアントネットワーク８０が、例えば、企業の異なる支社もしくは学校組織の異なるキャンパスなど、同じサービス顧客の異なるデータセンターもしくは地域に対応し得る。少なくともいくつかの実施形態では、サービスプロバイダ６０の各顧客は、サービスプロバイダ６０にアカウントを有し得、セキュリティ認証情報（例えば、アカウント名および／または識別子、パスワードなど）が提供され得るが、それを用いて、一人または複数の顧客の代表者（例えば、クライアントネットワーク管理者）が、サービスプロバイダ６０によって提供された、ストレージサービスを含むがそれに限らない、１つまたは複数のサービスによって提供される顧客のリソースを管理するために、サービスプロバイダ６０へのインタフェース（例えば、ウェブページ）にログインし得る。
【００１４】
ストレージゲートウェイ８４の実施形態は、ハードウェア、ソフトウェア、またはそれらの組合せで実装され得る。少なくともいくつかの実施形態では、ストレージゲートウェイ８４は、例えば、ホストシステム上でインスタンス生成された仮想マシン内で実行し得る、仮想アプライアンスとして実装され得る。少なくともいくつかの実施形態では、ストレージゲートウェイ８４は、サービス顧客のデータセンター（例えば、クライアントネットワーク８０）において、ローカルネットワークインフラストラクチャに結合されたサーバーシステムなどの、１つまたは複数のコンピューティング装置上で、ダウンロードされるか、または別の方法でインストールされて、有効化され、かつ設定され得る仮想アプライアンスとして実装され得る。代替として、ストレージゲートウェイ８４は、サービス顧客のデータセンター（例えば、クライアントネットワーク８０）において、ローカルネットワークインフラストラクチャに結合され得る専用装置またはアプライアンスとして実現され得；その専用装置またはアプライアンスは、ストレージゲートウェイ８４の機能を実装するソフトウェアおよび／またはハードウェアを含み得る。図２６は、ストレージゲートウェイ８４の実施形態がその上に実装され得るコンピュータシステム例を示す。少なくともいくつかの実施形態では、ストレージゲートウェイ８４は、ファイアウォール８２技術を通し、中間ネットワーク５０（例えば、インターネット）を経てサービスプロバイダ６０ネットワークと通信する。サービスプロバイダ６０ネットワークは、中間ネットワーク５０への、およびそこからのネットワークトラフィックが通過する、フロントエンド６２技術（例えば、ファイアウォール技術、境界ルーター技術、負荷分散装置技術など）も含むことに留意されたい。
【００１５】
ストレージゲートウェイ８４の少なくともいくつかの実施形態は、顧客に対するデータ保護、ならびに顧客または第３者によるゲートウェイ８４の誤用および不正使用（例えば、不法コピー）に対する保護を提供するセキュリティモデルに従って実装され得る。ストレージゲートウェイ８４とストレージサービス６４との間の通信が保護および暗号化され得る。本文書内で有効化プロセスが後で説明されるが、その中で、新しくインストールされたストレージゲートウェイ８４が、セキュリティ認証情報を取得するために、サービスプロバイダ６０ネットワークとの接続を開始し、それに対して識別される。少なくともいくつかの実施形態では、有効化プロセス中に、顧客は、サービスプロバイダ６０で顧客のアカウントにログインして、ゲートウェイ８４の登録で使用される情報をサービスプロバイダ６０に提供する。しかし、顧客はストレージゲートウェイ８４にログインせず、従って、顧客のセキュリティ認証情報および他のアカウント情報は、ゲートウェイ８４上で公開されない。これは、顧客に対するセキュリティリスクを最小限にし得る。
【００１６】
少なくともいくつかの実施形態では、セキュリティモデルの態様は、ゲートウェイ８４は、クライアントネットワーク８０上の顧客プロセス（単数または複数）８８に対して公開された１つまたは複数のデータポート（例えば、ｉＳＣＳＩポート）への外部開始接続のみを受け入れることである。ストレージゲートウェイは、外部プロセスへの全ての他の接続を開始し；外部プロセスは、ゲートウェイへのいかなる他の接続をも開始できない。例えば、少なくともいくつかの実施形態では、ストレージゲートウェイ８４は、ゲートウェイ管理およびサービスプロバイダ６０への他の接続を開始し；サービスプロバイダ６０はゲートウェイ８４への接続を開始しない。別の例として、クライアントネットワーク８０のネットワーク管理者プロセス９０は、ゲートウェイ８４を設定および管理するために、ストレージゲートウェイ８４に直接接続できない。代わりに、ネットワーク管理者プロセス９０によるストレージゲートウェイ８４の設定および管理は、例えば、サービスプロバイダ６０ネットワーク上のコンソールプロセス６８を介して、サービスプロバイダ６０を通して実行され得る。従って、少なくともいくつかの実施形態では、クライアントネットワーク８０上のユーザー、ネットワークマネージャ、またはプロセス（例えば、ネットワーク管理者プロセス９０もしくは顧客プロセス（単数または複数）８８）は、ストレージゲートウェイ８４に直接「ログイン」できず、サービスプロバイダ６０ネットワーク上（例えば、コンソールプロセス６８およびストレージサービス６４）もしくは何らかの他の外部ネットワーク上のユーザー、マネージャ、もしくはプロセスもストレージゲートウェイ８４への接続を開始することもできない。これは、ストレージゲートウェイ８４上のセキュリティ認証情報および他の動作情報が、クライアントネットワーク８０上の人もしくはプロセスによって、または外部の人もしくはプロセスによって、故意もしくは故意ではなく危険にさらされるのを防ぐ役に立つ。
【００１７】
ストレージゲートウェイ８４の実施形態は、いくつかのデータストア６６機能のうちの１つまたは複数を提供するために、インストールされ、有効化され、かつ、ストレージサービス６４との使用のために設定され得る。例えば、ストレージゲートウェイ８４は、以下のものとして機能するために、インストールされ、有効化され、設定され、かつストレージサービス６４で採用され得る：
・ファイルシステムゲートウェイ。この設定では、ストレージゲートウェイは、ストレージサービス６４に対するＮＡＳストレージインタフェース（例えば、ＣＩＦＳまたはＮＦＳプロトコルを使用して）として機能する。リモートデータストア６６は、ゲートウェイ８４により顧客に対してオブジェクトストア（例えば、ＲＥＳＴ）として提示され得るが、他方、データストア６６は、ブロックストレージ技術に従って実装される。この設定では、リモートデータストア６６は、顧客がそれに対してファイルを書き込むことができ、かつ、顧客がそれからファイルを読み取ることができる、仮想化ファイルシステムとして、顧客に提示され得る。
・クラウドボリュームゲートウェイ。この設定では、ストレージゲートウェイ８４は、ストレージサービス６４を介して、リモートデータストア６６上に実装されたボリューム（単数または複数）へのインタフェースとして機能する。リモートデータストア６６は、ブロックストレージ技術を使用して実装され得る。ゲートウェイ８４は、柔軟で本質的に制限のない一次記憶容量を提供するバックエンド記憶装置として機能する、リモートデータストア６６上のボリューム（単数または複数）（クラウドボリュームとも呼ばれ得る）との、ローカルネットワークアクセスポイントを提供する。この設定では、リモートデータストア６６は、顧客が、データの読取りおよび書込み用のボリュームをそこからローカルにマウントできる、クラウドボリュームシステムとして、顧客に対して提示され得る。
・シャドーイングゲートウェイ。この設定では、ストレージゲートウェイ８４は、顧客の書込みデータ（例えば、ｉＳＣＳＩ書込み）のリモートデータストア６６へのシャドーイングをストレージサービス８４を介して提供するために、顧客のアプリケーション（例えば、顧客プロセス（単数または複数）８８）と顧客のローカルデータストア８６との間の「ｂｕｍｐ  ｉｎ  ｔｈｅ  ｗｉｒｅ」として機能する。リモートデータストア６６は、ブロックストレージ技術を使用して実装され得る。この設定では、ストレージゲートウェイ８４は、顧客のローカルデータストアをリモートデータストア６６上のスナップショット（単数または複数）にシャドーイングするシャドーイングアプライアンスとして機能し得る。このシャドーイングは、ローカルネットワーク上のユーザーの観点から見れば透過的に行われ得る。必要であるかまたは望ましい場合、顧客は、例えば、顧客のデータの一部または全部を、スナップショット（単数または複数）からローカルストア８６に、復元、回復、またはコピーするために、リモートデータストア６６上の顧客のデータのスナップショット（単数または複数）を要求またはアクセスし得る。
【００１８】
ファイルシステムゲートウェイおよびクラウドボリュームゲートウェイは、両方ともリモートデータストアに対するゲートウェイとして機能し、また両方ともローカルにデータを、例えば、頻繁におよび／または最近使用されたデータを、キャッシュし得る、という点で似ていることに留意されたい。ファイルシステムゲートウェイおよびクラウドボリュームゲートウェイの両方では、顧客プロセスからのデータ読取りは、可能であれば、ローカルキャッシュから、そうでなければ、リモートデータストアからサービスされ得る。対照的に、シャドーイングゲートウェイでは、データ読取りは、ゲートウェイを通して、顧客のローカルデータストアに渡される。本文書の目的のため、ファイルシステムゲートウェイおよびクラウドボリュームゲートウェイは、これらの実施態様をシャドーイングゲートウェイと区別するために、キャッシュゲートウェイと総称され得る。
【００１９】
〔ストレージゲートウェイアプライアンスアーキテクチャ例〕
図２は、少なくともいくつかの実施形態に従った、ストレージゲートウェイのためのアーキテクチャ例およびその構成要素を示す。図２に示された構成要素のいくつかは、キャッシュゲートウェイ実施態様と比較した場合、シャドーイングゲートウェイ実施態様では、使用されないか、または使用され得るかもしくは異なって実装され得ることに留意されたい。
【００２０】
ブロックドライバ１０は、ストレージゲートウェイ８４の顧客プロセス８８とのインタフェースとなる。一般に、ブロックドライバ１０は、顧客プロセス８８が（例えば、読取り／書込み要求を介して）ストレージゲートウェイ８４とやりとりできるようにする。ストレージゲートウェイ８４は、顧客プロセス８８のオンサイトであるので、プロセス８８の観点から見れば、データがローカルに格納されるように見える。しかし、ストレージゲートウェイ８４は、ストレージサービス６４によって提供されるリモートデータストア６６にデータを格納するように、ストレージサービス６４とインタフェースをとる。キャッシュゲートウェイについて、一次データストアはリモートデータストア６６であるが、頻繁にアクセスされるデータは、ゲートウェイ８４によってローカルにキャッシュされ得る。読取りは、ローカルキャッシュから、または仮想データ記憶６６から満足され得；書込みは、ローカルキャッシュ内および／または仮想データ記憶６６内のデータブロックを適切に更新するように処理される。シャドーイングゲートウェイについて、一次データストアはローカルデータストア８６であり；読取りは、ローカルデータストア８６に渡され、また、書込みは、ローカルデータストア８６に送信されるだけでなく、仮想データ記憶６６にシャドーイングされる。
【００２１】
ブロックドライバ１０は、顧客プロセス８８からの読取り／書込み要求を捉え、その要求をストレージコントローラ１２に渡す。少なくともいくつかの実施形態では、ブロックドライバ１０は、ブロックストレージプロトコル（例えば、ｉＳＣＳＩまたはＧＭＢＤ）を顧客プロセス８８へのインタフェースとして提供する。いくつかの実施形態では、ブロックストレージプロトコルインタフェースの代わりに、またはその代替として、ブロックドライバ１０は、ファイルストレージプロトコルインタフェース（例えば、ＮＦＳまたはＣＩＦＳ）を提供し得、ファイルシステムセマンティクスをストレージコントローラ１２へのインタフェースとして使用し得る。図２は１つのブロックドライバ１０を示しているが、２つ以上のブロックドライバが存在し得ることに留意されたい。
【００２２】
ストレージコントローラ１２は、ブロックドライバ１０と、キャッシュマネージャ１４を介したストレージとの間の仲立ちとして機能する。ストレージコントローラ１２の責任は、読取りおよび書込み要求をブロックドライバ１０からストレージに、ならびにストレージがデータで応答すると、コールバックをブロックドライバ１０に転送することを含み得る。ブロックドライバ１０は、進行中の要求数などの統計値も保持し得る。
【００２３】
少なくともいくつかの実施形態では、１つのストレージゲートウェイ８４上のストレージコントローラ１２は、別のストレージゲートウェイ８４上のキャッシュマネージャ１４と通信し得る。少なくともいくつかの実施形態では、各ストレージゲートウェイ８４は、発見および障害の検出のためにハートビートメッセージを送信し得る。所与のオブジェクトに対して責任があるストレージゲートウェイ８４を識別するためにコンシステントハッシュ法が使用され得、データを取得するための要求が、対象とするストレージゲートウェイ８４上のキャッシュマネージャ１４に転送され得る。キャッシュマネージャ１４は、ストレージコントローラ１２によって提供されたコールバックを起動することによって応答し得る。
【００２４】
キャッシュゲートウェイ実施形態では、キャッシュマネージャ１４は、例えば、頻繁にアクセスされるデータに対してストレージを提供する、ローカルキャッシュ２８を管理し得る。ローカルキャッシュ２８は、ストレージゲートウェイ８４の内部の揮発性および／もしくは不揮発性メモリ上に実装され得るか、または代替として、顧客によって提供される外部のローカルデータストア８６上に、少なくとも一部実装され得る。少なくともいくつかの実施形態では、ローカルキャッシュ２８は、仮想化データ記憶６６内に格納されたデータを表し；顧客プロセス８８からの書込みは、ローカルキャッシュ２８に直接影響を及ぼすことはない場合がある。
【００２５】
複数のゲートウェイ８４を採用する少なくともいくつかの実施形態では、分散されたローカルキャッシュが使用され得、所与のキーを保持する責任のあるキャッシュを識別するために、キーについてコンシステントハッシュ法が使用され得る。少なくともいくつかの実施形態では、地域を意識した要求分散（ｌｏｃａｌｉｔｙ−ａｗａｒｅ  ｒｅｑｕｅｓｔ  ｄｉｓｔｒｉｂｕｔｉｏｎ）がゲートウェイ８４間の通信を減らすために使用され得るが、それは、追加の負荷分散を要求し得る。
【００２６】
リモートデータストア６６内の所与のボリュームへの全ての書込み要求は、特定のゲートウェイ８４ノードに回され得る。ボリュームに対する全ての書込み要求が特定のゲートウェイ８４ノードに転送されるので、ネットワーク分割は問題ではないかもしれない。
【００２７】
〔ステージング〕
少なくともいくつかの実施形態では、キャッシュマネージャ１４は、ステージング１６構成要素を含み得るか、またはステージング１６構成要素とインタフェースをとり得る。ステージング１６は、書込みログ１８を含み得るか、または書込みログ１８へのアクセスを有し得る。少なくともいくつかの実施形態では、データ構造が書込みログ１８を通して構築され、メタデータストア２６として使用され得る。メタデータストア２６は、特定のブロックに対する全ての書込みへの素早いアクセスを可能にし得る。メタデータストア２６は、例えば、ブロック内の異なるセグメントに対して変更（ｍｕｔａｔｉｏｎ）を適用するのに使用され得る。書込みデータが顧客プロセス８８から受信されると、そのデータが書込みログ１８に付加される。例えば、オフセットおよび長さなど、ブロックに関連した書込みデータに対するメタデータが、メタデータストア２６に格納され得る。少なくともいくつかの実施形態では、書込みログ１８は、線形または円形キューのいずれかとして実装された１次元データバッファとして実装され得る。少なくともいくつかの実施形態では、メタデータストア２６は、例えば、Ｂｅｒｋｅｌｅｙ  Ｄａｔａｂａｓｅとして実装された、キー／値ストアであり得る。書込みログ１８およびメタデータストア２６の両方の他の実施態様が、いくつかの実施形態で使用され得る。
【００２８】
キャッシュゲートウェイ実施態様では、読取りが実行されると、元のブロックがローカルキャッシュ２８から、またはリモートデータストア６６から取得され得、書込みログ１８によって示される任意の保留の変更が、データをそれぞれの顧客プロセス８８に返す前に、適用され得る。
【００２９】
いくつかの実施形態では、ゲートウェイ８４が障害を起こす（例えばクラッシュする）と、データが既にローカルデータストア８６に書き込まれていない限り、メモリ内の書込みデータが失われ得る。いくつかの実施形態では、顧客サイトに複数のゲートウェイ８４がある場合、別のゲートウェイ８４が、クラッシュしたゲートウェイ８４によって所有されているキーの責任を持ち、ローカルデータストア８６上のスナップショット（ある場合）から書込みを復元して、それぞれのボリュームに向けられた要求の受入れを開始し得る。いくつかの実施形態では、書込みログ１８および／またはメタデータストア２６が、冗長性およびより良い耐久性を提供するために、２つ以上のゲートウェイ８４にわたって、複製され得る。ゲートウェイ８４の障害の場合には、他のゲートウェイ８４のうちの１つが、故障したゲートウェイの書込みログ１８およびメタデータストア２６を引き継ぎ得る。しかし、少なくともいくつかの実施形態では、メタデータストア２６は、所有者のゲートウェイ８４上でのみ保持され得る。これらの実施形態では、ゲートウェイ８４の障害の場合、他のゲートウェイ８４のうちの１つが、メタデータストア２６を再構築するために、一次書込みログ１８を引き継いで、解析し得る。
【００３０】
キャッシュゲートウェイ実施態様では、ブロックフェッチャ２２は、ブロックの要求されたセグメントをリモートデータストア６６からストレージサービス６４を介してフェッチする。少なくともいくつかの実施形態では、ブロックフェッチャ２２は、キャッシングのため完全なブロックをフェッチするために、遅延フェッチ（ｌａｚｙ  ｆｅｔｃｈｉｎｇ）技術を採用し得る。キャッシュゲートウェイおよびシャドーイングゲートウェイの両方について、ブロックストア２４は、ステージング１６からのデータをストレージサービス６４を介してリモートデータストア６６にプッシュ型配信する。少なくともいくつかの実施形態では、ブロックストア２４は、ブロックをプッシュ型配信するために、遅延プッシュ技術を採用し得る。
【００３１】
少なくともいくつかの実施形態では、キャッシュゲートウェイに対する読取り動作中に、ブロックドライバ１０は、ボリュームＩＤ、開始オフセットおよび長さを含む読取り要求を、ストレージコントローラ１２に送信する。少なくともいくつかの実施形態では、ストレージコントローラ１２は、ボリュームＩＤおよびオフセットをオブジェクトキーに変換し得る。ストレージコントローラ１２は、読取り要求情報をキャッシュコントローラ１４に渡し得るが、それは、その読取り要求を適切なローカルキャッシュ２８から満足しようと試み得る。そのデータがローカルキャッシュ２８内に存在しない場合、要求はブロックフェッチャ２２に転送されるが、それは、そのデータをリモートデータストア６６上の適切なボリュームからストレージサービス６４を介してフェッチする。データが取得されると、ローカルキャッシュ２８が更新され、書込みログ１８からの変更が適用されて、読取り応答が顧客プロセス８８に返される。少なくともいくつかの実施形態では、複数のブロックが要求される場合、各々がそれぞれのブロックに対する相対オフセットを示す、複数の読取り応答が返され得る。少なくともいくつかの実施形態では、順次読取りが検出されると、連続したブロックが事前にフェッチされ得る。
【００３２】
少なくともいくつかの実施形態では、書込み動作中に、ブロックドライバ１０は、ボリュームＩＤおよび書込みデータを含む書込み要求を、そのボリュームに対して責任があるストレージコントローラ１２に送信する。書込みデータが書込みログ１８に書き込まれ、メタデータストア２６が、バッファプール２０内の変更されたデータに対する参照を含むように更新される。
【００３３】
〔バッファプール〕
少なくともいくつかの実施形態では、バッファプール２０は、ストレージコントローラ１２とローカルデータストア８６との間に存在する。バッファプール２０は、以下のタスクの１つまたは複数を実行し得るが、それらに限らない。いくつかのタスクはキャッシュゲートウェイにのみ適用され得ることに留意されたい：
・書込みログ１８およびローカルキャッシュ２８に対するローカルデータ記憶装置（単数または複数）上のそれらの物理位置からの論理オフセットのためのデータのキャッシュ。
・読取りおよび書込み動作中のバッファ上のロックの維持。
・例えば、エビクション（ｅｖｉｃｔｉｏｎ）技術に基づく最低使用頻度（ＬＲＵ）など、エビクション技術のローカルキャッシュ２８に対する物理記憶装置への適用。これは、シャドーイングゲートウェイには必要でないことに留意されたい。
・各キャッシュゲートウェイ内での読取りに対して、要求されたデータがローカルキャッシュ２８内で見つからない場合、バッファプール２０がリモートデータストア６６からブロックをフェッチするために、ブロックフェッチャ２２と通信し得る。代替として、いくつかの実施形態では、ブロックフェッチャ２２は、ブロックをフェッチするために、ストレージサービス６４と直接通信し得る。
【００３４】
少なくともいくつかの実施形態では、バッファプール２０は、データベース（例えば、Ｂｅｒｋｅｌｅｙデータベース（ＢＤＢ））をそのメタデータストア２６として採用し得る。以下に示す表１は、少なくともいくつかの実施形態に従って、メタデータストア２６内に格納され得る情報を示す。表１内のエントリは、内容または配置にしたがって制限することを意図しないことに留意されたい。
【表１】
0005716134.tif 000002
【００３５】
少なくともいくつかの実施形態では、物理ディスクオフセットは、例えば、４ＭＢ境界においてなど、決められた境界においてである。少なくともいくつかの実施形態では、これは、ボリューム内および書込みログ１８内の両方のデータに対する境界を含む。少なくともいくつかの実施形態では、特定のボリュームに対する書込みは、順次書込みであり得、従って、ディスク上の断片化は、考慮する必要がない。「チャンク（ｃｈｕｎｋ）」は、ブロック、または１つもしくは複数のブロックに対応し得ることに留意されたい。
【００３６】
メタデータストア２６は、Ｓ（スナップショット）およびＣ（チャンク）エントリの両方を含み得、これらは、ストレージコントローラ１２がそれを介してブロックにアクセスしようと試みる方式で最新の状態に維持される必要がある。例えば、ブロックは、最初は、スナップショットＩＤを使用して参照され得るが、その後は、いつも、チャンクＩＤを使用する。これは、メタデータストア２６に保存され得る。スナップショットが完了すると、ストレージコントローラ１２が、スナップショットＩＤを使用してスナップショットからブロックを参照し得；それ故、メタデータストア２６内のＣ（チャンク）エントリは、対応するＳ（スナップショット）エントリに変換され得る。
【００３７】
〔キャッシュゲートウェイの動作〕
少なくともいくつかの実施形態では、読取り要求が受信されると、ブロックに対する書込みログ１８エントリまたは複数のエントリがメタデータストア２６内で検索される。読取り要求が、書込みログ１８エントリまたは複数のエントリを使用して満足できる場合、全ての要求されたエントリがメタデータストア２６内で検索され、バッファ内に読み取られて、フラット化され、要求された断片が返される。読取り要求が、書込みログ１８エントリまたは複数のエントリだけを使用して満足できない場合、キャッシュデータブロック（例えば、４ＭＢブロック）に対するオフセットが読取り要求内のオフセットから計算される。ブロックの位置がメタデータストア２６内で検索される。ブロックがローカルキャッシュ２８内にある場合、そのブロックがローカルキャッシュ２８から読み取られ、また、そうでない場合は、リモートデータストア６６からフェッチされる。要求された書込みログ１８エントリは、前述のようにフェッチされ、ブロックでフラット化されて、要求された断片が返される。ブロックがリモートデータストア６６からフェッチされる場合、そのブロックはローカルキャッシュ２８にキャッシュされて、メタデータストア２６内に記録される。ローカルキャッシュ２８内のブロックに対する最後のアクセス時間も更新される。
【００３８】
少なくともいくつかの実施形態では、書込み要求が受信されると、次の書込みログ１８オフセットで変更が記録されて、メタデータ、すなわち、オフセットおよび長さがメタデータストア２６内に記録される。
【００３９】
少なくともいくつかの実施形態では、ブロックアップロードが完了すると、そのブロックの最新バージョンが（適用された変更とともに）ローカルキャッシュ２８に追加されて、メタデータストア２６内に記録される。ブロックの以前のバージョンがローカルキャッシュ２８内に存在する場合、このブロックはメタデータストア２６内で空きとして印を付けられる。
【００４０】
少なくともいくつかの実施形態では、スナップショットが完了すると、メタデータストア２６は、前述のように再編成される必要があり得る。すなわち、そのスナップショットに属するブロックエントリは、リモートデータストア６６上の対応するスナップショットエントリに変換され得る。
【００４１】
〔シャドーイングゲートウェイ動作〕
少なくともいくつかの実施形態では、読取り要求がローカルデータストア８６に渡される。
【００４２】
少なくともいくつかの実施形態では、書込み要求が受信されると、書込みデータが次の書込みログ１８オフセットで記録され、その書込みに対する適切なメタデータがメタデータストア２６内に記録される。書込み要求もローカルデータストア８６に渡される。
【００４３】
少なくともいくつかの実施形態では、ブロックをリモートデータストア６６にアップロードするために、アップロードプロセスが書込みログ１８を読み取るためにバッファプール２０を呼び出す。バッファプール２０は、論理書込みログ１８オフセットから物理オフセットへの変換を実行するためにメタデータストア２６を使用し、データは次いで、メモリバッファに読み込まれる。バッファは次いで、アップロードプロセスに提示される。アップロードプロセスは、ブロックをリモートデータストア６６にアップロードし、そのブロックをバッファプール２０に解放する。
【００４４】
〔書込みログのパージ〕
少なくともいくつかの実施形態では、書込みログ１８がパージされる必要のある場合、バッファプール２０は、書込みログ１８がパージできるボリュームに対する書込みログオフセットを取得する。少なくともいくつかの実施形態では、書込みログオフセットが、例えば、各エントリに対するオフセットをチェックするデータベースのウォークオーバー（ｗａｌｋ  ｏｖｅｒ）を実行することにより、メタデータストア２６から決定され得る。書込みログ１８をパージするために、そのログのパージ可能な部分に対応する既存の書込みログエントリが、空きエントリとして印を付けられ得る。
【００４５】
〔実施態様例〕
図３は、ストレージゲートウェイの実施形態が実装され得るネットワーク環境例のハイレベルブロック図である。中間ネットワーク１００（例えば、インターネット）上のサービスプロバイダ１１０は、中間ネットワーク１００に同様に結合された、１つまたは複数のサービス顧客ネットワーク（例えば、クライアントネットワーク（単数または複数）１５０）に、ストレージサービス１１２を介して、リモートデータストア１１６へのアクセスを提供する。各クライアントネットワーク１５０が、異なるサービス顧客に対応し得るか、または２つ以上のクライアントネットワーク１５０が、例えば、企業の異なる支社もしくは学校組織の異なるキャンパスなど、同じサービス顧客の異なるデータセンターもしくは地域に対応し得る。サービス顧客は、企業、教育機関、政府機関、民間団体、または、ネットワーク化コンピューティングサービスを１人または複数のユーザーに提供するために、インターネットなどの中間ネットワーク１００に結合された、コンピュータネットワークまたは複数のネットワークを実装する、一般的な任意の実体であり得る。いくつかの実施形態では、ストレージサービス１１２は、インタフェース（例えば、ウェブサービスインタフェース）を提供し得、それを通じて、各サービス顧客のクライアントネットワーク（単数または複数）１５０が、ストレージサービス１１２によって提供された機能にアクセスし得る。
【００４６】
顧客プロセス１５４Ａおよび１５４Ｂは、サービス顧客のクライアントネットワーク１５０に接続された物理および／または仮想マシンもしくはシステムを表す。ストレージサービス１１２によって提供される機能の一例として、ユーザーは、顧客プロセス１５４を介し、ストレージサービス１１２を通じて、リモートデータストア１１６内にデータボリュームを作成およびマウントし得る。クライアントネットワーク１５０上のユーザーの観点から見れば、ストレージサービス１１２によって提供されたデータボリュームは、それらがローカルストレージであるかのように見え得；従って、かかるデータボリュームは、仮想データボリューム１５８と呼ばれ得る。仮想データボリューム１５８は、リモートデータストア１１６がその上にインスタンス生成される、１つまたは複数の物理記憶装置もしくは記憶システムに実際にマッピングするが；このマッピングは、ストレージサービス１１２によって処理され、従って、クライアントネットワーク１５０上のユーザーの観点から見れば透過的である。顧客プロセス１５４のユーザーは、デスクトップ上または装置リスト内にマウントされたボリュームを単に見るだけであり得る。顧客プロセス１５４のユーザーは、まるでボリューム１５８がローカルに取り付けられた記憶装置であるかのように、仮想データボリューム１５８上で、データの作成、データの変更、データの削除、および一般なデータ関連機能の実行を行い得る。
【００４７】
図４は、少なくともいくつかの実施形態に従った、クライアントネットワーク２５０とストレージサービス２１２との間のインタフェースとして機能する、サービス顧客のクライアントネットワーク２５０でのオンサイトのストレージゲートウェイ２５２を含むネットワーク環境例のブロック図である。少なくともいくつかの実施形態では、ストレージゲートウェイ２５２は、サービス顧客のデータセンターでオンサイトでインストールされるファイルおよび／またはブロックストレージアプライアンスであり得る。
【００４８】
ストレージゲートウェイ２５２は、例えば、ファイルシステムゲートウェイとして、クラウドボリュームゲートウェイとして機能するように、インストール、有効化、および設定され得、キャッシュゲートウェイとして、またはシャドーイングゲートウェイとして総称される。ファイルシステムゲートウェイは、（例えば、ＣＩＦＳまたはＮＦＳプロトコルを使用して）ストレージサービス２１２に対するＮＡＳストレージインタフェースとして機能する。リモートデータストア２１６は、実際にはブロックストレージとして実装されながら、顧客に対してオブジェクトストア（例えば、ＲＥＳＴ）として提示され得る。クラウドボリュームゲートウェイは、ストレージサービス２１２によって提供された仮想化ボリュームストレージゲートウェイに対するインタフェースとして機能する。ボリュームストレージは、ブロックストレージとして実装され得る。ゲートウェイ２５２は、柔軟で、本質的に制限のない一次記憶容量を提供するバックエンド記憶装置として機能するリモートデータストア２１６（クラウドボリュームとも呼ばれ得る）との、ローカルネットワークアクセスポイントを提供する。シャドーイングゲートウェイは、顧客の書込みデータ（例えば、ｉＳＣＳＩ書込み）の、ストレージサービス２１２によって提供されるリモートストレージへのシャドーイングを提供するために、顧客のアプリケーションと顧客のローカルデータストアとの間の「ｂｕｍｐ  ｉｎ  ｔｈｅ  ｗｉｒｅ」として機能する。リモートデータストア２１６は、ブロックストレージとして実装され得る。
【００４９】
キャッシュゲートウェイ実施態様では、ストレージゲートウェイ２５２は、データを安全に暗号化して、サービスプロバイダ２１０に戻るのを促進しながら、頻繁にアクセスされるデータのローカルキャッシュをローカルデータストア２５４上に格納し得る。同様に、シャドーイングゲートウェイ実施態様が、書込みデータを安全に暗号化して、サービスプロバイダ２１０への移動を加速し得る。標準的なインターネット接続と比較して、この加速されたデータ移動は、例えば、データ重複排除、圧縮、並列化、およびＴＣＰウィンドウスケーリング技術のうちの１つまたは複数を使用して、達成され得る。ストレージゲートウェイ２５２は、通常、一次記憶装置またはバックアップ記憶装置としてのオンサイトストレージアレイの管理と関連付けられる、費用、利用、保守、およびプロビジョニングの頭痛の種を大幅に削減し得る。ストレージゲートウェイ２５２は、顧客が、そうでなければ、社内で、高価なハードウェア（例えば、ＮＡＳまたはＳＡＮハードウェア）上に格納し得る、何百ものテラバイトからペタバイトのデータを、費用効率が高いアプライアンスで置き換えることによってこれを達成し得る。ストレージゲートウェイ２５２を用いて、顧客は、サービスプロバイダ２１０によって提供される、耐久性のある、利用可能で拡張性のある分散ストレージインフラストラクチャを活用しながら、オンサイト記憶装置（キャッシュゲートウェイ実施態様においてゲートウェイ２５２によって維持されるローカルキャッシュによって提供される）の低アクセス遅延から恩恵を受け得る。
【００５０】
ストレージゲートウェイ２５２の実施形態は、顧客のオンサイトアプリケーションとシームレスに連携し得る。少なくともいくつかの実施形態では、顧客は、ＳＡＮ（ｉＳＣＳＩ）、ＮＡＳ（ＮＦＳ、Ｍｉｃｒｏｓｏｆｔ（登録商標）ＣＩＦＳ）、またはオブジェクト（ＲＥＳＴ）記憶装置をサポートするために、ストレージゲートウェイ２５２を設定し得る。少なくともいくつかの実施形態では、ストレージゲートウェイ２５２によって提供されたｉＳＣＳＩインタフェースは、Ｍｉｃｒｏｓｏｆｔ（登録商標）  ＳｈａｒｅＰｏｉｎｔ（登録商標）およびＯｒａｃｌｅ（登録商標）データベースなどのオンサイトブロックストレージアプリケーションとの統合を可能にし得る。少なくともいくつかの実施形態では、顧客は、Ｗｉｎｄｏｗｓ（登録商標）、Ｌｉｎｕｘ（登録商標）、およびＵＮＩＸ（登録商標）環境を含むが、それらに限らない、環境にわたって、ファイルストレージを統合するために、ストレージゲートウェイ２５２によって提供されるＮＦＳおよびＣＩＦＳインタフェースを利用し得る。少なくともいくつかの実施形態では、ストレージゲートウェイ２５２は、ＲＥＳＴベースの要求をサポートするようにも設定され得る。
【００５１】
少なくともいくつかの実施形態では、ストレージゲートウェイ２５２は、顧客のデータセンターで、クライアントネットワーク２５０インフラストラクチャに結合されたサーバーシステムなどの、１つまたは複数のコンピューティング装置上に、ダウンロードされるかまたは他の方法でインストールされ、有効化されて、設定され得る、仮想装置またはアプライアンスとして実装され得る。あるいは、ストレージゲートウェイ２５２は、クライアントネットワーク２５０インフラストラクチャに結合され得る専用装置またはアプライアンスとして実装され得；その専用装置またはアプライアンスは、ゲートウェイの機能がその上に実装され得る、ソフトウェアおよび／またはハードウェアを含み得る。
【００５２】
少なくともいくつかの実施態様では、ストレージゲートウェイ２５２は、中間ネットワーク２００（例えば、インターネット）を経由して、サービスプロバイダ２１０と通信する。ストレージゲートウェイ２５２の中間ネットワーク２００への結合は、大量のデータが、ストレージサービス２１２とストレージゲートウェイ２５２との間の中間ネットワーク２００を通じて伝達され得るので、一般に、サービス顧客のクライアントネットワーク２５０によって提供された高帯域幅接続を介し得る。例えば、ピーク時には、接続は、１００メガビット／秒（１００Ｍビット／秒）以上のデータ転送をサポートする必要があり得る。しかし、少なくともいくつかの実施形態では、データ重複排除などの技術が、ストレージゲートウェイ２５２からストレージサービス２１２へデータをアップロードする際に、帯域幅利用を削減するために採用され得、従って、より多くの顧客の帯域幅が他の用途に対して利用可能であり得る。少なくともいくつかの実施形態で採用され得るデータ重複排除技術の例が、その全体が米国特許出願第１２／９８１，３９３号、「ＲＥＣＥＩＶＥＲ−ＳＩＤＥ  ＤＡＴＡ  ＤＥＤＵＰＬＩＣＡＴＩＯＮ  ＩＮ  ＤＡＴＡ  ＳＹＳＴＥＭＳ」および、米国特許出願第１２／９８１，３９７号、「ＲＥＤＵＣＥＤ  ＢＡＮＤＷＩＤＴＨ  ＤＡＴＡ  ＵＰＬＯＡＤＩＮＧ  ＩＮ  ＤＡＴＡ  ＳＹＳＴＥＭＳ」に開示されている。
【００５３】
少なくともいくつかの実施形態では、中間ネットワーク２００を通じたクライアントネットワーク２５０とサービスプロバイダ２１０との間の接続上の帯域幅が、ストレージゲートウェイ２５２に、および、例えば、クライアントネットワーク２５０でのネットワーク管理者プロセス２６０を介して、他の顧客アプリケーションに割り当てられ得る。ストレージゲートウェイ２５２は、例えば、データ重複排除技術に従って、変化した（新規または変更された）データをストレージサービス２１２に、継続的に、またはほぼ継続的にアップロードし得る。しかし、クライアントネットワーク２５０でのデータの変化率は、時間とともに変わり得る；例えば、日中は、顧客プロセス書込みスループットが高くなり得るが、夜間には、書込みスループットが低くなり得る。従って、変化率が高いビジー時には、ストレージゲートウェイ２５２に割り当てられた帯域幅がついて行くのに十分に高くない場合、変化したデータのアップロードに遅れ得；ストレージゲートウェイ２５２は、その後、変化率がそれほど高くない、あまりビジーでない時に追い付き得る。少なくともいくつかの実施形態では、ストレージゲートウェイ２５２が指定された閾値以上に遅れる場合、ストレージゲートウェイ２５２は、追加の帯域幅の割当てを要求し得る。少なくともいくつかの実施形態では、ストレージゲートウェイ２５２は、必要であれば、より多くの帯域幅を要求するために警報を発し得る。
【００５４】
図４は、ストレージゲートウェイ２５２とストレージサービス２１２との間の直接接続を示しているが、ストレージゲートウェイ２５２とストレージサービス２１２との間の接続は、ローカルネットワーク２５６を経由し得ることに留意されたい。
【００５５】
ストレージゲートウェイ２５２の少なくともいくつかの実施形態では、要求に応じてリモートデータストア２１６からデータを取得するのではなく、データの大規模なブロックまたはチャンク、データのボリューム全体さえも、ローカルデータストア２５４にローカルにキャッシュされ得る。ストレージゲートウェイ２５２は、データ、例えば、頻繁にアクセスされるデータまたは重要なデータ、のローカルキャッシュがその上で保持され得る物理データ記憶および／またはメモリ（ローカルデータストア２５４）を含み得るか、またはそれに対してアクセスし得る。ローカルデータストア２５４は、揮発性もしくは不揮発性の記憶装置もしくはメモリ、またはそれらの組合せであり得る。頻繁にアクセスされるデータのローカルキャッシュを保持することは、多くの、またはほとんどのデータアクセスが、リモートデータストア２１６からデータを取得するよりも、ローカルキャッシュからサービスできるので、一般に、顧客プロセス２５８に対するデータアクセス時間を改善し得る。しかし、リモートデータストア２１６は、サービス顧客のクライアントネットワーク２５０に対して一次データストアとして機能し得；従って、ストレージゲートウェイ２５２は、定期的に、非定期的に、または継続的に、新規または変更されたデータをローカルキャッシュからリモートデータストア２１６にアップロードするため、および必要に応じて、要求されたデータをリモートデータストア２１６からダウンロードするために、中間ネットワーク２００を介してストレージサービス２１２と通信し得る。
【００５６】
図４では、リモートデータストア２１６の記憶装置（２１８Ａ、２１８Ｂ、２１８Ｃ、．．．）は、リモートデータストア２１６が、サービスプロバイダ２１０のローカルネットワーク２１４に接続された、いくつかの記憶装置またはシステム上で、またはそれらにわたって実装され得ることを示す。従って、サービス顧客のデータが、「バックエンド」上の２つ以上の物理記憶装置またはシステムに散在し得る。バックエンド記憶装置は、他の顧客と共有されるマルチテナント型装置であり得るが、必ずしも必要ではない。しかし、図３に関連して述べた、クライアントネットワーク２５０上のユーザーおよびプロセスの観点から見れば、クライアントのデータは、仮想ボリュームまたはファイルとして提示され得る。
【００５７】
少なくともいくつかの実施形態では、図３および図４に関連して説明されるように、サービスプロバイダは、ハードウェア仮想化技術および場合により他の仮想化技術も顧客に提供し得る。サービスプロバイダ２００は、ブロックストレージ機能（すなわち、ブロックベースの記憶システム）を顧客に提供するブロックストレージ技術を含め、様々な仮想化コンピューティング技術および仮想化ストレージ技術を提供し得る。サービスプロバイダ２００によって提供される、ハードウェア仮想化技術に従って実装される仮想コンピューティング環境またはシステムは、ブロックストレージ技術によってサポートされ得る。ブロックストレージ技術は、例えば、ブロックレベルのストレージ機能を、それがサポートするボリュームの構造的および機能的詳細に、およびそれがストレージ可用性を提供する仮想コンピューティングシステム（または他のシステム）上で実行するオペレーティングシステムに、依存しなくする、標準ストレージ呼出しを通じて仮想コンピューティングシステムとやりとりすることができる、仮想化記憶システムを提供し得る。
【００５８】
ストレージゲートウェイ２５２の実施形態は、オンサイトの顧客アプリケーションならびにサービスプロバイダ２００によって提供される仮想化コンピューティングおよびストレージ技術と統合され得、弾力性のある「クラウドベースの」コンピューティングおよび記憶リソースへのアクセスを顧客に提供する。例えば、ＳＡＮストレージに対してストレージゲートウェイ２５２を使用する顧客は、彼らのデータの一致した、ある時点のブロックベースのスナップショットを作成し得る。これらのスナップショットは、次いで、ブロックベースの記憶システムが提供する、高入出力および低遅延データアクセスを必要とするハードウェア仮想化技術アプリケーションまたはインスタンス（例えば、図５における仮想コンピューティングシステム２６４を参照）によって処理され得る。別の例として、顧客は、ＮＡＳストレージに対するストレージゲートウェイ２５２を、ＮＦＳまたはＣＩＦＳファイルプロトコルを介して設定し得、また、ハードウェア仮想化技術インスタンスからアクセス可能な彼らのファイルデータのある時点のスナップショットを作成し得る。
【００５９】
いくつかの実施形態では、ストレージゲートウェイ２５２によって提供されるＲＥＳＴベースのインタフェースを使用して書き込まれたオブジェクトは、サービスプロバイダにより提供される仮想化ストレージ技術から、ＨＴＴＰまたは他のプロトコルを介して直接アクセスされ得るか、またはサービスプロバイダによって提供される統合コンテンツ配信を使用して配信され得る。いくつかの実施形態では、顧客は、ハードウェア仮想化技術インスタンス上で、これらのオブジェクトの並列化処理に対する仮想化ストレージ技術によって提供された、高度に拡張性のある、分散インフラストラクチャも利用し得る。
【００６０】
図５は、少なくともいくつかの実施形態に従って、ストレージサービスおよびハードウェア仮想化サービスをサービスプロバイダの顧客に対して提供する、サービスプロバイダ例のブロック図である。サービス顧客のクライアントネットワーク２５０は、例えば、図４に関連して説明したように、クライアントネットワーク２５０と、サービスプロバイダ２１０のストレージサービス２１２との間のインタフェースとして機能する、１つまたは複数のストレージゲートウェイ２５２を含み得る。サービスクライアント（単数または複数）は、サービスプロバイダ２１０によって提供されるサービスの１つにアクセスし得る、任意の管理者、ユーザー、またはプロセスであり得る。
【００６１】
ハードウェア仮想化技術は、複数のオペレーティングシステムをホストコンピュータ２９２上で同時に、すなわち、ホスト２９２上で仮想マシン（ＶＭ）２９６として、実行可能にし得る。ＶＭ  ２９６は、例えば、サービスプロバイダ２１０の顧客に賃貸またはリースされ得る。ホスト２９２上のハイパーバイザー、すなわち、仮想マシンモニター（ＶＭＭ）２９４は、ホスト２９２上のＶＭ  ２９６に仮想プラットフォームを提示して、ＶＭ  ２９６の実行を監視する。各ＶＭ  ２９６は、１つまたは複数のＩＰアドレスを提供され得；ホスト２９２上のＶＭＭ  ２９４は、ホスト上のＶＭ  ２９６のＩＰアドレスを認識し得る。サービスプロバイダ２１０のローカルネットワークは、パケットを、ＶＭ  ２９６からのインターネット宛先（例えば、クライアントネットワーク２５０上のサービスクライアント（単数または複数）２６２）に、およびインターネット送信元（例えば、サービスクライアント（単数または複数）２６２）からＶＭ  ２９６に、経路指定するように設定され得る。
【００６２】
サービスプロバイダ２１０は、ローカルネットワーク２５６を介して中間ネットワーク２００に結合されたサービス顧客のクライアントネットワーク２５０に、中間ネットワーク２００およびサービスプロバイダ２１０のローカルネットワークに結合されたハードウェア仮想化サービス２９０を通じて仮想コンピューティングシステム２６４を実装する能力を提供し得る。いくつかの実施形態では、ハードウェア仮想化サービス２９０は、インタフェース、例えば、ウェブサービスインタフェースを提供し得、それを経由して、サービスクライアント２６２がハードウェア仮想化サービス２９０によって提供される機能にアクセスし得る。サービスプロバイダ２１０では、各仮想コンピューティングシステム２６４は、サービス顧客に対してリース、賃貸、または他の方法で提供される、ホスト２９２システム上の仮想マシン（ＶＭ）２９６を表し得る。
【００６３】
仮想コンピューティングシステム２６４のインスタンスから、ユーザーは、以前に説明したように、ストレージサービス２１２の機能にアクセスし得る。従って、図５に示すように、仮想化システムの実施形態は、クライアントが、サービスプロバイダ２１０によって提供されるＶＭ  ２９６上に実装された仮想コンピューティングシステム２６４のローカルインスタンスを生成して、仮想コンピューティングシステム２６４のローカルインスタンスから、サービスプロバイダ２１０によって実装されたリモートデータストア２１６からのデータにアクセスし、そこにデータを格納できるようにし得る。
【００６４】
前述のように、１つまたは複数のストレージゲートウェイ２５２は、クライアントネットワーク２５０でインスタンス生成され得る。ゲートウェイ２５２の少なくとも１つは、少なくともいくつかのデータ、例えば、頻繁にアクセスされるかまたは重要なデータ、をローカルにキャッシュする、キャッシュゲートウェイ実施態様であり得る。ストレージゲートウェイ（単数または複数）２５２は、例えば、データの一次ストア（リモートデータストア２１６）がキャッシュゲートウェイ実施態様で保持されるように、新規もしくは修正されたデータをローカルキャッシュからアップロードするため、または新規もしくは修正されたデータ（書込みデータ）を、シャドーイングゲートウェイ実施態様内のリモートデータストア２１６上のローカルの一次データストアのスナップショットにアップロードするために、１つまたは複数の高帯域幅通信チャネルを通じて、ストレージサービス２１２と通信し得る。
【００６５】
〔キャッシュゲートウェイ実施態様〕
図６は、ストレージゲートウェイの一実施形態が、ファイルシステムゲートウェイとして、またはクラウドボリュームゲートウェイとして設定される、ネットワーク環境例のアーキテクチャおよびその中のデータフローを大まかに示すハイレベルブロック図であり、それらのゲートウェイは、キャッシュゲートウェイとして総称され得る。少なくともいくつかの実施形態では、ストレージゲートウェイ２５２は、サービス顧客のデータセンターでオンサイトでインストールされる、ファイルおよび／またはブロックストレージアプライアンスであり得る。図６では、ストレージゲートウェイ２５２は、例えば、ファイルシステムゲートウェイとして、またはクラウドボリュームゲートウェイとして、機能するように、インストール、有効化、および設定され得る。ファイルシステムゲートウェイは、ストレージサービス２１２に対して（例えば、ＣＩＦＳまたはＮＦＳプロトコルを使用して）ＮＡＳストレージインタフェースとして機能する。リモートデータストア２１６は、ブロックストレージとして実装されるが、顧客に対してオブジェクトストア（例えば、ＲＥＳＴ）として提示され得る。クラウドボリュームゲートウェイは、ストレージサービス２１２によって提供される仮想化ボリュームストレージに対するインタフェースとして機能する。仮想化ボリュームストレージは、ブロックストレージとして実装され得る。ゲートウェイ２５２は、柔軟で、本質的に制限のない一次記憶容量を提供するバックエンド記憶装置として機能するリモートデータストア２１６（クラウドボリュームとも呼ばれ得る）との、ローカルネットワークアクセスポイントを提供する。
【００６６】
ストレージゲートウェイ２５２が、インストールされ、有効化されて、設定されると、クライアントネットワーク２５０のネットワーク管理者プロセス２６０は、リモートデータストア２１６上で、ストレージサービス２１２を介して、例えば、新規のデータボリューム２７０を作成し得るか、または既存のデータボリューム２７０をマウントし得る。ボリューム作成要求および他のサービス要求は、サービスプロバイダフロントエンド２８０を介して、サービス２１２に対して作成され得る。フロントエンド２８０は、ストレージゲートウェイ２５２への接続およびそれとの通信も管理し得る。フロントエンド２８０は、ファイアウォール、境界ルーター、負荷分散装置、ゲートウェイサーバー、ゲートウェイプロキシ、コンソールプロセス、ならびに、ストレージサービス２１２をクライアントネットワーク（単数または複数）２５０に公開し、そのストレージサービス２１２をストレージゲートウェイ（単数または複数）２５２とインタフェースで接続するために必要であり得る、一般的な任意のネットワーキング装置および／またはプロセス、のうちの１つまたは複数を含み得るが、それらに限らない。
【００６７】
少なくともいくつかの実施形態では、ストレージゲートウェイ２５２は、サービスプロバイダフロントエンド２８０を介した、サービスプロバイダ２１０への全ての接続を開始し；サービスプロバイダ２１０は、ゲートウェイ２５２への接続を開始しない。さらに、ネットワーク管理者プロセス２６０は、直接ゲートウェイ２５２への接続を開始せず；例えば、ゲートウェイ２５２を設定および管理するため、ネットワーク管理者プロセス２６０によるゲートウェイ２５２へのアクセスは、サービスプロバイダフロントエンド２８０を介して、サービスプロバイダ２１０を通過する。
【００６８】
ストレージゲートウェイ２５２は、１つまたは複数のデータポート（例えば、ｉＳＣＳＩポート）を、クライアントネットワーク２５０上の顧客プロセス（単数または複数）２５８に公開する。顧客プロセス２５８は、クライアントネットワーク２５０上に存在し、ゲートウェイ２５２のデータポートのデータプロトコル（例えば、ｉＳＣＳＩプロトコル）を介して、ストレージゲートウェイ２５２と通信する、任意のハードウェア、ソフトウェア、および／またはそれらの組合せであり得る。顧客プロセス２５８は、例えば、Ｍｉｃｒｏｓｏｆｔ（登録商標）  ＳｈａｒｅＰｏｉｎｔ（登録商標）およびＯｒａｃｌｅ（登録商標）データベースなどのストレージアプリケーション、サーバー（例えば、ＳＱＬサーバー、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｅｘｃｈａｎｇｅ（登録商標）サーバーなど）、データベースアプリケーション（例えば、ＳＱＬデータベースアプリケーション、およびＯｒａｃｌｅ（登録商標）データベースアプリケーション）、Ｍｉｃｒｏｓｏｆｔ（登録商標）  Ｅｘｃｈａｎｇｅ（登録商標）アプリケーション、または、ストレージゲートウェイ２５２データポート（単数または複数）と通信する働きをするクライアントネットワーク２５０上の１つまたは複数の装置上で実行する任意の他のアプリケーションまたはプロセスであり得る。顧客プロセスは、本明細書では、クライアントネットワーク２５０内の１つまたは複数の装置上で実行されている可能性のある任意のソフトウェアプロセスを包含するが；プロセスがその上で実行する基礎となるハードウェアが、プロセスの代わりに、ストレージゲートウェイ２５２データポート（単数または複数）に対する接続および通信に関与し得るか、またはそれを実行し得ることに留意されたい。
【００６９】
マウントされたボリューム２７０は、ストレージゲートウェイ２５２によって顧客プロセス（単数または複数）２５８に提示され得る。顧客プロセス（単数または複数）２５８は、次いで、例えば、ｉＳＣＳＩプロトコルに従って、ストレージゲートウェイ２５２によって公開されたデータポートを介して、ボリューム２７０からの読取りおよびボリューム２７０への書込みを実行し得る。ストレージゲートウェイ２５２は、ボリューム２７０に対する全ての読取りおよび書込み要求を処理する。リモートデータストア２１６上のボリューム２７０は一次データストアとして機能するが、ストレージゲートウェイ２５２も、ローカルデータストア２５４上の頻繁にアクセスされるデータのローカルキャッシュを格納し得る。ローカルデータストア２５４は、ストレージゲートウェイ２５２の内部のストレージハードウェア上、サービス顧客によって提供されるストレージゲートウェイ２５２の外部のストレージハードウェア上、またはそれらの組合せ上で実装され得る。
【００７０】
読取りについて、ストレージゲートウェイ２５２は、まず、所与の読取りがローカルキャッシュから満足できるかどうかを確認するために、ローカルキャッシュをチェックし得る。読取りがローカルキャッシュから満足できない場合、ストレージゲートウェイ２５２は、ストレージサービス２１２からデータを要求し得るが、それは、要求されたデータ（または、要求されたデータを含むデータのブロックもしくはチャンク）をリモートデータストア２１６から取得し、その要求されたデータをストレージゲートウェイ２５２に返す。ストレージゲートウェイ２５２は、ストレージサービス２１２から受信されたデータのブロックまたはチャンクをローカルキャッシュに格納し得る。
【００７１】
書込みについて、ストレージゲートウェイ２５２は、新規または更新されたデータをローカルキャッシュに書き込み得る。少なくともいくつかの実施形態では、書込みデータは、ローカルキャッシュ内に実装されたブロックベースの書込みログに付加され得る。ストレージゲートウェイ２５２は、定期的に、非定期的に、または継続的に、ローカルキャッシュ内の新規または修正されたデータを一次データストア２１６にアップロードするために、サービスプロバイダ２１０で受信者側データアップロードプロセス（図示せず）と通信する送信者側データアップロードプロセス（図示せず）を含み得る。書込みデータの書込みログからのアップロードは、ローカルデータストア２５４に対する開始プロセスからの読取りおよび書込み動作の処理と非同期に実行され得る。少なくともいくつかの実施形態では、このアップロードプロセスは、データ重複排除、圧縮、並列化、およびＴＣＰウィンドウスケーリング技術のうちの１つまたは複数を採用し得る。図６に示すように、少なくともいくつかの実施形態で採用され得るデータ重複排除技術例は、米国特許出願第１２／９８１，３９３号および第１２／９８１，３９７号の明細書に開示されている。
【００７２】
リモートデータストア２１６は本質的に制限のない記憶空間を提供し得るが、ローカルキャッシュは、サイズにおいて制限され得る。従って、ストレージゲートウェイ２５２は、ローカルキャッシュ内の、より古くて、かつ／または比較的アクティブでないデータブロックを、さらに新しいか、かつ／またはアクティブなデータブロックで、除去、置換、または上書きし得る。
【００７３】
〔シャドーイングゲートウェイ実施態様〕
図７は、ストレージゲートウェイの一実施形態がシャドーイングゲートウェイとして設定される、ネットワーク環境例のアーキテクチャおよびその中のデータフローを大まかに示すハイレベルブロック図である。図７では、ストレージゲートウェイ２５２は、顧客の書込みデータ（例えば、ｉＳＣＳＩ書込み）の、ストレージサービス２１２によって提供されるリモートストレージへのシャドーイングを提供するために、顧客のアプリケーションと顧客のローカルデータストアとの間の「ｂｕｍｐ  ｉｎ  ｔｈｅ  ｗｉｒｅ」として動作するシャドーイングゲートウェイとして機能するように、インストールされ、有効化されて、設定される。リモートデータストア２１６は、ブロックストレージとして実装され得る。
【００７４】
図７に示す実施形態では、ローカルデータスト２５４は、リモートデータストア２１６が一次データストアとして機能する、図６におけるキャッシュゲートウェイ実施態様とは対照的に、クライアントネットワーク２５０上の顧客プロセス（単数または複数）２５８に対する一次データストアとして機能する。ストレージゲートウェイ２５２が、シャドーイングゲートウェイとして、インストールされ、有効化されて、設定されると、ストレージゲートウェイ２５２は、１つまたは複数のデータポート（例えば、ｉＳＣＳＩポート）を、クライアントネットワーク２５０上の顧客プロセス（単数または複数）２５８に公開する。クライアントネットワーク２５０上の顧客プロセス（単数または複数）２５８は、次いで、ストレージゲートウェイ２５２データポート（単数または複数）を介して、ローカルデータストア２５４からの読取りおよびローカルデータストア２５４への書込みを行い得る。顧客プロセス２５８は、クライアントネットワーク２５０上に存在し、ゲートウェイ２５２データポートのデータプロトコル（例えば、ｉＳＣＳＩプロトコル）を介して、ストレージゲートウェイ２５２と通信する、任意のハードウェア、ソフトウェア、および／またはそれらの組合せであり得る。顧客プロセス２５８は、例えば、Ｍｉｃｒｏｓｏｆｔ（登録商標）  ＳｈａｒｅＰｏｉｎｔ（登録商標）およびＯｒａｃｌｅ（登録商標）データベースなどのストレージアプリケーション、サーバー（例えば、ＳＱＬサーバー、Ｍｉｃｒｏｓｏｆｔ（登録商標）  Ｅｘｃｈａｎｇｅ（登録商標）サーバーなど）、データベースアプリケーション（例えば、ＳＱＬデータベースアプリケーション、およびＯｒａｃｌｅ（登録商標）データベースアプリケーション）、Ｍｉｃｒｏｓｏｆｔ（登録商標）  Ｅｘｃｈａｎｇｅ（登録商標）アプリケーション、または、ストレージゲートウェイ２５２データポート（単数または複数）と通信する働きをするクライアントネットワーク２５０上の１つまたは複数の装置上で実行する任意の他のアプリケーションまたはプロセスであり得る。顧客プロセスは、本明細書では、クライアントネットワーク２５０内の１つまたは複数の装置上で実行されている可能性のある任意のソフトウェアプロセスを包含するが；顧客プロセスがその上で実行する基礎となるハードウェアが、プロセスの代わりに、ストレージゲートウェイ２５２データポート（単数または複数）に対する接続および通信に関与し得るか、またはそれを実行し得ることに留意されたい。
【００７５】
読取りおよび書込み要求は、ゲートウェイ２５２データポート（単数または複数）によって受信され得る。読取りについて、要求は、ゲートウェイ２５２によるさらなる干渉または処理なしで、ローカルデータストア２５４に直接渡され得、その要求されたデータがローカルデータストア２５４から顧客プロセス２５８に直接渡され得る。ローカルデータストア２５４に向けられた書込み要求も、ストレージゲートウェイ２５２によってローカルデータストア２５４に渡される。しかし、書込み要求をローカルデータストア２５４に渡すことに加えて、ストレージゲートウェイ２５２は、書込み要求によって示された新規または更新されたデータを、ストレージサービス２１２を介して、リモートデータストア２１６にシャドーイングし得る。
【００７６】
少なくともいくつかの実施形態では、新規または更新されたデータをリモートデータストア２１６にシャドーイングするために、ストレージゲートウェイ２５２は、リモートデータストア２１６に、例えば、先入れ先出し方式（ＦＩＦＯ）の書込みログ内に、アップロードされる書込みデータをローカルに格納またはバッファリングし得る。少なくともいくつかの実施形態では、書込みログは、ブロックストレージフォーマットで実装され得、書込みログは１つまたは複数のブロック（例えば、４ＭＢブロック）を含む。書込み要求で受信された書込みデータは、書込みログに付加され得る。２つ以上の書込み要求からの書込みデータが、書込みログ内の同じブロックに書き込まれ得る。ブロックに関連した書込みデータに対するメタデータ（例えば、書込みログブロックにおけるオフセットおよび長さ、ならびに対象とするデータストアにおけるオフセット）が、メタデータストアに格納され得る。
【００７７】
ストレージゲートウェイ２５２は、定期的に、非定期的に、または継続的に、ローカルに格納された書込みデータを、書込みログから、リモートデータストア２１６でシャドーイングされたデータボリュームにアップロードするために、サービスプロバイダ２１０で受信者側データアップロードプロセス（図示せず）と通信する送信者側データアップロードプロセス（図示せず）を含み得る。書込みデータの書込みログからのアップロードは、ローカルデータストア２５４に対する開始プロセスからの読取りおよび書込み動作の処理と非同期に実行され得る。アップロードプロセスは、書込みデータを書込みログからブロックでアップロードし得る。書込みログブロックがうまくアップロードされると、対応するブロックが書込みログ内で空きとして印を付けられ得る。
【００７８】
少なくともいくつかの実施形態では、アップロードプロセスは、データ重複排除、圧縮、並列化、およびＴＣＰウィンドウスケーリング技術のうちの１つまたは複数を採用し得る。図７に示すように、少なくともいくつかの実施形態で採用され得るデータ重複排除技術例は、米国特許出願第１２／９８１，３９３号および第１２／９８１，３９７号明細書に記載されている。
【００７９】
サービスプロバイダフロントエンド２８０が、ストレージゲートウェイ２５２への接続を管理し得ることに留意されたい。少なくともいくつかの実施形態では、ストレージゲートウェイ２５２は、フロントエンド２８０を介して、サービスプロバイダ２１０への接続を開始し；サービスプロバイダ２１０は、ゲートウェイ２５２への接続を開始しない。フロントエンド２８０は、ファイアウォール、境界ルーター、負荷分散装置、ゲートウェイサーバー、ゲートウェイプロキシ、コンソールプロセス、ならびに、ストレージサービス２１２をクライアントネットワーク（単数または複数）２５０に公開し、そのストレージサービス２１２をストレージゲートウェイ（単数または複数）２５２とインタフェースで接続するために必要であり得る、一般的な任意のネットワーキング装置および／またはプロセス、のうちの１つまたは複数を含み得るが、それらに限らない。
【００８０】
少なくともいくつかの実施形態では、ストレージゲートウェイ２５２は、サービスプロバイダフロントエンド２８０を介した、サービスプロバイダ２１０への全ての接続を開始し；サービスプロバイダ２１０は、ゲートウェイ２５２への接続を開始しない。さらに、ネットワーク管理者プロセス２６０は、直接ゲートウェイ２５２への接続を開始せず；例えば、ゲートウェイ２５２を設定および管理するため、ネットワーク管理者プロセス２６０によるゲートウェイ２５２へのアクセスは、サービスプロバイダフロントエンド２８０を介して、サービスプロバイダ２１０を通過する。
【００８１】
シャドーイングゲートウェイとして、ストレージゲートウェイ２５２によって提供されるシャドーイング動作は、クライアントネットワーク２５０上のユーザーの観点からすれば、効果的に透過的であり得る。顧客プロセス（単数または複数）２５８は、クライアントネットワーク２５０上のストレージゲートウェイ２５２によって公開されたデータポート（単数または複数）（例えば、ｉＳＣＳＩポート）に対する読取りおよび書込みを実行する。顧客プロセス２５８の観点から見れば、ストレージゲートウェイ２５２は、任意の他のデータターゲット（例えば、ｉＳＣＳＩターゲット）のように見え得る。データポート（単数または複数）上で受信された顧客プロセス（単数または複数）２５８からの読取り要求は、一次データストアとして機能するローカルデータストア２５４に伝えられる。データポート（単数または複数）上で受信された顧客プロセス（単数または複数）２５８からの書込み要求は、ローカルデータストア２５４に伝えられ、リモートデータストア２１６にシャドーイングされる。ゲートウェイ２５２のシャドーイング動作は、一次データストアの、またはクライアントネットワーク２５０の性能に著しく影響を及ぼすことなく、バックグラウンドで実行され得る。
【００８２】
図７に示す「ｂｕｍｐ  ｉｎ  ｔｈｅ  ｗｉｒｅ」シャドーイングゲートウェイ設定に対するユースケースの一例は、障害復旧に対してである。ストレージゲートウェイ２５２は、データの更新を、クライアントネットワーク２５０からストレージサービス２１２に送信するが、それは、スナップショット２７０とも呼ばれる、シャドーボリュームまたは複数のボリューム内にデータを格納する。データは、ブロックストレージフォーマットでスナップショット２７０内に格納され得る。データはローカルデータストア２５４にも格納される。ローカルに格納されたボリュームの一部もしくは全部の破損または損失という結果になる何かが起こった場合、破損したか、または失われたデータは、データストア２１６内に格納されたボリュームのスナップショット２７０から回復され得る。ストレージプロバイダ２１０は、顧客ネットワーク管理者が（例えば、ネットワーク管理者プロセス２６０を介して）それを通じて、リモートデータストア２１６上のシャドーイングされたボリュームから、ローカルに格納されたボリュームの一部または全部のスナップショット２７０の回復を要求し得る、インタフェースを提供し得る。少なくともいくつかの実施形態では、データがそこから回復されるシャドーイングされたボリュームが可能な限り最新であることを確実にするために、データのスナップショット２７０を回復する前に、ストレージゲートウェイ２５２によって維持される書込みログの少なくとも一部が、リモートデータストア２１６にアップロードされ得る。いくつかの場合には、少なくともいくつかのデータが、ストレージゲートウェイ２５２によって維持される書込みログから直接回復され得ることに留意されたい。
【００８３】
〔顧客プロセス‐ゲートウェイ通信〕
前述の通り、顧客管理者は、ネットワーク管理者プロセス２６０を介して、例えば、ゲートウェイ２５２を設定するために、サービスプロバイダ２８０フロントエンドを通じて、ストレージゲートウェイ２５２（例えば、シャドーイングゲートウェイ）と通信し得る。少なくともいくつかの実施形態では、１つまたは複数の顧客プロセス２５８は、ゲートウェイ２５２の要求を行うために、サービスプロバイダ２８０フロントエンドを介して、ストレージゲートウェイ２５２と通信するようにも設定され得る。例えば、顧客プロセス２５８は、サービスプロバイダ２８０フロントエンドを介して、ストレージゲートウェイ２５２と通信するように設定されるＳＱＬサーバーであり得る。
【００８４】
〔シャドーイングゲートウェイブートストラップ技術〕
図７に示すように、ストレージゲートウェイ２５２が、シャドーイングゲートウェイとして、インストールされ、有効化されて、設定されると、ストレージゲートウェイ２５２は、１つまたは複数のデータポート（例えば、ｉＳＣＳＩポート）を、クライアントネットワーク２５０上の顧客プロセス（単数または複数）２５８に公開する。クライアントネットワーク２５０上の顧客プロセス（単数または複数）２５８は、次いで、ストレージゲートウェイ２５２データポート（単数または複数）を介して、ローカルデータストア２５４からの読取りおよびローカルデータストア２５４への書込みを行い得る。読取りおよび書込み要求が、ローカルデータストア２５４に渡され、その書込み要求によって示された書込みデータは、ローカルデータストアのスナップショット（単数または複数）２７２が更新され得るように、リモートデータストア２１６にシャドーイングされる。
【００８５】
しかし、最初にインストールされ、有効化されて、設定された時、または何らかの理由でオフラインになった後のいずれかで、シャドーイングゲートウェイが顧客のネットワーク内でオンラインになると、リモートデータストア２１６上のスナップショット（単数または複数）２７２内にない、ローカルデータストア２５４内のデータがあり得る。従って、少なくともいくつかの実施形態は、シャドーイングゲートウェイのためのブートストラッププロセスを提供し得るが、その間、スナップショット（単数または複数）が、ローカルデータストア２５４上に現在あるデータを正確に反映するように、投入および／または更新できるよう、ローカルデータストア２５４からの少なくともいくつかのデータがリモートデータストア２１６にアップロードされ得る。
【００８６】
図８は、少なくともいくつかの実施形態に従った、ネットワーク環境例内でのシャドーイングゲートウェイのブートストラップを大まかに示すハイレベルブロック図である。ストレージゲートウェイ２５２が、クライアントネットワーク２５０上でシャドーイングゲートウェイとしてオンラインになると、ゲートウェイ２５２は、スナップショット２７２をローカルデータストア２５４と一致させるために、リモートデータストア２１６にアップロードされる必要のあるローカルデータストア２５４内のデータがあると判断し得る。ゲートウェイ２５２のアップロードプロセスは、次いで、ローカルデータストア２５４からのデータのブロックの、サービスプロバイダ２１０におけるリモートデータストア２１６へのアップロードを開始し得る。ストレージゲートウェイ２５２は、また、そのデータポートを顧客プロセス（単数または複数）２５８に対して公開して、ローカルデータストア２５４に向けられた読取り要求および書込み要求の受取りおよび処理を開始し、書込み要求によって示された新規の書込みデータの書込みログへのキャッシングを開始して、書込みログからの書込みデータのリモートデータストア２１６へのアップロードを開始し得る。ローカルデータストア２５４からのデータのアップロードは、そのようにして、ストレージゲートウェイ２５２がそのシャドーイング機能をクライアントネットワーク２５０上で実行している間に、バックグラウンドで実行され得る。ローカルデータストア２５４からのデータのアップロードが完了すると、ストレージゲートウェイ２５２は、そのシャドーイング機能の実行を継続する。
【００８７】
図９は、少なくともいくつかの実施形態に従った、シャドーイングゲートウェイのためのブートストラッププロセスの流れ図である。３００に示すように、シャドーイングゲートウェイが顧客のネットワーク上でオンラインになる。例えば、ストレージゲートウェイの新しいインスタンスが、ネットワーク上にシャドーイングゲートウェイとして、インストールされ、有効化されて、設定される。別の例として、シャドーイングゲートウェイの既存のインスタンスが、何らかの理由でオフラインになった後、オンラインに戻り得；ゲートウェイがオフラインだった間、顧客プロセス（単数または複数）が、データの読取りおよび書込みのために、ローカルデータストアに直接伝達していた可能性がある。別の例として、シャドーイングゲートウェイは、シャドーイング動作が、その間、何らかの理由で（例えば、書込みログがいっぱいになったため）一時的に中断される、パススルーモードに入り得、そして、パススルーモードを出て、シャドーイング動作を再開している可能性がある。
【００８８】
３０２に示すように、シャドーイングゲートウェイは、必要であれば、既存のデータのローカルデータストアからリモートデータストアへのアップロードを開始し得る。例えば、これが新しいシャドーイングゲートウェイで、ローカルデータストアが既にデータを投入されている場合、ローカルデータストア内の既存のデータは、一致したスナップショットが生成できるように、リモートデータストアにアップロードされる必要がある。別の例として、パススルーモードを出て、既存のシャドーイングゲートウェイがオンラインに戻るか、またはシャドーイング動作を再開すると、新規のデータがローカルデータストアに書き込まれている可能性があり、従って、リモートデータストア上のスナップショットを、ローカルデータストア上の現在のデータと一致させる必要がある。
【００８９】
３０４に示すように、シャドーイングゲートウェイは、顧客のネットワーク上に公開されたゲートウェイデータポート（単数または複数）を介して、顧客プロセスから読取りおよび書込みの受入れを開始し得る。３０６に示すように、シャドーイングゲートウェイは、書込みからの書込みデータの書込みログへのキャッシュを開始して、３０８に示すように、書込みログからの書込みデータのリモートデータストアへのアップロードを開始し得る。
【００９０】
３０２で開始された、ローカルデータストアからのデータのアップロードは、シャドーイングゲートウェイが読取りおよび書込み要求を受け入れて、そのシャドーイング機能を顧客のネットワーク上で実行している間、バックグラウンドで実行され得る。ローカルデータストアからのデータのアップロードが完了すると、シャドーイングゲートウェイは、そのシャドーイング機能の実行を継続する。
【００９１】
図９における要素の順番は異なり得ることに留意されたい。例えば、要素３０２は、要素３０４から３０８までの任意の１つの後に実行され得る。言い換えれば、シャドーイングゲートウェイは、ローカルデータストアから既存のデータのアップロードを開始する前に、読取りおよび書込みの受入れ、ならびにそのシャドーイング機能の実行を開始し得る。
【００９２】
図１０は、少なくともいくつかの実施形態に従って、パススルーモードに入り、それから回復するシャドーイングゲートウェイの流れ図である。３２０に示すように、シャドーイングゲートウェイは、そのシャドーイング機能を中断する（すなわち、書込みデータのキャッシュおよびアップロードを停止する）ことによりパススルーモードに入り得るが、その間、顧客のネットワーク上の顧客プロセスからローカルデータストアに向けられた読取りおよび書込みの受入れおよびサービスを継続している。ゲートウェイは、シャドーイング機能を失敗させ得る何らかの状態を検出すると、パススルーモードに入り得る。一例として、シャドーイングゲートウェイは、書込みログがいっぱいで、うまくアップロードできないことを検出すると、パススルーモードに入り得る。ゲートウェイは、検出された状態をローカルネットワーク管理者に警告し得；管理者は、次いで、警告によって示された問題に対処し得る。例えば、管理者は、より多くのメモリを書込みログに割り当て得、かつ／またはより多くの帯域幅をゲートウェイアップロードプロセスに割り当て得る。管理者は、次いで、問題が対処されていることをゲートウェイに通知し得る。
【００９３】
シャドーイングゲートウェイが、例えば、パススルーモードを引き起こした検出された問題が対処されているという指示を受信することにより、パススルーモードを出ることができると判断すると、ゲートウェイは、３２２に示すように、シャドーイングを再開し得る（すなわち、書込みデータのキャッシュおよびアップロードを開始する）。
【００９４】
パススルーモードを出ると、リモートデータストアにアップロードされていないローカルデータストア内のデータがあり得る。ゲートウェイは、パススルーモードの間に、書込み要求の受信および処理を継続しているので、新規のデータがローカルデータストアに書き込まれている可能性がある。従って、シャドーイングゲートウェイは、図８および図９に示すように、ブートストラップを実行して、３２４に示すように、パススルーモードから回復するため、少なくともいくつかのデータをローカルデータストアからリモートデータストアにアップロードし得る。
【００９５】
少なくともいくつかの実施形態では、シャドーイングゲートウェイのために最適化されたブートストラッププロセスが、ローカルデータストアからリモートデータストアにアップロードされるデータの量を削減するために採用され得る。最適化されたブートストラッププロセスは、リモートデータストアに既にアップロードされているデータのブロックを検出し得、従って、既にアップロードされているブロックのアップロードを回避し得る。最適化されたブートストラッププロセスは、ゲートウェイからリモートデータストアへのデータの一般的なアップロード中に、ストレージゲートウェイプロセスに対して生成および維持される、追跡データを利用し得る。
【００９６】
図１１は、少なくともいくつかの実施形態に従って、ゲートウェイからリモートデータストアへブロックをアップロード、更新、および追跡するための方法の流れ図である。通常のゲートウェイ動作中、ゲートウェイは、３６０に示すように、サービスプロバイダにおいて、書込みデータをリモートデータストアに、具体的にはストレージサービスに、アップロードする。ストレージサービスは、書込みデータを受信して、３４２に示すように、それぞれのブロック（単数または複数）（例えば、４ＭＢブロック）をリモートデータストアから取得する。ストレージサービスは、次いで、３４４に示すように、書込みデータに従って、それぞれのブロック（単数または複数）を修正し、修正されたブロック（単数または複数）を、新しいバージョン名でリモートデータストアにアップロードして戻す。各修正されたブロックに対して、３４６に示すように、修正されたブロックを示すトークンがストレージゲートウェイに送り返される。ストレージゲートウェイは、これらのトークンを追跡し；ブロックが修正されるたびに、修正されている参照ブロックがストレージサービスに送信される必要がある。
【００９７】
３４８に示すように、ストレージゲートウェイは、サービスプロバイダにおいて、定期的または非定期的に、トークンマニフェスト（ｔｏｋｅｎ  ｍａｎｉｆｅｓｔ）を更新し、ローカルに追跡されたトークンの少なくとも一部をパージし得る。ストレージゲートウェイは、多数のトークンを追跡する必要があり得る。少なくともいくつかの実施形態では、マニフェストは、ストレージゲートウェイから、多数のトークンをローカルに追跡する必要があるという負担を取り除き得る。ストレージゲートウェイは、マニフェストを、ゲートウェイが受信しているトークンで更新するために、定期的または非定期的にストレージサービスを呼び出し得、それぞれローカルに格納されたトークンをパージし得る。
【００９８】
少なくともいくつかの実施形態では、最適化されたブートストラッププロセスは、マニフェスト内の各ブロックのハッシュをチェックする呼出しを行うことにより、どのブロックがアップロードされ、どのブロックがアップロードされていないかを判断するためにマニフェストを利用して、マニフェストによって示されたどのブロックが、ローカルデータストア上のブロックに一致するかに対して、マニフェストによって示されたどのブロックが、ローカルデータストア上のブロックに一致しないか、従ってアップロードされる必要があるかを判断し得る。言い換えれば、マニフェストは、ローカルデータストア上のどのブロックがダーティブロックであるか、およびどれがダーティブロックでないかを検出するために使用される。このようにして、最適化されたブートストラッププロセスは、マニフェストを介して、どのブロックが既にアップロードされているかを判断しようと試みて、既にアップロードされたブロックが再度アップロードされず、ダーティブロックだけがアップロードされるようにする。少なくともいくつかの実施形態では、最適化されたブートストラッププロセスが、アップロードされる必要があると判断するブロック（ダーティブロック）に対して、ダーティブロックから実際にアップロードされるデータの量を削減するために、これらのブロックをアップロードする際に、データ重複排除技術が適用され得る。
【００９９】
図１２は、少なくともいくつかの実施形態に従った、シャドーイングゲートウェイのための最適化されたブートストラッププロセスの流れ図である。ブートストラッププロセスは、例えば、ゲートウェイがパススルーモードを出るときに、シャドーイングゲートウェイに対して開始される。３６０に示されるように、ブロックがローカルデータストアから取得される。３６２に示されるように、リモートデータストア上に格納され得る、マニフェストが、現在のブロックが、アップロードされる必要のあるダーティブロックであるかどうかを判断するために、チェックされ得る。３６４で、現在のブロックがマニフェストに従ってダーティである場合には、３６６に示されるように、データ重複排除技術に従って、ブロックの少なくとも一部がリモートデータストアにアップロードされ得る。方法は、次いで、３６８に進む。３６４で、現在のブロックがマニフェストに従ってダーティでない場合、方法は、直接３６８に進む。３６８で、さらなるブロックが処理される場合、方法は、次のブロックを処理するために、要素３６０に戻る。そうでない場合、ブートストラッププロセスは終了する。
【０１００】
〔ストレージゲートウェイセキュリティモデル〕
ストレージゲートウェイの実施形態が、顧客に対するデータ保護、ならびに顧客または第３者によるゲートウェイの誤用および不正使用（例えば、不法コピー）に対する保護を提供するセキュリティモデルに従って実装され得る。図１３は、少なくともいくつかの実施形態に従った、ストレージゲートウェイセキュリティモデルの態様を示す。
【０１０１】
少なくともいくつかの実施形態では、セキュリティモデルの一態様は、ストレージゲートウェイ８４が、サービスプロバイダ６０との通信で使用するために、ゲートウェイ８４に対するセキュリティ認証情報または他の識別情報なしで、クライアントネットワーク８０上に配信されて最初にインストールされることである。有効化プロセスが採用され得、それを介して、顧客ネットワーク上のストレージゲートウェイ８４がサービスプロバイダ６０に登録できる。有効化プロセスの少なくともいくつかの実施形態では、ストレージゲートウェイ８４は、必要なセキュリティ認証情報を取得するために、それぞれの顧客アカウントに対する正しいゲートウェイとして、サービスプロバイダ６０との接続（例えば、ＳＳＬ（セキュアソケットレイヤー）／ＴＣＰ接続）を開始し、サービスプロバイダ６０に対して自身を識別し得る。有効化プロセス中、サービス顧客は、ゲートウェイ８４に対して名前を指定する。少なくともいくつかの実施形態では、サービス顧客は、サービスプロバイダ６０でその顧客のアカウントにログインして、ゲートウェイ８４を登録する際に使用される、ゲートウェイ名を含むがそれに限らない、情報をサービスプロバイダ６０に提供する。しかし、サービス顧客は、ストレージゲートウェイ８４にログインせず、従って、サービス顧客のセキュリティ認証情報および他のアカウント情報は、ゲートウェイ８４上で公開されない。これは、サービス顧客に対するセキュリティリスクを最小限にし得る。このゲートウェイ名は、ゲートウェイ８４およびサービス顧客に関連した他のメタデータとともに、サービスプロバイダ６０によって格納され、それぞれのゲートウェイ８４の追跡および識別で使用され得る。サービス顧客は、クライアントネットワーク８０上でインストールおよび有効化された１つまたは複数のゲートウェイ８４を有し得、各々は一意に識別する名前および他のメタデータを有することに留意されたい。図１５〜図１７Ｂは、以下の「ストレージゲートウェイ有効化プロセス」という表題のセクションでさらに説明されるが、少なくともいくつかの実施形態で採用され得る有効化プロセスを示す。有効化プロセスでは、ゲートウェイ８４は、サービスプロバイダ６０への接続を開始し、ゲートウェイ８４プラットフォームに関するメタデータを、公開鍵とともに、サービスプロバイダ６０に提供し得る。サービスプロバイダ６０は、次いで、有効化プロセスで使用される、一時的な一意の有効化キーをゲートウェイ８４に提供し得る。さらに、サービス顧客は、ゲートウェイ８４を有効化するために、サービスプロバイダコンソールプロセスを通じて、顧客のアカウントにログインするように要求され得；そのようにして、ゲートウェイ８４は、ゲートウェイ８４を有効化しようと試みるサービス顧客のアカウントと照合され得る。ストレージゲートウェイ８４により有効化プロセスを通じて取得されたセキュリティ認証情報および他のメタデータ（例えば、顧客提供のゲートウェイ名）が、次いで、ゲートウェイ８４をサービスプロバイダ８４プロセスに対して識別するために、サービスプロバイダ６０ネットワークの様々なプロセスとの通信でストレージゲートウェイ８４によって使用され得る。
【０１０２】
少なくともいくつかの実施形態では、図１３に示すように、セキュリティモデルの別の態様は、ストレージゲートウェイ８４は、クライアントネットワーク８０上で顧客プロセス（単数または複数）８８に対して公開された１つまたは複数のデータポート（例えば、ｉＳＣＳＩポート）への外部から開始された接続のみを受け入れる。ストレージゲートウェイは、他の外部から開始された接続を受け入れず、外部プロセスへの全ての必要な接続を開始する。例えば、少なくともいくつかの実施形態では、ストレージゲートウェイ８４は、サービスプロバイダ６０への少なくとも１つの安全な接続９２（例えば、ＳＳＬ（セキュアソケットレイヤー）／ＴＣＰ接続）を開始するが；サービスプロバイダ６０は、しかし、ゲートウェイ８４への接続を開始できない。ゲートウェイ開始接続および少なくともいくつかの実施形態で使用され得るロングポーリング技術を使用した、リモートゲートウェイ管理のための方法例が、図１８〜図２０に示されている。
【０１０３】
さらに、図１３に示すように、少なくともいくつかの実施形態では、サービス顧客（例えば、ネットワーク管理者プロセス９０）は、ゲートウェイ８４を設定および管理するために、ストレージゲートウェイ８４に直接接続せず；代わりに、ストレージゲートウェイ８４に対する設定および動作要求が、サービスプロバイダ６０を通して行われ、それは、要求を、ゲートウェイ８４によって開始された安全な通信チャネル９２を介してゲートウェイ８４に渡す。例えば、図１８〜図２１に示すように、ゲートウェイ８４に対する設定および動作要求は、サービスプロバイダ６０ネットワーク上のコンソールプロセスを通して、ネットワーク管理者プロセス９０によって、またはそれを介して実行され得る。少なくともいくつかの実施形態では、コンソールプロセスは、顧客のゲートウェイ８４に向けられた、受信された設定要求または動作要求が、ゲートウェイ開始接続９２を維持するゲートウェイ制御プレーンに転送される。ゲートウェイ制御プレーンは、要求の対象であるゲートウェイ８４への現在の接続、例えば、特定のゲートウェイ制御サーバー上で維持された接続、を探し、要求がその接続を介してゲートウェイ８４に転送される。
【０１０４】
従って、少なくともいくつかの実施形態では、ユーザー、ネットワーク管理者、または顧客のプロセスは、ストレージゲートウェイ８４への接続を直接開始することもそれに「ログイン」することもできず、サービスプロバイダ６０ネットワーク上のオペレータまたはプロセスなどの外部の人またはプロセスもストレージゲートウェイ８４への接続を開始できない。これは、ゲートウェイセキュリティモデルの他の態様とともに、ストレージゲートウェイ８４上のセキュリティ認証情報および他の動作情報が、外部の人またはプロセスによって故意または故意ではなく危険にさらされるのを防ぐのに役立ち得る。
【０１０５】
セキュリティモデルの別の態様では、ゲートウェイの有効化および動作中の、ストレージゲートウェイとストレージサービスとの間の全ての通信が、保護されて暗号化され得る。前述のように、セキュリティモデルの一態様は、ストレージゲートウェイとストレージサービスとの間の通信が、ゲートウェイ開始の安全な接続（例えば、ＳＳＬ／ＴＣＰ接続）を通して実行されることである。暗号化技術、例えば、公開／秘密鍵の暗号化が、ゲートウェイ開始の安全な接続を通した通信で使用され得る。
【０１０６】
図１４は、少なくともいくつかの実施形態に従った、ストレージゲートウェイの有効化、設定、および動作中の、ゲートウェイセキュリティモデルの少なくともいくつかの態様を示す、流れ図である。４００に示すように、ストレージゲートウェイが、顧客ネットワーク上でインスタンス生成され得る。例えば、ストレージゲートウェイのインスタンスを生成するために、ストレージゲートウェイは、通常、ファイアウォールの後ろで、サービス顧客のローカルネットワークまたはデータセンター上に仮想または物理アプライアンスとしてインストールされ得る。例えば、少なくともいくつかの実施形態では、ストレージゲートウェイは、サービス顧客のローカルネットワーク上のサーバーシステムなどの、１つまたは複数のコンピューティング装置上にダウンロードされ得るか、または他の方法でインストールされ得る仮想アプライアンスとして実装され得る。あるいは、ストレージゲートウェイは、サービス顧客のローカルネットワークに結合され得る専用装置またはアプライアンスとして実装され得；その専用装置またはアプライアンスは、ストレージゲートウェイの機能を実装するソフトウェアおよび／またはハードウェアを含み得る。４０２に示すように、インスタンス生成されたストレージゲートウェイは、ゲートウェイを識別して、ゲートウェイセキュリティ認証情報を取得するために、サービスプロバイダおよび顧客とともに有効化プロセスを開始する。少なくともいくつかの実施形態では、セキュリティ認証情報は、ゲートウェイ提供の公開鍵で署名された証明書を含む。有効化プロセス例が、図１５〜図１７Ｂに関連して以下で説明される。有効化プロセスは、ゲートウェイが顧客ネットワーク上に最初にインストールされると、ゲートウェイによって開始され得、また、他の時に、例えば、ゲートウェイ装置が、アップグレード、保守、または何らかの他の理由のために電源が切られていた後に電源がオンになった時にも開始され得ることに留意されたい。図１４の４０４に示されるように、ストレージゲートウェイは、サービスプロバイダへの安全な接続を確立する。少なくともいくつかの実施形態で使用され得るロングポーリング技術を使用するゲートウェイ開始接続のための方法例が、図１８〜図２１に示される。図１４の４０６に示されるように、顧客は、サービスプロバイダコンソールプロセスを通して、ストレージゲートウェイを設定および操作する。ゲートウェイ開始接続および少なくともいくつかの実施形態で使用され得るロングポーリング技術を使用した、リモートゲートウェイ管理のための方法例が、図１８〜図２１に示されている。図１４の４０８に示されるように、ストレージゲートウェイは、例えば、ストレージサービスプロセスと通信するために、ゲートウェイをサービスプロバイダに対して識別するための有効化プロセス中に取得されたゲートウェイセキュリティ認証情報およびおそらく他のメタデータを使用して、サービスプロバイダと通信する。
【０１０７】
〔ストレージゲートウェイ有効化プロセス〕
ストレージゲートウェイの実施形態は、例えば、オンプレミス記憶装置として、およびサービス顧客のネットワークと、サービスプロバイダによって提供されるストレージサービスとの間のインタフェースとして、機能し得る。少なくともいくつかの実施形態では、ストレージゲートウェイは、顧客データセンターで顧客のローカルネットワークインフラストラクチャに結合されたサーバーシステムなどの、１つまたは複数のコンピューティング装置上にダウンロードされ得るか、または他の方法でインストールされ得る仮想装置またはアプライアンスとして実装され得る。あるいは、ストレージゲートウェイは、顧客のローカルネットワークインフラストラクチャに結合され得る専用装置またはアプライアンスとして実装され得る。専用装置またはアプライアンスは、ゲートウェイの機能を実現するソフトウェアおよび／またはハードウェアを含み得る。
【０１０８】
少なくともいくつかの実施形態では、ゲートウェイがインストールされた後にストレージゲートウェイを使用するために、ゲートウェイはサービスプロバイダで有効化される必要がある。この節は、ストレージゲートウェイの識別、認証、および認可が、ストレージゲートウェイのブートストラップまたは有効化中に実行され得る方法を説明する。ゲートウェイ有効化方法では、ストレージゲートウェイが識別されて、顧客のサービスプロバイダアカウントに関連付けられる。しかし、顧客の認証情報は、有効化プロセス中にストレージゲートウェイに公開されない。少なくともいくつかの実施形態では、顧客は、サービスプロバイダで顧客のアカウントにログインして、ゲートウェイ８４を登録する際に使用される、ゲートウェイ名を含むがそれに限らない、情報をサービスプロバイダに提供する。しかし、顧客は、ストレージゲートウェイにログインせず、従って、顧客のセキュリティ認証情報および他のアカウント情報は、ゲートウェイ上で公開されない。これは、顧客に対するセキュリティリスクを最小限にし得る。少なくともいくつかの実施形態では、顧客により有効化プロセスで使用されるサービスプロバイダアカウントは、図５に示されるように、ストレージサービスによって提供される他のストレージリソースおよびハードウェア仮想化サービスによって提供される仮想化ハードウェアリソースを含むがそれらに限らない、サービスプロバイダによって顧客に提供される他のリソースを管理するために顧客が使用した、同一のアカウントであり得る。
【０１０９】
図１５は、少なくともいくつかの実施形態に従って、ゲートウェイ有効化プロセスに関与する、サービス顧客およびサービスプロバイダ構成要素または実体を示すネットワーキング環境例のハイレベルブロック図である。これらの参与するものは、ストレージゲートウェイ８４、ネットワーク管理者プロセス９０、コンソールプロセス６８、およびゲートウェイ制御７０を含み得るが、それらに限らない。ストレージゲートウェイ８４は、通常、ファイアウォールの後ろで、サービス顧客のローカルネットワークまたはデータセンター（例えば、クライアントネットワーク８０）上に仮想または物理アプライアンスとしてインストールされ得る。例えば、ストレージゲートウェイ８４は、例えば、仮想マシン内で実行する仮想アプライアンスであり得、クライアントネットワーク８０上のサーバー装置上にダウンロードされてインスタンス生成され得る。サービスプロバイダ６０ネットワーク上のコンソールプロセス６８は、顧客のアカウントにサインオンするために、例えば、クライアントネットワーク８０上の装置から、またはクライアントネットワーク８０に外部の装置から、ネットワーク管理者プロセス９０によって、またはそれを通してアクセス可能であり得る。例えば、コンソールプロセス６８は、サービスプロバイダ６０によって提供されるアカウントおよびリソースを表示および管理するために、ネットワーク管理者が、ネットワーク管理者プロセス９０を通して、それぞれのサービス顧客のアカウントにそれを介してサインオンし得る、ウェブインタフェースまたは何らかの他のインタフェースを提供し得る。サービスプロバイダ６０ネットワークのゲートウェイ制御７０プロセスまたはプレーンは、サービスプロバイダ６０の１つまたは複数の顧客においてインストールされた１つまたは複数のストレージゲートウェイ（単数または複数）８４に対して追跡および管理機能を実行し得る。ゲートウェイ制御７０およびコンソールプロセス６８は、例えば、サービスプロバイダ６０ネットワーク上の１つまたは複数のサーバーコンピュータ装置上で実装され得る。少なくともいくつかの実施形態では、ゲートウェイ制御７０は、負荷分散および高可用性を提供するため、２つ以上ゲートウェイ制御サーバーを含む制御プレーンとして実装され得る。
【０１１０】
図１６Ａおよび図１６Ｂは、少なくともいくつかの実施形態に従って、ゲートウェイ有効化プロセス中に、図１５に示す構成要素間のやりとりを示すプロセス流れ図である。有効化プロセスは、顧客の観点から見れば、２つのやりとりの点を含む。第１は、図１６Ａに示すように、顧客がゲートウェイ８４とやりとりする。第２は、図１６Ｂに示すように、顧客が、サービスプロバイダ（ＳＰ）コンソール６８とやりとりする。
【０１１１】
図１６Ａは、有効化プロセス中に、顧客（図１５でネットワーク管理者プロセス９０によって表される）、ゲートウェイ８４、およびサービスプロバイダ（ＳＰ）ゲートウェイ制御７０の間のやりとりを示す。ゲートウェイ８４がインストールされ、かつ／または電源をオンにされた後、ゲートウェイ８４は、公開鍵（例えば、ＲＳＡ鍵ペア）を生成し、ゲートウェイ８４がその上にインストールされている装置のハードウェアおよび／またはソフトウェアに関するメタデータを収集する。例えば、メタデータは、ＩＰアドレス、ＭＡＣアドレス、または装置の他のハードウェアおよびソフトウェア特性を含み得る。ゲートウェイ８４は、次いで、公開鍵およびメタデータを、例えば、ＨＴＴＰ  ＰＯＳＴを通じて、ゲートウェイ制御７０に公開する。それに応じて、ゲートウェイ制御７０は、有効化キーを生成し得、その有効化キーをゲートウェイ８４に返す。有効化キーは、グローバル一意識別子（ＧＵＩＤ）、例えば、Ｎビットのランダムに生成された数であり得る。ゲートウェイ制御７０は、有効化キーを、ゲートウェイ８４から取得された公開鍵およびメタデータとともに、格納し得る。
【０１１２】
ゲートウェイ制御７０から有効化キーを受信した後、ゲートウェイ８４は、ゲートウェイ８４  ＶＭまたは装置上の固定ポート（ＩＰアドレス：ポート）において、クライアントネットワーク８０内で有効化キーを提供する。顧客は次いで、ネットワーク管理者プロセス９０を介して、有効化キーを取得するために、ゲートウェイ８４の固定ポートにアクセスし得；そのアクセスは、クエリ文字列内の有効化キーで、サービスプロバイダ（ＳＰ）コンソール６８プロセスにリダイレクトされる。
【０１１３】
少なくともいくつかの実施形態では、有効化キーは、ある期間または存続期間（例えば、３０分間）、有効であり、その後、有効化キーは失効する。少なくともいくつかの実施形態では、有効化キーは、指定された存続期間の間だけ有効であるので、失効した有効化キーを除去する、バックグラウンドのガーベジコレクションプロセスが、サービスプロバイダ６０で提供され得る。少なくともいくつかの実施形態では、有効化キーに対する存続期間は、境界例を処理するために、サービスプロバイダ６０側上では、ゲートウェイ８４上よりも長い可能性がある（例えば、サービスプロバイダ６０側上で４５分、ゲートウェイ８４上で３０分）。
【０１１４】
図１６Ｂは、有効化プロセス中に、顧客（図１５でネットワーク管理者プロセス９０によって表される）、サービスプロバイダ（ＳＰ）コンソール６８、およびサービスプロバイダ（ＳＰ）ゲートウェイ制御７０の間のやりとりを示す。ネットワーク管理者プロセス９０がゲートウェイ８４から有効化キーを取得すると、ゲートウェイ９５を顧客のサービスプロバイダ６０アカウントに追加するために有効化キーが使用され得る。ＳＰコンソール６８にリダイレクトされた後、顧客がそのアカウントに（例えば、ネットワーク管理者プロセス９０を介して）ログインし、ゲートウェイ８４がゲートウェイ制御７０に対して公開したメタデータをフェッチするために、クエリ文字列からの有効化キーが使用される。このメタデータの少なくとも一部が（例えば、ネットワーク管理者プロセス９０を介して）顧客に表示される。ゲートウェイ制御７０からＳＰコンソール６８に返されて、顧客９０に表示されるメタデータは、ゲートウェイ８４によってゲートウェイ制御７０に以前に提供されたメタデータであり、有効化されるゲートウェイ８４に関して顧客９０に通知するために使用され得る。表示されるメタデータは、そのメタデータによって示されたそれぞれのゲートウェイ８４が、顧客のネットワークでインストールされているゲートウェイ８４であることを顧客９０に確認し得る。例えば、ゲートウェイ８４のＩＰアドレスが表示され得、顧客９０が確認し得るのは、ゲートウェイ８４のＩＰアドレスである。さらに、アカウントにログインするために顧客９０から取得された認証情報（例えば、顧客アカウント番号および／または他の顧客識別情報）が、顧客９０を、それぞれのゲートウェイ８４を所有する顧客として認証し、顧客９０をそれぞれのゲートウェイ８４と関連付ける際に使用され得る。
【０１１５】
顧客９０は、ＳＰコンソール６８によって、追加の情報、例えば、ゲートウェイ８４に対する名前を入力するようにも促され得る。表示されたメタデータを見て検証した後、顧客９０は、例えば、「確認」または「有効化」または「登録」ユーザーインタフェース要素を選択することにより、ＳＰコンソール６８を介して、ゲートウェイ８４のゲートウェイ制御７０への登録を認可し得る。顧客９０がＳＰコンソール６８によってゲートウェイ８４の登録を認可する場合、ＳＰコンソール６８は、顧客９０から取得された有効化キーをゲートウェイ制御７０に渡し得る。例えば、ゲートウェイ８４に対する顧客提供名、顧客アカウントＩＤなどの顧客情報も、ゲートウェイ制御７０に渡され得る。顧客提供有効化キーが、ゲートウェイ８４によりゲートウェイ制御７０に以前に提供された有効化キーに対して照合される。顧客情報（例えば、ゲートウェイ８４の名前）が、例えば、ゲートウェイ８４によって以前に提供されたメタデータとともに、ゲートウェイ制御７０によって格納される。
【０１１６】
少なくともいくつかの実施形態では、ＳＰコンソール６８とＳＰゲートウェイ制御７０との間、およびゲートウェイ８４とＳＰゲートウェイ制御７０との間で交換される全てのデータが、暗号化され得る。少なくともいくつかの実施形態では、顧客の認証情報、アクセスキーまたは秘密鍵などの極秘データは、有効化プロセス内で渡されない。
【０１１７】
図１６Ａを再度参照すると、少なくともいくつかの実施形態では、ＳＰゲートウェイ制御７０が、ゲートウェイ８４の登録および有効化に関する全ての情報の維持に責任を負う。ゲートウェイ８４は、その間、証明書署名要求（ＣＳＲ）を生成するための情報を求めて、ＳＰゲートウェイ制御７０を継続的にポーリングする。図１６Ｂに示すように、ＳＰゲートウェイ制御７０が、ＳＰコンソール６８を介して、顧客９０から認可を受信し、顧客提供の有効化キーを、ゲートウェイ８４によって提供された有効化キーと照合すると、図１６Ｂに示すように、ＳＰゲートウェイ制御７０は、顧客９０から受信された顧客情報の少なくとも一部を含むが、それに限らない、メタデータを提供することにより、ゲートウェイ８４のＧＥＴ要求に応答し得る。ゲートウェイ８４は、次いで、ＣＳＲを生成し、ＳＰゲートウェイ制御７０に送信する。ＣＳＲに応答して、ＳＰゲートウェイ制御７０は証明書を生成し、ゲートウェイ８４の以前に提供された公開鍵でその証明書に署名する。少なくともいくつかの実施形態では、証明書は、顧客および／またはゲートウェイ情報、例えば、顧客アカウントＩＤおよび顧客提供のゲートウェイ８４名を含み得る。ＳＰゲートウェイ制御７０は、次いで、ゲートウェイ８４によって以前に提供された公開鍵で暗号化された、自己署名証明書をゲートウェイ８４に送信することにより、応答する。証明書は、次いで、ゲートウェイ８４からサービスプロバイダ６０への将来の通信で、認証のために使用され得る。
【０１１８】
少なくともいくつかの実施形態では、顧客が、同じ有効化キーを使用して複数のゲートウェイ８４を有効化するのを防ぐ支援をするために、システム／ハードウェア固有の情報も、ゲートウェイ８４によってＳＰゲートウェイ制御７０に公開される有効化キーとともに、含まれ得る。
【０１１９】
図１７Ａおよび図１７Ｂは、少なくともいくつかの実施形態に従って、ストレージゲートウェイの観点から見た、有効化プロセスの流れ図である。図１７Ａの５００に示すように、ゲートウェイがインストールされ、かつ／または電源をオンにされた後、ゲートウェイは、永続記憶装置をチェックして、それが既に有効化されているかどうかを判断する。例えば、ゲートウェイは、アップグレード、保守、または何らかの他の理由のために電源が切られていた可能性がある。ゲートウェイが有効化されている場合、有効化プロセスは、図１７Ｂの要素５３０に進み、そこで、ゲートウェイは、ＳＰゲートウェイ制御から設定情報を取得し得る。
【０１２０】
図１７Ａの５００で、ゲートウェイが以前に有効化されていない場合、有効化プロセスは、図１７Ａの要素５０２に進み、そこで、ゲートウェイは、証明書署名要求（ＣＳＲ）を生成するための任意の永続的な顧客情報を有するかどうかをチェックする。ゲートウェイが永続的な顧客情報を有する場合、プロセスは、図１７Ｂの要素５２０に進む。ゲートウェイが永続的な顧客情報をもたない場合、プロセスは、図１７Ａの要素５０４に進む。５０４で、ゲートウェイは、公開鍵（例えば、ＲＳＡ鍵ペア）を生成する。ゲートウェイは、ゲートウェイがその上にインストールされている装置のハードウェアおよび／またはソフトウェアに関するメタデータも収集し得る。例えば、メタデータは、ＩＰアドレス、ＭＡＣアドレス、または装置の他のハードウェアおよびソフトウェア特性を含み得る。ゲートウェイは、次いで、５０６に示すように、公開鍵およびメタデータをＳＰゲートウェイ制御に公開する。５０８で、ゲートウェイは、有効化キーをＳＰゲートウェイ制御から受信する。５１０で、ゲートウェイは、サービス顧客のネットワーク上の固定ポート（ＩＰアドレス：ポート）上で、有効化キーを提供する。
【０１２１】
図１７Ａの５１２〜５１６に示すように、ゲートウェイは、次いで、ＣＳＲを生成するために必要とされる顧客情報を求めて、ＳＰゲートウェイ制御をポーリングし得る。顧客情報は、顧客のアカウントＩＤおよびゲートウェイに対する顧客提供名を含み得るが、それに限らない。５１２で、ゲートウェイは、例えば、１分間またはいくらかの他の期間、一時停止し得、次いで、ＳＰゲートウェイ制御から情報を受信しているかどうかをチェックし得る。５１４で、情報が受信されていない場合、５１６に示すように、ゲートウェイは、有効化キーが失効しているかどうかをチェックする。少なくともいくつかの実施形態では、有効化キーは、ある期間または存続期間（例えば、３０分間）、有効であり、その後、有効化キーは失効する。５１６で、有効化キーが失効していない場合、有効化プロセスは、ＳＰゲートウェイ制御のポーリングを継続するために、図１７Ａの要素５１２に戻る。５１６で、有効化キーが失効している場合、有効化プロセスは、新しい有効化キーをＳＰ制御プレーンから取得するために、図１７Ａの要素５０４に戻る。
【０１２２】
図１７Ａの５１４で、顧客情報がＳＰゲートウェイ制御から受信されている場合、有効化プロセスは、図１７Ａの要素５１８に進み、そこで、ゲートウェイは、顧客情報を永続的メモリに格納する。少なくともいくつかの実施形態では、受信された顧客情報は暗号化され得、それ故、ゲートウェイは、情報を格納する前に情報を復号し得る。プロセスは、次いで、図１７Ｂの要素５２０に進む。
【０１２３】
図１７Ｂを参照すると、５２０において、ゲートウェイは、それが既に証明書を有するかどうかをチェックし得る。５２０で、ゲートウェイが既に証明書を有している場合、プロセスは図１７Ｂの要素５３０に進み得、そこで、ゲートウェイは設定情報をＳＰゲートウェイ制御から取得し得る。５２０で、ゲートウェイが証明書を有していない場合、プロセスは要素５２２に進む。５２２で、ゲートウェイは、ＣＳＲを生成し、そのＣＳＲをＳＰ制御プレーンに送信する。５２４で、ゲートウェイは、ＣＳＲの受信に応答して、ＳＰ制御プレーンからセキュリティ証明書を受信し；その証明書は、ゲートウェイに対するセキュリティ認証情報として機能し得る。５２６で、ゲートウェイは、有効化キーの提供（図１７Ａのステップ５１０を参照）を無効にし得る。５２８で、ゲートウェイは、有効化プロセスで取得している情報（証明書、顧客指定ゲートウェイ名など）を持続するために、その現在の状態を保存し得る。
【０１２４】
この時点で、有効化プロセスが完了する。５３０で、ゲートウェイは、設定情報をＳＰゲートウェイ制御から取得し得る。少なくともいくつかの実施形態では、顧客が、ゲートウェイがうまく有効化されたことを通知されると、顧客はＳＰコンソールを介して、インストールおよび有効化されたゲートウェイを設定し得る。ＳＰコンソールは、顧客がそれにログオンできる、ユーザーインタフェース、例えば、ウェブインタフェースを、顧客のアカウントに提供し、（顧客指定の名前によって識別され得る）ゲートウェイを選択して、そのゲートウェイに対する設定を指定し得る。少なくともいくつかの実施形態では、ＳＰコンソールは、この設定をＳＰゲートウェイ制御に伝え、それは、次いで、ゲートウェイ自身によって開始された接続（例えば、およびＳＳＬ／ＴＣＰ接続）を介して、指定されたゲートウェイを設定する。
【０１２５】
〔有効化キーのセキュリティ〕
図１７Ａの５１０に示されるように、有効化キーがサービス顧客のネットワーク上の公開ＩＰアドレスで利用可能にされ、暗号化されていない状態で、クエリ文字列内で顧客からＳＰコンソールに渡され得る。有効化キーは限られた存続期間をもち、ＩＰアドレスは顧客にのみ知られているが、有効化キーがＩＰ：ポートで公開される短い期間がまだある。有効化キーは、ゲートウェイによってＳＰゲートウェイ制御にも公開されるメタデータなしでは、単独で役に立たないが、ゲートウェイは、この短期間の間、ある程度脆弱であり得る。少なくともいくつかの実施形態では、顧客は、悪意のあるユーザーまたはプロセスが有効化キーを取得して、誰か他の人のゲートウェイを有効化するのを防ぐ支援をするために、セキュリティグループまたは他のセキュリティ手段を利用し得る。さらに、顧客はゲートウェイを有効化するために、ＳＰコンソールプロセスにログインする必要があるので、ゲートウェイは、それを有効化しようと試みる顧客アカウントと照合できる。
【０１２６】
〔ゲートウェイ開始接続を使用したリモートゲートウェイ管理〕
ストレージゲートウェイの実施形態は、例えば、オンプレミス記憶装置として、およびサービス顧客のネットワークと、サービスプロバイダによって提供されたストレージサービスとの間のインタフェースとして、機能し得る。少なくともいくつかの実施形態では、インストールされたストレージゲートウェイは、サービスプロバイダで実装されたゲートウェイ制御技術を通して、有効化、追跡、設定、および管理され得る。図１８は、少なくともいくつかの実施形態において採用され得るゲートウェイ制御アーキテクチャ例を示すハイレベルブロック図である。少なくともいくつかの実施形態では、図１８に示すように、ゲートウェイ制御７０は、２つ以上のゲートウェイ制御サーバー７４（例えば、ゲートウェイ制御サーバー７４Ａ、７４Ｂ、７４Ｃ、．．．）のグループを含み得る。複数のゲートウェイ制御サーバー７４は、負荷分散および高可用性を提供し得る。動作中、所与の時に、サービス顧客のネットワーク８０上の特定のインストールおよび有効化されたストレージゲートウェイ８４が、ゲートウェイ制御サーバー７４の特定の１つに接続される。しかし、ストレージゲートウェイ８４は、いつか他の時に、異なるゲートウェイ制御サーバー７４に接続され得ることに留意されたい。
【０１２７】
ストレージゲートウェイ８４に現在接続されているゲートウェイ制御サーバー７４は、要求またはコマンドを中間ネットワーク５０を介してストレージゲートウェイ８４に送信することにより、ストレージゲートウェイ８４を管理し得る。ストレージゲートウェイ８４を管理するためにゲートウェイ制御サーバー７４から開始される要求は、設定変更要求および動作要求を含み得るが、それらに限らない。しかし、ストレージゲートウェイ８４は、クライアントネットワーク８０ファイアウォールの後ろに配備され得るので、ゲートウェイ制御サーバー７４は、例外規則がゲートウェイ８４に対して作成されない限り、ファイアウォールの外側からゲートウェイ８４に到達できないことがあり得る。さらに、少なくともいくつかの実施形態では、ストレージゲートウェイ８４に対するセキュリティモデルは、サービスプロバイダプロセスを含むがそれに限らない、外部プロセスが、ストレージゲートウェイ８４への接続を開始するのを許可されないことを指示し得る。
【０１２８】
少なくともいくつかの実施形態では、サービスプロバイダがゲートウェイ８４への接続を開始するのを許可しないセキュリティモデルを実施している間に、ゲートウェイ制御サーバー７４が、要求またはコマンドをストレージゲートウェイ８４に送信できるようにするために、ゲートウェイ開始接続を使用したリモートゲートウェイ管理のための方法および装置が提供される。リモートゲートウェイ管理方法では、ゲートウェイは、接続要求を送信することにより、サービスプロバイダへの接続を開始する。少なくともいくつかの実施形態では、負荷分散装置７２を介して、特定のゲートウェイ制御サーバー７４への接続が確立される。しかし、ゲートウェイ８４は、要求メッセージを、ゲートウェイ開始接続を介して、サービスプロバイダに送信しない。代わりに、サービスプロバイダ（例えば、ゲートウェイ制御サーバー７４）は、ゲートウェイ８４が応答を待つ間、ゲートウェイ８４に送信される接続保留要求を保持する。ゲートウェイ８４に対する要求を、例えば、ネットワーク管理者プロセス９０または、ゲートウェイ８４がその上にインストールされているクライアントネットワーク８０上の何らかの他のプロセスから、受信すると、サービスプロバイダ（例えば、ゲートウェイ制御サーバー７４）は、要求を、サービスプロバイダ（例えば、ゲートウェイ制御サーバー７４）が保持し続けているゲートウェイ開始接続を介して、ゲートウェイ８４に送信する。ゲートウェイ８４は、要求に対する応答も、ゲートウェイ開始接続を介して、サービスプロバイダ８０に送信し得る。
【０１２９】
少なくともいくつかの実施形態では、ゲートウェイ８４からの接続がそれに対して確立されるゲートウェイ制御サーバー７４（例えば、ゲートウェイ制御サーバー７４Ａ）は、接続を登録サービス７６に登録し得る。ゲートウェイ制御サーバー７４が、それに対する接続を保持していなゲートウェイ７４に対する要求を受信すると、ゲートウェイ制御サーバー７４は、どのゲートウェイ制御サーバー７４が接続を保持しているかを見つけるために、登録サービス７６に問合せを行い得、その要求を、ゲートウェイ８４への接続を保持するゲートウェイ制御サーバー７４に転送し得る。いくつかの実施形態では、代替として、それに対する接続を保持していないゲートウェイ７４に対する要求を受信するゲートウェイ制御サーバー７４は、その要求を、２つ以上の他のゲートウェイ制御サーバー８４に単にブロードキャストし得る。
【０１３０】
少なくともいくつかの実施形態では、サービスプロバイダ８０は、ゲートウェイ開始接続を監視するために、ｐｉｎｇプロセスを採用し得る。ｐｉｎｇプロセスでは、ゲートウェイ７４への接続を保持するゲートウェイ制御サーバー８４は、定期的または非定期的にｐｉｎｇメッセージをゲートウェイ８４に送信し得る。ゲートウェイ８４は、ｐｉｎｇメッセージに応答する。ゲートウェイ８４が、ある指定されたタイムアウト期間の間ｐｉｎｇメッセージに応答していないことを検出すると、ゲートウェイ制御サーバー７４は、接続を中断し得、そして、登録サービス７６でその接続の登録を抹消し得る。
【０１３１】
少なくともいくつかの実施形態では、ｐｉｎｇメッセージは、定期的な間隔でゲートウェイ（単数または複数）７４に送信され得る。少なくともいくつかの実施形態は、接続が信頼できていないゲートウェイ８４に対しては短い間隔で、また、接続が一般に信頼できているゲートウェイに対してはもっと長い間隔でｐｉｎｇメッセージが送信されるように、特定のゲートウェイ８４の接続の信頼性に従って、ｐｉｎｇ間隔を調整し得る。ｐｉｎｇ間隔は、接続が信頼できるままの時は、所与のゲートウェイ８４に対して時間とともに増加し得、接続が信頼できていない所与のゲートウェイ８４に対しては減少し得る。
【０１３２】
少なくともいくつかの実施形態では、ゲートウェイ８４は、そのゲートウェイ開始接続が終了しているか、または中断されているかを検出し得る。接続が終了していることを検出すると、ゲートウェイ８４は、接続を再確立するために、別の接続要求をサービスプロバイダ８０に送信し得る。接続は、以前に接続を保持していたものとは異なるゲートウェイ制御サーバー７４に再接続され得ることに留意されたい。少なくともいくつかの実施形態では、ゲートウェイ８４は、ｐｉｎｇメッセージを監視して、ｐｉｎｇメッセージが指定されたタイムアウト期間の間、その接続を通して受信されていないと判断することにより、そのゲートウェイ開始接続が中断されていると判断し得る。
【０１３３】
このようにして、リモートゲートウェイ管理方法では、ゲートウェイ８４は、サービスプロバイダへの接続を確立して、サービスプロバイダからの要求（単数または複数）を予期および待機する。サービスプロバイダは、ゲートウェイ８４に対する接続保留要求を保持する。ゲートウェイ８４に対する要求を受信すると、サービスプロバイダは、その要求を、ゲートウェイ開始接続を通してそれぞれのゲートウェイに転送する。サービスプロバイダおよびゲートウェイの両方が、接続を監視および管理して、接続が何らかの理由で中断した場合に、その中断が検出されて、ゲートウェイ８４が接続を再確立できるようにする。
【０１３４】
図１９は、少なくともいくつかの実施形態に従って、ゲートウェイ開始接続を使用したリモートゲートウェイ管理のための方法の流れ図である。６００に示すように、ゲートウェイは、接続要求を介して、ゲートウェイ制御サーバーへの接続を確立する。例えば、ゲートウェイは、図１８に示すように、接続要求により、ゲートウェイ制御サーバーとのアウトバウンドＳＳＬ／ＴＣＰ接続を、負荷分散装置を通して確立し得る。図１９の６０２に示すように、ゲートウェイへの接続が確立されると、ゲートウェイ制御サーバーは、接続を持ち続け、その接続を維持する。図１９の６０４に示すように、ゲートウェイ制御サーバーは、ゲートウェイに対する要求を受信し得る。例えば、ゲートウェイ制御サーバー７４は、図１８に示すように、ゲートウェイ８４に対する設定要求または動作要求を、それぞれのネットワーク管理者プロセス９０からコンソールプロセス６８を介して受信する。ゲートウェイ制御サーバーがゲートウェイに対する要求を受信した後、ゲートウェイ制御サーバーは、図１９の６０６に示すように、その要求をゲートウェイ開始接続を介して、ゲートウェイに転送する。
【０１３５】
再度図１８を参照すると、サービス顧客は、示されたストレージゲートウェイ８４に対する設定変更要求または動作要求を開始するために、サービスプロバイダコンソール６０にアクセスし得る。例えば、ネットワーク管理者は、ネットワーク管理者プロセス９０を通して、要求を、コンソールプロセス６８を介して送信し得る。コンソールプロセス６８は、次いで、要求を、負荷分散装置７２の後ろのゲートウェイ制御サーバー７４に送信し得る。しかし、コンソールプロセス６８がそれに対して要求を送信するゲートウェイ制御サーバー７２は、それぞれのゲートウェイ８４への接続を保持するゲートウェイ制御サーバー７２ではない可能性がある。例えば、ゲートウェイ制御サーバー７２Ｂが、ゲートウェイ８４への接続を保持し得るが、一方、ゲートウェイ８４に対する要求がゲートウェイ制御サーバー７２Ａに送信され得る。それ故、コンソールプロセス６８から要求を受信するゲートウェイ制御サーバー７２（例えば、ゲートウェイ制御サーバー７２Ａ）は、要求を適切なゲートウェイ８４に配信するために、ゲートウェイ８４への接続を保持するゲートウェイ制御サーバー（例えば、ゲートウェイ制御サーバー７２Ｂ）に要求を転送する必要があり得る。このように、少なくともいくつかの実施形態は、ゲートウェイ制御サーバー７２（例えば、サーバー７２Ａ）が、コンソールプロセス６８から受信された、要求によって示された特定のゲートウェイ８４への接続を現在保持するゲートウェイ制御サーバー７２（例えば、サーバー７２Ｂ）へ、特定のゲートウェイ８４に対する要求を送達できるようにする方法または複数の方法を、提供し得る。
【０１３６】
いくつかの実施形態では、これを達成するために、サーバー７２がそれに対する接続を保持していないゲートウェイ８４に対する要求を受信するゲートウェイ制御サーバー７２（例えば、サーバー７２Ａ）は、そのピアゲートウェイ制御サーバー７２の全てに対して、要求をブロードキャストし得る。図２０は、いくつかの実施形態に従って、ゲートウェイ制御サーバーがゲートウェイ要求をそのピアサーバーにブロードキャストするための方法の流れ図である。６２０に示すように、各ゲートウェイ制御サーバー７２がインスタンス生成されると、サーバー７２は登録サービス７６に登録し得る。ゲートウェイ制御サーバー７２が終了すると、サーバー７２は、登録サービス７６から登録を抹消される。登録サービス７６は、例えば、データベースサービスまたは分散ストレージサービスによって後援され得る。６２２に示すように、ゲートウェイ制御サーバー７２（例えば、サーバー７２Ａ）は、サーバー７２がそれに対する接続を保持していないゲートウェイ８４に対する要求を受信し得る。要求をそのピアゲートウェイ制御サーバー７２にブロードキャストするために、ゲートウェイ制御サーバー７２（例えば、サーバー７２Ａ）は、６２４に示すように、そのピアゲートウェイ制御サーバー７２（例えば、サーバー７２Ｂおよび７２Ｃ）を発見するために、登録サービス７６をポーリングし得る。ゲートウェイ制御サーバー７２（例えば、サーバー７２Ａ）は、次いで、６２６で示すように、登録サービス７６を介して発見されたサーバー７２の全てに対するゲートウェイ要求を転送し得る。要求によって示されたゲートウェイ８４への接続を現在保持するゲートウェイ制御サーバー７２（例えば、サーバー７２Ｂ）は、次いで、要求をそれぞれのゲートウェイ８４に送信し得る。
【０１３７】
図２１は、少なくともいくつかの実施形態に従って、適切なゲートウェイ制御サーバーに対するゲートウェイ要求を取得するための代替方法の流れ図である。６４０に示すように、ゲートウェイ制御サーバー７２（例えば、サーバー７２Ｂ）がゲートウェイ８４から接続要求を受信すると、サーバー７２は、ゲートウェイ８４とのペア形成を登録サービス７６内に登録する。６４２に示すように、ゲートウェイ制御サーバー７２（例えば、サーバー７２Ａ）は、サーバー７２がそれに対する接続を保持していないゲートウェイ８４に対する要求を受信し得る。６４４に示すように、サーバー７２がそれに対する接続を保持していないゲートウェイ８４に対する要求を受信するゲートウェイ制御サーバー７２（例えば、サーバー７２Ａ）は、次いで、ゲートウェイ８４に対する接続を現在保持するゲートウェイ制御サーバー７２（例えば、サーバー７２Ｂ）を見つけるために、登録サービス７２に問合せを行い得、その後、６４６に示すように、その要求を、登録サービス７６によって示されるゲートウェイ制御サーバー７２（例えば、サーバー７２Ｂ）に転送し得る。要求によって示されるゲートウェイ８４への接続を現在保持するゲートウェイ制御サーバー７２（例えば、サーバー７２Ｂ）は、次いで、要求を、ゲートウェイ開始接続を介して、それぞれ対応するゲートウェイ８４に送信し得る。
【０１３８】
少なくともいくつかの実施形態では、要求がゲートウェイ８４に配信され、それによって処理されると、ステータスが、ゲートウェイ８４から、そのゲートウェイ８４への接続を現在保持するゲートウェイ制御サーバー７２（例えば、サーバー７２Ｂ）に返され、それは、続いて、それが以前にそれから転送された要求を受信したゲートウェイ制御サーバー７２（例えば、サーバー７２Ａ）にステータスが返され、それは次いで、そのステータスをコンソールプロセス６８に返す。コンソールプロセス６８は、次いで、要求の結果の指示を、その要求を開始した顧客プロセス（例えば、ネットワーク管理者プロセス９０）に提供し得る。要求が、何らかの理由で、対象のゲートウェイ８４に到達できない場合、例えば、要求によって示されたゲートウェイ８４が利用できないか、または見つけることができない場合、コンソールプロセス６８は、要求の失敗の指示を、その要求を開始した顧客プロセス（例えば、ネットワーク管理者プロセス９０）に提供し得る。顧客プロセスは、必要であるか、または所望であれば、要求を再試行し得る。
【０１３９】
図２２は、少なくともいくつかの実施形態に従って、ゲートウェイ開始接続を確立、監視、および維持するための方法の流れ図である。６６０に示すように、ゲートウェイはクライアントネットワーク上でインスタンス生成され得る。６６２に示すように、インスタンス生成後、ゲートウェイは、サービスプロバイダへの安全な接続（例えば、ＳＳＬ（セキュアソケットレイヤー）／ＴＣＰ接続）を確立するために、接続要求をサービスプロバイダに送信する。少なくともいくつかの実施形態では、サービスプロバイダにおけるゲートウェイ制御プロセスは、６６４に示すように、接続を保持し得、その接続を登録サービスに登録し得る。サービスプロバイダによって受信されたゲートウェイに対する要求は、次いで、ゲートウェイ開始接続を通して、ゲートウェイに転送され得る。
【０１４０】
６６６に示すように、ゲートウェイ制御プロセスは、接続を中断し得る。例えば、少なくともいくつかの実施形態は、ゲートウェイ制御プロセスは、定期的または非定期的に、接続を通してゲートウェイをｐｉｎｇし得、ゲートウェイがそのｐｉｎｇに応答しないことを検出すると、接続を中断し得る。登録サービスに登録されている場合、ゲートウェイ制御プロセスは、その接続の登録を削除し得る。
【０１４１】
６６８に示すように、ゲートウェイは、接続が中断されていることを検出し得る。例えば、少なくともいくつかの実施形態は、ゲートウェイ制御プロセスは、定期的または非定期的に、接続を通してゲートウェイをｐｉｎｇし得る。ゲートウェイは、サービスプロバイダからのｐｉｎｇが接続を通して受信されていないと判断することにより、接続が中断されていることを検出し得る。
【０１４２】
サービスプロバイダ側またはクライアントネットワーク／ゲートウェイ側のいずれかから、中断された接続を検出するための他の方法が、いくつかの実施形態で採用され得ることに留意されたい。
【０１４３】
〔ゲートウェイプロキシ〕
前述の図１８は、複数のゲートウェイ制御サーバー７４を含むゲートウェイ制御プレーンとして実装されたゲートウェイ制御７０を含むサービスプロバイダネットワークを示す。少なくともいくつかの実施形態では、サービスプロバイダネットワークは、複数のゲートウェイプロキシノードを含み、ストレージゲートウェイと通信するためにゲートウェイ制御プレーンによって使用され得る、ゲートウェイプロキシプレーンを含み得る。ゲートウェイプロキシは、ゲートウェイ制御サーバー７４に対するゲートウェイ開始接続を保持および管理するために使用され得る。ゲートウェイ８４は、ゲートウェイプロキシへの接続を開始し；ゲートウェイプロキシは、ゲートウェイ８４への通信チャネルを維持し得、また、同じゲートウェイ８４の複数のコピーなどの誤用を防ぐのに役立つだけでなく、サービスプロバイダ（例えば、ゲートウェイ制御サーバー７４）とゲートウェイとの間のメッセージの安全な交換を確実にするのに役立ち得る。
【０１４４】
〔ゲートウェイとプロキシ間のやりとり〕
図２３Ａは、少なくともいくつかの実施形態に従って、ゲートウェイプロキシプレーンを含むサービスプロバイダネットワークのためのアーキテクチャを大まかに示すブロック図である。ゲートウェイプロキシプレーンは、２つ以上のプロキシノード７００、プロキシストア７０２、外部ネットワークに公開されるクライアント側インタフェースプロセス（ＩＣＰ）７２０、および外部ネットワークに公開されない、プロキシノード７００とゲートウェイ制御サーバー（単数または複数）７４との間のサーバー側インタフェースプロトコル（ＳＩＰ）７１０を含み得る。いくつかの実施形態では、ゲートウェイプロキシ７００は、ゲートウェイ制御サーバー（単数または複数）７４として、同じ物理装置上で実装され得る。他の実施形態では、ゲートウェイプロキシ７００は、ゲートウェイ制御サーバー（単数または複数）７４とは別の装置上で実装され得る。
【０１４５】
インストールされて有効化されたストレージゲートウェイ８４は、ゲートウェイプロキシノード７００への安全な接続要求（例えば、ＳＳＬ／ＴＣＰ接続要求）をＣＩＰ  ７００を介して開始する。接続要求を受信するプロキシノード７００（この例では、プロキシノード７００Ｂ）は、この接続を開始したゲートウェイ８４のゲートウェイ識別子および顧客アカウント識別子を見つけるために、接続要求に関連付けられたゲートウェイの証明書を検査する。顧客およびゲートウェイ８４は、証明書からのゲートウェイ識別子および顧客アカウント識別子を使用して、認証され得る。顧客およびゲートウェイ８４の認証後、プロキシノード７００は、次いで、それが接続されたゲートウェイ８４と通信する、正式な（ａｕｔｈｏｒｉｔａｔｉｖｅ）プロキシ７００であることを、プロキシストア７０２に対して公開する。プロキシ（例えば、プロキシ７００Ａおよび７００Ｂ）は、特定のゲートウェイへの接続を現在保持する他のプロキシを発見するために、プロキシストア７０２問合せを行い得る。
【０１４６】
少なくともいくつかの実施形態では、プロキシストア７０２は、データベースとして実現され得る。データベースは、分散型または集中型データベースのいずれかであり得る。少なくともいくつかの実施形態では、プロキシストア７０２は、次の関連付けを格納し得る：
（ゲートウェイＩＤ，アカウントＩＤ，プロキシエンドポイント）
【０１４７】
メッセージがゲートウェイ８４に送信される場合、プロキシ７００は、どのプロキシ７０２がゲートウェイ８４への接続を有するかを見つけるために、プロキシストア７０２に問合せを行い得る。少なくともいくつかの実施形態では、プロキシストア７０２内にゲートウェイ８４につき１つのエントリのみが存在する。
【０１４８】
〔ゲートウェイ制御サーバーおよびプロキシのやりとり〕
図２３Ｂは、少なくともいくつかの実施形態に従い、ゲートウェイプロキシプレーンを通じて、ゲートウェイにメッセージ送信するゲートウェイ制御サーバーを示す。図２３Ｂに示すように、少なくともいくつかの実施形態では、ゲートウェイ制御サーバー７４は、特定のゲートウェイ８４に送信される必要のあるメッセージを有し得る。ゲートウェイ制御サーバー７４は、ＳＩＰ  ７１０を介して、メッセージをゲートウェイプロキシノード７００に送信する。メッセージを受信するプロキシノード７００がゲートウェイ８４への接続を保持する場合、プロキシノード７００は、その接続を介してメッセージをゲートウェイ８４に転送する。しかし、メッセージを受信するプロキシノード７００がゲートウェイ８４への接続を保持していな場合、プロキシノード７００は、どのプロキシノード７００がゲートウェイ８４への接続を保持するかを判断するために、プロキシストア７０２に問合せを行い、メッセージを、その正式なプロキシノード７００（この例では、プロキシ７００Ｂ）に転送する。正式なプロキシノード７００は、次いで、その接続を介して、そのメッセージをゲートウェイ８４に転送する。
【０１４９】
図２３Ｃは、少なくともいくつかの実施形態に従い、ゲートウェイプロキシプレーンを通じて、ゲートウェイ制御サーバー要求に応答するゲートウェイを示す。少なくともいくつかの実施形態では、ゲートウェイ８４からゲートウェイ制御サーバー７４への応答は、ゲートウェイ８４からの応答を受信するＣＩＰ  ７２０から始まる、図２３Ｂに示すように、ゲートウェイ制御サーバー７４からゲートウェイ８４への要求が辿った逆の経路を辿り得る。ＣＩＰ  ７２０は、それが要求をそこから受信したプロキシノード（プロキシ７００Ｂ）に応答を送信する。プロキシ７００Ｂは、応答がどのゲートウェイ制御サーバー７４に対するかを知らないことに留意されたい。プロキシ７００Ｂは、それが要求をそこから受信したプロキシノード（プロキシ７００Ａ）に応答を送信することにより、要求を完了する。プロキシ７００Ａは、次いで、応答を、要求を開始したゲートウェイ制御サーバー７４に送信する。
【０１５０】
〔接続の監視および管理〕
少なくともいくつかの実施形態では、プロキシによってゲートウェイ開始接続の管理において使用される、ｐｉｎｇプロセスが実装され得る。少なくともいくつかの実施形態では、ゲートウェイ８４は、前述のように、ゲートウェイプロキシ７００への安全な接続、例えば、ＳＳＬ／ＴＣＰ接続を、ＣＩＰ  ７２０を介して開始する。ゲートウェイプロキシ７００は、定期的または非定期的にｐｉｎｇメッセージをゲートウェイ８４に送信し得る。各ｐｉｎｇメッセージは、タイムアウトを含み得；ゲートウェイ８４が時間間隔内にｐｉｎｇを受信しない場合、それは、現在の接続を閉じ、ＣＩＰ  ７２０を介して接続を再度開始する。少なくともいくつかの実施形態では、いずれの時点においても、プロキシストア７０２内には１つのみのプロキシゲートウェイマッピングが存在する。ゲートウェイプロキシ７００がｐｉｎｇを送信し、ゲートウェイ８４から応答を得ない場合、それは、ゲートウェイ８４へのその接続を閉じる。
【０１５１】
少なくともいくつかの実施形態では、全てのｐｉｎｇ上で、ゲートウェイプロキシ７００は、プロキシストア７０２に問合せを行い、別のプロキシ７００がゲートウェイ８４への接続を公開しているかどうかを判断することにより、それが所与のゲートウェイ８４に対する正式なプロキシであるかどうかをチェックする。それが正式なプロキシではない場合、プロキシ７００はゲートウェイ８４への接続を閉じる。これは、プロキシノード７００に対する複数の接続が同じゲートウェイ８４によって開始されている場合、例えば、ゲートウェイ８４の証明書が別のゲートウェイにコピーされて、両方のゲートウェイが接続を開始しようとする場合に対処し得る。
【０１５２】
図２３Ｄは、少なくともいくつかの実施形態に従った、ゲートウェイプロキシプレーンに対するｐｉｎｇメッセージ交換を示す。少なくともいくつかの実施形態では、ゲートウェイプロキシに関して、ｐｉｎｇはエンドツーエンドｐｉｎｇである。ｐｉｎｇを行う理由は、ＴＣＰ「キープアライブ」機能が２時間の最小間隔を有するが、他方、実施形態は接続のタイムアウトまたは終了をもっと短い時間間隔で検出する必要があり得ることである。
【０１５３】
少なくともいくつかの実施形態では、ｐｉｎｇは、図２３Ｄに示される経路を辿る。ゲートウェイプロキシノード（この例では、プロキシ７００Ｂ）は、ｐｉｎｇメッセージをＳＩＰ  ７１０を介して送信する。メッセージは、ゲートウェイプロキシノード７００のうちの１つ、この例ではプロキシ７００Ａ、に行きあたる。プロキシ７００Ａは、プロキシストア７０２に問合せを行うことにより、ゲートウェイ８４に対する正式なプロキシ７００（この例では、プロキシ７００Ｂ）を見つけ、ｐｉｎメッセージをプロキシ７００Ｂに転送する。プロキシ７００Ｂは、メッセージをゲートウェイ８４に転送し、ゲートウェイ８４からの応答は同じ経路を辿る。少なくともいくつかの実施形態では、プロキシ７００Ｂがｐｉｎｇに対する応答をゲートウェイ８４から取得すると、それは、そのゲートウェイ８４に対するそのｐｉｎｇ間隔を増やす。ゲートウェイ８４接続が中断すると、ｐｉｎｇ間隔が最小値にリセットされ得る。このようにして、貧弱なゲートウェイとプロキシ間の接続はより頻繁にｐｉｎｇ送信される傾向がある。
【０１５４】
プロキシ７００が最初にｐｉｎｇメッセージをＳＩＰ  ７１０に送信することによりｐｉｎｇメッセージを開始する、前述したエンドツーエンドｐｉｎｇ方法は、ゲートウェイプロキシノード７００が制御プレーンから到達可能であることを保証する役に立ち得る。ｐｉｎｇが失敗すると、プロキシ７００は、（例えば、ネットワーク分割のために）それが制御プレーンから到達可能ではないと仮定して、ゲートウェイ８４への接続を閉じ得る。
【０１５５】
〔ロングポーリング接続を使用したリモートゲートウェイ管理〕
いくつかの実施形態では、ロングポーリング技術がゲートウェイ開始接続に対して使用され得る。再度図１８を参照すると、ロングポーリングは、サーバー（例えば、ゲートウェイ制御サーバー７４）からクライアント（例えば、ストレージゲートウェイ８４）への情報のプッシュ型配信をエミュレートするポーリング技術である。ロングポーリング技術では、クライアント（例えば、ストレージゲートウェイ８４）がサーバー（例えば、ゲートウェイ制御サーバー７４）へのロングポーリング接続を開始して、標準的なクライアント／サーバーポーリングにおけるように、サーバーからの情報を要求する。しかし、サーバーが、クライアントに対して利用可能ないかなる情報も有していない場合、空の応答を送信する代わりに、サーバーはクライアントの要求を保持して、情報がそのクライアントに対して利用可能になるのを待機する。情報が利用可能になると、サーバー（例えば、ゲートウェイ制御サーバー７４）は、クライアントのロングポーリング要求に応答し得、その応答は、クライアント（例えば、ストレージゲートウェイ８４）に送信される情報を含む。
【０１５６】
ロングポーリングを使用するゲートウェイ開始接続方法では、ゲートウェイ８４は、ロングポーリング要求を介して、ゲートウェイ制御サーバー７４への接続を確立する。例えば、ゲートウェイ８４は、図１８に示すように、ロングポーリング要求により、負荷分散装置７２を通してゲートウェイ制御サーバー７４とのアウトバウンドＳＳＬ／ＴＣＰ接続を確立し得る。ゲートウェイ制御サーバー７４は、要求を持ち続け、その接続を維持する。ゲートウェイ制御サーバー７４は、ゲートウェイ８４に対する要求を受信する。例えば、ゲートウェイ制御サーバー７４は、図１８に示すように、ゲートウェイ８４に対する設定要求または動作要求を、それぞれのネットワーク管理者プロセス９０からコンソールプロセス６８を介して受信し得る。ゲートウェイ制御サーバー７４がゲートウェイ８４に対する要求を受信した後、ゲートウェイ制御サーバー７４は、ゲートウェイのロングポーリング要求に対する応答を送信し；その応答はゲートウェイ８４に対する要求（例えば、設定要求または動作要求）を含む。いくつかの実施形態では、代替として、ゲートウェイ制御サーバー７４は、受信した要求を、ロングポーリング要求に応答することなく、ゲートウェイ制御サーバーが維持しているゲートウェイに対して確立された接続上のゲートウェイ８４に送信し得る。
【０１５７】
〔ストレージゲートウェイ上のブロックストレージ入出力動作〕
ストレージゲートウェイの実施形態は、前述のように、キャッシュゲートウェイまたはシャドーイングゲートウェイとして実現され得る。実施形態例では、キャッシュゲートウェイは、最も頻繁にアクセスされるデータに対してオンプレミス（ローカル）ストレージを、また本質的に無限の総容量に対してストレージサービスによって提供されたリモートストレージを利用する、オンプレミスブロックベースのアプライアンスと考えられ得る。図６は、キャッシュゲートウェイの一実施形態が実現される、ネットワーク環境例のアーキテクチャおよびその中のデータフローを大まかに示すハイレベルブロック図である。キャッシュゲートウェイは、サービス顧客のローカルネットワークと、サービスプロバイダのネットワークにおけるストレージサービスとの間のインタフェースとして機能し得る。少なくともいくつかの実施形態では、キャッシュゲートウェイは、ｉＳＣＳＩインタフェースを顧客ネットワーク上のプロセスに公開し得るが、いくつかの実施形態では、他のデータインタフェースが公開され得る。そのため、キャッシュゲートウェイは、クライアントネットワーク内で動作するデータインタフェースターゲット（例えば、ｉＳＣＳＩターゲット）のように見え得、例えば、キャッシュゲートウェイは、クライアントネットワーク上にストレージアレイとして現れ得る。キャッシュゲートウェイは、例えば、論理ユニット番号（ＬＵＮ）、例えば、ハードディスクなどのブロックベースの記憶装置を、クライアントネットワーク内の装置上で実行するプロセスに公開し得る。プロセスは、次いで、ＬＵＮとのデータセッション（例えば、ＳＣＳＩセッション）を開始し、データコマンド（例えば、ＳＣＳＩコマンド）をキャッシュゲートウェイに送信し得る。
【０１５８】
図２４は、少なくともいくつかの実施形態に従った、キャッシュゲートウェイのための全体アーキテクチャおよびそのデータ入出力動作を示す。一般に、キャッシュゲートウェイ８００では、書込みデータが顧客プロセス８３０から受信されると、そのデータが書込みログ８１４に付加され；そのデータは、後に、アップロードプロセスによって書込みログ８１４からリモートデータストア８２０にアップロードされる。ブロックに関連した書込みデータに対するメタデータ（例えば、ブロック位置、ブロックタイプ、オフセット（単数または複数）および長さ）が、メタデータストア８０６に追加され得る。少なくともいくつかの実施形態では、メタデータストア８０６は、データベース、例えば、Ｂｅｒｋｅｌｙデータベース（ＢＤＢ）として実現され得る。キャッシュゲートウェイ８００は、少なくともいくつかのデータ（例えば、頻繁に、および／または最近使用されたデータ）もローカルキャッシュ８１２にローカルにキャッシングし得、それは、いくつかの読取りが、リモートデータストア８２０からの代わりに、ローカルキャッシュ８１２から満足され得るので、顧客の読取り要求に対する応答を改善し得る。ローカルキャッシュ８１２は、読取りキャッシュとも呼ばれ得る。メタデータストア８０６は、ローカルにキャッシュされた読取りデータに関する位置および他の情報もローカルキャッシュ８１２内に含み得る。図２４は、１つのメタデータストア８０６が読取りキャッシュエントリおよび書込みキャッシュエントリの両方を含む実施形態を示しているが、いくつかの実施形態では、読取りキャッシュエントリおよび書込みキャッシュエントリが別々のメタデータストア８０６内に維持され得る。少なくともいくつかの実施形態では、顧客プロセス８３０からのデータ読取り要求が、可能であれば、書込みログ８１４またはローカルキャッシュ８１２から提供され得；そうでない場合は、要求されたデータがリモートデータストア８３０からフェッチされ得る。読取り要求を満足するためにフェッチおよび（例えば、ブロックバッファ８０４に）バッファリングされる、ローカルキャッシュ８１２またはリモートデータストア８３０からのデータは、そのデータに対する書込みログ８１４内に更新が存在する場合、そのデータが、読取り要求を満足するために顧客プロセス８３０に返される前に、書込みログ８１４からのデータで更新され得る。
【０１５９】
少なくともいくつかの実施形態では、書込みログ８１４およびデータキャッシュ８１２の両方が、共通のローカルのブロックベースデータストア８１０内に実装され得る。ブロックデータストア８１０は、揮発性メモリ、不揮発性メモリ、またはその組合せで実装され得る。ブロックデータストア８１０は、キャッシュゲートウェイ８００がその上に実装される物理装置内の物理メモリ上、キャッシュゲートウェイ８００がその上に実装される物理装置に外部のメモリ上（例えば、顧客によりゲートウェイ８００に割り当てられた１つまたは複数の記憶装置上）、またはそれらの組合せ上に実装され得る。
【０１６０】
書込みログデータおよびキャッシングされた読取りデータはともに、ブロックデータストア８１０に、ブロックストレージフォーマットで、例えば、４ＭＢ（４メガバイト）ブロックとして、格納され得る。ブロックデータストア８１０内のキャッシングされた読取りブロックは、読取りキャッシュとみなされ得、ブロックデータストア内の書込みログブロックは書込みバッファとみなされ得る。メタデータストア８０６は、ブロックデータストア８１０内の読取りキャッシュ８１２ブロックおよび書込みログ８１４ブロックの両方を見つけるためのエントリを含み得る。読取り要求を満足するために、ブロックが読取りキャッシュ８１２から（または書込みログ８１４から）読み取られ得、ブロックが、アップロードプロセスにより、書込みログ８１４からリモートデータストア８２０にアップロードされ得る。少なくともいくつかの実施形態では、書込みブロックを書込みログ８１４からアップロードする際に、アップロードされたデータが、新しい読取りブロックとして読取りキャッシュ８１２に追加され得る。アップロードされた書込みログ８１４ブロックは、ブロックデータストア８１０内で「空き」として印を付けられ得、その変更をブロックデータストア８１０に反映するために、メタデータストア８０６が適切に更新され得る。
【０１６１】
少なくともいくつかの実施形態では、書込み要求は、ブロックの比較的ごく小さな部分のみを修正または変更し得る。従って、少なくともいくつかの実施形態では、ブロックを書込みログ８１４からアップロードする際に、例えば、前述のように、データ重複排除技術を使用して、変更された部分のみがリモートデータストア８２０にアップロードされ得る。さらに、書込みログ８１４は、異なる書込みログ８１４ブロックに格納された１つまたは複数の重なり合う書込み（すなわち、同一の論理ブロックへの書込み）を含み得る。書込みデータを書込みログ８１４からアップロードする際に、２つ以上の重なり合う書込みがアップロードのために結合され得る。この結合は、データストアの外部で、例えば、ブロックバッファ８０４内のブロック内で実行され得；書込みログ８１４内のブロック自体は変更されない。
【０１６２】
前述のように、少なくともいくつかの実施形態では、書込みブロックを書込みログ８１４からアップロードする際に、アップロードされたデータが、新しい読取りブロックとして読取りキャッシュ８１２に追加され得る。少なくともいくつかの場合、例えば、書込みブロックが多数の変更を含む場合、および／または書込みブロックの大きな部分が変更されている場合、書込みブロックは、新しい読取りブロックとして単に読取りキャッシュ８１２にコピーされて、メタデータストア８０６が更新される。しかし、前述のように、書込み要求は、書込みログ８１４ブロックの比較的ごく小さな部分のみを修正または変更し得る。従って、少なくともいくつかの場合、それぞれの対応するブロックがまず、リモートデータストア８２０からフェッチされ得、そのフェッチされたブロックが、読取りキャッシュ８１２内のブロック全体が最新であることを保証するために、そのブロックを読み取りキャッシュ８１２に追加する前に、読取りログ８１４からの変更で更新される。述べたように、書込みログ８１４は、異なる書込みログ８１４ブロック内に格納された２つ以上の重なり合う書込み（すなわち、同一の論理ブロックへの書込み）を含み得、従って、フェッチされブロックが１つまたは複数の書込みログ８１４ブロックに従って更新され得る。少なくともいくつかの実施形態では、フェッチされたブロックは、読取りキャッシュ８１２に追加される前に、書込みログ８０４ブロックからの更新のために、ブロックバッファ８０４に格納され得る。
【０１６３】
一般に、新しい書込みは、ブロックデータストア８１０内の以前に空きとされた書込みログ８１４ブロックに格納されるが；ブロックデータストア８１０が、いっぱいまたは、ほぼいっぱいであるとして検出される場合、１つまたは複数のキャッシングされた読取りブロックが、書込みデータのためのスペースを空けるため、パージされ得る。読取りブロックは、他の理由のため、例えば、新しい読取りデータのためにスペースを空けるため、ブロックデータストア８１０からパージされ得ることに留意されたい。様々な実施形態では、読取りブロックをブロックデータストア８１０からパージするために、異なる技術またはポリシーが使用され得る。例えば、いくつかの実施形態では、最も古い読取りブロックをブロックデータストア８１０からパージするために、最低使用頻度（ＬＲＵ）ポリシーが適用され得る。
【０１６４】
少なくともいくつかの実施形態では、キャッシュゲートウェイ８００は、リモートデータストア８２０上の２つ以上のボリューム８２２にインタフェースを提供し得る。少なくともいくつかの実施形態では、別個の書込みログ８１４および読取りキャッシュ８１２が、各ボリューム８２２に対して、キャッシュゲートウェイ８００によって維持され得る。少なくともいくつかの実施形態では、２つ以上のボリューム８２２に対する別個の書込みログ８１４および読取りキャッシュ８１２が、同一のブロックデータストア８１０内に実現され得る。しかし、少なくともいくつかの実施形態では、異なるボリューム８２２に対する書込みログ８１４および読取りキャッシュ８１２が、ブロックデータストア８１０上で論理的または物理的に分離され得る。さらに、少なくともいくつかの実施形態では、別個のメタデータストア８０６が別個のボリューム８２２に対して維持され得る。
【０１６５】
図２４は、読取りキャッシュ８１２および書込みログ８１４がブロックデータストア８１０内で論理的に別個であるとして示しているが、少なくともいくつかの実施形態では、所与のボリューム８２２に対する読取りブロックおよび書込みログブロックが、ブロックデータストア８１０内で物理的に混合され得る。例えば、第１の物理ブロックが読取りブロックであり得、第２〜第５の物理ブロックが書込みブロックであり得、次の２つの物理ブロックが読取りブロックであり得、以下同様に続く。
【０１６６】
前述のように、図２４は、少なくともいくつかの実施形態に従った、キャッシュゲートウェイのための全体アーキテクチャおよびそのデータ入出力動作を示す。しかし、ストレージゲートウェイは、例えば、図７に示すように、シャドーイングゲートウェイとしても設定され得る。図２５は、少なくともいくつかの実施形態に従った、シャドーイングゲートウェイのための全体アーキテクチャおよびそのデータ入出力動作を示す。シャドーイングゲートウェイ８０１は、図２４でキャッシュゲートウェイ８００に対して例示および説明したのと同様のアーキテクチャ、構成要素、およびデータ入出力動作を含み得るが、シャドーイングゲートウェイ８０１は、読取りキャッシュ８１２に対するメタデータストア８０６内に読取りキャッシュ８１２またはエントリを含まず、また、キャッシュゲートウェイに対して前述した読取り関連動作が実行されないことを除く。シャドーイングゲートウェイに対する書込み動作は、書込みが読取りキャッシュに追加されないことを除いて、キャッシュゲートウェイに対するものと同様であり得る。さらに、顧客プロセス（単数または複数）８３０からの読取りおよび書込み要求が、ローカルデータストア８４０に転送される。しかし、書込み要求からの書込みデータは、リモートデータストア８２０にシャドーイングされる。少なくともいくつかの実施形態では、書込みデータが、ブロックデータストア８１０内の書込みログ８１４に付加され、書込みログ８１４内の書込みデータが、定期的または非定期的に、リモートデータストア８２０にアップロードされるが、それは、ローカルデータストア８４０上の一次データストアのスナップショット８２４を保持する。
【０１６７】
少なくともいくつかの実施形態では、例えば図２４に示すように、キャッシュゲートウェイに対して、および、例えば図２５に示すように、シャドーイングゲートウェイに対して、書込みログ８１４および書込み動作が、書込み性能に関して最適化され得る。少なくともいくつかの実施形態では、ゲートウェイ８００の少なくともいくつかの入出力動作は、ブロックデータストア８１０を順次データストアとして使用し得る。特に、書込みログ８１４は、順次データ構造として扱われ得、書込みログ８１４に対する書込み動作は、順次書込み動作として実現され得る。少なくともいくつかの実施形態では、書込みログ８１４は、線形または円形キューとして実装された１次元データバッファとして扱われ得る。キャッシュゲートウェイについて、リモートデータストア８２０からダウンロードされたデータは、顧客プロセス（単数または複数）８３０からゲートウェイ８００に送信された書込みデータとは別の読取りキャッシュ８１２に格納され得、書込みデータは書込みログ８１４に格納される。キャッシュゲートウェイおよびシャドーイングゲートウェイの両方について、書込み要求は、顧客プロセス（単数または複数）８３０から任意の順序（すなわち、書込み要求は順序付けされていないか、または非順次であり得る）で受信され得、顧客プロセス（単数または複数）８３０から受信された、順序付けされていない書込み要求によって示される書込みデータは、任意のサイズであり得、対象とするデータストア内の任意の位置またはオフセットに向けられ得る。しかし、順序付けされていない書込み要求内で顧客プロセス（単数または複数）８３０から受信された任意の書込みデータは、書込みログ８１４に連続して書き込まれ付加される。少なくともいくつかの実施形態では、付加は、サブブロックレベルで行われ得る；すなわち、書込みデータの２つ以上のインスタンスが、書込みログ８１４内の同一ブロック内で付加され得る。書込みログ８１４に対する更新のためのメタデータ（例えば、書込みログ８１４ブロック内の書込みデータのオフセットおよび長さ、ならびに対象とするデータストア内のオフセット）が、メタデータストア８０６内に格納される。
【０１６８】
図２６は、少なくともいくつかの実施形態に従って、ブロックデータストア上の書込みログに書き込むための方法の流れ図である。書込みログ８１４を順次データ構造として、例えば、１次元キューとして、実現することは、入出力ハンドラー８０２が、顧客プロセス（単数または複数）８３０から受信された任意の書込みデータのブロックデータストア８１０へ順次書込みすることを実行可能にし得る。８５０に示すように、１つまたは複数の書込み要求が、顧客プロセス８３０から受信され得る。書込み要求は、任意の順序（すなわち、書込み要求は順序付けされていない）で受信され得、顧客プロセス（単数または複数）８３０から受信された書込み要求によって示される書込みデータは、任意のサイズであり得、対象とするデータストア内の任意の位置またはオフセットに向けられ得る。８５２に示すように、任意の書込みデータをブロックデータストア８１０上の書込みログ８１４に連続して書くために、順次書込みが実行され得る。８５４に示すように、ブロックデータストア８１０への順次書込み内のデータが、ブロックデータストア８１０内の隣接する位置（例えば、セクター）、例えば、ブロックデータストア８１０を実装するディスク記憶装置上の隣接する位置（例えば、セクター）に書き込まれ得る。隣接する位置は、同一の書込みログブロック内であり得るが、必ずしもそうである必要はないことに留意されたい。記憶装置への順次書込みを使用することは、基礎となる記憶装置上でランダムセクターシークを実行する必要性を減らすか、また取り除き得る。ランダムセクターシークを実行することは、入出力動作にマイナスの影響を及ぼす。例えば、ディスク入出力スループットは、連続的な書込みを使用することにより、ランダムセクターシークを必要とする非順次、非連続な書込みと比較した場合、１０倍〜１００倍だけ増加し得る。８５６に示すように、メタデータストア８０６は、書込みログ８１４への書込みを反映するために、適切に更新され得る。少なくともいくつかの実施形態では、書込みに対するメタデータは、メタデータストア８０６に連続して追加され得るが、それは、メタデータがメタデータストア８０６にもっとランダムに追加された場合よりも、書込みログ８１４内のデータにさらに効率的にアクセスする必要があるプロセスによるメタデータストア８０６の読取りを可能にし得る。
【０１６９】
少なくともいくつかの実施形態では、全ての書込みログ８１４データをブロックデータストア８１０内の隣接する位置に書き込むことは必ずしも可能ではない。例えば、２つの書込みログ８１４ブロック間に読取りキャッシュ８１２ブロックがあり得る。従って、８５４で、実施形態は、書込みログ８１４データを隣接する位置に可能な限りたくさん書き込もうとし得るが、いくつかの位置（例えば、ブロック）が使用されているとして印が付けられている場合は、その位置をスキップする必要があり得る。メタデータストア８０６は、たとえデータが隣接するブロック内に格納されていなくても、書込みログ８１４データを見つけることができるように、適切に更新される。
【０１７０】
前述のように、論理的に、任意の書込みデータが書込みデータの終わりに付加される。これを実現するために、少なくともいくつかの実施形態では、ブロックバッファ８０４が、書込みログ８１４で使用されるのと同じサイズのブロック（例えば、４ＭＢブロック）で確保される。割り当てられたバッファブロックがいっぱいになるまで付加される。別のバッファブロックが、新書込みデータを付加するために割り当てられ得；いっぱいのバッファブロックは、ブロックデータストア上の書込みログ８１４に非同期的かつ連続してフラッシュされ得る。書込みログ８１４内のいっぱいのブロックは、アップロードインタフェースにより、非同期的かつ連続して、リモートデータストア８２０にアップロードされ得；書込みログ８１４からアップロードされたブロックは、「空き」として印を付けられ得る。
【０１７１】
図２４に示すキャッシュゲートウェイ実施態様では、データ整合性を維持するために、読取りデータは、ゲートウェイ８００が要求されたデータを顧客プロセス８３０に返す前に、書込みデータと統合される必要があり得る。図２７は、キャッシュゲートウェイの少なくともいくつかの実施形態に従って、読取り要求を満足するための方法の流れ図である。８６０に示すように、読取り要求が顧客プロセス８３０から受信される。少なくともいくつかの実施形態では、読取り要求が顧客プロセス８３０から受信されると、ゲートウェイ８００は、メタデータストア８０６内で読取りのデータ範囲を調べて、読取り範囲に重なり合う書込みログ８１４内にデータがあるかどうかを判断する。図２７の８６２で、重なり合うデータが読取り範囲を完全にカバーする書込みログ８１４内で見つかる場合、８６４に示すように、書込みログ８１４からのデータが、読取り要求を直接満足するために使用され得る。そうでなければ、図２７の８６６で、重なり合うデータが、読取り範囲を部分的カバーする書込みログ８１４内で見つかる場合、８６８に示すように、データがそのデータ範囲に対して存在するかどうか、読取りキャッシュ８１２がチェックされ得る。データが読取りキャッシュ８１２内にある場合、８７０に示すように、１つまたは複数のデータブロック（単数または複数）が読取りキャッシュ８１２からフェッチされ得る。そうでなければ、８７２に示すように、１つまたは複数のブロックがリモートデータストア８２０からフェッチされ得る。いくつかの実施形態では、ブロックは、いくつかの読取り要求を満足するために、読取りキャッシュおよびリモートデータストア８２０の両方からフェッチされ得ることに留意されたい。図２７の８７４で、フェッチされたデータブロックは、次いで、書込みログ８１４からの変更されたデータで更新され得る。図２７の８７６で、変更されたデータが、読取り要求を満足するために、要求しているプロセス８３０に返され得る。いくつかの実施形態では、図２７の８７８に示すように、更新されたブロックが読取りキャッシュ８１２に追加され得る。
【０１７２】
いくつかの実施形態では、読取り要求を満足するためのリモートデータストア８２０から読み取られたブロックが、読取りキャッシュ８１２に追加され、ブロックを要求しているプロセス８３０に送信する前に、書込みログ８１４から更新され得る。あるいは、ブロックは、例えば、ブロックバッファ８０４にバッファリングされ、そのバッファ内で更新され得る。更新されたブロックは、次いで、バッファ８０４から、要求しているプロセス８３０に送信され、バッファ８０４から読取りキャッシュ８１４に追加され得る。
【０１７３】
いくつかの実施形態では、読取り要求を満足するために使用される読取りキャッシュ８１２内のブロックが、適切な位置で書込みログ８１４からのデータで更新され、次いで、読取り要求を満足するために読取りキャッシュ８１２から要求しているプロセス８３０に送信され得る。あるいは、ブロックが、読取りキャッシュ８１２から読み取られて、例えば、ブロックバッファ８０４にバッファリングされ、そのバッファ内で更新され得る。更新されたブロックは、次いで、バッファ８０４から、要求しているプロセス８３０に送信され、バッファ８０４から、読取りキャッシュ８１４に追加され得る。バッファ内に読み取られた読取りキャッシュ８１２内の以前のバージョンのブロックは、空きとして印を付けられ得、かつ／または新しく更新されたブロックで上書きされ得る。
【０１７４】
図２７の８６６で、書込みログ８１４内に重なり合うデータがない場合は、図２７の８８０に示すように、読取りキャッシュ８１２は、読取り要求が読取りキャッシュ８１２から満足できるかどうかをチェックし得る。図２７の８８０で、読取り要求が読取りキャッシュ８１２から満足できる場合は、図２７の８８２に示すように、読取りキャッシュ８１２からのデータが、読取り要求を満足するために顧客プロセス８３０に返され得る。図２７の８８０で、読取り要求が読取りキャッシュ８１２から満足できない場合には、図２７の８８４に示すように、１つまたは複数のデータブロック（単数または複数）がリモートデータストア８２０からフェッチされ得る。図２７の８８６に示すように、フェッチされたブロックからのデータが、読取り要求を満足するために顧客プロセス８３０に返され得る。いくつかの実施形態では、図２７の８８８に示すように、読取り要求を満足するためにリモートデータストア８２０からフェッチされたブロックが、読取りキャッシュ８１２に追加され得る。
【０１７５】
少なくともいくつかの実施形態では、ゲートウェイ８００は、顧客が、取得されてリモートデータストア８２０にアップロードされる書込みログ８１４のスナップショットを、例えば、サービスプロバイダによって提供されたコンソールプロセスを介して、要求できるようにし得る。追加で、または代わりに、ゲートウェイ８００は、定期的または非定期的に、書込みログ８１４のスナップショットを自動的に取得してリモートデータストア８２０にアップロードし得る。書込みログ８１４のスナップショットをアップロードすることは、例えば、データの、ハードウェアおよびソフトウェア障害からの保護を提供し得る。少なくともいくつかの実施形態では、スナップショットは、ある時点のスナップショットであり；スナップショットが要求された時点において書込みログ内にある変更されたデータのみがスナップショット内にアップロードされる。少なくともいくつかの実施形態では、キャッシュゲートウェイ実施態様について、変更されたデータがアップロードされる場合、将来の読取りのために、データがリモートデータストア８２０からダウンロードされる必要がないように、ローカルに格納された読取りキャッシュ８１２も、アップロードされているデータの少なくとも一部で更新され得る。変更されたデータがリモートデータストア８２０にアップロードされた後、書込みログ８１４内のデータおよびメタデータストア８０６内の対応するデータが廃棄でき（例えば、「空き」と印を付けられる）、そのスペースが再使用できる。
【０１７６】
〔リモートデータストアにアップロードするための書込みデータの結合〕
前述のように、書込みログブロックは、定期的または非定期的に、リモートデータストアにアップロードされ得る。少なくともいくつかの実施形態では、書込みログブロックをアップロードする際にデータ重複排除技術が使用され得る。しかし、説明したデータ重複排除技術は、アップロードされるためにステージされるブロック（単数または複数）内にあるどのデータに関するアップロードプロセス中にも動作する。顧客プロセス（単数または複数）からの任意の書込みが順番に書込みログに付加され、また、顧客プロセス（単数または複数）は対象とするデータストア内の同じ位置に複数回書込み得るので、書込みログブロックまたは複数のブロックは、対象とするデータストアの同じ位置（例えば、オフセットおよび／または範囲）に向けられた２つ以上の書込みを含み得る。
【０１７７】
従って、少なくともいくつかの実施形態は、書込みログブロック内の書込みデータに対して、アップロード前結合（ｐｒｅ−ｕｐｌｏａｄ  ｃｏａｌｅｓｃｉｎｇ）技術を実装し得る。この技術では、アップロードのためにステージされている書込みログブロック（または複数のブロック）に対するメタデータが、対象とするデータストア内の同じ位置に向けられている書込みログブロック（単数または複数）内の２つ以上の書込みがあるかどうかを判断するために検査され得る。所与の位置に対する複数の書込みがある場合、アップロードされるバッファブロックを構築する際に、前の書込み（単数または複数）が抑制され得る。このようにして、アップロードのためにアップロードプロセスに渡されるブロックは、例えば、データ重複排除技術に従って、アップロード前結合技術が適用されていなければ存在し得る、同じ位置へのおそらくは２つ以上の書込みではなく、所与の位置への１つだけの書込み（最新の書込み）を含み得る。
【０１７８】
〔ストレージゲートウェイプロセスの更新〕
ストレージゲートウェイの実施形態は、サービスプロバイダサイトからダウンロードされて、顧客のデータセンター内の装置上にインストールされ得る、ストレージゲートウェイプロセスとして実現され得る。少なくともいくつかの実施形態では、ストレージゲートウェイプロセスは、顧客の装置上の仮想マシン（ＶＭ）環境内で実行する仮想アプライアンスであり得る。サービスプロバイダは、ストレージゲートウェイプロセスに対する更新を生成し得る。従来の方式では、ストレージゲートウェイアプライアンスなどのソフトウェアの更新は、新しいソフトウェアのダウンロード、古いバージョンのシャットダウン、新しいバージョンのインストール、リブートなどを行うために、顧客動作およびダウンタイムを伴う。例えば、ストレージゲートウェイプロセスについて、従来型の更新は、新しいＶＭイメージのダウンロード、ボリュームのアンマウント、保留中の書込みデータの永続記憶装置へのフラッシュ、現在のＶＭのシャットダウン、新しいＶＭの配備、ボリュームの再マウントなどを行うために、顧客の動作を伴い得る。この間、クライアントプロセスは、望ましくないダウンタイムを経験し得、いくつかのデータが失われる可能性があり得る。
【０１７９】
従って、ストレージゲートウェイに対するソフトウェア更新プロセスを自動化する更新技術の実施形態が説明される。その更新技術の実施形態は、ストレージゲートウェイソフトウェアの新しいバージョンが、顧客による最小限の介入で、または介入なしで、かつ、クライアントプロセスにほとんど、または全く影響を及ぼすことなく、装置上で検出、ダウンロード、およびインスタンス生成できるようにし得る。その更新技術では、現在のストレージゲートウェイプロセスが自動的かつクリーンにシャットダウンされ、ゲートウェイに対するクライアントプロセス入出力動作の介入がほとんど、または全くなく、かつ、データ損失のリスクがほとんど、または全くなく、ゲートウェイ動作が新しいストレージゲートウェイプロセスに渡される。
【０１８０】
その更新技術の少なくともいくつかの実施形態では、ゲートウェイプロセスがその上で実行している装置上で実行している更新エージェントが、ゲートウェイプロセスに対するソフトウェア更新の入手可能性を監視して、ゲートウェイのより新しいバージョンが公開されている場合は、更新をダウンロードする。更新エージェントは、ゲートウェイの現在実行中のインスタンスに、その現在の状態を休止して、シャットダウンするように指示する。実施形態では、現在のゲートウェイプロセスによって実行される休止プロセスは、ゲートウェイの現在の設定の保存すること、ならびに、ゲートウェア動作がゲートウェイプロセスの新しいバージョンにクリーンに引き渡され得るように、キュー登録されたアップロードされる書込みデータ（書込みログ）、メタデータ（例えば、メタデータストア）、およびおそらくは他のデータなどの、現在のゲートウェイデータを適切の処理することを含み得る。現在の設定は、ターゲット（例えば、ｉＳＣＳＩターゲット）、ポート、ボリューム、サービスプロバイダへの接続、および様々なストレージゲートウェイ動作を実行するためにストレージゲートウェイのインスタンスが必要とする任意の他の情報のうちの１つまたは複数の指示を含み得るが、それらに限らない。休止プロセス中に、現在のゲートウェイプロセスは、書込みログのインメモリ部分を、その書込みログがその上に格納されるローカルデータストアにフラッシュする。現在のゲートウェイプロセスが休止プロセスを終了した後、現在のゲートウェイプロセスは、クライアントプロセスに公開された入出力ポート（例えば、ｉＳＣＳＩポート）上でのリッスンを停止し、そのポートを解放して、シャットダウンする。ゲートウェイプロセスのより新しいバージョンは、古いバージョンが入出力ポートを解放した後、ゲートウェイプロセスの以前のインスタンスによって格納された設定をロードし、ゲートウェイデータおよびメタデータへのハンドルを開き、ボリュームを復元し、入出力ポート（例えば、ｉＳＣＳＩポート）を開いてリッスンし、入出力動作を再開する。休止プロセス中に、クライアントプロセス（単数または複数）（例えば、ｉＳＣＳＩイニシエータ）は、ゲートウェイ入出力ポート（単数または複数）（例えば、ｉＳＣＳＩポート）に対する入出力動作に関するネットワークの瞬時の不調を経験し得、入出力動作を再試行し得る。新しいバージョンが入出力ポートを開くと、再試行された入出力動作が、ゲートウェイプロセスの新しいバージョンによって受け入れられて処理され得る。結果として、致命的な入出力エラーがクライアントプロセスに返されず、いかなるデータも失われない。最大限で、クライアントプロセス（単数または複数）はわずかなネットワークシャットダウンを経験し得る。
【０１８１】
更新技術の実施形態は、本明細書では、ストレージゲートウェイソフトウェアの更新に関連して説明されるが、更新技術は他のソフトウェアの更新に適用され得ることに留意されたい。
【０１８２】
図２８Ａ〜図２８Ｄは、少なくともいくつかの実施形態に従った、更新技術の構成要素および動作を図で示す。図２８Ａに示すように、現在のストレージゲートウェイプロセス１２５４Ａは、サービス顧客１２５０ネットワーク上の装置１２５２上で実行している場合がある。図２８Ａに示すように、少なくともいくつかの実施形態では、ストレージゲートウェイプロセス１２５４Ａは、装置１２５２上の仮想マシン（ＶＭ  １２７０Ａ）内で実行している場合がある。ストレージゲートウェイプロセス１２５４Ａは、スナップショットをリモートデータストア１２１６上に作成するために、書込み要求をローカルデータストア１２６０上の１つまたは複数のボリュームにシャドーイングするシャドーイングゲートウェイとして設定され得るか、または代替として、読取りおよび書込み要求を、リモートデータストア１２１６上の１つもしくは複数のボリュームとして実装されたリモート一次データストアに提供し、かつ、頻繁に、もしくは最近使用されたデータをローカルデータストア１２６０上の読取りキャッシュにローカルにキャッシングする、キャッシュゲートウェイとして設定され得る。いずれの設定でも、ストレージゲートウェイプロセス１２５４Ａは、ローカルデータストア１２６０上の書込みログおよびメタデータストアを維持し得、書込みログに付加された書込みデータをリモートデータストア１２１６にアップロードし得る。
【０１８３】
ストレージゲートウェイプロセス１２５４Ａは、書込みデータを、ローカルデータストア１２６０上に実装された書込みログに付加する。しかし、書込みログの一部は、ストレージゲートウェイプロセス１２５４Ａがその上に実装されている装置１２５２上のメモリ内に維持され得る（例えば、図２７のブロックバッファ８０４を参照）。ストレージゲートウェイプロセス１２５４Ａは、新しい書込みデータを、書込みログのインメモリ部分内のバッファに付加し、完結したバッファ（例えば、ブロック）をローカルデータストア１２６０上の書込みログに格納する。
【０１８４】
サービスプロバイダ１２１０は、ストレージゲートウェイに対する更新１２１４を生成および格納し得る。例えば、更新１２１４は、サービスプロバイダ制御プレーン１２１２内のサーバー装置上にパッケージとして格納され得る。
【０１８５】
更新エージェント１２５６も、現在のストレージゲートウェイプロセス１２５４Ａがその上でインスタンス生成される装置１２５２上でインスタンス生成され得る。更新エージェント１２５６は、ローカル装置１２５２上でストレージゲートウェイが利用可能な更新があるかどうかを判断するために、定期的または非定期的にサービスプロバイダ１２１０をチェックし得る。少なくともいくつかの実施形態では、ストレージゲートウェイが利用可能な更新があるかどうかを判断するためにサービスプロバイダ１２１０をチェックすることは、現在のストレージゲートウェイプロセス１２５４のバージョンを、ストレージプロバイダ１２１０でポストされた１つまたは複数の更新１２１４のバージョン（単数または複数）に対してチェックすることを伴い得る。更新１２１４が利用可能であることを検出すると、更新エージェント１２５６は、更新１２１４パッケージをサービスプロバイダ１２１０から装置１２５２にダウンロードし得る。少なくともいくつかの実施形態では、更新エージェント１２５６は、特定の更新１２１４パッケージを要求し得、別のプロセスが実際のダウンロードを実施し得る。
【０１８６】
少なくともいくつかの実施形態では、更新１２１４パッケージがサービスプロバイダ１２１０から装置１２５２へダウンロードされた後、ストレージゲートウェイプロセス１２５４Ｂが、更新１２１４パッケージに従ってインスタンス生成され得る。図２８Ａに示すように、少なくともいくつかの実施形態では、ストレージゲートウェイプロセス１２５４Ｂは、装置１２５２上の仮想マシン（ＶＭ  １２７０Ｂ）内でインスタンス生成され得る。いくつかの実施形態では、ストレージゲートウェイプロセス１２５４Ｂは、ストレージゲートウェイプロセス１２５４Ａがシャットダウンする前にインスタンス生成され得る。他の実施形態では、ストレージゲートウェイプロセス１２５４Ｂは、ストレージゲートウェイプロセス１２５４Ａがシャットダウンする後までインスタンス生成されない場合がある。ストレージゲートウェイプロセス１２５４Ａは、以下で説明するように、更新シーケンスに従ってシャットダウンし得る。様々な実施形態では、ストレージゲートウェイプロセス１２５４Ｂは、以下で説明するように、更新シーケンス中の様々な時点で、例えば、ストレージゲートウェイプロセス１２５４Ａがその現在の設定を保存した後、またはストレージゲートウェイプロセス１２５４Ａが書込みログのインメモリ部分のローカルデータストア１２６０へのフラッシュを完了した後、インスタンス生成され得る。
【０１８７】
少なくともいくつかの実施形態では、更新１２１４が利用可能であることの検出時に、または検出後に、更新エージェント１２５６は、プロセス１２５４Ａにシャットダウンするように指示するコマンドをストレージゲートウェイプロセス１２５４Ａに送信し得る。少なくともいくつかの実施形態では、このコマンドは、更新されたゲートウェイプロセスがインストールできるように、シャットダウンが要求されていることを示す特定の「更新のためのシャットダウン（ｓｈｕｔｄｏｗｎ  ｆｏｒ  ｕｐｄａｔｅ）」または「更新シーケンスの開始（ｂｅｇｉｎ  ｕｐｄａｔｅ  ｓｅｑｕｅｎｃｅ）」コマンドであり得る。これは、ストレージゲートウェイプロセス１２５４Ａに、シャットダウンが更新のためであることを通知して、プロセス１２５４Ａが、通常のシャットダウンプロセス中には一般に実行されない、ハウスキーピングおよび引渡しタスクを実行し得るようにする。更新エージェント１２５６は、ストレージゲートウェイプロセス１２５４Ｂがインスタンス生成される前か、または代替として、ストレージゲートウェイプロセス１２５４Ｂがインスタンス生成された後に、コマンドをストレージゲートウェイプロセス１２５４Ａに送信し得る。いくつかの実施形態では、更新エージェント１２５６が更新のためのシャットダウンコマンドを現在のストレージゲートウェイプロセス１２５４Ａに送信するのではなく、新しいストレージゲートウェイプロセス１２５４Ｂが、新しいゲートウェイプロセス１２５４Ｂがインスタンス生成された後、コマンドを現在のプロセス１２５４Ａに送信し得る。
【０１８８】
図２８Ａは、更新のためのシャットダウンコマンドを送信するために、現在のストレージゲートウェイプロセス１２５４Ａと直接通信する更新エージェント１２５６を示しているが、少なくともいくつかの実施形態では、更新エージェント１２５６は、コマンドをサービスプロバイダ１２１０に送信し、それは、次いで、そのコマンドを、ゲートウェイプロセス１２５４Ａとサービスプロバイダ１２１０との間の安全な通信チャネルを通して、適切なストレージゲートウェイプロセス１２５４Ａに送信し得る。少なくともいくつかの実施形態では、安全な通信チャネルは、例えば、図１９に示されているような方法を通して、ストレージゲートウェイプロセス１２５４Ａによって開始された、設定および管理チャネルである。
【０１８９】
少なくともいくつかの実施形態では、ストレージゲートウェイに対する更新が実行され得る時間ウィンドウが指定され得る。例えば、顧客は、時間外中の時間ウィンドウまたは、クライアントプロセス（単数または複数）１２５８からストレージゲートウェイへの入出力が、通常、他の時間よりも低い時間ウィンドウを、更新ウィンドウとして指定し得る。これらの実施形態では、更新のためのシャットダウンコマンドは、指定された時間ウィンドウの開始に近づくまでか、または開始後まで、ストレージゲートウェイプロセス１２５４Ａに送信されない場合がある。指定された時間ウィンドウの長さは、特定の顧客環境に応じて異なり得、秒単位（例えば、０３：００：００ａｍ〜０３：００：３０ａｍ）、分単位（例えば、１２：００ａｍ〜１２：２０ａｍ）、時間単位（例えば、１ａｍ〜４ａｍ）、もしくは日単位（例えば、日曜日の任意の時間、１２ａｍ〜１１：５９ｐｍ）、または特定の日の特定の時間（例えば、日曜日の２ａｍ〜４ａｍ）として指定され得る。あるいは、更新のためのシャットダウンコマンドは、更新ウィンドウ外の時間にストレージゲートウェイプロセス１２５４Ａに送信され得るが、ストレージゲートウェイプロセス１２５４Ａは、その更新のためのシャットダウンを開始する更新ウィンドウの時間になるまで、またはそれに近づくまで待機し得る。
【０１９０】
少なくともいくつかの実施形態では、以前に指定された更新ウィンドウまで更新プロセスを保持する代わりに、またはその代替として、顧客は、更新１２１４が利用可能な時を通知され得るか、または更新１２１４が利用可能であることを発見し得、必要か、もしくは所望の場合には、例えば、サービスプロバイダ１２１０の制御プロセスを介して、「更新を開始」または顧客に提示された同様のユーザーインタフェース要素を選択することにより、更新プロセスを開始できるようにし得る。少なくともいくつかの実施形態では、顧客は、ゲートウェイプロセスの１つまたは複数のバージョンの中から選択でき、選択されたバージョンがダウンロードされてインストールされることを指示し得る。
【０１９１】
図２８Ａに示すように、更新のためのシャットダウンコマンドの受信に応答して、現在のストレージゲートウェイプロセス１２５４Ａは、その現在の設定１２６２をローカルデータストア１２６０に保存し得る。図２８Ａは、現在の設定１２６２を、装置１２５２の外部であるデータストア１２６０上に格納されているとして示しているが、少なくともいくつかの実施形態では、現在の設定１２６２は、装置１２５２の内部であるデータストア１２６０に保存され得る。現在の設定１２６２は、ターゲット（例えば、ｉＳＣＳＩターゲット）、現在の入出力ポート（単数または複数）、現在のボリューム（単数または複数）、サービスプロバイダ１２１０への現在のデータおよび設定／管理接続（単数または複数）、ならびに新しいゲートウェイプロセス１２５４Ｂに伝える必要のあるゲートウェイプロセス１２５４Ａの現在の状態に特有の一般的な任意の設定情報のうちの１つまたは複数を含み得るが、それらに限らない。
【０１９２】
シャットダウンする前に、ストレージゲートウェイプロセス１２５４Ａは、全ての書込みデータを書込みログのインメモリ部分からローカルデータストア１２６０にフラッシュする必要がある。図２８Ｂに示すように、現在のストレージゲートウェイプロセス１２５４Ａは、書込みログのインメモリ内に現在ある書込みデータのローカルデータストア１２６０への積極的フラッシュ（ａｇｇｒｅｓｓｉｖｅ  ｆｌｕｓｈ）を実行し得る。少なくともいくつかの実施形態では、現在のストレージゲートウェイプロセス１２５４Ａは、書込みログのインメモリ部分からローカルデータストア１２６０へのこの積極的フラッシュの間、クライアントプロセス（単数または複数）１２５８からの入出力要求の受信および処理を継続し得る。書込みログのインメモリ部分内の現在の書込みデータのローカルデータストアへの移動が、通常のゲートウェイプロセス動作中よりも高い優先度で実行され得、また、ローカルデータストア１２６０に対する他の入出力動作よりも高い優先度で実行され得るので、書込みログのインメモリ部分内に現在ある書込みデータのこのフラッシュは、「積極的（ａｇｇｒｅｓｓｉｖｅ）」と呼ばれ得る。書込みログデータの書込みログのインメモリ部分からローカルデータストア１２６０への移動は、通常のディスク入出力動作と競合して遅延を生じないように、通常、低い優先度で実行され得るか、またはバックグラウンドで実行され得る。従って、書込みログのインメモリ部分の積極的フラッシュは、クライアントプロセス（単数または複数）１２５８の観点からすれば、ディスク入出力性能に多少影響を及ぼし得るが、ほとんどの場合、この影響は問題を引き起こすほど大きいものではない。
【０１９３】
少なくともいくつかの実施形態では、書込みログのインメモリ部分内の現在の書込みデータのローカルデータストア１０６０への積極的フラッシュを実行する際に、現在のストレージゲートウェイプロセス１２５４Ａは、クライアントプロセス（単数または複数）１２５８からの入出力要求の受信および処理を継続し得る。これらの実施形態では、新しい書込み要求が、それぞれの書込みデータを書込みログのインメモリ部分に付加することによって提供されるのを継続し得る。しかし、少なくともいくつかの実施形態では、新しく付加されたデータは、フラッシュプロセスのこの第１段階中にフラッシュされない。
【０１９４】
図２８Ｃに示すように、書込みログのインメモリ部分内の現在の書込みデータの積極的フラッシュを完了した後、現在のストレージゲートウェイプロセス１２５４Ａは、クライアントプロセス（単数または複数）１２５８から入出力要求の受入れを停止し得る。つまり、ストレージゲートウェイプロセス１２５４Ａは、クライアントプロセス（単数または複数）１２５８に公開されたその入出力ポート（単数または複数）上でのリッスンを停止し得る。しかし、ストレージゲートウェイプロセス１２５４Ａは、入出力ポート（単数または複数）を保持し続け得る。この時点で、ストレージゲートウェイプロセス１２５４Ａは、書込みログフラッシュプロセスの第２段階を開始し得るが、その段階では、フラッシュプロセスの第１段階が始まって以来、書込みログのインメモリ部分に付加された全ての書込みデータ（ある場合）が、図２８Ｂに示すように、ローカルデータストア１２６０にフラッシュされる。フラッシュのこの第２段階は、一般に、短期間で、通常は（必ずしもではないが）１秒未満で、実行され得ることに留意されたい。この期間中、入出力動作（読取りおよび書込み）のために入出力ポート（単数または複数）にアクセスしようと試みるクライアントプロセス（単数または複数）１２５８は、入出力動作を再試行し得る。少なくともいくつかの実施形態では、ストレージゲートウェイプロセス１２５４Ａは、入出力要求の受入れを停止し、クライアントプロセス（単数または複数）１２５８が入出力要求を再試行できるように、クライアントプロセス（単数または複数）１２５８によって使用される入出力プロトコル（例えば、ｉＳＣＳＩプロトコル）に依存して、入出力要求が受信されていないことを検出するために、入出力ポートと通信する。あるいは、いくつかの実施形態では、入出力ポート（単数または複数）は、ストレージゲートウェイプロセス１２５４Ａがビジーであり、プロセス１２５８が定期的または非定期的に入出力動作を再試行することを示す、エラーメッセージを開始プロセスに返し得る。
【０１９５】
少なくともいくつかの実施形態では、他のインメモリゲートウェイデータ、例えば、メタデータストアのインメモリ部分が、シャットダウンの前に、更新シーケンス中に、ストレージゲートウェイプロセス１２５４Ａによってローカルデータストア１２６０にフラッシュされ得る。
【０１９６】
少なくともいくつかの実施形態では、図２８Ｂおよび図２８Ｃに示すように、書込みログのインメモリ部分をローカルデータストア１２６０にフラッシュするための現在のストレージゲートウェイプロセス１２５４Ａの動作中に、新しいストレージゲートウェイプロセス１２５４Ｂが、ゲートウェイ設定１２６２内に保存された情報のアクセスまたはロード、およびそれに応じて、新しいゲートウェイプロセスとしての自己設定を少なくとも開始し得る。少なくともいくつかの実施形態では、例えば、新しいストレージゲートウェイプロセス１２５４Ｂは、現在のストレージゲートウェイプロセス１２５４Ａからの動作の引き継ぎを完了する前に、ゲートウェイ設定１２６２内に示されるように、クライアントプロセス（単数または複数）１２５８に公開された入出力ポート（単数または複数）上でのリッスンを開始し得る。新しいストレージゲートウェイプロセス１２５４Ｂは、入出力ポート上でリッスンし得るが、ポートが現在のストレージゲートウェイプロセス１２５４Ａによって解放され、制御がそこから渡されるまで、クライアントプロセス（単数または複数）１２５８からの入出力要求を実際には処理しない可能性があることに留意されたい。
【０１９７】
図２８Ｄは、更新プロセスの結果を示す。ストレージゲートウェイプロセス１２５４Ａが、書込みログのインメモリ部分のローカルデータストア１２６０へのフラッシュを完了した後、ストレージゲートウェイプロセス１２５４Ａは動作を新しいストレージゲートウェイプロセス１２５４Ｂに引き渡し得る。ストレージゲートウェイプロセス１２５４Ａは、クライアントプロセス（単数または複数）１２５８に公開された入出力ポート（単数または複数）を新しいストレージゲートウェイプロセス１２５４Ｂに解放し得る。いくつかの実施形態では、ストレージゲートウェイプロセス１２５４Ａは、それが更新シーケンスを終えて、入出力ポートを解放していることを新しいストレージゲートウェイプロセス１２５４Ｂに信号通知し得、その時点で、新しいストレージゲートウェイプロセス１２５４Ｂが入出力ポート（単数または複数）を開き得る。他の実施形態では、新しいストレージゲートウェイプロセス１２５４Ｂは、ストレージゲートウェイプロセス１２５４Ａがポート（単数または複数）を解放した後、それらをうまく取得するまで、入出力ポート（単数または複数）を獲得しようとし得る。いくつかの実施形態では、入出力ポート（単数または複数）が解放されていることを検出するために、他の技術が使用され得る。クライアントプロセス（単数または複数）１２５８が再試行してきた任意の入出力動作が、次いで、新しいストレージゲートウェイプロセス１２５４Ｂによって受信および対応され得、新しい入出力要求も新しいストレージゲートウェイプロセス１２５４Ｂによって受信および対応され得る。少なくともいくつかの実施形態では、入出力ポート（単数または複数）を開くために、新しいストレージゲートウェイプロセス１２５４Ｂは、使用されている入出力プロトコル（例えば、ｉＳＣＳＩプロトコル）に従って、アドレスをソケットにバインドする。しかし、使用される入出力プロトコルに応じて、入出力ポートを開くための他の方法がいくつかの実施形態で使用され得る。
【０１９８】
少なくともいくつかの実施形態では、動作をストレージゲートウェイプロセス１２５４Ａから引き継ぐ場合、新しいストレージゲートウェイプロセス１２５４Ｂは、実行すべき様々なハウスキーピングまたは他のタスクを有し得る。例えば、新しいストレージゲートウェイプロセス１２５４Ｂがゲートウェイ設定１２６２の読取り、およびそれに応じて設定を終了していない場合、新しいストレージゲートウェイプロセス１２５４Ｂは、いくつかの設定動作を完了する必要があり得る。例えば、新しいストレージゲートウェイプロセス１２５４Ｂは、ローカルデータストア１２６０上のゲートウェイデータ１２６４へのアクセスを設定し、シャットダウン時に新しいストレージゲートウェイプロセス１２５４Ａによってアンマウントされた１つまたは複数のボリューム（単数または複数）を再マウントして、ゲートウェイ動作を引き継ぐために一般に実行される必要のある任意のタスクを実行し得る。別の例として、キャッシュゲートウェイ設定について、読取りキャッシュは、新しいストレージゲートウェイプロセス１２５４Ｂがゲートウェイ動作を開始する際にコールドであり得、従って、読取りキャッシュは、新しいストレージゲートウェイプロセス１２５４Ｂが引き継いだ後にディスクからリフレッシュされる必要があり得る。別の例として、ストレージゲートウェイに対するいくつかの更新が、設定情報および／またはゲートウェイデータ（例えば、書込みログ、読取りキャッシュ、および／またはメタデータストア）に対する下位互換性を壊し得る。この場合、新しいストレージゲートウェイプロセス１２５４Ｂは、設定情報および／またはゲートウェイデータを変換または再フォーマットする必要があり得る。ゲートウェイデータの変換は、例えば、「下位互換性の処理」というタイトルの以下の節でさらに説明されるように、ストレージゲートウェイプロセス１２５４Ｂが入出力ポート上で入出力要求の受信および処理を開始する前または開始した後に実行され得る。
【０１９９】
図２９は、少なくともいくつかの実施形態に従って、実行中のストレージゲートウェイプロセスを更新するための方法の流れ図を示す。１３００に示すように、現在インスタンス生成されているゲートウェイプロセスに対する更新が、検出されてダウンロードされ得る。少なくともいくつかの実施形態では、ゲートウェイプロセスがその上でインスタンス生成される装置上で実行している更新エージェントが、リモートネットワーク上のストレージゲートウェイに対する更新パッケージの入手可能性を検出し得る。リモートネットワークは、ストレージプロバイダネットワークであり得るが、必ずしもその必要はない。例えば、更新パッケージは、ストレージプロバイダネットワーク上のサーバー上で公開され得る。少なくともいくつかの実施形態では、更新エージェントは、更新パッケージがダウンロードされるかどうかを判断するために、ローカルゲートウェイプロセスのバージョンを、更新パッケージによって提供されたストレージゲートウェイのバージョンと比較し得る。
【０２００】
１３０２に示すように、現在のゲートウェイプロセスは、更新シャットダウンプロセスを実行するように指示され得るが、そのプロセスは、更新シーケンスとも呼ばれ得る。少なくともいくつかの実施形態では、更新エージェントは、例えば、メッセージをストレージゲートウェイプロセスにサービスプロバイダを介して送信することにより、現在のゲートウェイプロセスにシャットダウンを実行するように指示し得；サービスプロバイダは、そのメッセージを現在のゲートウェイプロセスに、サービスプロバイダに対するゲートウェイ開始接続を介して転送する。あるいは、更新されたゲートウェイプロセスは、現在のゲートウェイプロセスに更新のためにシャットダウンするように指示し得る。
【０２０１】
１３０４に示すように、更新シャットダウンを実行するように指示されることに応答して、現在のゲートウェイプロセスは、その現在の設定を保存する。現在の設定は、ターゲット（例えば、ｉＳＣＳＩターゲット）、ポート、ボリューム、サービスプロバイダへの接続、および様々なストレージゲートウェイ動作を実行するためにストレージゲートウェイのインスタンスが必要とする任意の他の情報のうちの１つまたは複数の指示を含み得るが、それらに限らない。
【０２０２】
１３０６に示すように、更新パッケージがダウンロードされた後、ストレージゲートウェイプロセスの更新されたバージョンが、更新パッケージに従って、装置上でインスタンス生成され得る。いくつかの実施形態では、更新エージェントは、更新パッケージに更新されたストレージゲートウェイプロセスのインスタンスを生成するように指示し得る。この時点で、ストレージゲートウェイプロセスの両方のバージョンが装置上でインスタンス生成されるが；現在のストレージゲートウェイプロセスは、依然として、ゲートウェイ動作（例えば、書込み要求を含む入出力要求の受信および処理、書込みデータの書込みログへの付加、書込みデータの書込みログからのアップロード、書込みログのインメモリ部分をローカルデータストア上の永続記憶装置へのフラッシュなどの更新シーケンスの要素の実行など）を実行している可能性がある。しかし、いくつかの実施形態では、更新されたゲートウェイプロセスは、後まで、例えば、現在のストレージゲートウェイプロセスが書込みログのインメモリ部分のローカルデータストアへのフラッシュを完了する後まで、インスタンス生成されない可能性があることに留意されたい。
【０２０３】
現在のゲートウェイプロセスがその現在の設定を保存した後、更新されたゲートウェイプロセスは、ストレージゲートウェイ動作を現在のゲートウェイプロセスから引き継ぐ準備をするために、保存された現在の設定のロード、およびそれに応じて自身の設定を開始し得ることに留意されたい。
【０２０４】
現在のゲートウェイプロセスは、書込みデータを、ローカルデータストア上で実装された書込みログに付加する。しかし、書込みログの一部は、ゲートウェイプロセスがその上で実装される装置上のメモリ内で維持される。ゲートウェイプロセスは、新しい書込みデータを書込みログのインメモリ部分内のバッファに付加し、完全なバッファ（例えば、ブロック）をローカルデータストア上の書込みログに格納する。シャットダウンの前に、現在のゲートウェイプロセスは、書込みログのインメモリ部分から全ての書込みデータをローカルデータストアにフラッシュする必要がある。１３０８に示すように、現在のゲートウェイプロセスは、書込みログのインメモリ部分内の現在の書込みログの内容の、ローカルデータストアへの積極的フラッシュを実行するが、その間依然として、クライアント入出力ポート（単数または複数）上で新しい入出力要求を受信し、新しい書込みデータを書込みログのインメモリ部分に付加している。書込みログのインメモリ部分内の現在の書込みデータのローカルデータストアへの移動が、通常のゲートウェイプロセス動作中よりも高い優先度で実行され得、また、ローカルデータストアに対する他の入出力動作よりも高い優先度で実行され得るので、書込みログのインメモリ部分内に現在ある書込みデータのこのフラッシュは、「積極的」と呼ばれ得る。書込みログデータの書込みログのインメモリ部分からローカルデータストアへの移動は、通常のディスク入出力動作と競合して遅延を生じないように、通常、低い優先度で実行され得るか、またはバックグラウンドで実行され得る。
【０２０５】
１３１０に示すように、書込みログのインメモリ部分内の現在の書込みデータのローカルデータストアへの積極的フラッシュの完了後、現在のゲートウェイプロセスは、クライアント入出力ポート（単数または複数）上での入出力要求の処理を停止する。少なくともいくつかの実施形態では、ストレージゲートウェイプロセスは、入出力要求の受入れを停止し、クライアントプロセス（単数または複数）が入出力要求を再試行できるように、クライアントプロセス（単数または複数）によって使用される入出力プロトコル（例えば、ｉＳＣＳＩプロトコル）に依存して、入出力要求が受信されていないことを検出するために、入出力ポートと通信する。あるいは、いくつかの実施形態では、現在のゲートウェイプロセスは、クライアント入出力ポート（単数または複数）に到着する入出力要求に対して、例えば、現在のゲートウェイプロセスがビジーであり、入出力要求が後で再試行されるべきであることを示す、エラーメッセージで応答し得る。
【０２０６】
クライアントプロセス（単数または複数）は、入出力要求をストレージゲートウェイ入出力ポート（単数または複数）に投入し続け得、入出力要求がストレージゲートウェイプロセスによって処理されていないことを（例えば、入出力プロトコルによって入出力要求が受信されていないことを検出するか、またはストレージゲートウェイプロセスからエラーメッセージを受信するかのいずれかによって）検出すると、ある期間待機して、入出力要求を再試行し得る。しかし、現在のゲートウェイプロセスは、入出力ポート（単数または複数）を保持し続け得る。
【０２０７】
１３１２に示すように、現在のゲートウェイプロセスは、書込みログのインメモリ部分内の現在の書込みデータのローカルデータストアへの積極的フラッシュを完了して、クライアントプロセス（単数または複数）からの入出力要求の処理を停止した後、書込みログのインメモリ部分内の新しい書込みデータをローカルデータストアにフラッシュする。書込みログフラッシュのこの段階は、一般に、短期間で、通常は（必ずしもではないが）１秒未満で、実行され得ることに留意されたい。この期間中、クライアントプロセス（単数または複数）は、入出力ポートに対して、新しい入出力要求の投入および入出力要求の再試行を継続し得る。
【０２０８】
１３１４に示すように、新しい書込みデータが書込みログのインメモリ部分からローカルデータストアにフラッシュされた後、現在のゲートウェイプロセスは、クライアント入出力ポート（単数または複数）を解放し得る。少なくともいくつかの実施形態では、現在のゲートウェイプロセスは、入出力ポート（単数または複数）が解放されていることを更新されたゲートウェイプロセスに信号通知し得る。書込みログのインメモリ部分のローカルデータストアへのフラッシュを完了して、クライアント入出力ポートを解放した後のある時点で、現在のゲートウェイプロセスが終了し得る。
【０２０９】
１３１６に示すように、更新されたゲートウェイプロセスは、入出力ポート（単数または複数）が解放されていることを検出し、入出力ポート（単数または複数）を開いて、クライアントプロセス（単数または複数）からの入出力要求の受入れおよび処理を開始する。入出力ポート（単数または複数）が解放されていることを検出するために、いくつかの実施形態では、更新されたゲートウェイプロセスは、ポートが解放されていることを示す信号を現在のゲートウェイプロセスから受信し得る。あるいは、更新されたゲートウェイプロセスは、ポート（単数または複数）をうまく取得するまで、入出力ポート（単数または複数）を獲得しようとし得る。いくつかの実施形態では、入出力ポート（単数または複数）が解放されていることを検出するために、他の技術が使用され得る。更新されたゲートウェイプロセスが入出力ポートを開いた後、クライアントプロセス（単数または複数）が再試行してきた任意の入出力要求が、更新されたゲートウェイプロセスによって受信および処理され得、新しい入出力要求も更新されたゲートウェイプロセスによって受信および処理され得る。少なくともいくつかの実施形態では、入出力ポート（単数または複数）を開くために、更新されたゲートウェイプロセスは、使用されている入出力プロトコル（例えば、ｉＳＣＳＩプロトコル）に従って、アドレスをソケットにバインドする。しかし、使用される入出力プロトコルに応じて、入出力ポートを開くための他の方法がいくつかの実施形態で使用され得る。
【０２１０】
少なくともいくつかの実施形態では、動作を現在のゲートウェイプロセスから引き継ぐ際、更新されたゲートウェイプロセスは、実行すべき様々なハウスキーピングまたは他のタスクを有し得る。例えば、更新されたゲートウェイプロセスは、ローカルデータストア上のゲートウェイデータ（例えば、書込みログ）へのアクセスを設定し、１つまたは複数のボリューム（単数または複数）を再マウントして、ゲートウェイ動作を引き継ぐために一般に実行される必要のある任意のタスクを実行し得る。キャッシュゲートウェイ設定について、読取りキャッシュは、更新されたゲートウェイプロセスがゲートウェイ動作を開始する際にコールドであり得、従って、読取りキャッシュは、リフレッシュされる必要があり得る。
【０２１１】
図２９の少なくともいくつかの要素は、異なる順序で実行され得、かつ／または少なくともいくつかの要素の２つ以上が少なくとも一部同時に実行され得ることに留意されたい。一例として、いくつかの実施形態では、更新されたゲートウェイプロセスは、現在のゲートウェイプロセスが更新シーケンスを開始するように指示される前に、インスタンス生成され得；他の実施形態では、更新されたゲートウェイプロセスは、現在のゲートウェイプロセスがその現在の設定を保存した後に、インスタンス生成され得る。いくつかの実施形態では、更新されたゲートウェイプロセスは、現在のゲートウェイプロセスが書込みログのインメモリ部分をローカルデータストアにフラッシュしている間に、保存された設定情報をロードし、自己設定して、入出力ポートを取得しようとする試みを開始し得る。いくつかの実施形態では、更新されたゲートウェイプロセスは、現在のゲートウェイプロセスが書込みログのインメモリ部分のローカルデータストアへのフラッシュを完了する後まで、インスタンス生成されない場合がある。
【０２１２】
少なくともいくつかの実施形態では、図２９の要素１３０２〜１３１６の少なくともいくつかが、図に示すように、指定された更新ウィンドウ内で実行され得る。更新ウィンドウは、例えば、特定の時刻に開始する比較的短期間（例えば、２０秒、または２分、または２０分）であり得、また、特定の曜日であり得る。少なくともいくつかの実施形態では、クライアントネットワーク上のストレージゲートウェイを実装するクライアントまたは顧客が、更新ウィンドウの時間および期間を指定し得る。
【０２１３】
〔下位互換性の処理〕
ストレージゲートウェイに対するいくつかの更新が、設定情報および／またはゲートウェイデータ（例えば、書込みログ、読取りキャッシュ、および／またはメタデータストア）に対する下位互換性を壊し得る。従って、いくつかの更新について、更新されたゲートウェイプロセスは、設定情報および／またはゲートウェイデータの以前のバージョン（単数または複数）を少なくとも読み取り、その設定情報および／またはゲートウェイデータを新しいバージョンにおそらく適切に変換することができる１つまたは複数の構成要素を含み得る。少なくともいくつかの実施形態では、設定情報および／またはゲートウェイデータは、ゲートウェイプロセスが設定情報および／またはゲートウェイデータを適切に識別できるように、バージョン管理され得る。
【０２１４】
少なくともいくつかの実施形態では、ゲートウェイデータが更新されたゲートウェイプロセスによって変換される必要がある場合、更新されたゲートウェイプロセスが全てのゲートウェイデータおよび設定情報に対する明瞭なアクセスを有することができるように、現在のゲートウェイプロセスが、書込みログのインメモリ部分のローカルデータストアへのフラッシュを完了して、入出力ポートを解放する後まで、更新されたゲートウェイプロセスは、インスタンス生成しないことがある。いくつかの実施形態では、更新されたゲートウェイプロセスは、更新において問題が生じた場合に、ゲートウェイプロセスの以前のバージョンに戻すことが可能になるように、ローカルデータストア上のゲートウェイデータを変換する前に、ゲートウェイデータのコピーを作成し得る。コピーの作成後、ローカルデータストア上のゲートウェイデータは、次いで、変換され得る。これは、更新されたゲートウェイプロセスが入出力ポートを開く前に行われ得る。いくつかの実施形態では、更新されたゲートウェイプロセスは、代わりに、必要に応じて、入出力ポートを開いてローカルデータストア上のゲートウェイデータを変換し得る。
【０２１５】
〔更新セキュリティ〕
少なくともいくつかの実施形態では、ストレージゲートウェイを更新する際に改善されたセキュリティを提供するために、設定情報および／またはゲートウェイデータがチェックサムを計算され得、そのチェックサム（すなわち、ＳＨＡ２５６チェックサム）は、ストレージプロバイダネットワーク上のサーバー、例えば、ゲートウェイ制御サーバーによって、例えば、暗号秘密鍵技術を使用して、署名され得る。更新されたゲートウェイアプライアンスは、クライアント側入出力ポート上での入出力動作を再開する前に、チェックサムをロードし、そのチェックサムをストレージプロバイダサーバーで認証し得る。
【０２１６】
〔例示説明となるシステム〕
少なくともいくつかの実施形態では、本明細書で説明する１つまたは複数のストレージゲートウェイ技術のうちの一部または全部を実装するコンピュータシステムは、図３０に示すコンピュータシステム３０００などの、１つもしくは複数のコンピュータアクセス可能媒体を含むか、またはそれにアクセスするように設定される汎用コンピュータシステムを含み得る。図示した実施形態では、コンピュータシステム３０００は、入力／出力（Ｉ／Ｏ）インタフェース３０３０を介してシステムメモリ３０２０に結合された１つまたは複数のプロセッサ３０１０を含む。コンピュータシステム３０００は、入出力インタフェース３０３０に結合されたネットワークインタフェース３０４０をさらに含む。
【０２１７】
様々な実施形態では、コンピュータシステム３０００は、１つのプロセッサ３０１０を含む単一プロセッサシステム、またはいくつかの（例えば、２、４、８、または別の適切な数）プロセッサ３０１０を含むマルチプロセッサシステムであり得る。プロセッサ３０１０は、命令を実行できる任意の適切なプロセッサであり得る。例えば、様々な実施形態では、プロセッサ３０１０は、ｘ８６、ＰｏｗｅｒＰＣ、ＳＰＡＲＣ、またはＭＩＰＳ  ＩＳＡ、もしくは任意の他の適切なＩＳＡなどの、任意の様々な命令セットアーキテクチャ（ＩＳＡ）を実装する汎用または組込みプロセッサであり得る。マルチプロセッサシステムでは、プロセッサ３０１０の各々は、一般に、同じＩＳＡを実装し得るが、必ずしもその必要はない。
【０２１８】
システムメモリ３０２０は、プロセッサ（単数または複数）３０１０によってアクセス可能な命令およびデータを格納するように構成され得る。様々な実施形態では、システムメモリ３２０は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、シンクロナスダイナミックＲＡＭ（ＳＤＲＡＭ）、不揮発性／フラッシュ型メモリ、または任意の他のタイプのメモリなどの、任意の適切なメモリ技術を使用して実装され得る。図示した実施形態では、ストレージゲートウェイ技術のための、前述した方法、技術、およびデータなどの、１つまたは複数の所望の機能を実現する、プログラム命令およびデータが、システムメモリ３０２０内にコード３０２５およびデータ３０２６として格納される。
【０２１９】
一実施形態では、入出力インタフェース３０３０は、ネットワークインタフェース３０４０または他の周辺インタフェースを含め、プロセッサ３０１０、システムメモリ３０２０、および装置内の任意の周辺装置の間の入出力トラフィックを調整するように設定され得る。いくつかの実施形態では、入出力インタフェース３０３０は、１つの構成要素（例えば、システムメモリ３０２０）からのデータ信号を別の構成要素（例えば、プロセッサ３０１０）による使用に適したフォーマットに変換するため、任意の必要なプロトコル、タイミング、または他のデータ変換を実行し得る。いくつかの実施形態では、入出力インタフェース３０３０は、例えば、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス規格の変形またはユニバーサルシリアルバス（ＵＳＢ）規格などの、様々なタイプの周辺機器用バスを通して取り付けられた装置に対するサポートを含み得る。いくつかの実施形態では、入出力インタフェース３０３０の機能は、例えば、ノースブリッジおよびサウスブリッジなどの、２つ以上の別個の構成要素に分割され得る。また、いくつかの実施形態では、システムメモリ３０２０へのインタフェースなどの、入出力インタフェース３０３０の機能の一部または全部が、プロセッサ３０１０に直接組み込まれ得る。
【０２２０】
ネットワークインタフェース３０４０は、コンピュータシステム３０００と、ネットワークまたは複数のネットワーク３０５０に接続された他の装置３０６０（例えば、本明細書に記載される他の図に示されるような、他のコンピュータシステムまたは装置など）との間でデータが交換できるように設定され得る。様々な実施形態では、ネットワークインタフェース３０４０は、例えば、イーサネット（登録商標）ネットワークのタイプなどの、任意の適切な有線または無線の一般的なデータネットワークを経由した通信をサポートし得る。さらに、ネットワークインタフェース３０４０は、アナログ音声ネットワークもしくはデジタルファイバー通信ネットワークなどの電気通信／電話網を介した、ファイバーチャンネルＳＡＮなどのストレージエリアネットワークを介した、または任意の他の適切なネットワークおよび／もしくはプロトコルを介した、通信をサポートし得る。
【０２２１】
いくつかの実施形態では、システムメモリ３０２０は、ストレージゲートウェイ技術の実施形態の実現のため、他の図に関連して前述したプログラム命令およびデータを格納するように設定されたコンピュータアクセス可能媒体の一実施形態であり得る。しかし、他の実施形態では、プログラム命令および／またはデータは、異なるタイプのコンピュータアクセス可能媒体上で、受信、送信、または格納され得る。一般的に言えば、コンピュータアクセス可能媒体は、磁気または光媒体、例えば、入出力インタフェース３０３０を介してコンピュータシステム３０００に結合されたディスクまたはＤＶＤ／ＣＤ、などの、持続性記憶媒体またはメモリ媒体を含み得る。持続性コンピュータアクセス可能記憶媒体は、コンピュータシステム３０００のいくつかの実施形態で、システムメモリ３０２０または別のタイプのメモリとして含まれ得る、ＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ  ＳＤＲＡＭ、ＲＤＲＡＭ、ＳＲＡＭなど）、ＲＯＭなどの、任意の揮発性または不揮発性媒体も含み得る。さらに、コンピュータアクセス可能媒体は、ネットワークインタフェース３０４０を介して実現され得るような、ネットワークおよび／または無線リンクなどの通信媒体を介して伝達された、電気、電磁気、またはデジタル信号などの、伝送媒体または信号を含み得る。
【０２２２】
〔結論〕
様々な実施形態は、コンピュータアクセス可能媒体に関する前述の説明に従って実現される命令および／またはデータの受信、送信または格納をさらに含み得る。一般的に言えば、コンピュータアクセス可能媒体は、例えば、磁気もしくは光媒体（例えば、ディスクもしくはＤＶＤ／ＣＤ−ＲＯＭ）、ＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ、ＲＤＲＡＭ、ＳＲＡＭなど）、ＲＯＭなどの揮発性もしくは不揮発性媒体、などの記憶媒体またはメモリ媒体、ならびに、ネットワークおよび／もしくは無線リンクなどの通信媒体を介して伝達された、電気、電磁気、もしくはデジタル信号などの、伝送媒体または信号を含み得る。
【０２２３】
図に示し、本明細書で説明したような様々な方法は、方法の例となる実施形態を表す。それらの方法は、ソフトウェア、ハードウェア、またはそれらの組合せで実現され得る。方法の順序は変更され得、また、様々な要素が追加、再順序付け、結合、省略、修正など、され得る。
【０２２４】
本開示の利益を得る当業者には明らかであるように、様々な修正および変更が行われ得る。かかる修正および変更の全てを包含することが意図され、したがって、前述の説明は、制限的な意味よりもむしろ、例示的な意味と見なされる。
【０２２５】
本開示の様々な実施形態が、以下の付記項を考慮して、記述できる：
付記項１．ローカルネットワーク上のコンピューティング装置上で実行する更新エージェントによって、コンピューティング装置上で実行する現在のプロセスに対する更新パッケージが、リモートネットワーク上で利用可能であることを検出することであって、現在のプロセスが、書込み要求を含む入出力要求を１つまたは複数の入出力ポートを介して、１つまたは複数のクライアントプロセスから受信し、その書込み要求によって示される書込みデータをローカルデータストア上の書込みログのインメモリ部分に付加して、書込みデータを書込みログからリモートデータストアにアップロードする、検出することと、
前記検出に応答して、更新パッケージをコンピューティング装置にダウンロードすることと、
現在のプロセスに更新シーケンスを開始するように指示することと、
現在のプロセスによって、現在の設定を外部ストアに格納することであって、その現在の設定が１つまたは複数の入出力ポートの少なくとも指示を含む、格納することと、
ダウンロードされた更新パッケージに従って、コンピューティング装置上で更新されたプロセスのインスタンスを生成することと、
更新されたプロセスによって、現在の設定を外部ストアからロードすることと、
現在のプロセスによって、書込みデータを書込みログのインメモリ部分からローカルデータストアにフラッシュすることと、
現在のプロセスによって、１つまたは複数の入出力ポートを解放することと、
更新されたプロセスによって、書込み要求を含む入出力要求を１つまたは複数の入出力ポートを介して、１つまたは複数のクライアントプロセスから受信することと
を含む方法。
【０２２６】
付記項２．リモートデータストアがリモートネットワーク上のストレージサービスによって維持され、現在のプロセスが、ローカルネットワーク上の１つまたは複数のクライアントプロセスと、リモートネットワーク上のストレージサービスとの間のインタフェースとして機能するストレージゲートウェイの現在のバージョンであり、かつ、更新されたプロセスがストレージゲートウェイのより新しいバージョンである、付記項１に記載の方法。
【０２２７】
付記項３．現在のプロセスによって、書込みデータを書込みログのインメモリ部分からローカルデータストアに前記フラッシュすることが、
１つまたは複数の入出力ポート上で新しい書込み要求を受け付けて、その新しい書込み要求によって示される新しい書込みデータを書込みログのインメモリ部分に付加する間に、書込みログのインメモリ部分内の現在の書込みデータをローカルデータストアにフラッシュすることと、
書込みログのインメモリ部分内の現在の書込みデータの、ローカルデータストアへの前記フラッシュの完了後、１つまたは複数の入出力ポート上での書込み要求の受付け、および書込みログのインメモリ部分内の新しい書込みデータのローカルデータストアへのフラッシュを停止することと
を含む、付記項１に記載の方法。
【０２２８】
付記項４．指定された更新ウィンドウの間、前記指示すること、前記格納すること、前記インスタンス生成すること、前記ロードすること、前記フラッシュすること、および前記解放することをさらに含む、付記項１に記載の方法。
【０２２９】
付記項５．現在のプロセスに更新シーケンスを開始するように前記指示することが、更新エージェントによって、または更新されたプロセスによって実行される、付記項１に記載の方法。
【０２３０】
付記項６． １つまたは複数の入出力ポートが現在のプロセスによって解放されていることの判断に応答して、１つまたは複数のクライアントプロセスから入出力要求を受信するために１つまたは複数の入出力ポートを開くことと、
受信した書込み要求によって示される書込みデータを書込みログに付加し、書込みデータを書込みログからデータストアにアップロードすることとを含む、
更新されたプロセスをさらに含む、付記項１に記載の方法。
【０２３１】
付記項７．更新されたプロセスが、前記フラッシュが完了する後まで、コンピューティング装置上でインスタンス生成されない、付記項１に記載の方法。
【０２３２】
付記項８．更新されたプロセスが、現在のプロセスに更新シーケンスを開始するように前記指示する前に、コンピューティング装置上でインスタンス生成される、付記項１に記載の方法。
【０２３３】
付記項９．少なくとも１つのプロセッサと、
プログラム命令を含むメモリであって、そのプログラム命令が、１つまたは複数の入出力ポートを介して、ローカルネットワーク上で１つまたは複数のクライアントプロセスから書込み要求を含む入出力要求を受信し、その書込み要求によって示される書込みデータをローカルデータストア上の書込みログのインメモリ部分に付加して、書込みデータを書込みログからリモートデータストアにアップロードする、ストレージゲートウェイプロセスを実現するように少なくとも１つのプロセッサによって実行可能である、メモリとを備える装置であって、
プログラム命令が、更新パッケージをリモートネットワークからダウンロードし、ストレージゲートウェイプロセスにシャットダウンするように指示し、ダウンロードされた更新パッケージに従ってメモリ内で更新されたストレージゲートウェイプロセスのインスタンスを生成するように、少なくとも１つのプロセッサによってさらに実行可能であり、
シャットダウンする指示の受信に応答して、ストレージゲートウェイプロセスが、１つまたは複数の入出力ポートの指示を含むストレージゲートウェイ設定を保存し、書込みデータを書込みログのインメモリ部分からローカルデータストアにフラッシュして、１つまたは複数の入出力ポートを解放し、
更新されたストレージゲートウェイプロセスが保存されたストレージゲートウェイ設定をロードし、ストレージゲートウェイプロセスが１つまたは複数の入出力ポートを解放した後、ストレージゲートウェイ動作をストレージゲートウェイプロセスから引き継ぐ、
装置。
【０２３４】
付記項１０．ストレージゲートウェイ動作をストレージゲートウェイプロセスから引き継ぐために、更新されたゲートウェイプロセスが、１つまたは複数の入出力ポートがストレージゲートウェイプロセスによって解放されていることを検出し、その１つまたは複数の入出力ポートを開き、１つまたは複数の入出力ポートを介して１つまたは複数のクライアントプロセスからの書込み要求を含む入出力要求の受信および処理を開始する、付記項９に記載の装置。
【０２３５】
付記項１１．更新されたゲートウェイプロセスによって１つまたは複数のクライアントプロセスから受信された書込み要求が、書込みログのインメモリ部分からの書込みデータの前記フラッシュ中に、ストレージゲートウェイプロセスによって受け入れられなかった書込み要求の少なくとも１つの再試行を含む、付記項１０に記載の装置。
【０２３６】
付記項１２．１つまたは複数の入出力ポートを介して１つまたは複数のクライアントプロセスから受信された書込み要求を処理するために、更新されたストレージゲートウェイプロセスが、その書込み要求によって示される書込みデータを書込みログに付加し、書込みデータを書込みログからリモートデータストアにアップロードする、付記項１０に記載の装置。
【０２３７】
付記項１３．書込みデータを書込みログのインメモリ部分からローカルデータストアにフラッシュするために、ストレージゲートウェイプロセスが：
書込み要求を含む新しい入出力要求を１つまたは複数の入出力ポート上で受け入れて、その新しい書込み要求によって示される新しい書込みデータを書込みログのインメモリ部分に付加する間に、書込みログのインメモリ部分内の現在の書込みデータをローカルデータストアにフラッシュし、
書込みログのインメモリ部分内の現在の書込みデータをローカルデータストアにフラッシュした後、後続の書込み要求の１つまたは複数の入出力ポート上での受入れを停止して、書込みログのインメモリ部分内の新しい書込みデータをローカルデータストアにフラッシュする、
付記項９に記載の装置。
【０２３８】
付記項１４．ストレージゲートウェイプロセスが後続の書込み要求の各々に応答して、それぞれのクライアントプロセスに書込み要求を再試行するように通知する、付記項１３に記載の装置。
【０２３９】
付記項１５．ストレージゲートウェイプロセスが、指定された更新ウィンドウの間、ストレージゲートウェイ設定を保存し、書込みデータを書込みログのインメモリ部分からローカルデータストアにフラッシュして、１つまたは複数の入出力ポートを解放する、付記項９に記載の装置。
【０２４０】
付記項１６．更新されたストレージゲートウェイプロセスが、指定された更新ウィンドウの間、保存されたストレージゲートウェイ設定をロードして、ストレージゲートウェイ動作をストレージゲートウェイプロセスから引き継ぐ、付記項１５に記載の装置。
【０２４１】
付記項１７．１つまたは複数の入出力ポートの前記解放の後、ストレージゲートウェイプロセスが終了する、付記項９に記載の装置。
【０２４２】
付記項１８．ストレージゲートウェイプロセスをコンピューティング装置上で実現するためにコンピュータ実行可能なプログラム命令を格納する持続性コンピュータアクセス可能記憶媒体であって、ストレージゲートウェイプロセスが：
１つまたは複数の入出力ポートを介してローカルネットワーク上で１つまたは複数のクライアントプロセスから書込み要求を含む入出力要求を受信すること、その書込み要求によって示される書込みデータをローカルデータストア上の書込みログのインメモリ部分に付加すること、および書込みデータを書込みログからリモートデータストアにアップロードすることを含むストレージゲートウェイ動作を実行することと、
更新されたストレージゲートウェイプロセスがストレージゲートウェイ動作を引き継ぐことができるように、ストレージゲートウェイプロセスがシャットダウンされるという指示を受信することと、
前記指示の受信に応答して、更新されたストレージゲートウェイプロセスがストレージゲートウェイ動作を引き継ぐことができるように、１つまたは複数の入出力ポートの指示を含むストレージゲートウェイ設定を保存し、書込みデータを書込みログのインメモリ部分からローカルデータストアにフラッシュして、１つまたは複数の入出力ポートを解放することと
を実行可能である、
持続性コンピュータアクセス可能記憶媒体。
【０２４３】
付記項１９．ストレージゲートウェイ動作をストレージゲートウェイプロセスから引き継ぐために、更新されたストレージゲートウェイプロセスが、１つまたは複数の入出力ポートがストレージゲートウェイプロセスによって解放されていることを検出し、その１つまたは複数の入出力ポートを開き、１つまたは複数の入出力ポートを介して１つまたは複数のクライアントプロセスから書込み要求を含む入出力要求を受信および処理するように動作可能である、付記項１８に記載の持続性コンピュータアクセス可能記憶媒体。
【０２４４】
付記項２０．書込みデータを書込みログのインメモリ部分からローカルデータストアにフラッシュするために、ストレージゲートウェイプロセスが、
新しい書込み要求を含む入出力要求を１つまたは複数の入出力ポート上で受け入れて、その新しい書込み要求によって示される新しい書込みデータを書込みログのインメモリ部分に付加する間に、書込みログのインメモリ部分内の現在の書込みデータをローカルデータストアにフラッシュし、
書込みログのインメモリ部分内の現在の書込みデータをローカルデータストアにフラッシュした後、１つまたは複数の入出力ポート上での後続の書込み要求を拒否している間に、書込みログのインメモリ部分内の新しい書込みデータをローカルデータストアにフラッシュするように、
さらに動作可能である、
付記項１８に記載の持続性コンピュータアクセス可能記憶媒体。
【０２４５】
付記項２１．それぞれのクライアントプロセスに書込み要求を再試行するように通知するために、ストレージゲートウェイプロセスが後続の書込み要求の各々に応答するようにさらに動作可能である、付記項２０に記載の持続性コンピュータアクセス可能記憶媒体。
【０２４６】
付記項２２．ストレージゲートウェイプロセスが、指定された更新ウィンドウの間、ストレージゲートウェイ設定を保存し、書込みデータを書込みログのインメモリ部分からローカルデータストアにフラッシュして、１つまたは複数の入出力ポートを解放するようにさらに動作可能である、付記項１８に記載の持続性コンピュータアクセス可能記憶媒体。
【０２４７】
付記項２３．１つまたは複数の入出力ポートの前記解放の後、ストレージゲートウェイプロセスが終了するようにさらに動作可能である、付記項１８に記載の持続性コンピュータアクセス可能記憶媒体。
【図１】
0005716134.tif 000003
【図２】
0005716134.tif 000004
【図３】
0005716134.tif 000005
【図４】
0005716134.tif 000006
【図５】
0005716134.tif 000007
【図６】
0005716134.tif 000008
【図７】
0005716134.tif 000009
【図８】
0005716134.tif 000010
【図９】
0005716134.tif 000011
【図１０】
0005716134.tif 000012
【図１１】
0005716134.tif 000013
【図１２】
0005716134.tif 000014
【図１３】
0005716134.tif 000015
【図１４】
0005716134.tif 000016
【図１５】
0005716134.tif 000017
【図１６Ａ】
0005716134.tif 000018
【図１６Ｂ】
0005716134.tif 000019
【図１７Ａ】
0005716134.tif 000020
【図１７Ｂ】
0005716134.tif 000021
【図１８】
0005716134.tif 000022
【図１９】
0005716134.tif 000023
【図２０】
0005716134.tif 000024
【図２１】
0005716134.tif 000025
【図２２】
0005716134.tif 000026
【図２３Ａ】
0005716134.tif 000027
【図２３Ｂ】
0005716134.tif 000028
【図２３Ｃ】
0005716134.tif 000029
【図２３Ｄ】
0005716134.tif 000030
【図２４】
0005716134.tif 000031
【図２５】
0005716134.tif 000032
【図２６】
0005716134.tif 000033
【図２７】
0005716134.tif 000034
【図２８Ａ】
0005716134.tif 000035
【図２８Ｂ】
0005716134.tif 000036
【図２８Ｃ】
0005716134.tif 000037
【図２８Ｄ】
0005716134.tif 000038
【図２９】
0005716134.tif 000039
【図３０】
0005716134.tif 000040