整合性

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

整合性が強いオペレーション

Cloud Storage は、次のオペレーションでグローバルな強整合性を提供します。

  • read-after-write
  • read-after-metadata-update
  • read-after-delete
  • バケットの一覧表示
  • オブジェクトの一覧表示

Cloud Storage にオブジェクトを書き込むと(オブジェクトのアップロード、作成、コピーなど)、書き込みリクエストに対する成功応答を受け取ると同時に、そのオブジェクトはすぐに読み取りやメタデータ操作に利用できるようになります。これは、すべてのストレージ クラスに当てはまり、新しいオブジェクトの作成と既存のオブジェクトの置き換えの両方に適用されます。

書き込みは強整合性のため、デュアルリージョンまたはマルチリージョンに配置されたバケットの場合でも、read-after-write または read-after-metadata-update のオペレーションで 404 Not Found レスポンスや古くなったデータを受け取ることはありません。データがリージョン間で複製されておらず、オブジェクトが最初に書き込まれたロケーションが使用できなくなったというまれなケースでは、オブジェクトへのアクセスの試行で、再試行可能な 500 エラー レスポンスが返されます。

グローバルな強い整合性は、オブジェクトの削除オペレーションにも当てはまります。削除リクエストが成功した直後に、オブジェクトまたはそのメタデータをダウンロードしようとすると、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 はこれらのヘッダーを無視します。

アトミック オペレーション

Cloud Storage では、オブジェクトのアップロード(既存のオブジェクトの上書きを含む)、オブジェクトのメタデータの更新、オブジェクトの置換、オブジェクトの削除など、個々のオブジェクトに関連するほとんどのオペレーションでアトミック性が保証されています。

バッチ リクエストは必ずしもアトミックであるとは限りません。バッチ リクエスト内の単一のオペレーションはアトミックにできますが、バッチ リクエスト内のすべてのオペレーションがグループとしてアトミックであるとは限りません。一部のオペレーションが成功し、他のオペレーションが失敗する可能性があるためです。

キャッシュに保存されたデータが古くなった場合や、世代番号を指定せずに範囲読み取りを実行した場合に、取得するオブジェクトが上書きされる状況で、古いバージョンのオブジェクトがフェッチされることがあります。ベスト プラクティスとして、前提条件を使用して、正しいオブジェクト バージョンをフェッチしていることを確認します。

次のステップ