定义
如何理解 Serverless 数据库对应用部署和主机选型的影响?当 PlanetScale、Neon、TiDB Serverless、CockroachDB Serverless 等产品逐步将数据库服务推向”按需弹性、免运维、按量计费”的方向后,应用层不再需要管理数据库实例的生命周期,但与此同时,连接管理方式、延迟特征和成本结构都发生了变化。本文从定义出发,解释这些变化对主机选型和应用部署策略的实际影响。
Serverless 数据库的核心架构特征是计算与存储分离。在传统数据库中,查询计算和数据存储绑定在同一个进程和磁盘上;而在 Serverless 架构中,存储层由分布式对象存储承载,计算层以无状态节点的形式按需分配。这一分离使得存储容量可以独立扩展,计算资源则在空闲时缩减至零或接近零,有请求时再自动拉起。
核心特点
主流 Serverless 数据库产品
当前主流的 Serverless 数据库产品在技术路线上存在差异:
- PlanetScale:基于 Vitess(MySQL 分片引擎)的托管服务,提供分支工作流和在线 Schema 变更。2024 年移除了免费层,当前定位面向中型及以上规模应用。
- Neon:基于 PostgreSQL 的 Serverless 实现,支持数据库分支(branching)和自动休眠。其计算层基于定制的 PostgreSQL 存储引擎,通过 Pageserver 分离存储。
- TiDB Serverless:PingCAP 提供的分布式 SQL 服务,兼容 MySQL 协议,底层采用 Raft 共识协议保证一致性。适合需要水平扩展的 OLTP 场景。
- CockroachDB Serverless:基于 CockroachDB 分布式引擎,兼容 PostgreSQL 协议,支持跨区域强一致性。适合对数据一致性要求高的分布式应用。
连接管理:HTTP-based 与持久连接
传统数据库使用持久 TCP 连接(长连接),应用端通过连接池复用连接。Serverless 数据库的计算节点在空闲时会被回收,长连接可能中断。当前的应对方式主要有两种:
- 连接代理层:如 Neon 的内置连接池器(基于 PgBouncer)、PlanetScale 的 Vitess 代理层,在服务端维护连接,对应用透明。
- HTTP-based 查询接口:部分产品(如 Neon 的 HTTP driver、PlanetScale 的 serverless driver)允许通过 HTTP 请求发送 SQL 查询,避免了 TCP 连接的维护开销,适合在边缘函数中使用。代价是每次请求需要完整的 HTTP 握手,延迟略高于持久连接。
应用端需要根据部署环境选择合适的连接方式:传统 VPS 或容器环境可使用持久连接加连接池;边缘函数(如 Cloudflare Workers、Vercel Edge Functions)因运行时限制无法维持 TCP 长连接,应优先使用 HTTP-based driver。
冷启动问题
Serverless 数据库从休眠状态唤醒时存在冷启动延迟。Neon 的冷启动时间通常在 500ms 至数秒之间,具体取决于存储层的数据预热量。对于延迟敏感的 API 或实时交互页面,可选择设置最小保活容量(如 Neon 的 min CU 设置),或在应用层引入 Redis 等缓存降低对数据库的直接查询频率。
计费模式对比
Serverless 数据库的计费模式主要分为两类:
- 按查询量计费(pay-per-query):如 CockroachDB Serverless 按请求单元(Request Unit)和存储量计费,Neon 按计算时间(Compute Hour)和存储量计费。适合间歇性使用或开发测试环境。
- 按预置资源计费(provisioned):如 PlanetScale 按行读取量和存储量计费,实际使用了预置的计算资源。适合流量稳定的生产环境。
选择哪种计费模式取决于流量特征。高负载持续运行的场景下,按量计费的总成本可能超过同等规格的固定实例月租。
应用场景
数据库层 Serverless 化后,应用层的主机选型需要根据应用特性独立判断,并非必须”全 Serverless”:
- 边缘函数 + Serverless 数据库:适合轻量 API、Webhook 处理、表单提交等场景。边缘函数天然无状态、冷启动快,与 HTTP-based 数据库接口配合良好。但需注意边缘函数的执行时间限制和内存约束。
- 轻量容器 + Serverless 数据库:使用 Docker 或 Docker Compose 部署应用,配合远程 Serverless 数据库。适合需要完整 Node.js/Python 运行时的中型应用。连接管理方面需配置连接池中间件(如 PgBouncer 侧车容器),避免连接数超出数据库限制。
- VPS + 连接池中间件 + Serverless 数据库:适合需要持久运行后台任务(如队列消费者、定时任务)的应用。VPS 提供稳定的运行环境,连接池中间件负责管理与数据库的连接复用。使用主机面板时需确认面板是否支持配置远程数据库连接。
- 固定规格服务器 + 传统数据库:对于流量平稳、对延迟要求极高的应用(如金融交易系统),固定实例数据库仍然是更合理的选择。
常见误区
“Serverless 数据库一定比传统数据库便宜”——成本取决于实际用量模式。对于日均请求量高且持续稳定的生产环境,Serverless 的按量费用可能超过同等规格的固定实例月租。迁移前应基于历史流量数据分别估算两种方案的月均费用。
“应用层也必须用 Serverless 才能配合 Serverless 数据库”——两者的选择是独立的。只要网络连通性和连接管理得当,VPS、容器编排、Serverless 函数均可与 Serverless 数据库配合使用。
“迁移 Serverless 数据库只需改连接字符串”——不同产品的 SQL 方言和功能支持存在差异。PlanetScale 不支持外键约束,CockroachDB 的事务语义与标准 MySQL/PostgreSQL 有细微差别。迁移前需要在预发环境完成完整的兼容性测试。
“连接池可以无限制地复用”——Serverless 数据库通常对并发连接数有硬性限制(如 Neon 免费层限制为 20 个连接)。应用端的连接池大小必须控制在数据库允许的范围内,否则会出现连接拒绝错误。
参考资料
- Neon, Serverless Postgres Architecture, https://neon.tech/docs/introduction/about-neon
- PlanetScale, Serverless Driver for JavaScript, https://planetscale.com/docs/tutorials/connect-nodejs-app
- TiDB, TiDB Serverless Overview, https://docs.pingcap.com/tidbcloud/serverless-tier-overview
- CockroachDB, Serverless Cluster Management, https://www.cockroachlabs.com/docs/cockroachcloud/cluster-management
- HostingWiki, 云计算与 AI 专题


微信扫一扫打赏
支付宝扫一扫打赏