Cloudflare R2 は、Cloudflare のグローバルネットワーク上に構築した、エグレス料金なしの S3 互換オブジェクトストレージです。強整合 で、高い データ耐久性 を想定して設計されています。
R2 は、インターネット経由で頻繁にアクセスする非構造化データの保存と配信に向いています。エグレス料金は発生しません。Web アセットの配信、AI モデルの学習、ユーザー生成コンテンツの管理といったワークロードに適しています。
R2 のアーキテクチャは、複数のコンポーネントで構成されます。
-
R2 Gateway: すべての API リクエストの入口です。認証とルーティングを担当します。このサービスは Cloudflare Workers 経由で、Cloudflare のグローバルネットワークにデプロイされます。
-
Metadata Service: Durable Objects 上に構築した分散レイヤーです。オブジェクトメタデータ(オブジェクトキー、チェックサムなど)を保存・管理し、ストレージ全体でオブジェクトの強整合性を保証します。メタデータへのアクセスを速くするため、組み込みのキャッシュ層もあります。
-
Tiered Read Cache: Distributed Storage Infrastructure の手前にあるキャッシュ層です。Cloudflare Tiered Cache を使い、クライアントに近い場所からデータを返してオブジェクト読み取りを速くします。
-
Distributed Storage Infrastructure: 暗号化したオブジェクトデータを永続保存する基盤です。
R2 は、Cloudflare Workers Binding、S3 互換 API、Cloudflare Dashboard と Wrangler CLI を支える REST API など、複数のクライアントインターフェイスに対応します。リクエストはすべて R2 Gateway を経由し、Gateway が Metadata Service と Distributed Storage Infrastructure と連携してオブジェクトデータを取得します。
R2 へ書き込みリクエスト(オブジェクトのアップロードなど)が来ると、次の順で処理されます。
-
リクエスト処理: ユーザーに近いエッジの R2 Gateway がリクエストを受け取り、認証します。
-
暗号化とルーティング: Gateway は Metadata Service に問い合わせて 暗号化キー を取得し、バケットに設定した ロケーション 内のどのストレージクラスターへ暗号データを書くかを決めます。
-
ストレージへの書き込み: 暗号化したデータを分散ストレージ基盤へ書き込み、耐久性 のためリージョン内(例: ENAM)で複製します。
-
メタデータのコミット: 最後に Metadata Service がオブジェクトのメタデータをコミットし、以降の読み取りで見えるようにします。このコミットのあとでのみ、クライアントへ
HTTP 200の成功レスポンスを返します。未確認の書き込みを防ぐためです。
R2 へ読み取りリクエスト(オブジェクトの取得など)が来ると、次の順で処理されます。
-
リクエスト処理: ユーザーに近いエッジの R2 Gateway がリクエストを受け取り、認証します。
-
メタデータの参照: Gateway は Metadata Service にオブジェクトメタデータを問い合わせます。
-
オブジェクトの読み取り: Gateway は、階層化リードキャッシュから 暗号化 されたオブジェクトの取得を試みます。なければ、オブジェクトデータを持つリージョン内の分散ストレージデータセンターの 1 つから取得します。
-
クライアントへの配信: オブジェクトを復号してユーザーへ返します。
操作の性能は、バケットの地理的な場所、リクエストの送信元、アクセスパターンなどの影響を受けます。
リージョンをまたぐリクエストのアップロード性能を上げるには、バケットで Local Uploads を有効にします。
読み取り性能を上げるには、カスタムドメイン を使うときに Cloudflare Cache を有効にします。キャッシュを有効にすると、読み取りリクエストは R2 Gateway を経由せず、Cloudflare のエッジキャッシュから直接返せます。レイテンシが下がります。キャッシュされたデータは、最新版をすぐ反映しないことがあります。