コンテンツにスキップ

一貫性モデル

このページでは、R2の一貫性モデルについて詳述します。特に、R2が強く、グローバルに一貫している場所と、これが適用される操作について説明します。

R2は「強く一貫している」と説明できます。特に他の分散オブジェクトストレージシステムと比較した場合にそうです。この強い一貫性は、R2に対する操作が最新(正確な)状態を確認できることを保証します:クライアントは、書き込み、更新、および/または削除操作の影響を即座に、グローバルに観察できるべきです。

用語

R2の文脈において、強い一貫性と最終的一貫性は以下の意味を持ちます:

  • 強く一貫している - 操作の効果は、すべてのクライアントによって即座にグローバルに観察されます。クライアントは「古い」(不一致な)状態を観察することはありません。
  • 最終的に一貫している - クライアントは操作の効果を即座に見ることができない場合があります。状態がグローバルに伝播するまでに時間がかかることがあります(通常は数秒から1分程度)。

操作と一貫性

R2バケットおよびオブジェクトに対する操作は、以下の一貫性保証に従います:

アクション一貫性
書き込み後の読み取り:オブジェクトをアップロードしてから読み取る強く一貫している:リーダーは即座に最新のオブジェクトをグローバルに見ることができます
メタデータ:オブジェクトのメタデータを更新する強く一貫している:リーダーは即座に更新されたメタデータをグローバルに見ることができます
削除:オブジェクトを削除する強く一貫している:そのオブジェクトへの読み取りは即座に「存在しない」というエラーを返します
オブジェクトのリスト:バケット内のオブジェクトをリストする強く一貫している:リスト操作はその時点でのすべてのオブジェクトをリストします
IAM:R2ストレージの権限を追加/削除する最終的に一貫している: 新しいまたは更新されたAPIキーは、権限がグローバルに反映されるまで最大1分かかることがあります

追加の注意事項:

  • 2つのクライアントが同じキーに対して書き込み(PUTまたはDELETE)を行っている場合、最後に完了した書き込みが「勝ち」となります。
  • マルチパートアップロードを行う場合、すべてのパートが正常にアップロードされた後も書き込み後の一貫性が適用され続けます。同じパートが複数のライターから(誤って)アップロードされた場合、最後の書き込みが勝ちます。
  • 同じバケット内でオブジェクトをコピーすることも、新しいオブジェクトを書き込む場合と同じ書き込み後の一貫性に従います。「コピーされた」オブジェクトは、コピー操作が完了するとすぐにすべてのクライアントから読み取ることができます。

キャッシング

カスタムドメインをR2バケットに接続し、そのバケットから提供されるオブジェクトのキャッシングを有効にすると、キャッシングが有効なドメインを介してコンテンツにアクセスする際に、一貫性モデルは必然的に緩和されます。

具体的には、次のことを期待する必要があります:

  • R2から削除したオブジェクトがまだキャッシュされている場合、引き続き利用可能です。削除が反映される必要がある場合は、オブジェクトを削除した後にキャッシュをパージする必要があります。
  • デフォルトでは、Cloudflareのキャッシュは自動的にHTTP 404(見つかりません)レスポンスをキャッシュします。同じパスにオブジェクトをアップロードすると、キャッシュはキャッシュTTL(生存時間)が切れるまでHTTP 404を返し続ける可能性があります。新しいオブジェクトがR2から取得されるか、キャッシュがパージされるまで続きます。
  • 特定のキーのオブジェクトが新しいオブジェクトで上書きされると、古い(以前の)オブジェクトはキャッシュTTLが切れるまで(またはオブジェクトが追い出されるまで)クライアントに提供され続けます。

キャッシュは、Worker APIバインディングS3 APIを介したアクセスには影響しません。これらの操作はバケットに対して直接行われ、キャッシュを通過しないためです。