本页面介绍 Anywhere Cache 功能,它可为 Cloud Storage 存储桶提供由固态硬盘 (SSD) 支持的可用区级读取缓存。Anywhere Cache 提供按需缓存容量,它会根据您的需求自动调整缓存和可用带宽的大小。Anywhere Cache 的优势使其特别有助于降低涉及大量读取的工作负载相关的网络费用。
如需了解如何在 Anywhere Cache 中创建和管理缓存,请参阅创建和管理缓存。
概览
Anywhere Cache 可让您在与工作负载相同的可用区中创建缓存。在某个可用区中创建缓存时,源自该可用区的读取数据请求将由缓存(而非存储桶)进行处理。每个缓存都为其可用区内的客户端提供服务。只有当数据由缓存所在可用区中的虚拟机读取时,才会从存储桶注入到缓存中。元数据不会缓存,针对对象元数据的请求由存储桶(而非缓存)处理。
为存储桶创建缓存时,必须在存储桶所在位置内的某个可用区中创建缓存。例如,如果您的存储桶位于 us-east1 区域,您可以在 us-east1-b 中创建缓存,但不能在 us-central1-c 中创建缓存。如果您的存储桶位于 ASIA 双区域中,您可以在 asia-east1 和 asia-southeast1 区域内的任何可用区中创建缓存。如需查看可用区列表,请参阅本文档的支持的位置部分。
对于每个存储桶,您可以在每个可用区创建一个缓存。例如,如果您的存储桶位于 US 多区域中,而您的 Compute Engine 虚拟机在 us-east1-b 和 us-central1-a 可用区中运行,您可以在 us-east1-b 中创建一个缓存,并在 us-central1-a 中创建另一个缓存。
Anywhere Cache 是一项全托管式服务服务,始终返回一致的数据。
优势
使用 Anywhere Cache 缓存数据可获得以下好处:
获得更快的数据访问速度:Anywhere Cache 将您的数据与计算资源共置在同一可用区中,并完全由 SSD 提供支持。这可让您的工作负载获得高达 2.5 TB/秒的吞吐量,并缩短延迟时间,从而加快读取速度。
降低多区域数据传输费用:与直接从多区域存储桶读取的数据相比,从缓存读取的数据会产生较低的数据传输费用。
减少检索费用:对于 Nearline Storage、Coldline Storage 和 Archive Storage 中的存储桶,从缓存读取数据不会产生检索费用。
读取操作产生的费用更低:通过 Anywhere Cache 处理的读取操作的价格低于通过 Standard Storage 中的存储桶处理的 B 类操作的价格。
自动扩缩缓存大小:Anywhere Cache 的动态 SSD 缓存会根据使用情况自动扩缩,而无需您指定缓存大小。
高效使用缓存:您可以在现有存储桶上启用 Anywhere Cache,而无需更改现有应用或 API。存储在 Anywhere Cache 中的数据具有强一致性。
如需详细了解价格,请参阅 Anywhere Cache 价格。如需了解配额,请参阅 Anywhere Cache 配额。
何时应使用 Anywhere Cache?
对于不经常更改但经常读取的数据,请使用 Anywhere Cache 来加快分析工作负载以及 AI/机器学习模型训练和加载的数据读取速度。
假设您要跨多个 Google Kubernetes Engine 节点训练 AI 模型,这些节点都反复读取存储在 Cloud Storage 存储桶中的数据,并且它们在相同的可用区中运行。当您在工作负载运行的可用区内创建缓存时,该缓存可提供额外的带宽,并帮助您减少在多区域存储桶中读取数据而产生的数据传输费用,从而更高效地运行更大规模的扩缩工作负载。
使用 Anywhere Cache 加速 BigQuery 读取
Anywhere Cache 可用于处理 BigQuery 发出的对象读取请求的数据。借助 Anywhere Cache,您可以加快应用的数据读取速度,同时优化成本效益。
虽然 BigQuery 是一项区域级服务,但其底层计算资源有时可能会在可用区之间转移,以实现负载均衡。最佳实践是,为区域中所有可用区的 BigQuery 工作负载启用 Anywhere Cache,以确保在底层计算资源更改可用区时,有可用的缓存可供使用。如果某个可用区中的缓存未使用,则不会产生额外费用,因为 Anywhere Cache 是按用量付费的。请注意,如果工作负载的资源更改了可用区,新可用区中的缓存将需要重新注入数据,这可能会导致数据注入费用一次性增加。
价格
如需了解使用 Anywhere Cache 的价格,请参阅 Anywhere Cache 价格。
支持的位置
只要有可用容量,就可以在特定可用区中创建缓存。如果没有可用于创建缓存的容量,Anywhere Cache 服务会继续尝试创建缓存,直到容量可用或用户中止创建过程为止。容量可能会长时间处于不可用状态。
对于每个存储桶,您最多可以在每个可用区创建一个缓存。例如,如果某个存储桶位于 us-east1 区域,您可以在 us-east1-b 中创建一个缓存,并在 us-east1-c 中创建另一个缓存。如果存储桶位于包含 us-central1 和 us-east1 的多区域中,您可以在 us-central1-a 中创建一个缓存,并在 us-east1-b 中创建另一个缓存。
您可以在以下可用区中使用 Anywhere Cache。您可以根据存储桶的位置类型使用这些可用区。
| 地理区域 | 位置 | ||||
|---|---|---|---|---|---|
| 区域名称 | 区域 | 双区域 | 多区域 | 自定义双区域 | |
| 亚洲 | |||||
asia-east1-a |
|||||
asia-east1-b |
|||||
asia-east1-c |
|||||
asia-northeast1-a |
|||||
asia-northeast1-b |
|||||
asia-northeast1-c |
|||||
asia-south1-a |
|||||
asia-south1-b |
|||||
asia-south1-c |
|||||
asia-southeast1-a |
|||||
asia-southeast1-b |
|||||
asia-southeast1-c |
|||||
| 欧洲 | |||||
europe-north1-a |
|||||
europe-north1-b |
|||||
europe-north1-c |
|||||
europe-west1-b |
|||||
europe-west1-c |
|||||
europe-west1-d |
|||||
europe-west4-a |
|||||
europe-west4-b |
|||||
europe-west4-c |
|||||
europe-west6-a |
|||||
europe-west6-b |
|||||
| 美国 | |||||
us-central1-a |
|||||
us-central1-b |
|||||
us-central1-c |
|||||
us-central1-f |
|||||
us-east1-a |
|||||
us-east1-b |
|||||
us-east1-c |
|||||
us-east1-d |
|||||
us-east4-a |
|||||
us-east4-b |
|||||
us-east4-c |
|||||
us-east5-a |
|||||
us-east5-b |
|||||
us-east5-c |
|||||
us-south1-a |
|||||
us-south1-b |
|||||
us-south1-c |
|||||
us-west1-a |
|||||
us-west1-b |
|||||
us-west1-c |
|||||
us-west3-a |
|||||
us-west3-b |
|||||
us-west3-c |
|||||
us-west4-a |
|||||
us-west4-b |
|||||
us-west4-c |
|||||
Anywhere Cache Recommender
Anywhere Cache Recommender 会分析数据用量和存储空间,并提供有关在存储桶/可用区对中创建缓存的建议和分析洞见。如需了解有关使用 Anywhere Cache Recommender 的概览信息和说明,请参阅 Anywhere Cache Recommender。
缓存操作
本部分介绍您可以在 Anywhere Cache 缓存上执行的操作。有些操作是异步的,会返回一个长时间运行的操作;其他操作是同步的,操作会立即完成并返回 AnywhereCache 资源。
创建缓存
创建缓存时,您可以配置以下属性:
存留时间 (TTL) 是指数据块从上次读取起将在缓存中保留的最长时间。例如,如果 TTL 设置为 24 小时,某一个数据块的上次读取时间是周一上午 11 点,如果在这之后没有发生读取,该数据块将在周二上午 11 点从缓存中逐出。
您可以将 TTL 设置为 1 小时到 7 天之间的值。如果未指定,TTL 默认为 24 小时。
准许政策决定了缓存是在第一次未命中还是第二次未命中时注入数据。如果设置为在第二次未命中时注入数据,则仅当数据在您指定的 TTL 内第二次被读取时,系统才会将该数据注入缓存。“在第二次未命中时注入”设置可确保仅缓存读取多次的对象,从而降低使用 Anywhere Cache 的费用,但这也会降低缓存命中率。
如果未指定,则准许政策默认设置为在第一次未命中时注入。
当您创建缓存时,在创建过程中,缓存为 CREATING 状态,在运行过程中,缓存为 RUNNING 状态。缓存创建操作最多可能需要 48 小时才能完成,之后操作会超时。
AnywhereCaches Create API 是异步的。创建操作会返回长时间运行的操作。长时间运行的操作会提供创建操作的状态,并且您可以在操作完成之前取消操作。
更新缓存
您可以更新处于 RUNNING 状态的缓存的 TTL 或准许政策。当缓存正在更新时,pending_update 字段的值为 true。当 pending_update 字段的值为 true 时,缓存无法再次更新。
处于 CREATING、PAUSED 或 DISABLED 状态的缓存无法更新。AnywhereCaches Update API 是异步的,并返回长时间运行的操作。
当缓存的 TTL 完成更新后,新的 TTL 会立即应用于新注入的数据;对于现有数据,仅当该数据被读取时才会应用新的 TTL。这意味着,缓存中的现有数据会保留旧的 TTL,直到该数据被读取或因 TTL 到期而被逐出。
获取缓存
当您获取缓存时,Anywhere Cache 会返回缓存实例的状态和配置。AnywhereCaches Get API 是同步的,并返回 AnywhereCache 资源。
列出缓存
您可以返回给定存储桶的关联缓存列表。AnywhereCaches List API 是同步的,并支持分页。
暂停缓存
您可以暂停缓存,以停止处于 RUNNING 状态的缓存的数据注入。当缓存处于 PAUSED 状态时,您仍然可以从缓存中读取现有数据,但无法将新数据注入到缓存中。从缓存中读取现有数据会重置该数据在缓存中的 TTL。
当您恢复处于 PAUSED 状态的缓存时,该缓存会变为 RUNNING 状态。
AnywhereCaches Pause API 是同步的,并返回 AnywhereCache 资源。
恢复缓存
您可以恢复处于 PAUSED 状态或 DISABLED 状态的缓存,前提是停用的缓存在 1 小时的宽限期内。在 1 小时的宽限期过后,系统会尽力执行恢复操作,因为缓存可能会在宽限期后的任何时间点被删除。缓存恢复后,会进入 RUNNING 状态。
AnywhereCaches Resume API 是同步的,并返回 AnywhereCache 资源。
停用缓存
您可以停用缓存,以便从存储桶的配置中永久移除该缓存。停用缓存后,它会变为 DISABLED 状态。在此状态下,您仍然可以从缓存中读取现有数据,但无法将新数据注入到缓存中。
被停用的缓存有 1 小时的宽限期,在此期间,您可以通过恢复缓存来取消停用。在 1 小时的宽限期结束后,缓存会被删除。当缓存被删除时,该缓存中的所有数据都会被逐出,并且缓存会从存储桶中移除。
在缓存被删除前的 1 小时内,您可以通过恢复缓存来还原 DISABLED 状态,此时缓存会恢复为 RUNNING 状态。
AnywhereCaches Disable API 是同步的,并返回 AnywhereCache 资源。
缓存大小和带宽限制自动扩缩
Anywhere Cache 提供临时缓存存储空间和带宽,可根据您的需求进行扩缩。 如需详细了解 Anywhere Cache 的大小和带宽限制,请参阅 Cloud Storage 配额和限制。
费用控制
以下是一些可用于降低运行缓存的费用的技巧:
存储桶选择:您应仅为包含要缓存的数据的存储桶创建缓存。
可用区选择:您应仅在工作负载将受益于缓存的可用区中创建缓存。
在第二次读取时注入:您可以指定数据仅在第二次读取时注入(而不是在第一次读取时注入),这有助于确保缓存仅存储多次读取的数据。
TTL 设置:您应指定在缓存中存储数据所需的最小 TTL。TTL 可以在不中断操作的情况下更改。
暂停缓存:您可以暂停缓存以停止数据注入并减少相关的缓存注入费用。暂停缓存会立即生效。您可以暂停缓存,直到指定的 TTL 到期后所有数据被逐出。所有数据被逐出后,将不再产生数据存储费用。
停用缓存:您可以停用缓存,以便将其从服务中永久移除,并停止产生所有相关的缓存费用。
局限和限制
如需删除存储桶,您必须先删除其所有关联的缓存。唯一的例外情况是使用 Google Cloud 控制台删除存储桶时,系统会同时删除所有关联的缓存。
在执行缓存创建、停用、暂停、恢复或更新操作时,将操作速率限制为每秒不超过一项操作。每秒执行多项操作可能会导致失败。
Anywhere Cache 不是持久性存储,缓存中的数据可能会因各种原因被删除。一种情况是,缓存自动调整大小,以确保有足够的资源可供工作负载使用。在这种情况下,某些数据可能会根据“最近最少使用”(LRU) 算法被逐出,直到 Anywhere Cache 服务增加缓存大小。
在任何情况下,您的数据都会安全地存储在源存储桶中。如果数据因 TTL 到期以外的原因而从缓存中移除,Anywhere Cache 服务会尝试以透明的方式将数据重新注入到缓存中,而您无需为此付费。如果数据无法透明地重新注入,或者因 TTL 过期而被移除,Anywhere Cache 服务将在第一次或第二次读取时重新注入数据。
无法使用 BigQuery 读取通过 Anywhere Cache Recommender 生成的建议和数据分析。
排查暂时性资源短缺问题
以下部分介绍了在发生暂时性资源短缺时如何进行问题排查,暂时性资源短缺意味着指定可用区中没有足够的 SSD 容量或服务容量来创建缓存、增加缓存大小或提高缓存带宽限制。
无法创建新缓存
由于缺少 SSD 容量或吞吐量服务资源,Anywhere Cache 可能无法在特定可用区中创建新缓存,从而导致暂时性的资源短缺。在此期间,Anywhere Cache 会尝试创建新缓存,尝试最长持续48 小时。如果在 48 小时内有资源可用,Anywhere Cache 会成功完成缓存创建请求。如果在 48 小时内没有资源可用,缓存创建请求会失败。
问题排查方法:为避免缓存中断,您可以手动取消缓存创建操作,并在可能有可用容量的其他可用区中创建新缓存。如需监控或取消缓存创建操作,请参阅使用长时间运行的操作。
无法增加缓存大小
如果缓存的可用区中没有所需的 SSD 容量,Anywhere Cache 可能无法增加缓存的大小。
虽然 Anywhere Cache 可按需自动增加缓存大小,但能否增加缓存大小取决于 SSD 容量的可用性。如果在发出自动增加缓存大小的请求时没有可用的 SSD 容量,Anywhere Cache 会继续提交请求,直到暂时性资源短缺结束或不再需要增加缓存大小为止。
在暂时性资源短缺期间,系统会注入新数据,并根据最近最少使用算法逐出缓存中的现有数据。如果缓存足够大,可以存储大部分热数据,则对缓存指标几乎没有影响。与不受资源短缺影响的缓存相比,容量小于热数据量的缓存需要更频繁地逐出数据并重新注入相同数据。如果缓存的实际大小远小于所需容量,可能会出现以下与资源短缺相关的行为:
- 缓存带宽限制降低,缓存吞吐量降低,数据传输带宽配额消耗增加,并且可能会对其他指标产生影响
- 结算可能有以下影响:
- 缓存注入费用使成本增加
- 缓存存储费用使成本降低
- 缓存数据传出费用使成本降低
- 缓存数据传出操作费用使成本降低
- 多区域数据传输费用使成本增加
- 使用 B 类操作使成本增加
如需了解这些费用,请参阅 Anywhere Cache 价格。
问题排查方法:为了在暂时性资源短缺期间获得最佳效果,我们建议您监控缓存,并根据需要暂停不必要的缓存或工作负载。
无法提高缓存的带宽限制
在缓存大小增加期间,如果特定可用区中的吞吐量服务资源不足以将现有缓存的缓存带宽限制以 20 Gbps/TiB 为单位提高,则可能会暂时出现缓存带宽限制短缺的情况。在可用缓存带宽短缺期间,Anywhere Cache 不允许缓存带宽限制以每 TiB 数据 20 Gbps 为单位提高,但缓存会继续响应读取请求。我们会按请求评估提高缓存带宽限制的请求。在可用缓存带宽短缺期间,您可能会看到存储桶的数据出站流量带宽消耗量有所增加。
问题排查方法:为了在暂时性资源短缺期间获得最佳效果,我们建议您监控缓存,并根据需要暂停不必要的缓存或工作负载。