整合性

このページでは、Cloud Storage の強整合性のオペレーションと結果競合性のオペレーションについて説明します。キャッシュ可能な、一般公開されたオブジェクトの場合、オブジェクトに対するオペレーションの整合性のレベルは制御可能です。

強整合性のオペレーション

Cloud Storage の次のオペレーションでは、データとメタデータの両方を含め、グローバルな強整合性が確保されます。

  • read-after-write
  • read-after-metadata-update
  • read-after-delete
  • バケットの一覧表示
  • オブジェクトの一覧表示
  • ACL を使用したリソースへのアクセス権の付与

Cloud Storage にオブジェクトをアップロードし、成功のレスポンスを受け取ると、オブジェクトは直ちに、Google がサービスを提供する任意のロケーションからのダウンロード オペレーションとメタデータ オペレーションの対象になります。これは、新しいオブジェクトを作成する場合でも、既存のオブジェクトを上書きする場合でも同じです。アップロードは強整合性なので、read-after-write または read-after-metadata-update オペレーションで 404 Not Found レスポンスや古いデータを受け取ることはありません。

さらに、アップロード リクエストが成功したということは、データが複数のデータセンターにレプリケートされたことを意味します。Cloud Storage のグローバルな整合性を持つ、レプリケート対象のストアへの書き込みレイテンシは、レプリケートされないストアまたは commit されないストアの場合よりもわずかに高くなる可能性があります。これは、成功のレスポンスが、1 つだけでなく複数の書き込みが完了した場合にのみ返されるためです。

グローバルな強整合性は、オブジェクトの削除オペレーションにも当てはまります。削除リクエストが成功した直後に、オブジェクトまたはそのメタデータをダウンロードしようとすると、404 Not Found ステータス コードが返されます。404 エラーが返されるのは、削除オペレーションが成功した後はオブジェクトがもう存在しないためです。

バケットの一覧表示とオブジェクトの一覧表示には強整合性があります。バケットまたはオブジェクトを作成した直後に関連する list オペレーションを行ったとしても、返されるリストには新しく作成されたバケットまたはオブジェクトが表示されます。

バケットについては、read-after-metadata-update オペレーションでのメタデータの更新は強整合性ですが、オペレーションの結果である設定の変更が反映されるまでに時間がかかる場合があります。たとえば、バケットでオブジェクトのバージョニングを有効にした場合、オブジェクトの削除または上書きを行う前に 30 秒以上待つ必要があります。

同様に、HMAC キーの場合、キーの状態を変更するようにリクエストしてから状態の変更が反映されるまでに最長で 3 分の遅延が生じます。たとえば、HMAC キーを無効にする場合、キーを削除するようにリクエストするまで、少なくとも 3 分待つ必要があります。3 分以内にリクエストすると、失敗する可能性があります。

結果整合性のオペレーション

以下のオペレーションでは結果整合性が保たれます。

通常、このオペレーションの結果が反映されるまでに約 1 分かかります。場合によっては、数分以上かかる場合もあります。

結果整合性によって発生する可能性がある動作の例を挙げると、バケットに対するユーザーのアクセス権を取り消した場合、この変更はバケットのメタデータにすぐに反映されますが、少しの間、そのユーザーがバケットにアクセスできる場合があります。

キャッシュ制御と整合性

一般公開され、キャッシュされたオブジェクトでは、強整合性が損なわれる可能性があります。オブジェクトのキャッシュ保存を許可すると、オブジェクトがキャッシュ内にある場合にそのオブジェクトを更新または削除しても、キャッシュされたオブジェクトはキャッシュの有効期間が満了するまで更新または削除されません。

オブジェクトのキャッシュ存続期間は、そのオブジェクトに関連付けられた Cache-Control メタデータによって定義されます。Cache-Control メタデータは、オブジェクトを最初にアップロードするときや、アップロード後にオブジェクトのメタデータを更新するときに、Cache-Control リクエスト ヘッダーを使用して設定できます。Cache-Control メタデータは制御可能であるため、キャッシュされたオブジェクトの整合性のレベルも制御できます。また、オブジェクトに対するリクエストには独自の Cache-Control ヘッダーを追加できますが、キャッシュされたコンテンツを回避するように設定されている場合、Cloud Storage はこれらのヘッダーを無視します。