(57)【特許請求の範囲】
【請求項１】
キー値に基づく記憶システムに使用するための方法であって、
オブジェクトをＫ個（Ｋは整数）の部分に分割するステップと、
キー値ストアに前記オブジェクトを置く遅延目標及び後続の読み出し要求の遅延目標の一方又は両方を満足するように生成すべきパリティブロックの数を求めるサブステップを含む、前記キー値に基づく記憶システムの遅延性能に応じて前記Ｋ個の部分に適用するための消失訂正符号化を選択するステップであり、両方の遅延目標が、複数の異なる要求タイプ及びオブジェクトサイズについての測定を通じて得られる遅延分布を所与として異なる数のパリティブロックが使用されるときの遅延性能のオフライン性能シミュレーションに基づく、前記選択するステップと、
前記Ｋ個の部分に前記消失訂正符号化を適用して、Ｎ個のデータブロックを生成するステップと、
別個の接続を使用して前記Ｎ個のデータブロックを並列に前記記憶システムに送るステップと
を含む方法。
【請求項２】
オブジェクトを前記記憶システムに置き、オブジェクトを前記記憶システムから取得する前記遅延性能を測定するステップと、
前記遅延性能の測定の結果に基づいて前記オフライン性能シミュレーションを生成するステップと
をさらに含む、請求項１に記載の方法。
【請求項３】
適用するための消失訂正符号化を選択する前記ステップが、前記遅延性能の累積分布関数に基づく、請求項１に記載の方法。
【請求項４】
前記適用するための消失訂正符号化を選択する前記ステップが、実行されるべき動作に関連付けられる前記遅延性能に基づく、請求項１に記載の方法。
【請求項５】
前記適用するための消失訂正符号化を選択する前記ステップが、前記オブジェクトのサイズに基づく、請求項１に記載の方法。
【請求項６】
前記消失訂正符号化が、順方向誤り訂正（ＦＥＣ）コード化を含む、請求項１に記載の方法。
【請求項７】
前記別個の接続を介して前記Ｎ個のデータブロックを前記記憶システムに送る前記ステップが、前記別個の接続の２つを介して前記Ｎ個のブロックのうち少なくとも２つを並列に送るステップを含む、請求項１に記載の方法。
【請求項８】
前記Ｋ個の部分の各々に個別のキーを割り当てるステップと、
前記Ｋ個の部分に前記消失訂正符号化を適用する結果もたらされるＮ個のデータブロックの各々に個別のキーを割り当てるステップと、
前記Ｋ個の部分に割り当てられている前記キー及び前記Ｎ個のブロックに割り当てられている前記キーを順序付けするステップと
をさらに含み、
別個の接続を使用して前記Ｎ個のデータブロックを前記記憶システムへ送る前記ステップが、前記別個の接続上でのＮ個の別個の転送のうちＫ個が首尾よく完了した後に首尾よく完了しなかった前記Ｎ個の別個の転送のいずれかを取り消すサブステップを含む、別個の接続上ですべてのＮ個のブロックを並列に前記キー値ストアへ送るステップを含む、請求項１に記載の方法。
【請求項９】
複数の個々の要求を生成するステップであって、各要求がストレージから前記Ｎ個のデータブロックのうちの１つを要求するためのものである、前記生成するステップと、
Ｎ個のブロックの各々が受信されたとき、消失復号を適用するステップと、
Ｎ個のブロックのうちＫ個を受信した後に、未処理のままであるＮ−Ｋ個の要求を取り消すステップと、
要求者に前記オブジェクトを返すステップと
をさらに含む、請求項１に記載の方法。
【請求項１０】
Ｎが利用可能なスレッドの数である、請求項１に記載の方法。
【請求項１１】
前記別個の接続を使用した転送が、並列及び直列転送の組み合わせを含む、請求項１に記載の方法。
【請求項１２】
前記別個の接続上でのＮ個の別個の転送のうちＫ個が首尾よく完了した後に、首尾よく完了しなかった前記Ｎ個の別個の転送のいずれかを取り消すステップをさらに含む、請求項１に記載の方法。
【請求項１３】
キー値に基づく記憶システムに使用するための装置であって、
ネットワークからオブジェクトを受信するために動作可能である、前記ネットワークに結合するための通信インターフェースと、
前記オブジェクトを記憶するために前記通信インターフェースに結合されているメモリと、
前記メモリ及び前記通信インターフェースに結合されているプロセッサと
を備え、前記プロセッサが、
前記オブジェクトをＫ個（Ｋは整数）の部分に分割し、
少なくとも一部にはキー値ストアに前記オブジェクトを置く遅延目標及び後続の読み出し要求の遅延目標の一方又は両方を満足するように生成すべきパリティブロックの数を求めることにより、前記キー値に基づく記憶システムの遅延性能に応じて前記Ｋ個の部分に適用するための消失訂正符号化を選択し、両方の遅延目標は、複数の異なる要求タイプ及びオブジェクトサイズについての測定を通じて得られる遅延分布を所与として異なる数のパリティブロックが使用されるときの遅延性能のオフライン性能シミュレーションに基づくものであり、
前記Ｋ個の部分に前記消失訂正符号化を適用して、Ｎ個のデータブロックを生成するように動作可能であり、
前記プロセッサは、前記通信インターフェースを用いて、別個の接続を使用して前記Ｎ個のデータブロックを並列に前記記憶システムに送るように動作する、装置。
【請求項１４】
前記プロセッサが、
オブジェクトを前記記憶システムに置き、オブジェクトを前記記憶システムから取得する前記遅延性能を測定し、
前記遅延性能の測定の結果に基づいて前記オフライン性能シミュレーションを生成するようにさらに動作可能である、請求項１３に記載の装置。
【請求項１５】
プロセッサが、前記遅延性能の累積分布関数に基づいて適用するための前記消失訂正符号化を選択する、請求項１３に記載の装置。
【請求項１６】
前記プロセッサが、実行されるべき動作に関連付けられる前記遅延性能に基づいて適用するための前記消失訂正符号化を選択する、請求項１３に記載の装置。
【請求項１７】
前記プロセッサが、前記オブジェクトのサイズに基づいて適用するための前記消失訂正符号化を選択する、請求項１３に記載の装置。
【請求項１８】
前記消失訂正符号化が、順方向誤り訂正（ＦＥＣ）コード化を含む、請求項１３に記載の装置。
【請求項１９】
前記通信インターフェースが、前記別個の接続の２つを介して前記Ｎ個のブロックのうち少なくとも２つを並列に送る、請求項１３に記載の装置。
【請求項２０】
前記プロセッサが、
前記Ｋ個の部分の各々に個別のキーを割り当て、
前記Ｋ個の部分に前記消失訂正符号化を適用する結果もたらされるＮ個のデータブロックの各々に個別のキーを割り当て、
前記Ｋ個の部分に割り当てられている前記キー及び前記Ｎ個のブロックに割り当てられている前記キーを順序付けする
ようにさらに動作可能であり、
前記通信インターフェースが、別個の接続上でＮ個の別個の転送を使用して前記Ｎ個のブロックを並列に前記キー値ストアへ送り、前記Ｎ個の別個の転送のうちＫ個が首尾よく完了した後に首尾よく完了しなかった前記Ｎ個の別個の転送のいずれかを取り消す、請求項１３に記載の装置。
【請求項２１】
前記プロセッサが、
複数の個々の要求を生成し、各要求がストレージから前記Ｎ個のデータブロックのうちの１つを要求するためのものであり、
Ｎ個のブロックの各々が受信されたとき、消失復号を適用し、
Ｎ個のブロックのうちＫ個を受信した後に、未処理のままであるＮ−Ｋ個の要求を取り消し、
要求者に前記オブジェクトを返す
ようにさらに動作可能である、請求項１３に記載の装置。
【請求項２２】
システムによって実行されたとき、前記システムに、
オブジェクトをＫ個（Ｋは整数）の部分に分割するステップと、
キー値ストアに前記オブジェクトを置く遅延目標及び後続の読み出し要求の遅延目標の一方又は両方を満足するように生成すべきパリティブロックの数を求めるサブステップを含む、キー値に基づく記憶システムの遅延性能に応じて前記Ｋ個の部分に適用するための消失訂正符号化を選択するステップであり、両方の遅延目標が、複数の異なる要求タイプ及びオブジェクトサイズについての測定を通じて得られる遅延分布を所与として異なる数のパリティブロックが使用されるときの遅延性能のオフライン性能シミュレーションに基づく、前記選択するステップと、
前記Ｋ個の部分に前記消失訂正符号化を適用して、Ｎ個のデータブロックを生成するステップと、
別個の接続を使用して前記Ｎ個のデータブロックを並列に前記記憶システムに送るステップと
を含む方法を実行させる命令を記憶している１つ又は複数のコンピュータ読み取り可能な記憶媒体。
【請求項２３】
オブジェクトを前記記憶システムに置き、オブジェクトを前記記憶システムから取得する前記遅延性能を測定するステップと、
前記遅延性能の測定の結果に基づいて前記オフライン性能シミュレーションを生成するステップと
をさらに含む、請求項２２に記載のコンピュータ読み取り可能な記憶媒体。
【請求項２４】
適用するための消失訂正符号化を選択する前記ステップが、前記遅延性能の累積分布関数に基づく、請求項２２に記載のコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、記憶システムの分野に関し、より詳細には、本発明の実施形態は、記憶システム内のオブジェクトの記憶及び取り出しに順方向誤り訂正（ＦＥＣ）を使用することに関する。
［優先権］
本特許出願は、２０１２年６月８日に出願された「Ａ  Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｌｏｗ  Ｄｅｌａｙ  Ａｃｃｅｓｓ  ｔｏ  Ｋｅｙ−Ｖａｌｕｅ  Ｂａｓｅｄ  Ｃｌｏｕｄ  Ｓｔｏｒａｇｅ  Ｓｙｓｔｅｍｓ  Ｕｓｉｎｇ  ＦＥＣ  Ｔｅｃｈｎｉｑｕｅｓ」と題する、対応する米国仮特許出願第６１／６５７，５５４号に対する優先権を主張し、それを参照により組み込む。
【背景技術】
【０００２】
ＡｍａｚｏｎのＳ３のような公衆クラウドにおいて、小さいオブジェクト（たとえば、１キロバイト以下）に関する１回の読み出し又は書き込み動作に対する遅延が数百ミリ秒の遅延になる可能性があり、一方で中サイズのオブジェクト（たとえば、＞１メガバイト）については、遅延は９９及び９９．９パーセンタイルにおいて秒単位になる。１つのトランザクションが同じストレージ設備に対する多くの読み出し及び書き込みを必要とするカスケード動作について、これらの遅延は許容できないほど大きくなる可能性がある。大きいメガバイト単位から構成されるビデオコンテンツについて、起動遅延を小さくすること、及び、ビデオ再生に中断が無いことを達成しながら、Ｓ３タイプのストレージをビデオアーカイブとしてどのように使用するかも重大な問題になる。
【０００３】
ＲＡＩＤ、ＤＨＴに基づく分散型ストレージソリューション、コンテンツ配布ネットワークなど記憶システムにおいて、システム設計者は、データ、各データ部分を配置する場所、複製（コード化／非コード化）位置などをどのようにストライプ（ｓｔｒｉｐｅ）するかを制御する。これらの既存のシステムの代表的なブロック図を図１に示す。図１を参照すると、記憶要素の完全な知識を有するストレージコントローラが、スループットを増大させるために記憶デバイス／システムに対する並列読み出し及び書き込みを実行する。このストレージコントローラは、信頼性のためのＦＥＣ符号化、及び、一部の記憶要素が故障した場合にデータを回復するためのＦＥＣ復号も利用する。ストレージコントローラは、最適な統合ソリューションのためにソフトウェアに基づく部分とハードウェアに基づく部分の両方を有することができる。
【０００４】
ビデオ通信について、ソース−宛先対の間で順次のストリーミングパケットを送るために順方向誤り訂正を適用すること、及び、並列な相関の弱い経路を使用することは既知の技法である。この技法の代表的な例示が図２に示されており、ソースノードはその宛先ノードにパケットを送るために３つの別個の経路を使用する。ソースパケットは、パケット損失に対する保護を拡張するためにパリティパケットを用いて拡張される。当該文脈において遅いパケットはパケット損失に相当するため、当該シナリオは、ＦＥＣの遅延の影響を受けやすい適用及び経路の多様性として対処することができる。しかしながら、これらの設定において、別個の経路は、ソースにとっては複数の異なるインターフェース又は全体的なトポロジーに見える。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本明細書において、キー値に基づく記憶システムに対する低遅延アクセスのための方法及び装置が開示される。
【課題を解決するための手段】
【０００６】
一実施形態において、データをキー値ストアに置くための方法が、データをＫ個の部分に分割するステップであって、Ｋは整数である、分割するステップと、複数の異なる要求タイプ及びオブジェクトサイズについての測定を通じて得られる遅延分布を所与として異なる数のパリティブロックが使用されるときの遅延性能のオフライン性能シミュレーションに基づく、キー値ストアにオブジェクトを置く遅延目標及び後続の読み出し要求の遅延目標の一方又は両方を満足するように生成すべきパリティブロックの数を求めるサブステップを含む、キー値に基づく記憶システムの遅延性能に応じてＫ個の部分に適用するための消失訂正符号化を選択するステップと、Ｋ個の部分に消失訂正符号化を適用して、Ｎ個のデータブロックを生成するステップと、データブロックへの書き込みを求めるＮ個の書き込み要求を記憶システムに送るステップであって、各ブロックにはキー値ストア内の一意のキーが割り当てられる、送るステップとを含む。一実施形態において、Ｎ個のデータブロックは、並列及び直列転送の組み合わせを使用して送ることができる。一実施形態において、方法は、後続の読み出し動作に対する遅延目標が存在しない場合、Ｎ個の書き込み要求のうちのＫ個が首尾よく完了すると、最大Ｎ−Ｋ個の要求を取り消すステップをさらに含む。
【０００７】
別の実施形態において、続いてキー値ストアからデータを取得するための方法は、Ｎ個の要求を使用して、データの対応する一意のキーを使用してＮ個の部分を要求するステップと、データの別個の部分が取り出されるときに消失復号を適用するステップとを含む。一実施形態において、方法は、元のオブジェクトを復元するのにいずれかＫ個の部分で十分である場合、Ｎ個の要求のうちのＫ個からのＫ個の部分の受信が首尾よく完了した後、次いで未完了のままである最大Ｎ−Ｋ個の要求を停止するステップをさらに含む。
【図面の簡単な説明】
【０００８】
以下に与えられる詳細な説明から、及び、本発明の様々な実施形態の添付の図面から本発明はより十分に理解されよう。しかしながら、これらは本発明を特定の実施形態に限定するものととられるべきではなく、説明及び理解のためのものに過ぎない。
【図１】順方向誤り訂正（ＦＥＣ）を使用する従来技術の記憶システムを示す図である。
【図２】通信ネットワークにおいて復号遅延を低減するためにＦＥＣ及び多経路ルーティングを連携して使用することの一例を示す図である。
【図３】本発明による記憶システムの一実施形態のブロック図である。
【図４】ストレージコントローラアプリケーションの一実施形態の機能ブロック図である。
【図５】読み出し／書き込みジョブを実行し、現在のジョブのサービスが完了したときにタスク待ち行列から新たなジョブを得る並列スレッドを示す図である。
【図６】各々が一意のキーを有するサブブロックに分割されている一意の名前を有するオブジェクトの一例を示す図である。
【図７】相補累積分布関数（ＣＣＤＦ）曲線の使用を示す図である。
【図８】データベースに記憶されている複数の異なるクラウド位置についての遅延性能に関する生データを示す図である。
【図９】データの処理から判定される遅延性能を示す図である。遅延性能が、４タプル（位置、演算型、オブジェクトサイズ範囲、ＲＴＴ遅延パーセンタイル）からＲＴＴ遅延値へのマッピングからの表形式で記憶されている。
【図１０】生データの処理からオフラインで作成される性能表を示す図である。性能表は様々なオブジェクトサイズについての仮説的ＦＥＣシナリオに関するものである。
【図１１】要求ハンドラによって実行される読み出し要求処理の過程の一実施形態の流れ図である。
【図１２】要求ハンドラによって実行される書き込み要求処理の過程の一実施形態の流れ図である。
【図１３】ストレージコントローラによって実行される過程の一実施形態の流れ図である。
【図１４】ストレージコントローラによって実行される過程の別の実施形態の流れ図である。
【図１５】ストレージゲートウェイ又はクライアントデバイスの一実施形態のブロック図である。
【図１６】ストレージコントローラによって実行される過程の代替的な実施形態の流れ図である。
【発明を実施するための形態】
【０００９】
本発明の実施形態は、クラウドに基づく記憶システムにおける、たとえば、限定ではないが、ビデオ、画像、文書、メタデータなどのようなデータオブジェクトの記憶及び取り出しにおけるより堅固な遅延性能を提供するための方法及び装置を含む。クラウドに基づく記憶システムは、Ａｍａｚｏｎ  Ｓ３のような公衆クラウドを含んでもよい。本明細書に説明する１つ又は複数の技法は、データが生成及び／又は消費されるホストデバイスによって、並びに、ホストデバイスとストレージ設備との間に存在するプロキシノードによって使用され得る。
【００１０】
公衆ストレージ設備は、ＡＰＩクライアント（ホスト又はプロキシノード）とＡＰＩサーバ（ストレージ設備に存在する）との間の接続を開く、当該ストレージ設備のＡＰＩを使用することによってアクセスされる。ＡＰＩを通じて、クライアントは、適切な場合に、セキュリティ証明書、オブジェクトを一意に識別するためのローカルキー及びグローバル名、オブジェクトを表すバイト列などを提供するプット（ｐｕｔ）、取得、削除、コピー、リストなどの要求を発行することができる。したがって、クラウド記憶システムのこれらの態様は制御することができない。本発明の実施形態は、バックエンド記憶システムの内部を占有又は制御せず、記憶システムは、記憶システムのストレージサービスを明確に定義されたＡＰＩを通じて提供する「ブラックボックス」として扱われる。データオブジェクトがＡＰＩを通じて書き込み／読み出し／コピーされた後で、ストレージクライアントは、データがどのようにストライプ及び保護されたか、動作がどのように並列化及び負荷平衡されたかなどの可視性を有しない。クライアントは、クライアントの要求がクラウドに基づく記憶システム内でどのように演算上実行されるかについて不可知であるが、クライアントは、クライアントの要求を解決するときに受けるエンドツーエンド遅延の影響に対して敏感である。
【００１１】
本発明の実施形態は、キー値に基づく記憶システムにおけるテイルパフォーマ（ｔａｉｌ  ｐｅｒｆｏｒｍｅｒ）をなくすために、固定レート消失訂正符号化技法を利用する。クライアント又は他のストレージアクセスシステム／デバイス（たとえば、１つ又は複数の記憶システムに対する、ネットワークに結合されているゲートウェイ）は、順序付けされたオブジェクトセットを作成するために、より大きいオブジェクトを、より小さいオブジェクト又はグループ一般的にともに使用される小さいオブジェクトに分割する。一実施形態において、セットの各オブジェクトは事前構成のサイズよりも小さくなければならない（たとえば、バイト単位）。最も小さいインデックス値から始まって最も大きいインデックス値までのオブジェクトが、各ブロックが事前構成のサイズまでパディングされた後に固定レート消失訂正符号化器に対する入力ブロックとして与えられる。たとえば、順序付けされたセットが濃度Ｋを有し、消失訂正符号レートがＫ／Ｎである場合、符号化器は、同じ固定サイズの（Ｎ−Ｋ）個の出力パリティブロックを生成する。クライアントは、公衆ストレージ設備におけるＮ個の順序付けされた一意のキーを使用して、元のＫ個のソースブロック及び（Ｎ−Ｋ）個のパリティブロックを別個に記憶する。クライアント（又はストレージアクセスシステム／デバイス）が、大きいオブジェクト又はオブジェクトグループをプット／書き込み又は取得／読み出しする必要があるとき、クライアントは、すべてのソースブロックに対する一意のキー及び大きいオブジェクト又はオブジェクトグループに関連付けられるパリティブロックを使用して、Ｎ個の並列プット／書き込み又は取得／読み出し要求を送る。クライアント（又はストレージアクセスシステム／デバイス）が、これらのＮ個の要求の任意のサブセットに対するＫ個の有効な応答を受信すると、クライアントは動作を完了したものとして考える。要求がプット／読み出し要求であった場合、クライアントは、元のＫ個のより小さいオブジェクトを、消失復号を通じて再構築する。再構築において、キーの順序が、消失訂正符号化器によって生成される符号語内でより小さいオブジェクト及びパリティブロックの順序を判定するのに使用される。そのような場合、システム内で消失訂正符号化を使用することは、ストレージ信頼性を増大させるためでもパケット損失を処理するためでもなく、低いストレージ及び通信オーバヘッドにおける遅延性能を向上させるためである。
【００１２】
最も早いＫ個の応答が動的に又は静的に決定された遅延閾値を超えて遅延されたとき、クライアント（又はストレージアクセスシステム／デバイス）は、本来要求されていたセット内のすべてのオブジェクトを復元するのに十分である、Ｎ個のキーのサブセットに対する最小数の新たなプット／書き込み又は取得／読み出し要求を発行する。
【００１３】
本発明の実施形態は、公衆クラウド記憶システムが大きい遅延ジッタを呈する場合に公衆クラウド記憶システムに記憶されているオブジェクトに対する読み出し要求と書き込み要求都の両方に関する堅固な遅延性能を与える。遅延対オーバヘッド性能は、複数の異なるＦＥＣレート（コード化なしを含む）を使用してコンテンツベースでトレードオフされ得る。システムは、書き込みのみ、読み出しのみ、又は読み出し及び書き込みの両方の性能を対象とすることができるように設計され得る。パリティブロックは、信頼性又は可用性に影響を与えることなく任意に削除され得、これは、信頼性又は可用性の保証がストレージサービスによって直交して与えられるためである。より堅固な遅延性能を有するそのような実施形態は、より重要なコンテンツに対して選択的に低い遅延を保証するのに使用され得る。
【００１４】
本発明の実施形態において使用されるＦＥＣ及びバックエンド記憶システムによって適用されるＦＥＣ（適用される場合）は、互いに相補的であり、ともに結合されない。本発明の実施形態は、高い信頼性及び可用性を達成するために、パリティブロックをストレージに対して読み出し／書き込みせず、これは、これらの信頼性及び可用性の目標が、バックエンド記憶システムによってすでに満たされているためである。そのため、本明細書に記載されている技法によって生成されるパリティブロックを失うことは、再生成を必要とせず、可用性のために重大でもない。事実、記憶空間を節約するために、又は記憶コストを低減するために、パリティブロックは任意に削除され得る。さらに、バックエンド記憶システムにおいて信頼性を増大させるためにＦＥＣが使用されるとき、システムに不要な負荷がかかるのを回避するために、通常の故障のないシナリオの間、読み出し動作はパリティブロックを読み出すことを必要としない。ＦＥＣを用いる書き込み動作も、システムが、故障が発生したときの復元可能性を保証するためにすべてのパリティブロックが書き込まれることを保証しなければならないようなシステムにおいてより大きい遅延を引き起こす可能性がある。対照的に、本発明の実施形態は、最初のｋ個のブロックが首尾よく書き込まれることのみを考慮し、これが遅延を低減する鍵となる。
【００１５】
本発明の実施形態の１つの特徴は、当該特徴が、バックエンドストレージを、非決定的遅延性能を有する「ポイントツーポイントチャネル」（ストレージクライアントと記憶システムとの間）として扱うことである。本発明の実施形態は、様々な範囲のオブジェクトサイズについてシステムの遅延分布を構築し、様々なＦＥＣ戦略（すなわち、（ｎ，ｋ）の複数の異なるタプルについて）及び並列化をともに使用して遅延分布を再構築する。クライアント（又はストレージアクセスシステム／デバイス）が所与のパーセンタイルにおいて特定の遅延性能を目標とするとき、クライアントは、当該性能を実現するための並列化及びＦＥＣ戦略を選定する。
【００１６】
以下の詳細な説明において、本発明のより完全な説明を提供するために、多数の詳細が記載される。しかしながら、本発明はこれらの具体的な詳細なしに実施されることができることは当業者には明らかであろう。他の事例において、本発明が不明瞭になるのを避けるために、既知の構造及びデバイスが、詳細にではなくブロック図形式で示されている。
【００１７】
以下の詳細な説明のいくつかの部分は、コンピュータメモリ内のデータビットに対する動作のアルゴリズム及び記号的表現に関連して提示されている。これらのアルゴリズム記述及び表現は、データ処理分野の当業者が、自身の研究の内容を他の当業者に最も効率的に伝達するのに使用する手段である。アルゴリズムは本明細書において、また一般的に、所望の結果をもたらす首尾一貫したステップシーケンスであると考えられる。ステップは、物理量の物理的操作を必要とするものである。通常、必須ではないが、これらの物理量は、記憶、転送、組み合わせ、比較、及び他の様態で操作されることが可能な電気又は磁気信号の形態をとる。時として、主に一般的な使用状況の理由から、これらの信号をビット、値、要素、記号、文字、用語、数などとして参照することが簡便であることが分かっている。
【００１８】
しかしながら、これらの及び類似の用語のすべてが適切な物理量に関連付けられるべきであり、これらの物理量に適用される簡便な標識に過ぎないことが留意されるべきである。以下の説明から明らかなように別途特記されない限り、本明細書全体を通じて、「処理（ｐｒｏｃｅｓｓｉｎｇ）」又は「計算（ｃｏｍｐｕｔｉｎｇ）」又は「算出（ｃａｌｃｕｌａｔｉｎｇ）」又は「決定（ｄｅｔｅｒｍｉｎｉｎｇ）」又は「表示（ｄｉｓｐｌａｙｉｎｇ）」などのような用語を利用した説明は、コンピュータシステムのレジスタ及びメモリ内の物理（電子）量として表されるデータを操作及び変換して、コンピュータシステムメモリ若しくはレジスタ又は他のそのような情報記憶、送信若しくは表示デバイス内の物理量として同様に表わされる他のデータにするコンピュータシステム、又は類似の電子計算デバイスの動作及び過程を指すことが諒解される。
【００１９】
本発明は、本明細書における動作を実行するための装置にも関する。本装置は、必要とされる目的に特別に構築されてもよく、又は、コンピュータに記憶されているコンピュータプログラムによって選択的に起動又は再構成される汎用コンピュータを含んでもよい。そのようなコンピュータプログラムは、限定ではないが、フロッピーディスク、光ディスク、ＣＤ−ＲＯＭ、及び光磁気ディスクを含む任意のタイプのディスク、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気若しくは光カード、又は、電子命令を記憶するのに適しており、各々がコンピュータシステムバスに結合される任意のタイプの媒体のような、コンピュータ可読記憶媒体に記憶されてもよい。
【００２０】
本明細書に提示されているアルゴリズム及び表示は、本質的に任意の特定のコンピュータ又は他の装置に関係するものではない。様々な汎用システムが、本明細書における教示によるプログラムによって使用されてもよく、又は、必要とされる方法ステップを実行するのにより特化された装置を構築することが簡便であることが分かる場合がある。様々なこれらの汎用システムに必要とされる構造は、下記の説明から明らかになる。加えて、本発明は、いかなる特定のプログラミング言語を参照しても説明されない。本明細書に記載されているような本発明の教示を実施するのに様々なプログラミング言語が使用されてもよいことが諒解されよう。
【００２１】
機械可読媒体は、情報を機械（たとえば、コンピュータ）によって読み取り可能な形態で記憶又は送信するための任意の機構を含む。たとえば、機械可読媒体は、読み出し専用メモリ（「ＲＯＭ」）、ランダムアクセスメモリ（「ＲＡＭ」）、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリデバイスなどを含む。
概説
【００２２】
図３は、記憶システムの一実施形態のブロック図である。図３を参照すると、一実施形態において、アーキテクチャに対する３つの主な構成要素、すなわち、アプリケーション３０１、キー値ストアクライアント３０２、及び分散キー値ストア３０３がある。
【００２３】
アプリケーション３０１は、記憶システムの消費者である。アプリケーション３０１は、バックエンドストレージ（たとえば、分散キー値ストア３０３）に記憶されるべきデータを生成し、バックエンドストレージに記憶されているデータをダウンロードする。
【００２４】
キー値ストアクライアント３０２は、バックエンドストレージ、すなわち、分散キー値ストア３０３を用いてアプリケーション３０１とインターフェースする。一実施形態において、キー値ストアクライアント３０２は、アプリケーション３０１の要求を受信し、当該要求に応答し戻すために、アプリケーション３０１にＡＰＩを与える。これらの要求は、読み出し及び書き込み要求（３１０）及び応答（３１１）を含む。一実施形態において、読み出し要求はファイル名（ｆｎａｍｅ）を指定し、書き込み要求は、記憶されているファイル名（ｆｎａｍｅ）及びデータオブジェクト（ｖａｌｕｅ）を指定する。一実施形態において、読み出し応答は、読み出し応答及び要求されたデータオブジェクト（ｖａｌｕｅ）を指定し、書き込み応答は、データオブジェクトがバックエンドストレージに首尾よく記憶された又はされなかったことを示す応答を指定する。
【００２５】
一実施形態において、キー値ストアクライアント３０２は、アプリケーション３０１に応答し戻す前にアプリケーション３０１からの要求を解決するためにバックエンドストレージに後続の要求を発行するためにバックエンドストレージによって与えられるＡＰＩを使用する。一実施形態において、キー値ストア３０３に対する読み出し要求はＲｅａｄ＜Ｋｅｙ−１＞の形態をとり、キー値ストア３０３に対する書き込み要求はＷｒｉｔｅ＜Ｋｅｙ−１，ｖａｌｕｅ，ｍｅｔａｄａｔａ＞の形態をとり、Ｋｅｙ−１はキー値ストア３０３内の位置を指定し、「ｖａｌｕｅ」は書き込まれているデータオブジェクトを指定し、「ｍｅｔａｄａｔａ」は記憶されているデータオブジェクトに関連付けられるメタデータを指定する。一実施形態において、キー値ストア３０３からの読み出し応答はＲｅａｄ＜ｒｅｓｐｏｎｓｅ，ｖａｌｕｅ＞の形態をとり、キー値ストア３０３からの書き込み応答はＷｒｉｔｅ＜ｒｅｓｐｏｎｓｅ＞の形態をとり、「ｒｅｓｐｏｎｓｅ」は動作が首尾よく実行されたか否かを指定し、「ｖａｌｕｅ」はキー値ストア３０３から読み出されているデータオブジェクトを指定する。「ｖａｌｕｅ」がキー値ストレージから返された、又は、キー値ストアクライアントからキー値ストレージへ送られた場合、この値は、データオブジェクトの非コード化部分又は符号化部分のいずれかに対応する。各部分（ソース又はパリティ）は所与のサイズのオブジェクト（すなわち、バイト列）として扱われ、「ｖａｌｕｅ」はこのとき、データにアクセスするのに使用されるキーに応じてソースブロック又はパリティブロックである。
【００２６】
一実施形態において、最初のＫ個のキーはデータオブジェクトのＫ個のブロックの非コード化シーケンスに対応し、（Ｋ＋１）番目〜Ｎ番目のキーは、データオブジェクトに関連付けられるパリティブロックに対応することに留意されたい。一実施形態において、メタデータは、キー値ストアクライアント３０２にあるメモリ又はディスクにローカルに記憶されていない場合にのみ読み出されることにも留意されたい。下記により詳細に説明されるように、キー値ストアクライアント３０２は、Ｋ個の成功した読み出し／書き込み回答を受信した後にのみ、アプリケーション３０１に応答を返す。
【００２７】
一実施形態において、キー値ストアクライアント３０２は、アプリケーション３０１のデータを記憶し、アプリケーション３０１の要求を解決するために、それ自体のローカルディスク３０２Ａ及びメモリ内キャッシュ３０２Ｂを有する。一実施形態において、キー値ストアクライアント３０２はまた、ＦＥＣを適用した、及び、ＦＥＣを適用していない、複数の異なるパケット範囲に対する遅延の累積分布関数をモデル化する。一実施形態において、キー値ストアクライアント３０２は、読み出し書き込み要求を、分散ストレージバックエンドを用いて並列化する役割も担う。
【００２８】
分散キー値ストア３０３は、オブジェクト（たとえば、一連の不透明なバイト）の書き込み、読み出し、削除、コピーのような動作のために、ＡＰＩ及び／又はライブラリをストアクライアントに与える分散ストレージバックエンドである。そのようなストレージバックエンドの一般的な例は、限定ではないが、Ａｍａｚｏｎ  Ｓ３、Ｃａｓｓａｎｄｒａ、ＤｙｎａｍｏＤＢなどを含む。一実施形態において、キー値ストア３０３は、持続性で、可用性が高く、耐久性のある記憶を可能にする。この記憶を達成するために、キー値ストア３０３は、同じオブジェクトの複数のコピーが、複数の異なる物理的位置に記憶され、複数の異なる物理的位置からアクセスされる複製を使用する。一実施形態において、より高い記憶効率で耐久性を増大させるために、キー値ストア３０３は、データオブジェクト内の（すなわち、データストライプと連動する）、又はデータオブジェクトにわたるＦＥＣ保護を使用する。そのような特徴は、アプリケーション３０１及びキー値ストアクライアント３０２の両方に対してトランスペアレントである。
【００２９】
一実施形態において、アプリケーション３０１及びキー値ストアクライアント３０２によって実行される過程は、同じ物理的機械上で作動する。別の実施形態において、それらの過程は、異なる物理的機械上で作動され、直接、又はネットワークを介して通信することができる。
【００３０】
図４は、図３の分散キー値ストア３０３のような分散キー値ストアからのオブジェクトを記憶及び取り出しするための、異なるブロック間の関係を含む、図３のキー値ストアクライアント３０２のようなキー値ストアクライアントによって実行されるアプリケーションのブロックを示すブロック図である。一実施形態において、キー値ストアによって与えられるＡＰＩを直接使用するとき、ユーザアプリケーション３０１は、ユーザアプリケーションのオブジェクトをプット又は取得するときにエンドツーエンド遅延の性能変動を見ることができる。一実施形態において、ユーザアプリケーション３０１によって使用されるＡＰＩは、キー値ストアによって与えられるＡＰＩと同様であるか、又はそのＡＰＩの正確なクローンである。ユーザアプリケーションによって使用されるＡＰＩは、図４において符号３５０を付されているインターフェースに対応する。一実施形態において、ＡＰＩ自体が、要求される動作に対する遅延目標を指定する任意選択のパラメータをサポートする。別の実施形態において、遅延目標を大域的に設定するための管理インターフェースを通じて、構成選択肢がユーザアプリケーション３０１に与えられる。一実施形態において、両方の選択肢が利用可能である。
【００３１】
図４のキー値クライアントアプリケーションによって実行される中心的な動作は、読み出し及び書き込み動作である。図１１は、読み出し動作を実行するための過程の一実施形態を示す流れ図であり、図１２は、書き込み動作を実行するための過程の一実施形態を示す流れ図である。これらの読み出し及び書き込み動作は下記により詳細に説明する。
【００３２】
図４を参照すると、インターフェース３５０を通じて読み出し要求を受信した後、１セットの条件下で（たとえば、基礎となるクラウドＡＰＩによって誤りが報告されていない通常条件下で）、以下の動作が行われる。
１．要求ハンドラ４００が、入来するメッセージ自体から、要求されるオブジェクト（Ｏｉ）の一意のＩＤ及び遅延目標Ｄを抽出する。図１１において、この第１の抽出動作は処理ブロック１１００に対応する。
２．ストレージ階層内で要求されているオブジェクトが記憶されている場所を判定するために、要求ハンドラ４００がインターフェース４０１を使用して、要求されているオブジェクトの一意のＩＤを有する位置マッパ４１０にマッピングサービスを発行する。オブジェクトがローカル（たとえば、キー値ストアクライアントのメモリ内キャッシュ又はローカルディスク）に記憶されている場合、要求ハンドラ４００は、ローカルストレージ（図４には示さず）からデータを取り出し、オブジェクトをユーザアプリケーションに送る。これらの方法ステップは、図１１の処理ブロック１１１０及び１１５５に対応する。
３．要求されているオブジェクトがローカルに記憶されていない場合、位置マッパ４１０は、オブジェクト（Ｏｉ）に対応する順序付けされたキー値セット（Ｋｅｙ１，・・・，ＫｅｙＮ）、及び、キーによっていずれのデータストアが使用されるべきかを返す（図１１のブロック１１２０）。この順序付けされたキー値セットは、要求されているオブジェクトのソースブロック及びパリティブロックを指し示す。たとえば、ユーザアプリケーションがビデオファイル「ｆｏｏ．ｍｐｅｇ」（図６参照）を読み出すことを望む場合、オブジェクト名を与えられたユーザアプリケーションは、開示されているクライアント（たとえば、クライアント３０２）の一意のＩＤを生成するための一意のアプリケーションＩＤを前に付けられ得る。図６に示す例において、「ｆｏｏ．ｍｐｅｇ」はは、最後の書き込み動作の結果として、１０個の均等な部分に分割され（すなわち、Ｋ＝１０）、これらの１０個の均等な部分は、交換可能にソースブロック又はサブブロックと称される。これらの均等な部分は、元のコンテンツにおけるそれらのバイト順序に関連して列挙され、一意のキー、たとえば、＜ＵＩＤ，ｆｏｏ．ｍｐｅｇ．ｐａｒｔ１＞、・・・、＜ＵＩＤ，ｆｏｏ．ｍｐｅｇ．ｐａｒｔ１０＞を割り当てられる。本明細書における目的のために、＜＊，＊＞という表記は、コンマによって分離されている２つの部分列を連結するのに使用される。これらのサブブロックは、各々が順序を保持するように一意のキーを割り当てられるパリティブロックを生成するために、リードソロモンコーダのようなＦＥＣ符号化器４３０にさらに入力される。キー割り当てについて、＜ＵＩＤ，ｆｏｏ．ｍｐｅｇ．ｐａｒｔＫ＋１＞〜＜ＵＩＤ，ｆｏｏ．ｍｐｅｇ．ｐａｒｋＮ＞は、それぞれパリティブロック１〜（Ｎ−Ｋ）に割り当てられる。前回このオブジェクトが更新されたとき、このオブジェクトには、６つの追加のパリティブロックが書き込まれている（すなわち、Ｋ＝１０についてＮ−Ｋ＝６又はＮ＝１６）。したがって、ＦＥＣ符号化器４３０によって出力された順序に従って、一意のキー標識＜ＵＩＤ，ｆｏｏ．ｍｐｅｇ．ｐａｒｔ１１＞、・・・、＜ＵＩＤ，ｆｏｏ．ｍｐｅｇ．ｐａｒｔ１６＞があることになる。特定のアプリケーションのための「ｆｏｏ．ｍｐｅｇ」からこれらの一意のキーへのマッピング、及び、これらのキーのうち元のオブジェクトストライプに対応する個数に関する情報がメタデータとして持続的に記憶され、要求ハンドラ４００近くにキャッシュされる。要求ハンドラ４００がオブジェクト＜ＵＩＤ，ｆｏｏ．ｍｐｅｇ＞についてのマッピングサービスを発行すると、位置マッパ４１０は、この一意のキー標識のリスト、及び、標識ごとのバックエンドストレージＩＤによって応答することができる。図４において、２つのバックエンド記憶位置が、私的クラウド４７０及び公衆クラウド４９０として識別される。キーに対応するソース又はパリティブロックが、複数の記憶位置、たとえば、＜ＵＩＤ，ｆｏｏ．ｍｐｅｇ．ｐａｒｔ１６＞に記憶され得、４７０及び４９０の両方において利用可能な当該ブロックの値を有することができる。その場合、両方の位置が、それらの位置の間の優先傾向なしで位置マッパ４１０によって返される。
４．要求ハンドラ４００は、遅延目標Ｄ（一実施形態においてユーザアプリケーション３０１からのアプリケーション要求において指定される）、ソースブロックの数及びソースブロックサイズの情報（各オブジェクトについて持続的に記憶されているメタデータから取り出される）をクラウド性能モニタ４２０に渡し、クラウド性能モニタは、発行されるべき並列の線形独立要求の数に関する情報、及び、記憶クラウドの優先傾向順序を返す。一実施形態において、必要とされる並列の独立要求の数を求めるために、読み出し又は書き込み動作が行われるかにかかわらず、要求がワイヤ上に置かれた時点から完了応答が受信されるまでの動作の遅延が記録されることに留意されたい。ＣＰＭは、この遅延の情報を使用して複数の異なるオブジェクトサイズについての遅延分布を構築する。その後、ＣＰＭは、ＦＥＣによって使用されるブロックサイズに近いオブジェクトの遅延分布を使用して異なるＦＥＣが利用された場合、オフライン遅延分布を計算する。これらの動作は、図１１のブロック１１３０の決定を行うのを補助する。一実施形態において、並列要求の数はＫ以上であり、Ｎ以下である。したがって、｛Ｋｅｙ１，・・・，ＫｅｙＮ｝内の任意のキーサブセットＳが要求ハンドラ４００によって選定され得る。一実施形態において、私的クラウド２７０がコピーを有し、輻輳していない場合、私的クラウド２７０は公衆クラウド４９０よりも高い優先傾向でリストされる。私的クラウド４７０が公衆クラウド４９０と比較して過剰な負荷及び遅延を見込む場合、公衆クラウド４９０はより高い優先傾向を有し得る。
５．要求ハンドラ４００は、クラウド性能モニタ４２０の出力を使用して並列読み出しジョブを用意し（図１１のブロック１１４０）、各ジョブはソース又はパリティブロックに対応する１つの一意のキーに対するものである。一実施形態において、各ジョブは、いずれのクラウド位置がそのジョブに使用されるべきかがそのジョブ記述に含まれているという意味で、自己記述的である。同じオブジェクトに対応するすべての並列読み出しジョブが、バッチとしてタスク待ち行列４４０に渡される。一実施形態において、バッチ内のジョブに、他のバッチに属するジョブは挟み込まれない。
６．インターフェース４０４は２つの目的、すなわち、（ｉ）実際のジョブを渡すこと、及び（ｉｉ）ジョブ又はバッチ属性を渡すことをサービスする。要求ハンドラ４００は、ジョブ又はバッチ属性を「取り消し」に変更することによって、個々のジョブ又は所与のバッチのすべてのジョブを取り消すことができる。ジョブが依然としてその待ち行列にある場合、タスク待ち行列４４０がジョブを削除する。それ以外の場合、タスク待ち行列４４０はジョブを処理するスレッドに停止命令を発行する。
７．ワーカスレッド（スレッド４５０及び４６０）は、一度に１つのジョブをサービスし、ワーカスレッドの現在のジョブが完了すると（ブロック１１５０を実行するために要求ハンドラ４００に渡される）、ワーカスレッドはタスク待ち行列４４０からの新たなタスクを要求する。タスク待ち行列４４０は、要求しているワーカスレッドに先頭のジョブを渡す。ワーカスレッドは、ジョブ記述を使用して複数の異なるクラウド位置にアクセスすることができる。これらの複数の異なるクラウドにアクセスするためのＡＰＩは異なり得、したがって、位置情報が、いずれのクラウドインスタンスが使用されるべきか、及び、いずれのＡＰＩ呼び出しが発行されなければならないかを指示する。進行中のジョブに対する停止命令が受信された場合、ワーカスレッドはその現在のジョブを取り消し、ジョブステータスを要求ハンドラ４００に返すことができ、新たなジョブを要求する。
８．ＦＥＣが使用される場合、要求ハンドラ４００は、所与のバッチのソースブロック及びパリティブロックがいくつかのワーカスレッドによって返されたとき、それらのソースブロック及びパリティブロックをＦＥＣ復号器４３０に渡す。返されたブロックがソースブロックである場合、そのブロックはまた、要求ハンドラ４００によって保持される。ＦＥＣ復号器４３０は、任意の欠けているソースブロック（まだ受信されていない）を復元することが可能であるとき、復元されたソースブロックを要求ハンドラ４００に渡す（図１１の処理ブロック１１５１及び１１５２）。
９．一実施形態において、要求されているオブジェクトのすべてのソースブロックを受信する（図１１の処理ブロック１１５３及び１１５４）と、要求ハンドラ４００は、ユーザアプリケーションにオブジェクトＯｉを送り戻す（図１１の処理ブロック１１５５）。別の実施形態において、要求ハンドラ４００は、ユーザアプリケーションがソースブロックを順序よく読みだすことが出来るストリームチャネルを開く。そのような場合、ユーザアプリケーションは、要求ハンドラ４００によってオブジェクト全体が復元される前に、バイトストリームの受信を開始することができる。
１０．所与のバッチについてすべてのソースブロックが復元された後で、要求ハンドラ４００は、同じバッチの残りのジョブについて取り消し要求をタスク待ち行列４４０に発行する（図１１の処理ブロック１１５４）。
【００３３】
一実施形態においてオブジェクトが読み出されたとき、要求ハンドラ４００は、まだ私的クラウド４７０に記憶されていないブロックについて、書き込み要求をバックグラウンドジョブとして私的クラウド４７０に発行する。この発行によって、将来同じオブジェクトのために公衆クラウド４９０に接続する必要性が回避される。キャッシングは、複数の階層で行われ得、メモリ内又はローカルディスク内記憶のキャッシュ入れ替え方針が、私的クラウド４７０に対する書き込み動作を引き起こし得る。
【００３４】
インターフェース３５０を通じて書き込み要求を受信した後、１セットの条件下で（すなわち、基礎となるクラウドＡＰＩによって誤りが報告されていない通常条件下で）、以下の動作が行われる。
１１．要求ハンドラ４００が一意のＩＤを抽出し、オブジェクト全体、並びに、同じオブジェクトＯｉに対する現在の書き込み動作の遅延目標（Ｄｗ）及び／又は後続の読み出し動作の遅延目標（Ｄｒ）を受信する（図１２の処理ブロック１２００）。一実施形態において、オブジェクトはローカルにキャッシュ／記憶される。
１２．要求ハンドラ４００は、インターフェース４０２を使用してクラウド性能モニタ４２０に、オブジェクトサイズ並びに書き込み及び読み出し遅延目標を渡す。クラウド性能モニタ４２０は、遅延目標を達成するために並列に送られるべきソースの数（すなわち、Ｋ）及びパリティブロックの数（すなわち、Ｎ−Ｋ）に関する情報を返す（図１２の処理ブロック１２１０）。
１３．ＦＥＣが利用されるべきである場合、要求ハンドラ４００は、クラウド性能モニタ４２０による出力を使用してオブジェクトをＫ個のソースブロックに分割し、クラウド性能モニタ４２０に従って必要とされる数に一致するＮ−Ｋ個のパリティブロックを生成するようＦＥＣ符号化器４３０に求める（図１２の処理ブロック１２２０、１２３０及び１２４０）。ＦＥＣが使用されない場合、単一の一意のキー割り当て（たとえば、Ｋｅｙ１）、単一の書き込みジョブを発行すること、書き込みジョブが首尾よく完了したときに成功結果を送り戻すことが、実行されるデフォルトの動作セットである（図１２の処理ブロック１２２２、１２２４、１２２６、１２９０）。
１４．要求ハンドラ４００は、同じ書き込み動作の一部として書き込まれるべき各ソースブロック及びパリティブロックを標識するための一意のキーの順序付けされたセットＳ（Ｋｅｙ１，・・・，ＫｅｙＮ）を生成する。一実施形態において、このメタデータは、ローカルに持続的に記憶され、また、書き込みジョブにタグ付けされる（すなわち、公衆クラウド４９０もメタデータを記憶することになる）。図６の例を使用して、元のオブジェクトが１０個のソースブロックに分割され、ＦＥＣ符号化器４３０が６個のパリティブロックを生成する。したがって、要求ハンドラ４００は、所与のオブジェクトのソースブロック及びパリティブロックを個々に、また一意に識別するために、１６個の一意のキーから成るセットを作成し順序付けされた。これらの動作は、図１２の処理ブロック１２５０及び１２６０の一部として実行される。
１５．要求ハンドラ４００は過剰なパリティブロックをキャッシュし、各ジョブがあらたに生成された順序付けされているセットの一意のキーに関する書き込み要求であるジョブの新たなバッチを生成する。このジョブのバッチはタスク待ち行列４４０に渡される。以上のこれらの動作は、図１２の処理ブロック１２７０に対応する。一実施形態において、バッチ内のジョブに、他のバッチに属するジョブは挟み込まれない。別の実施形態において、ジョブが「バックグラウンドジョブ」ステータスに格下げされる場合、ジョブは挟み込まれる。
１６．一実施形態において、要求ハンドラ４００は、ジョブ又はバッチ属性を「バックグラウンドジョブ」に変更することによって、個々のジョブ又は所与のバッチのすべてのジョブを格下げすることができる。このとき、要求ハンドラ４００は、より優先傾向の高いジョブをこれらのバックグラウンドジョブの前に移動させることができる。バックグラウンドトラフィックに格下げされている複数の異なるバッチのジョブは、先着順に処理される。属性の変化はインターフェース４０４を通じて行われる。
１７．一実施形態において、ワーカスレッド４５０及び４６０は、一度に１つのジョブをサービスし、ワーカスレッドの現在のジョブが完了すると、ワーカスレッドはタスク待ち行列４４０からの新たなタスクを要求する。タスク待ち行列４４０は、要求しているワーカスレッドに先頭のジョブを渡す。ワーカスレッド４５０及び４６０は、ジョブ記述を使用して複数の異なるクラウド位置にアクセスすることができる。これらの複数の異なるクラウドにアクセスするためのＡＰＩは異なり得、したがって、位置情報が、いずれのクラウドインスタンスが使用されるべきか、及び、いずれのＡＰＩ呼び出しが発行されなければならないかを指示する。
１８．要求ハンドラ４００は、所与のバッチに関するワーカスレッド４５０及び４６０からの成功した書き込み応答（すなわち、ＡＣＫ又は肯定応答）の数をリスンする。十分な数の成功した書き込み応答（すなわちＡＣＫ）を受信した後、要求ハンドラ４００は、当初書き込み要求を発行したアプリケーションに成功応答（すなわち、ＡＣＫ）を送り戻す。以上のこれらの動作は、図１２の処理ブロック１２８０及び１２９０に対応する。一実施形態において、要求ハンドラ４００は、インターフェース４０４を通じてジョブ属性を変更することによって、同じバッチ内の残りのジョブをバックグラウンドステータスに格下げする。
【００３５】
一実施形態において、タスク待ち行列４００は先入れ先出し（ＦＩＦＯ）待ち行列を使用して実装され、同じＦＥＣブロック又はグループに属する読み出し又は書き込みジョブが、他のＦＥＣブロックに属するジョブを挟み込まれることなく１つのバッチに置かれる。一実施形態において、個々のワーカスレッドは、一度に１つのジョブをサービスし、任意のスレッドがアイドルになると、ワーカスレッドは、タスク待ち行列の先頭で待っているジョブを取得する。図５は、読み出し／書き込みジョブを実行し、現在のジョブのサービスが完了したときにタスク待ち行列４４０から新たなジョブを得る並列スレッド、すなわち、ｔｈｒｅａｄ−１〜ｔｈｒｅａｄ−ｍを示す図である。一実施形態において、スレッド自体は、タスク待ち行列４４０によってすべてのバッファリングが行われたときに待ち行列を有しない。輻輳がある、すなわち、アイドルスレッドよりも多くの、タスク待ち行列で待っているジョブがあるとき、遅延性能は悪化する。その理由から、別の実施形態において、遅延要件がより低い（たとえば、より低いレートのＦＥＣコードを使用する）要求は厳密な優先順位を与えられ、タスク待ち行列４４０の先頭に置かれる。別の実施形態において、いくつかのスレッドは、優先順位の高いジョブのみをサービスするためにともにプールされ得るか、又は、割り込みモードにおいて使用され得る（すなわち、優先順位の高いジョブをサービスするために優先順位の低いジョブが中止又は取り消しされる）。
【００３６】
一実施形態において、クラウド性能モニタ（ＣＰＭ）４２０が決定実行過程に使用される。ワーカスレッド２５０及び２６０のようなワーカスレッドが、オブジェクトサイズ、要求タイプ（読み出し又は書き込み）、送信時間、クラウド位置、及び往復時間遅延（すなわち、ジョブがスケジュールされた時間から成功応答が受信された時間まで）に関する情報を有する、首尾よく完了したジョブのログを作成する。図８は、ＣＰＭ４２０が、データベースに記憶されている表にこの情報をどのようにログ記録するかを示す。図８を参照すると、オブジェクトサイズ、動作タイプ、往復時間（ＲＴＴ）遅延及びクラウド位置を含む情報が、表に記憶されている。ＣＰＭは、複数の異なるジョブタイプ及びオブジェクトサイズの遅延性能に関する累積分布関数（ＣＤＦ）又は相補ＣＤＦ（ＣＣＤＦ）を作成するために、これらのログを処理する。一実施形態において、この処理を実行するために、ＣＤＦは遅延目標ｘについて、ｘ未満でサービスされた要求の割合を集計する。同様に、ＣＣＤＦは、遅延目標ｘについて、ｘ秒超でサービスされた要求の割合を集計する。任意のタプル｛ｘ，オブジェクトサイズ、動作｝を指定して、生のデータセットから回答を計算することができる。この計算は相当の時間をとる場合があるため、有限のタプルセットに対する参照テーブルを用意するための他の方法がある。例は図９及び図１０に参照テーブルとして与えられている。
【００３７】
図７は、読み出し及び書き込みジョブに関して、１メガバイトのブロックサイズのＡｍａｚｏｎ  Ｓ３クラウドサービスについて得られたそのようなＣＣＤＦ曲線の一例を示す。図７を参照すると、生の遅延統計を使用して実線の曲線が得られ、一方で、様々なＦＥＣ方式が利用された後の性能のオフライン分析／シミュレーションを通じて破線が得られる。凡例において、ｎはブロックの総数（すなわち、ソースブロック＋パリティブロック）を示し、一方でｋはパリティブロックの数を示す。それゆえ、（ｎ，ｋ）＝（１６，１）は、１５個のソースブロック及び１個のパリティブロックがあったことを意味する。ブロックサイズは１メガバイトであるため、１個のパリティブロックがそこから生成された、１メガバイトの１５個のブロックにストライプされている１５メガバイトのオブジェクトについて、読み出し又は書き込み遅延性能は、１メガバイトのオブジェクトの非コード化遅延性能のすぐ左の曲線になる。一実施形態において、ＣＰＭ４２０は、オブジェクトサイズのビンを作成し、１つのビンに対応するすべての遅延測定値を集約してＣＤＦ曲線又はＣＣＤＦ曲線にする。これらの性能曲線は一般的に、図９に示されているような表形式で記憶される。プリセットのブロックサイズリストを使用して、様々な（ｎ，ｋ）設定について、ＣＤＦ曲線又はＣＣＤＦ曲線のライブラリが構築される。たとえば、８メガバイトのオブジェクトが９９パーセンタイルにおいて３００ミリ秒の読み出し遅延保証を必要とするとき、１メガバイトのブロックサイズ及び（ｎ，ｋ）＝（１６，８）を使用することによって、要求は満たされる。優先傾向は、記憶クラウドを使用するオーバヘッドを低減するために可能な限り大きいブロックサイズ、及び、可能な限り最小数のパリティブロックを使用することである。これらの構築されたＦＥＣに基づくＣＤＦ性能曲線は一般的に、図１０に示されているような表形式で記憶される。したがって、ＣＰＭ４２０が要求ハンドラ４００から要求を受信すると、ＣＰＭ４２０は、任意のＦＥＣモードが所望の遅延保証を達成するために使用され得るか否かを調査するために、様々なオブジェクトサイズについてこれらの表を参考にすることができる。読み出し動作について、調査は、要求されているオブジェクトに書き込むのに実際に使用されたモードに限定される。
【００３８】
遅延性能が単一の書き込み動作に対して要求され、後続の読み出しに対しては要求されない場合、すべてのソースブロックが首尾よく書き込まれることが補償された後で、パリティブロックはキー値ストアから削除され得る。別の実施形態において、読み出し性能が必要とされない場合、最初の書き込み動作の後ソースブロックはともにバックグラウンド内で組み合わされ得、オブジェクトがその元の形式で書き込まれる。その後、ソースブロックも削除され得る。
【００３９】
一実施形態において、大きいオブジェクトをより小さいオブジェクトに分割するのではなく、キー値ストアクライアントが複数の小さいオブジェクトをグループ化して１つのオブジェクトにし、その後、残りの記憶過程をその１つのオブジェクトに適用することに留意されたい。たとえば、複数の書き込み要求が保留されている場合、その１つのオブジェクトからパリティブロックが作成され、並列に書き込まれる。言い換えれば、複数のオブジェクトが連結されて１つのオブジェクトになる場合、オブジェクトはＫ個のブロックに分割され得、ＦＥＣが適用され得る。その後、ＦＥＣクロック及びソースブロックが並列に書き込まれる。別の例として、ユーザアプリケーション要求が、複数のオブジェクトが読み出されることを常に要求する場合、キー値ストアクライアントは、複数のオブジェクトをともにグループ化して、パリティブロックも生成する。この例において、１つの大きいオブジェクトは生成されず、各オブジェクトが直接パディングされて、使用することが所望される大きいサイズにされ、その後、オブジェクトにわたってＦＥＣが適用される。
【００４０】
キー値ストアクライアントが、それ自体遅延ボトルネックになるようにするとき、開示されている機構を使用することは有用ではなく、処理及び通信負荷を増大させるため、有害であり得る。したがって、一般的な実施態様において、最大数のスレッドが厳密に制御されるべきであり、遅延の影響を受けやすいジョブに、タスク待ち行列４４０における優先順位が与えられるべきである。遅延の影響を受けやすい要求にわたって競合がある場合、システムはＦＥＣの使用から手をひくべきである。
【００４１】
図１３は、ストレージコントローラによって実行される過程の一実施形態の流れ図である。過程は、ハードウェア（回路、専用論理など）、ソフトウェア（汎用コンピュータシステム又は専用機械上で実行されるものなど）、ファームウェア、又はこれらの２つ以上の組み合わせを含んでもよい処理論理によって実行される。一実施形態において、過程はキー値ストアクライアントによって実行される。別の実施形態において、過程はストレージゲートウェイによって実行される。
【００４２】
図１３を参照すると、過程は、オブジェクトを受信する処理論理によって開始する（処理ブロック１３０１）。処理論理は、オブジェクトをＫ個の部分、Ｋは整数、に分割し（処理ブロック１３０２）、Ｋ個の部分の各々に個別のキーを割り当てる（処理ブロック１３０３）。
【００４３】
オブジェクトがＫ個の部分に分割された後、処理論理は、キー値に基づく記憶システムの遅延性能に応じてＫ個の部分に適用するための消失訂正符号化を選択する（処理ブロック１３０４）。一実施形態において、消失訂正符号化は、順方向誤り訂正（ＦＥＣ）コード化を含む。一実施形態において、適用するための消失訂正符号化を選択することは、遅延目標に基づく。別の実施形態において、適用するための消失訂正符号化を選択することは、遅延性能の累積分布関数に基づく。別の実施形態において、適用するための消失訂正符号化を選択することは、実行されるべき動作に関連付けられる遅延性能に基づく。またなお別の実施形態において、適用するための消失訂正符号化を選択することは、オブジェクトのサイズに基づく。
【００４４】
次に、処理論理は、Ｎ個のデータブロックを生成するためにＫ個の部分に消失訂正符号化を適用する（処理ブロック１３０５）。処理論理は、Ｋ個の部分に消失訂正符号化を適用する結果もたらされるＮ個のデータブロックの各々に個別のキーを割り当て（処理ブロック１３０６）、Ｋ個の部分に割り当てられるキー、及びＮ個のブロックに割り当てられるキーを順序付ける（処理ブロック１３０７）。
【００４５】
消失訂正符号化が適用された後、処理論理は、別個の転送を使用してＮ個のデータブロックを記憶システムへ送る（処理ブロック１３０８）。一実施形態において、個別の接続を介してＮ個のデータブロックを記憶システムに送ることは、個別の接続の２つを介してＮ個のデータブロックのうち少なくとも２つを並列に送ることを含む。
【００４６】
一実施形態において、Ｎ個の別個の転送を使用してＮ個のデータブロックを記憶システムへ送ることは、別個の接続上ですべてのＮ個のブロックを並列にキー値ストアへ送ることを含み、これは、Ｎ個の別個の転送のうちＫ個が首尾よく完了した後に首尾よく完了しなかったＮ個の別個の転送のいずれかを取り消すことを含む。
【００４７】
その後、オブジェクトが要求されたとき、処理論理は、各要求がストレージからのＮ個のデータブロックのうちの１つを要求するためのものである複数の個々の要求を生成し（処理ブロック１３０９）、Ｎ個のブロックの各々が受信されると消失復号を適用し（処理ブロック１３１０）、Ｎ個のブロックのうちＫ個を受信した後に未処理のままであるＮ−Ｋ個の要求を取り消し（処理ブロック１３１１）、オブジェクトを要求者に返す（処理ブロック１３１２）。
【００４８】
代替的な実施形態において、Ｎ個未満のアイドル接続（Ｌ＜Ｎ個のアイドル接続）がＮ個のそのような並列要求に対して利用可能である場合、Ｎ個の並列要求を生成する代わりに、要求の数がｍａｘ（Ｋ，ｍｉｎ（Ｌ，Ｎ））として選択され、式中、Ｋはソースブロックの数であり、Ｌは、要求の数が選定された時点のアイドルスレッドの数であり、Ｎは、遅延のみが一定であった場合の要求の理想的な数である。図１６は、ストレージコントローラによって実行される過程の代替的な実施形態の流れ図である。過程は、ハードウェア（回路、専用論理など）、ソフトウェア（汎用コンピュータシステム又は専用機械上で実行されるものなど）、ファームウェア、又はこれらの２つ以上の組み合わせを含んでもよい処理論理によって実行される。
【００４９】
図１６を参照すると、過程は、処理論理が遅延目標及び測定遅延ＣＣＤＦに基づいてＮを決定することによって開始する（処理ブロック１６０１）。次に、処理論理は、Ｎ個のアイドルスレッドが利用可能であるか否かを判定する（処理ブロック１６０２）。Ｎ個のアイドルスレッドが利用可能である場合、処理論理はＮ個の要求を用意する（処理ブロック１６０３）。そうでない場合、過程は処理ブロック１６０４に遷移し、処理論理は、Ｌ個のアイドルスレッドがあるか否かを判定し、ＬはＮ未満であるがＫよりも大きい。Ｌ個のアイドルスレッドがある場合、処理論理はＬ個の要求を用意し（処理ブロック１６０５）、そうでない場合、処理論理はＫ個の要求を用意する（処理ブロック１６０６）。
【００５０】
図１４は、ストレージコントローラによって実行される過程の別の実施形態の流れ図である。過程は、ハードウェア（回路、専用論理など）、ソフトウェア（汎用コンピュータシステム又は専用機械上で実行されるものなど）、ファームウェア、又はこれらの２つ以上の組み合わせを含んでもよい処理論理によって実行される。
【００５１】
図１４を参照すると、過程は、処理論理が複数のオブジェクトの各々を複数の部分に分割することによって開始し、各オブジェクトは遅延目標に関連付けられる（処理ブロック１４０１）。
【００５２】
各オブジェクトを分割した後、処理論理は、オブジェクトの各々の部分に消失訂正符号化を適用し、これは、それらのオブジェクトに関連付けられる遅延目標の間の差に基づいてオブジェクトのうちの２つ以上に異なる消失訂正符号化を適用するために消失訂正符号化を適合させることを含む（処理ブロック１４０２）。
その後、処理論理は、オブジェクトの部分に消失訂正符号化を適用する結果もたらされた消失訂正符号化データを記憶システムに送る（処理ブロック１４０３）。
システムの一例
【００５３】
図１５は、クラウドに基づく記憶システムのような、バックエンド記憶システムにアクセスするのに使用されてもよいストレージゲートウェイのブロック図を示す。そのようなバックエンド記憶システムへのアクセスはネットワーク（たとえば、広域ネットワーク、ローカルエリアネットワーク、インターネットなど）を介してもよい。ストレージゲートウェイとして、システムはユーザアプリケーションを実行するクライアントをバックエンド記憶システムにインターフェースすることができる。そのようなクライアントはストレージゲートウェイに直接結合されてもよく、又は、ネットワーク（たとえば、広域ネットワーク、ローカルエリアネットワーク、インターネットなど）を介してストレージゲートウェイと通信してもよい。図１５に示されているシステムはまた、上記で説明された動作を実行した、又は、データオブジェクトを読み出す又は書き込むためにストレージゲートウェイと対話するクライアントデバイスであってもよい。
【００５４】
一実施形態において、図１５のストレージゲートウェイは、図４の表現のアプリケーションに関連付けられる動作を実行及び実施する。
【００５５】
図１５を参照すると、ストレージゲートウェイ１５１０は、プロセッサ１５１４、システムメモリ１５１７（たとえば、ＲＡＭ、ＲＯＭなど）、入出力コントローラ１５１８、ディスプレイアダプタ１５２６を介した表示画面１５２４などの外部デバイス、シリアルポート１５２８及び１５３０、キーボード１５３２（キーボードコントローラ１５３３とインターフェースされる）、ストレージインターフェース１５３４、フロッピーディスク１５３８を受け入れるように動作するフロッピーディスクドライブ１５３７、ファイバチャネルネットワーク１５９０と接続するように動作するホストバスアダプタ（ＨＢＡ）インターフェースカード１５３５Ａ、並びに光ディスクドライブ１５４０のような、ストレージゲートウェイ１５１０のサブシステムを相互接続するためのバス１５１２を含む。マウス１５４６（又は、シリアルポート１５２８を介してバス１５１２に結合されている他のポイントアンドクリックデバイス）、モデム１５４７（シリアルポート１５３０を介してバス１５１２に結合されている）、及びネットワークインターフェース１５４８（バス１５１２に直接結合されている）も含まれている。
【００５６】
バス１５１２は、中央プロセッサ１５１４とシステムメモリ１５１７との間のデータ通信を可能にする。システムメモリ１５１７（たとえば、ＲＡＭ）は，一般的に、オペレーティングシステム及びアプリケーションプログラムがロードされる主記憶装置であってもよい。ＲＯＭ又はフラッシュメモリは、他のコードの中でも、周辺構成要素との対話のような基本ハードウェア動作を制御する基本入出力システム（ＢＩＯＳ）を含むことができる。コンピュータシステム１５１０に常駐するアプリケーションは一般的に、ハードディスクドライブ（たとえば、固定ディスク１５４４）、光学ドライブ（たとえば、光学ドライブ１５４０）、フロッピーディスクユニット１５３７、又は他の記憶媒体のようなコンピュータ可読媒体に記憶され、当該コンピュータ可読媒体を介してアクセスされる。
【００５７】
ストレージインターフェース１５３４は、コンピュータシステム１５１０の他のストレージインターフェースと同様に、固定ディスクドライブ１５４４のような、情報の記憶及び／又は取り出しのために、標準的なコンピュータ可読媒体に接続することができる。固定ディスクドライブ１５４４は、コンピュータシステム１５１０の一部であってもよく、又は、別個であり他のインターフェースシステムを通じてアクセスされてもよい。
【００５８】
モデム１５４７は、電話リンクを介したバックエンド記憶システム若しくはクライアントへの、又はインターネット接続サービス業者（ＩＳＰ）を介したインターネットへの直接接続を提供してもよい。ネットワークインターフェース１５４８が、バックエンド記憶システム及び／又はクライアントへの直接接続を提供してもよい。ネットワークインターフェース１５４８が、ＰＯＰ（存在点）を介したインターネットへの直接ネットワークリンクを介したバックエンド記憶システム及び／又はクライアントへの直接接続を提供してもよい。ネットワークインターフェース１５４８は、デジタル携帯電話接続、パケット接続、デジタル衛星データ接続などを含む、ワイヤレス技法を使用してそのような接続を提供してもよい。
【００５９】
多くの他のデバイス又はサブシステム（図示せず）が同様に接続されてもよい（たとえば、文書スキャナ、デジタルカメラなど）。反対に、図１５に示されているデバイスのすべてが、本明細書に記載されている技法を実践するために存在する必要はない。デバイス及びサブシステムは、図１５に示されているものとは異なる方法で相互接続され得る。図１５に示されているもののようなコンピュータシステムの動作は、当該技術分野において既知であり、本出願において詳細には説明しない。
【００６０】
本明細書に記載されているストレージゲートウェイ動作を実施するためのコードはシステムメモリ１５１７、固定ディスク１５４４、光ディスク１５４２、又はフロッピーディスク１５３８のうちの１つ又は複数のようなコンピュータ可読記憶媒体に記憶され得る。コンピュータシステム１５１０に設けられるオペレーティングシステムは、ＭＳ−ＤＯＳ（登録商標）、ＭＳ−ＷＩＮＤＯＷＳ（登録商標）、ＯＳ／２（登録商標）、ＵＮＩＸ（登録商標）、Ｌｉｎｕｘ（登録商標）、又は別の既知のオペレーティングシステムであってもよい。
【００６１】
本発明の多くの代替形態及び変更形態が、上記の説明を読んだ後の当業者には疑いなく明らかとなろうが、例示として図示及び説明されている任意の特定の実施形態は、限定として考えられるようには決して意図されていないことは理解されたい。それゆえ、様々な実施形態の詳細に対する参照は、それ自体は本発明に必須と考えられる特徴のみを記載している特許請求項の範囲を限定するようには意図されていない。
【図１】
0006279560.tif 000002
【図２】
0006279560.tif 000003
【図３】
0006279560.tif 000004
【図４】
0006279560.tif 000005
【図５】
0006279560.tif 000006
【図６】
0006279560.tif 000007
【図７】
0006279560.tif 000008
【図８】
0006279560.tif 000009
【図９】
0006279560.tif 000010
【図１０】
0006279560.tif 000011
【図１１】
0006279560.tif 000012
【図１２】
0006279560.tif 000013
【図１３】
0006279560.tif 000014
【図１４】
0006279560.tif 000015
【図１５】
0006279560.tif 000016
【図１６】
0006279560.tif 000017