Windows Azure Blob StorageとGoogle Cloud Storageの比較

クラウドコンピューティング愛好家へのご挨拶。
Windows Azure Blob StorageサービスとGoogle Cloud Storageサービスの比較を見ることをお勧めします(著者はAmazon AS3についても言及することを忘れないでください)。

Google App EngineストレージとWindows Azureストレージを比較する記事を書くといいと思いました。 この記事では、 Windows Azure Blob StorageGoogle Cloud Storageを比較します

シリーズの最初の部分-Windows AzureテーブルストレージとAmazon DynamoDBの比較
パート2-Windows Azure Blob StorageとAmazon Simple Storage Service(S3)を比較する-パートI
パート3-Windows Azure Blob StorageとAmazon Simple Storage Service(S3)の比較–パートII、概要
略語: Windows Azure Blob Storage- WABSおよびGoogle Cloud Storage - GCS、 Amazon S3 - AS3

概念的には、WABSとGCSは同様の機能を提供します-簡単に言えば、両方のシステムは大量の非構造化データ(通常はファイルの形式)を保存できるクラウドファイルシステムです。

どちらのシステムも、通常はREST APIのラッパーである高レベル言語のファイルとフォルダーおよびその他のライブラリを操作するためのREST APIを提供します。 APIの各リリースには独自のバージョンがあり、WABSには日付値があり、GCSには番号があります。 執筆時点では、WABSバージョンは2011-08-18で 、GCSはバージョン2.0でした。

2つのシステムの同様の機能:



コンセプトの



これらの2つのサービスについて詳しく説明する前に、いくつかの概念を明確にすることが重要だと思います。 WABSおよびGCSの基本概念に精通している場合は、このセクションをスキップできます。

BLOBコンテナーとバスケット :これらのサービスがクラウド内のファイルシステムである場合、WABS BLOBコンテナーとGCSバケットをフォルダーまたはディレクトリと見なしてください。 WABSストレージアカウントまたはGCSアカウントでは、ブロブまたはオブジェクトをそれぞれ含めることができる0個以上のブロブコンテナーとバスケットを使用できます。

コメント:



BLOB とオブジェクト :WABS BLOBとGCSオブジェクトは、BLOBコンテナーとバスケットにあるクラウドファイルシステム内のファイルです。

コメント:



最も重要な2つの機能はダウンロードとダウンロードです。まずそれらについて説明し、次に他の機能を比較しましょう。

BLOBとオブジェクトの読み込み



コンテナとバスケットにブロブとオブジェクトをロードすることについて話しましょう。 ロードメカニズムは2つあります。1つのリクエストのフレームワーク内でブロブまたはオブジェクトを完全にダウンロードするか、それらを断片に分割できます(ブロックまたはWABSページ。GCSでは特別な名前はありません)。

1回のリクエストでダウンロード


ダウンロードしたデータが小さく、接続速度が良い場合、1回の要求でこのデータを完全にダウンロードできます。 WABSはこれにPut Blobを使用します。 GCS- PUT ObjectまたはPOST Objectで

ピースをロードする


単一のリクエストで完全にロードするには非効率的なビッグデータを共有できます。 どちらのシステムでも、データを断片(WABSのブロックまたはページ、GCSでは特別な名前を持たない)に分割し、徐々にロードすることができます。 WABSでは、ブロックBLOBの場合、ページBLOBのPut BlockおよびPut Block Listを使用する必要があります-Put Page 。 GCSは、このためにPOST ObjectおよびPut Object関数を使用します。

データをチャンクでロードするかどうかを決定できる理由は多数あります。



各システムにデータを断片的にロードする方法を見てみましょう。 たとえば、100 MBのファイルをチャンクでアップロードしたいとします。

綿棒


各ピースのサイズが1 MBであるとします(同じサイズのピースを用意する必要はありませんが)-100個をダウンロードする必要があります。 ブロックBLOBを取得します。各ブロック(ピース)には一意の識別子(BlockId)があります。 ロードするには、 Put Block関数を使用します。 BlockIdは、最大サイズが64バイトのBase64エンコード文字列です。 すべてのBlockId(この例では100)は同じ長さでなければなりません。 ブロックをロードする順番は関係ありません-並行してロードできます。 ブロックをロードした後、WABSはそれをリポジトリのどこかに置き、7日間保存します。 すべてのブロックをロードした後、 Put Block Listを呼び出してこれらのブロックを確認(コミット)します。 この関数が呼び出されるまでブロブに連絡することはできません。また、7日以内にブロックを確認しないと、システムによってブロックが削除されます。 BlockIdリストの順序に基づいて関数を呼び出した後、WABSはblobを再作成し、利用可能としてマークします。 BlockIdの値は関係ありません(すべてGUIDにすることができます)が、Putブロックリストを使用するときにBlockIdを送信する順序は重要です。

