六维教程

Cloudflare Hyperdrive 连接池基础概念

很多时候业务数据库早已存在,可能是 AWS 上的 Postgres,也可能是自建机房里的 MySQL,这时让 Cloudflare Workers(Cloudflare 的边缘计算函数服务)直接连外部数据库会踩不少坑。Hyperdrive 就是为这种场景准备的,它在边缘维护连接池并缓存查询结果,让远程数据库用起来像本地一样快。

Workers 直连外部数据库的问题

先看直连方式会遇到什么。Worker 在每次请求里用驱动新建一条到外部数据库的 TCP 连接,跑完 SQL 后关闭。这条路径上有几段开销

开销来源 说明
TCP 握手 Worker 与数据库之间要三次握手,跨地域时往返延迟翻倍
TLS 协商 数据库强制 TLS 时再多几个往返,握手耗时甚至超过查询本身
数据库认证 用户名密码校验、会话初始化,每条连接都要走一遍
连接数压力 每个请求开一条连接,高并发下数据库连接槽很快被打满
冷启动放大 Worker 实例分散在全球,每个实例都要单独建连

实测一个跨大洲的 Postgres 连接,光是握手就要 300 到 800 毫秒,而一次简单主键查询可能只要 5 毫秒。握手开销远大于查询本身,这是直连最大的痛点。

数据库侧也有压力。Postgres 默认 max_connections 是 100,MySQL 默认 151,Worker 一旦流量上来就会把它们打爆,出现 too many connections 错误。

连接池原理

连接池的核心思路是复用连接。应用启动时先建一批连接放进池子,请求来了从池里借一条用完归还,不再反复握手。四个关键角色

角色 职责
池管理者 维护一组连接,负责借出和回收
空闲连接 握过手待命,可直接执行 SQL
活跃连接 正在被某个请求使用
最小最大值 控制池大小,避免空闲浪费和上限击穿

传统部署里连接池跑在应用服务器上,比如 Node 进程里的 pg Pool。但 Worker 是无状态边缘函数,没有常驻进程,本地根本放不下连接池。这就是 Hyperdrive 出现的原因。

Hyperdrive 在边缘维护连接池

Hyperdrive 把连接池搬到 Cloudflare 边缘网络里,Worker 不再直连数据库,而是连到离自己最近的 Hyperdrive 节点,由 Hyperdrive 节点维护到数据库的长连接。整个链路是这样

Worker -> 边缘 Hyperdrive 节点 (连接池) -> 外部数据库

具体做了三件事

第一,就近接入。Worker 总能找到同区域的 Hyperdrive 节点,这段内网调用延迟极低。

第二,连接复用。Hyperdrive 节点维护到数据库的持久连接池,多个 Worker 请求共享这些连接,握手只发生在池子初次建立时。

第三,连接数收敛。数据库侧只看到 Hyperdrive 节点的几条连接,不再被全球 Worker 实例直接冲击,连接槽压力大幅下降。

效果是握手开销被摊薄到几乎为零,Worker 拿到的连接是已经握过手的,直接发 SQL 就行。

Hyperdrive 与 D1 的区别

两者都让 Worker 用上数据库,但定位完全不同

对比项 D1 Hyperdrive
数据库归属 Cloudflare 托管 你自己的外部数据库
存储位置 边缘网络内 任意公网可达的服务器
连接方式 Worker 直连,内网调用 经过 Hyperdrive 连接池转发
是否要迁移 要把数据导入 D1 不动现有数据库,只加一层代理
适用场景 新项目或想要边缘强一致 已有数据库不想迁移
数据库类型 SQLite Postgres、MySQL 等

简单说,D1 是 Cloudflare 自己的数据库,Hyperdrive 是连接你已有数据库的加速层。两者并不冲突,可以并存。如果业务数据库在 AWS RDS 上跑得好好的,没必要迁,挂一层 Hyperdrive 就能让 Worker 用得又快又稳。

缓存查询结果

除了连接池,Hyperdrive 还有一项重要能力是查询结果缓存。对相同的 SQL 语句,Hyperdrive 会在边缘缓存其结果集,下一次同样的查询直接返回缓存,连数据库都不用问。

缓存特性

特性 说明
缓存粒度 按完整 SQL 字符串匹配,参数不同视为不同查询
缓存时长 默认 60 秒,可在配置里调整
适用查询 读多写少、对短暂延迟容忍的查询
不缓存场景 写操作、显式标记不缓存的查询、结果集过大的查询

缓存特别适合列表页、配置项、字典数据这类高频读取的内容。配合连接池,一次查询可能根本不触达数据库,响应时间从几百毫秒降到个位数毫秒。

要注意缓存带来的是短暂不一致,60 秒内可能读到旧数据。对订单状态、库存这类强实时场景,要么缩短缓存时间,要么显式跳过缓存。

小结

Hyperdrive 解决的是 Workers 访问外部数据库的两个核心痛点,握手开销和连接数压力,方法是在边缘维护连接池。再加查询缓存,远程数据库在 Workers 里也能有本地般的响应速度。下一篇动手把一个真实的 Postgres 接到 Hyperdrive 上。

下一篇 接入外部数据库实战

上一篇
Email Workers 处理邮件
下一篇
接入外部数据库实战