You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lambda多次调用间缓存自建PostgreSQL数据库连接?

自建EC2 PostgreSQL跨Lambda调用的连接复用解决方案

针对你提到的场景,以下是几种经过生产验证的可行方案,效果可以对标RDS Proxy:

1. 部署独立的PostgreSQL专用连接池代理(最高优先级方案)

这是最接近RDS Proxy使用体验、支持跨所有Lambda调用全局复用连接的方案,完全适配高并发多Lambda的调用场景:

  • 首选 PgBouncer,这是PostgreSQL生态官方推荐的轻量连接池中间件,性能损耗小于10%,支持三种连接复用模式:会话级、事务级、语句级,Lambda场景推荐开启事务级模式,可以最大化连接利用率,哪怕不同Lambda的请求都可以复用同一个后端数据库连接。
  • 部署方式非常简单:可以和你的自建PostgreSQL部署在同一台EC2实例上,也可以单独用小规格EC2部署,和PG放在同一个可用区,网络延迟可以忽略不计。Lambda侧不需要修改任何业务代码,只需要把原来的数据库连接地址改成PgBouncer的监听地址和端口即可,连接认证逻辑和原生PostgreSQL完全兼容。
  • 生产环境可以搭配HAProxy做PgBouncer的高可用,避免单点故障,也可以把PgBouncer部署在ECS/App Runner上实现托管式运维,不需要自己维护EC2实例的生命周期。

2. 利用Lambda执行环境复用特性做函数内连接缓存

如果你的场景并发不高、调用的Lambda函数数量较少,可以不用额外部署中间件,直接优化Lambda代码实现单函数维度的连接复用:

  • 把数据库连接初始化逻辑写在Lambda函数的全局代码区域,不要写在handler处理函数内部。Lambda冷启动时会执行一次全局代码初始化连接,后续同一个执行环境的热调用会直接复用这个已经建立的连接,不需要每次触发handler都新建连接。
  • 需要额外加连接存活检测逻辑,每次执行数据库操作前先判断连接是否正常,断连时自动触发重连,避免复用已经超时断开的连接导致业务报错。

注意:这个方案只能实现同一个Lambda函数、同一个执行环境内的连接复用,不同Lambda函数、不同执行环境之间的连接无法共享,高并发场景下还是会产生大量数据库连接,不适合核心生产业务使用。

配置注意事项

  • 所有Lambda、PgBouncer、自建PostgreSQL都要部署在同一个VPC的私有子网内,关闭公网访问,通过安全组控制仅允许Lambda访问PgBouncer端口、仅允许PgBouncer访问PostgreSQL端口,保证网络安全。
  • PgBouncer的最大后端连接数要配置为你的PostgreSQL实例可承载的最大连接数的80%左右,预留一部分连接给运维操作使用,避免连接打满导致数据库不可用。
  • 配置PgBouncer的空闲连接超时时间,自动释放长时间未使用的后端连接,避免浪费数据库资源。

内容的提问来源于stack exchange,提问作者Eugene Goldberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:36:03