制限事項:



Gcs


GCSの場合、大きなファイルをまとめてダウンロードすることを「 再開可能なアップロード 」と呼びます。 最初に、 POSTオブジェクトを呼び出してブートプロセスを開始したことをGCSに伝える必要があります 通常、この関数はHTMLフォームを使用してファイルをアップロードするために使用されますが、この場合、ファイルを定義しません。 ダウンロードプロセスを開始したことをGCSに伝えるリクエストヘッダーを定義できます。 ダウンロードが完了すると、GCSは、ダウンロードプロセスを一意に識別するアップロードIDを含む応答を返します。 このIdは、ピースをロードするときに必要になるため、保存する必要があります。 次に、 Put Object関数を使用してファイルをダウンロードし、Upload Idとオブジェクトのコンテンツを渡してみる必要があります。 すべてがうまくいった場合、GCSは200 OkのHTTPコードで応答しますが、操作が失敗した場合、ダウンロードしたバイト数をGCSに問い合わせる必要があります。 GCSは、308 Resume Incomplete HTTPコードを返します。 さらに、Put Objectを使用してデータのロードを続行できます。

考え:



BLOBとオブジェクトをダウンロードする



ブロブとオブジェクトをダウンロードする方法を見てみましょう。 これには2つのメカニズムがあります。1つの要求でblobまたはオブジェクト全体をダウンロードするか、分割してダウンロードします。

各システムには、WABSでBlob取得し 、GCSでObject取得するダウンロード機能が1つだけあります。

1回のリクエストでダウンロード


データが小さく、接続速度が良い場合は、WABSのGet BlobとGCSのGET Objectを使用してオブジェクトを完全にダウンロードできます。


分割してダウンロードする


オブジェクトが大きく、一度にダウンロードできるかどうかわからない場合は、同じ機能を使用して、Rangeヘッダーを追加し、ダウンロードに必要なバイト範囲を決定して、ピースをダウンロードできます。

ダウンロードプロセス:

  1. オブジェクトのサイズを決定します。 たとえば、100 MBの「重さ」があります。
  2. ピースのサイズを決定します。 たとえば、1 MBのピースをダウンロードすると便利です。
  3. Get BlobまたはGet Objectを呼び出し、対応する値をRangeヘッダーに渡します。 連続してダウンロードする場合、最初のリクエストにはこのヘッダーの値「0-1048575」(0-1 Mb)、2番目のリクエスト-「1048576-2097151」(1-2 Mb)などが含まれます。
  4. ダウンロードしたら、作品をどこかに置きます。
  5. すべてのピースをダウンロードした後、空の100 MBファイルを作成し、このファイルにダウンロードしたピースを入力します。


WABS、AS3、GCSの共通点



3つのシステムすべてに共通のポイントがあります。たとえば、次のとおりです。



AS3と共通



GCSについて最初に読んだとき、GCSとAS3には多くの共通点があることがわかりました。たとえば:



GCSのユニークな瞬間



GCSの基本的な機能について説明し始めたとき、GCSはWABSやAS3よりも機能が少ないように見えますが、GCSには他のプラットフォームにはない機能があります。 例:



価格



両方のシステムを使用する場合、「資本」コストはありません。 価格設定モデルは比較的単純で、消費に基づいています。 どちらのシステムでも、請求書は使用量に基づいて請求され、3つのコンポーネントで構成されます。

  1. トランザクションの数 :支払は、行われたトランザクションの数に従って行われます-大まかに言って、1つのトランザクションはシステム内の1つの関数呼び出しです。 2つのシステムには大きな違いがあります-WABSでは 、トランザクションコストは固定( 10,000トランザクション あたり0.01ドル)です 。GCSでは 、トランザクション のタイプによって異なります。 PUT、COPY、POST、LISTの各操作を実行する場合、トランザクションごとに高い価格(1000トランザクションあたり0.01ドル)を支払い、GETなどでは低い価格(10,000トランザクションあたり0.01ドル)を支払います。 削除リクエストは書かれていませんが、GCSでは無料であると想定しています。
  2. ストレージ :各システムに保存されているデータの量に対して支払います。


  1. トラフィック :システムとの間で転送されるデータの量に対して支払います。 執筆時点では、両方のシステムが無料の着信トラフィックを提供しています。 データ転送の費用がGCSの同じデータセンター内で支払われるかどうかは言及されていません。


