Simplifying runtime caching on Vercel
TL;DR · AI 摘要
Simplifying runtime caching on Vercel - Vercel Today, we’re bringing Data Cache into Runtime Cache, giving developers on...
核心要点
- 主题聚焦:Simplifying runtime caching on Vercel
- 来源:Vercel News,建议结合原文判断细节。
- AI 分析暂不可用,本条为保底评分与摘要。
在 Vercel 上简化运行时缓存 - Vercel
今天,我们将 Data Cache 集成到 Runtime Cache 中,为开发者提供一个跨框架和 API 的统一数据缓存方案。如果你正在使用 Next.js 的 fetch 缓存或 unstable_cache,无需修改现有代码。Pro 和 Enterprise 项目将获得更大的存储配额。
Runtime Cache 让你的代码能够在不依赖独立缓存服务的情况下,跨请求复用已获取或计算的数据。过去一年中,我们优化了流量高峰期间的读取性能,提升了存储预算,并让缓存使用情况更易于分析。
复制链接到标题 为什么我们要构建 Runtime Cache
Data Cache 最初是作为 Vercel 为 Next.js App Router 提供的数据缓存服务推出的,被 fetch 缓存和 unstable_cache 使用。与存储完整 HTTP 响应的 CDN 缓存不同,Data Cache 存储的是用于生成这些响应的应用数据。例如,商品页面可以在为每位访客生成个性化响应时,复用缓存的目录数据。
我们希望开发者无需依赖 Next.js 也能使用这项服务。去年,我们通过直接 API(@vercel/functions 中的 getCache)推出了 Runtime Cache。应用可以将其用于路由中间件的特性标志查询、构建期间的 CMS 内容缓存,以及 SvelteKit 和 Nuxt 应用中的数据缓存。
框架也可以通过各自的 API 暴露这项服务。在 Vercel 上,Next.js 本身使用 Runtime Cache API 实现 'use cache: remote',用于缓存函数和组件输出。
复制链接到标题 Runtime Cache 的工作原理
Runtime Cache 的基础设施是一个由多个团队共享的分布式缓存服务。Go 语言 API 处理请求,由每个 Vercel 区域的 Redis 集群提供支持。每小时,该服务处理超过 4.4 亿次读取,传输超过 18TB 的数据。
每个区域都有自己的缓存。缓存命中时,只需一次往返即可访问代码运行区域的缓存服务。Vercel 使用短期凭证处理认证,因此你无需管理 API 密钥。
发生缓存未命中时,你的应用或框架会获取或计算值,并将其写入对应区域的缓存。服务不会检查其他区域的缓存副本。
应用会从 Runtime Cache 复用产品数据,当缓存数据缺失或需要刷新时会回源获取。
每个缓存条目存储其标签和写入时间。当服务读取条目时,会检查同一区域的独立标签存储中的标签失效时间戳。如果任何标签在条目写入后失效,该条目将被视为过期。
例如,应用可以将所有缓存的商品数据标记为 catalog。当目录变更时,失效该标签只需写入一个时间戳,即使有百万条记录共享该标签。服务无需逐一查找并删除这些条目。
失效操作会立即更新接收请求区域的标签存储。Vercel 的共享标签基础设施(CDN 也使用该架构)通过全局推送管道分发时间戳,通常在几百毫秒内即可到达其他区域。
你的应用或框架决定缓存内容并处理未命中情况。Runtime Cache 负责区域存储、认证以及跨区域的标签失效分发。
复制链接到标题 我们已发布的功能
#### 复制链接到标题 流量高峰期间更快的读取速度
/think
检查条目是否仍然有效会在每次缓存命中时增加依赖项。在流量高峰期间,标签存储中响应缓慢的分片可能会延迟读取操作,即使缓存值已经可用。
我们新增了电路断路器,允许读取操作临时使用内存中缓存的标签时间戳检查新鲜度,从而无需等待缓慢分片的响应。在此降级模式下,读取操作可以暂时将最近失效的数据视为有效。
我们于8月在所有区域启用了断路器。在最大区域最繁忙的流量高峰期间,p99缓存服务读取延迟降至之前水平的约五分之一。与此故障模式相关的告警通知已停止触发。
#### 复制链接到标题 更多存储空间和更少的驱逐
我们于6月为Pro项目、10月为Enterprise项目提高了Runtime Cache存储预算,为应用程序提供了更多重复使用数据的空间。这减少了为新数据腾出空间而需要驱逐缓存条目的需求。在频繁发生驱逐的Enterprise项目中,缓存未命中率在一天内大致减少了一半。
#### 复制链接到标题 更多缓存行为可见性
我们在Observability的Runtime Cache视图中新增了部署标记、重新验证原因和写入利用率。这些功能帮助您将缓存行为的变化与发布版本进行对比,查看条目刷新的原因,并识别那些被写入缓存但很少被读取的数据。
复制链接到标题 将Data Cache纳入Runtime Cache
我们通过整合到Runtime Cache来简化Vercel上的缓存功能。此前,Next.js fetch缓存和unstable_cache使用了Data Cache,而getCache和'use cache: remote'使用了Runtime Cache。此次迁移将所有四个API纳入Runtime Cache,使您和代码代理可以使用统一的存储预算和使用工具。
如果您使用fetch缓存或unstable_cache,代码无需任何更改。在Pro版本中,每个项目和环境将获得独立的存储分配,空间是之前Data Cache团队共享池的8倍。Enterprise项目将获得之前Data Cache存储空间的10倍。
之前未计费的Data Cache读写操作将遵循Runtime Cache计费标准。新团队会自动使用Runtime Cache,现有团队将提前收到迁移和计费详情。
查看变更日志了解发布、计费和早期参与详情。迁移前请检查缓存使用情况,并遵循优化指南减少不必要的读写操作。