然而,这并不是一个普遍的概念。 Supabase 和 Aurabase 提供专用的 Postgres 实例,但不会以相同的方式公开相同的机制。本文详细介绍了 Neon 在其冷启动时实际记录的内容、Vercel Postgres 和 Supabase 的比较情况,以及 Aurabase 模型适合的位置,直接在配置程序代码中进行验证,而不是从营销页面推断。
要点
- 无服务器冷启动是指挂起的数据库在响应第一个请求之前必须唤醒其计算时所增加的延迟。
- Neon 将存储和计算分开:计算在一段记录的不活动时间后进入睡眠状态(免费计划默认为 5 分钟,可在付费计划中配置)。
- Neon 记录的重启时间通常为几百毫秒到几秒,该数字由发行商发布,可通过社区工具 neon-latency-benchmarks.vercel.app 进行实时测量。
- Vercel Postgres 依赖于 Neon 基础设施:唤醒行为遵循相同的机制,但品牌不同。
- Supabase 为每个项目提供专用数据库,每个连接无需冷启动。只有免费计划会暂停不活动的项目,并进行手动恢复。
- Aurabase 为每个项目提供专用的 Postgres 数据库、专用 CNPG 集群或共享集群上的专用基础:这不是 Neon 无服务器模型,已在配置程序代码中进行验证。
什么是无服务器 Postgres 数据库的冷启动?
当运行数据库的计算因不活动而进入睡眠状态时,就会发生冷启动,并且新查询必须首先重新启动它才能运行。这不是典型 TCP/TLS 连接的常见网络延迟:这是启动新 Postgres 进程并恢复其状态的时间,甚至在第一个请求开始执行之前也是如此。
The term comes from serverless computing broadly, where a zeroed execution environment must restart before processing a request, whether it is a server function or a WebAssembly runtime at the edge. We detail this mechanism on the edge functions side in our article on cold start WebAssembly facingcontainers. For a database, the mechanics differ: it is not a compiled binary that starts, but a complete Postgres server which must reopen its files, validate its state, then accept new connections.
1. 客户登录
请求到达计算已暂停的项目。
2.睡眠检测
平台注意到计算不再活动。
3. 重启计算
Postgres 进程重新启动,必要的状态已恢复。
4. 请求已处理
连接成功,请求正常执行。
冷启动机制图示,简化序列,无测量时间值。
Neon 为什么让其计算进入睡眠状态,以什么速度进入睡眠状态
Neon 将其数据库架构分为两个不同的层:保存数据的持久存储和计算、Postgres 进程本身,可以独立停止和重新启动。根据其官方文档,这种分离允许 Neon 暂停不活动项目的计算而不接触数据,然后根据需要重新启动它。
在免费计划中,Neon 记录了在让计算进入睡眠状态之前默认的 5 分钟不活动超时。付费计划允许您配置此阈值,甚至可以显着提高它以用于恒定流量。这种类型的默认值会随着产品更新而变化:在阅读时检查 Neon 文档是最新的,而不是这个孤立的图。
这种设计服务于特定目的、短暂的环境。每个 Git 分支一个数据库、通过拉取请求提供的预览环境、每天仅使用几分钟的测试数据库:为这些用途连续运行计算成本高昂,而且没有真正的好处。在两次使用之间暂停计算可以减少费用而不删除数据,这是 Neon 无服务器模型的核心论点。
霓虹灯闹钟可以持续多长时间以及如何自行检查
Neon 在其文档中指出,计算重新启动通常需要几百毫秒到几秒的时间,具体取决于项目的大小以及计算准备就绪之前要重播的事务日志量。这是出版商自己发布的数字,而不是独立审计:将其视为记录的数量级,而不是合同保证。
对于实际测量,公共社区工具 neon-latency-benchmarks.vercel.app 会定期对暂停的 Neon 项目进行民意调查,并显示观察到的唤醒延迟。这种方法比单纯的文档数据更重要:测试条件仍然可见,而不是隐藏在营销平均值后面。我们在自己的 后端基准测试方法中应用相同的原则:在发布图形之前发布协议。
| 项目规模 | 需要验证的关系和 WAL 量越多,重启时间就越长。 |
|---|---|
| 地区及网络距离 | 增加连接延迟,与冷启动本身无关。 |
| 定价方案 | 付费计划允许您配置或延长不活动阈值。 |
| 连接频率 | 保持定期请求的计算永远不会遇到这种延迟。 |
Vercel Postgres 和 Neon:不同品牌下的同一引擎?
Vercel 已基于 Neon 基础设施构建了 Postgres 数据库产品,这一合作关系于 2024 年公开。截至撰写本文时,Vercel Marketplace 中提供了此 Postgres 集成,作为与其他提供商一起的存储选项。查看更新的 Vercel 产品页面:这种类型的合作伙伴关系在每个季度都在变化的市场中迅速发展。
具体来说,通过 Vercel 配置的 Postgres 数据库的睡眠和唤醒行为遵循与上面直接针对 Neon 描述的相同机制。它不是一个具有自己的冷启动模型的单独引擎,而是 Vercel 集成背后暴露的相同基础设施。
Supabase 是否具有类似的冷启动能力?
不,不是以同样的方式。 Supabase 为每个项目提供一个专用的 Postgres 实例,而不是每个连接暂停的无服务器计算。因此,与 Neon 模型不同,几分钟不活动后,每个新会话不会添加唤醒延迟。
然而,免费计划中存在一种不同的机制:Supabase 记录了不活动项目在较长时间后自动暂停(根据其文档,大约一周),并从仪表板手动恢复,而不是在第一个请求时自动唤醒。这是一个以天而不是分钟为单位衡量的阈值,是一个明确的行动而不是透明的恢复:与 Neon 冷启动的两个结构差异,而不是同一机制的简单变体。为了进行完整的架构比较,我们详细的 Aurabase 与 Supabase 比较记录了其他差异。
和 Aurabase 模型:为什么比较不适用
Aurabase 不提供像 Neon 这样的无服务器模型。在配置程序代码中进行验证(aura-provisioner,在 github.com/daylami555/aurabase 上开源):每个项目都会收到由 CloudNativePG(Kubernetes CNPG 操作员)管理的专用 Postgres 集群,或者在同一组织的多个项目之间共享的 CNPG 集群上的专用基础,具体取决于所选计划。在这两种情况下,它不是在每个连接处挂起和唤醒的单个计算:它是一个完整的 Postgres 集群,具有主副本和可能的副本。
Aurabase 端确实存在休眠机制,但它有不同的用途。如果长时间不活动(默认情况下为 7 天,可通过环境变量进行配置)、代码中验证的阈值,配置程序会将不活动实例置于睡眠状态以释放资源,而不是优化间歇性使用的延迟。唤醒休眠的 CNPG 集群会从持久卷中重新创建其 pod,这是一种结构上比简单的无服务器进程重启更重的机制。
Aurabase 迄今为止尚未发布任何唤醒延迟数据,既没有声称唤醒时间很快,也没有将其与 Neon 进行比较。这不是同一种产品,在没有公布测量结果的情况下冒充它是不诚实的。
这种专用架构在隔离和性能可预测性方面具有直接对应性:与规模较小的共享集群不同,一个项目不与另一个项目共享其计算。我们在专门的文章中详细介绍了这一仲裁:专用与共享基础,对性能和隔离的实际影响。
根据您的用例选择
Neon 无服务器模型服务于特定的用例:许多短暂的环境或具有非常间歇性流量的环境,在这些环境中为连续运行的计算付费在经济上没有意义。每个 Git 分支一个数据库、通过拉取请求提供的预览环境、每周测试几次的原型:偶尔的冷启动成为针对与实际使用成比例的发票的可接受的折衷方案。
相反,每当首次连接延迟需要保持可预测时,专用的、始终在线的 Postgres 架构就变得更可取:具有常规流量的生产 API、无法承受用户请求的偶尔延迟峰值的后端,或者 p99 比独立测试分支的成本更重要的系统。
| 供应商 | 计算模型 | 睡眠触发 | 典型的闹钟 |
|---|---|---|---|
| 霓虹灯 | 与存储分离的无服务器计算 | 不活动,5 分钟起(免费计划) | 自动,亚秒到秒(声称编辑器) |
| Vercel Postgres | 霓虹灯基础设施(合作伙伴) | 与霓虹灯相同 | 与霓虹灯相同 |
| 苏帕贝斯 | 每个项目都有专门机构 | 长时间不活动,仅限免费计划 | 手动,从仪表板恢复 |
| 光环基地 | 专用或共享 CNPG 集群 | 长时间不活动,默认为 7 天 | 无意作为次秒,未发布 |
霓虹灯闹钟:出版商记录的数量级,未经独立审核。 Aurabase 休眠阈值:在 aura-provisioner中检查,变量 HIBERNATE_INACTIVITY_DAYS,默认 7 天。
常见问题
要记住什么
Postgres 无服务器冷启动不是一个普遍的概念:它是 Neon 架构的直接结果,它将存储和计算分开,以在两种使用之间暂停后者。 Vercel Postgres 通过与 Neon 的合作直接继承了它。 Supabase 和 Aurabase 提供专用的 Postgres 实例,暴露了不同的机制,以天而不是分钟为单位来衡量,并不是为相同的目的而设计的。
仅根据此标准选择提供商之前,请检查三件事:提供商记录的实际不活动阈值、是否可以根据您的计划进行配置,以及您的应用程序流量是否证明暂停计算是合理的。对于真实间歇性流量、测试分支或预览的使用,无服务器模型具有明显的经济效益。对于常规流量的生产,专用架构可以简单地消除这个问题。