特別な価格設定モデルも利用でき、両方のシステムが異なる支払いパッケージを提供します。 価格の詳細-https : //www.windowsazure.com/en-us/pricing/details/(WABSの場合)およびhttps://developers.google.com/storage/docs/pricingandterms(GCSの場合)。

機能



この表は、WABSおよびGCSが提供する機能をまとめたものです。 両方のシステムでサポートされている機能のみが含まれています。
綿棒
Gcs
コンテナの作成/バケットの配置
はい
はい
コンテナのリスト/ GETサービス
はい
はい
コンテナの削除/バケットの削除
はい
はい
リストBLOB / GETバケット(リストオブジェクト)
はい
はい
コンテナACL / PUTバケットの設定(ACLまたはCORS)
はい
はい
コンテナACLを取得/バケットを取得(ACLまたはCORS)
はい
はい
Blob / PUTオブジェクトを配置
はい
はい
POSTオブジェクト
いや
はい
Get Blob / GET Object
はい
はい
Blobの削除/オブジェクトの削除
はい
はい
Blob / PUTオブジェクトのコピー
はい
はい
Blobプロパティの取得/ HEADオブジェクト
はい
はい
Blobメタデータ/ HEADオブジェクトを取得
はい
はい

次の表に、WABSでのみサポートされる機能を示します。
綿棒
Gcs
BLOBサービスプロパティを設定する
はい
いや
Blobサービスプロパティを取得する
はい
いや
コンテナのメタデータを設定する
はい
いや
コンテナメタデータの取得
はい
いや
BLOBプロパティを設定する
はい
いや
BLOBメタデータを設定する
はい
いや
スナップショットBLOB
はい
いや
リースブロブ
はい
いや
ブロックを置く
はい
いや
ブロックリストを置く
はい
いや
ブロックリスト/リストパーツの取得
はい
いや
ページを置く
はい
いや
ページ範囲を取得する
はい
いや

これらの関数をさらに詳しく考えてみましょう。
綿棒
Gcs
コンテナの作成/バケットの配置
はい
はい

この関数は、新しいBLOBコンテナーまたはバスケットを作成します。

留意すべき重要な点は、BLOBコンテナーはストレージアカウントに限定され、GCSバスケットはGCSプロジェクトに限定されることです。 WABSストレージアカウントを作成するとき、その場所(データセンター)を決定し、ブロブコンテナーは特定の地理的場所の特定のデータセンターに配置されます。 GCSでバスケットを作成するときに、このバスケットを作成する地域を決定するため、必要に応じて、GCSのすべてのデータセンターにバスケットを配布できます。 WABSで同じことを行うには、コンテナを配置するデータセンターごとにストレージアカウントを作成する必要があります。

BLOBコンテナーとバスケットにはいくつかの命名規則があり、それらは下の表にまとめられています。
綿棒
Gcs
最小/最大長のタイトル
3/63
3/63
大文字と小文字の区別
小文字
小文字
許可されたキャラクター
英数字とハイフン(-)
英数字、ハイフン(-)、およびピリオド(。)

その他の命名規則:


注:


綿棒
Gcs
コンテナのリスト/ GETサービス
はい
はい


この関数は、GCSで認証された所有者に属するすべてのBLOBコンテナーまたはバスケットのリストを返します。

コメント:


綿棒
Gcs
コンテナの削除/バケットの削除
はい
はい

この関数は、ブロブコンテナーまたはバスケットを削除します。

コメント:


綿棒
Gcs
リストBLOB / GETバケット(リストオブジェクト)
はい
はい

この関数は、コンテナまたはバスケット内のブロブとオブジェクトのリストを取得するために使用されます。 システム内の関数は、次の場合に同じことを行います。



違い:


綿棒
Gcs
コンテナACL / PUTバケットの設定(ACLまたはCORS)
はい
はい

この関数は、コンテナまたはバスケットのACLを指定するために使用され、WABSで1つ以上のアクセスポリシーを指定することもできます。 CORSはGCSでも設定できます(ただし、CORSとACLは同じリクエストで設定できません)。

BLOBコンテナーの場合、ACL値は次のようになります。



バスケットの場合、ACLは次のものと等しくなります。



GCSで便利なのは、ユーザーに異なるアクセス許可セットを与えることができることです。たとえば、user1にはREAD ACLを、user2にはWRITE ACLを、WABSにはそのような柔軟性はなく、アクセス許可はblobコンテナーにのみ設定されます。

