本页面介绍哪些 Cloud Storage 操作具有高度一致性以及哪些 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 全球一致的复制存储区执行写入操作时,与非复制存储区或非提交存储区相比,延时可能会略高一些。这是因为只有在多项(而不仅仅是一项)写入完成时才会返回成功响应。
对象删除操作也具有高度的全球一致性。如果删除请求成功,立即尝试下载对象或其元数据将导致 404 Not Found
状态代码。收到 404
错误的原因是,删除操作成功后对象将不再存在。
列出存储分区的操作具有高度一致性。例如,如果您在创建存储分区后立即执行 list buckets
操作,新存储分区会显示在返回的存储分区列表中。
列出对象的操作也具有高度一致性。例如,如果您在将对象上传至存储分区后立即执行 list objects
操作,新对象会显示在返回的对象列表中。
对于存储分区,虽然元数据更新后读取 (read-after-metadata-update) 操作的元数据更新具有高度一致性,但产生的配置更改可能需要一段时间才能传播。例如,如果您为存储分区启用了对象版本控制,则应至少等待 30 秒才能删除或覆盖对象。
具备最终一致性的操作
以下操作具有最终一致性:
- 撤消资源访问权限
- 使用 Cloud Identity and Access Management 授予对资源的访问权限
这些操作通常需要大约一分钟才能生效。在某些情况下,可能需要几分钟时间。
以最终一致性引发的行为为例,如果您移除了某个用户对存储分区的访问权限,这项更改会立即反映在存储分区的元数据中;但在短时间内,该用户可能仍然可以访问存储分区。
缓存控制和一致性
可公开读取的缓存对象可能不会呈现高度一致性。 如果您允许某个对象进行缓存,则当您更新或删除处于缓存中的对象时,除非缓存有效期结束,否则系统不会更新或删除缓存的对象。
对象的缓存有效期由与该对象关联的 Cache-Control
元数据定义。Cache-Control
元数据可使用 Cache-Control
请求标头设置,初次上传对象或后续更新对象元数据时会包含此标头。通过控制 Cache-Control
元数据,您还可以控制缓存对象的一致程度。此外,尽管对象请求可以包含自己的 Cache-Control
标头,但如果这些标头被设置为避免缓存内容,Cloud Storage 则会忽略它们。