R2 设计提供 99.999999999%(十一个 9)的年度持久性。这意味着如果您在 R2 上存储 10,000,000 个对象,平均大约每 10,000 年才会丢失一个对象。
R2 的持久性建立在多层冗余和数据保护之上:
-
复制:当您上传对象时,R2 通过完全复制和/或纠删码存储该对象的多个"副本"。这确保任何单个磁盘的完全或部分故障不会导致数据丢失。纠删码将对象的部分分布到多个磁盘,确保即使某些磁盘故障,仍可从可用部分的子集重建对象,防止硬件故障或数据中心物理影响(如火灾或洪水)导致数据丢失。
-
硬件冗余:存储集群由分布在地理区域内多个数据中心的硬件组成。这种物理分布确保局部故障(如单个设施的停电、网络中断或硬件故障)不会导致数据丢失。
-
同步写入:R2 仅当数据已持久化到磁盘时才通过 API 返回
HTTP 200 (OK)或以其他方式表示成功。我们不依赖异步复制来支持底层持久性保证。这对 R2 的一致性保证至关重要,并降低了客户端收到成功 API 响应但底层元数据和存储基础设施尚未持久化变更的可能性。
- 持久性不是数据可用性的保证。它是数据丢失可能性的度量。
- R2 提供 99.9% 的可用性 SLA ↗
- 持久性不能防止有意或意外的数据删除。使用存储桶锁定和/或存储桶范围的 API 令牌 来限制数据访问。
- 持久性也与一致性不同,后者描述读写如何反映在系统状态中(例如最终一致性与强一致性)。