WABSの便利な点は、ACLに加えて、このコンテナの一時的な許可セットを定義するコンテナに対して最大5つのアクセスポリシーを設定できることです。たとえば、ブロブコンテナに対する書き込み権限を持つアクセスポリシーを作成できます。これは1日のみ有効です。ポリシーを使用すると、署名付きの特別なURLを生成してユーザーに提供できます(柔軟な共有アクセス署名機能)。署名を使用すると、一定の期間、より詳細なレベルでコンテナおよびBLOBにアクセス権を発行できます。
綿棒
Gcs
コンテナーACLの取得/バケットの取得(ACLまたはCORS)
はい
はい

この関数は、blobコンテナーまたはバスケットのACLを取得するために使用されます。WABSでは、この関数はコンテナーに定義されたアクセスポリシーも返します。

バスケットのACLを取得するには、文字列パラメーター「acl」でGET Bucketを呼び出して、文字列パラメーター「cors」でCORSを取得する必要がありますどちらも指定されていない場合、バスケット内のオブジェクトのリストが返されます。

綿棒
Gcs
Blob / PUTオブジェクトを配置
はい
はい

この関数は、ブロブをブロブコンテナーに、オブジェクトをバスケットに追加します。 この関数を使用して、GCSの既存のオブジェクトにACLを指定したり、あるバスケットから別のバスケットにオブジェクトをコピーしたりできます。

コメント:



綿棒
Gcs
POSTオブジェクト
いや
はい

この関数は、HTMLフォームを使用して指定されたバスケットにオブジェクトを追加します。POSTはPUTの代替であり、ブラウザがオブジェクトをロードできるようにします。HTTPヘッダーを使用してPUTに渡されるパラメーターは、暗号化されたmultipart / form-dataメッセージの本文としてPOSTから渡されます。
綿棒
Gcs
Get Blob / GET Object
はい
はい

この機能により、コンテナまたはバスケットからblobをダウンロードできます。

コメント:


綿棒
GCS
Delete Blob/DELETE Object
はい
はい

この関数は、BLOBまたはオブジェクトをリポジトリから削除します。

コメント:



・WABSでは、この関数を正常に完了するために満たす必要がある前提条件を決定できます(If- Modified- SinceIf- Unmodified- SinceIf- MatchIf- None- Match)。
綿棒
Gcs
Blobのコピー/オブジェクトの配置-コピー
はい
はい

この関数は、ブロブまたはオブジェクトを元の場所からどこかにコピーします。

コメント:

・両方のシステムでは、この機能を正常に完了するために満たす必要のある前提条件を決定できます(If- Modified- SinceIf- Unmodified- SinceIf- MatchIf- None- Match)。これらの条件は、WABSのソースと最終コピー、およびGCSのソースの両方で定義できます。

・WABSでは、1つのストレージアカウント内でのみ、コンテナーからコンテナーにオブジェクトをコピーできます。GCSにはそのような制限はありません。交換が行われるバスケットが同じプロジェクトに属している場合、オブジェクトがコピーされます。ただし、APIを使用してチャンクをロードするオブジェクトを作成した場合、オブジェクトをリージョン間でコピーすることはできません。

・両方のシステムでは、既存のメタデータをコピーするか、最終コピーのメタデータを指定できます。



ヒント:


綿棒
Gcs
Blobプロパティの取得/ HEADオブジェクト
はい
はい

この関数は、blobプロパティとオブジェクトメタデータを取得するために使用されますが、blobまたはオブジェクトのコンテンツは返しません。

コメント:


綿棒
GCS
Get Blob Metadata/HEAD Object
はい
はい

この関数は、ブロブまたはオブジェクトのユーザー定義のメタデータを返します。この関数を使用して、特定のバージョンのblobまたはオブジェクトのプロパティを取得できます。この情報を取得するには、WABSでスナップショットBLOBの日付/時刻を指定する必要があります。

まとめ



この記事で見たように、両方のシステムは同様の機能セットを提供しますが、一部の機能はあるシステムに存在し、別のシステムには存在しません。それにもかかわらず、機能の大きな違いについて話すことはできません。

翻訳者からのメモ
このレビューを読んで、Googleがラプスダを構築するのではなく合理的で成功したアマゾンの道を進むことを合理的に決定したという感覚-これはいくつかのパラメーターのほぼ完全なアイデンティティによって証明されます。Amazonが2006年にサービスを開始し、2010年にGoogleがサービスを開始したことを考えると、そうだったかもしれません。ただし、Googleには他のサービスにはない優れた機能がいくつかあります。たとえば、同じCORSです。一般的に、一時的なコンテキストでのGoogleおよびMicrosoftサービスの開発のペースは、Amazonのペースよりも速いと言うこともできます。
次の資料が開発され次第、間違いなく翻訳し、あなたの注意を引き付けます。

Source: https://habr.com/ru/post/J145226/


All Articles