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

基于AWS Lambda+RDS Proxy的HTTP服务器压测时RDS连接过多问题排查

引言

我部署了一个基于gorilla/mux实现的Web服务器,该服务器对外暴露API端点供用户访问数据库。

我将该服务器部署在AWS Lambda函数中,并使用API Gateway向其发送Lambda代理请求。请求流程如下:

  • API Gateway ->(API Gateway Lambda代理集成)-> Lambda函数 -> RDS Proxy -> RDS实例

服务器代码

import (
    "github.com/gorilla/mux"
    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
    "github.com/awslabs/aws-lambda-go-api-proxy/core"
    "github.com/awslabs/aws-lambda-go-api-proxy/gorillamux"
)

var (
    muxLambda *gorillamux.GorillaMuxAdapter
    router = mux.NewRouter().StrictSlash(true)
    // 注册处理函数
)

func init() {
    muxLambda = gorillamux.New(router)
}

func LambdaHandler(
    ctx context.Context,
    req events.APIGatewayProxyRequest,
) (*core.SwitchableAPIGatewayResponse, error) {
    response, err := muxLambda.ProxyWithContext(ctx, *core.NewSwitchableAPIGatewayRequestV1(&req))
    if err != nil {
        panic(fmt.Sprintf("Proxy encountered an error: %s", err.Error()))
    }
    return response, nil
}

func main() {
    lambda.Start(LambdaHandler)
}
  • 我通过以下方式建立数据库连接:
import "database/sql"
database, err := sql.Open("postgres", connStr)

问题描述

在对该服务器进行负载性能测试时(执行命令:siege -c 250 -d 0.5 -r 10 'http://<api地址>/'),我发现RDS实例的连接数过多(AWS控制台显示约400个连接),且Lambda函数几乎所有请求都返回超时(30秒)。若降低并发量,服务器响应则恢复正常。

请问导致该问题的可能原因是什么?

我查阅资料后猜测:

  • 每个请求都会启动一个新的Lambda实例,并向RDS Proxy建立新的数据库连接。当连接数过多时,Lambda会等待连接直至超时。

这可能与社区讨论的类似问题情况一致,但我认为RDS Proxy应为我处理连接池管理?还是我已过载RDS Proxy?

若原因是过载,在AWS配置中可进行哪些调整?比如升级RDS实例规格?或者参考相关技术文章所述增加max_connections配置?

或是只需按照社区相关问题中的建议修改代码结构?

感谢您的阅读,期待任何反馈建议。

补充:RDS与RDS Proxy的连接指标

  • RDS实例的数据库连接数(对应监控指标截图)
  • RDS Proxy的CloudWatch指标(对应监控指标截图)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:33:20