1

我有一个当前部署在 AWS 上的 lambda。它是一个简单的 CRUD 逻辑,位于 API 网关后面。

我目前面临的问题是,一旦出现流量高峰,我的数据库上的连接就会激增。

我知道这是由于许多 lambdas 一起并行调用,并打开了它们单独的连接,但是有没有办法可以在这里进行某种连接池?

下面的线程表明我可以(如果我稍微聪明地编码在容器中做某种连接池):

我们如何将 JDBC 连接池与 AWS Lambda 结合使用?

但它不能保证任何事情。

我可以在我的 lambda 中对此做些什么,还是我必须为此使用外部连接池(我使用 Postgres,所以应该是 pg_bouncer)?

4

2 回答 2

1

是的,没办法。您需要使用 pgBouncer。

于 2017-12-14T19:57:10.717 回答
-1

是的,您必须自己管理连接池。我之前使用了c3p0库来让它工作。这是一个示例片段:

private static final QueryRunner queryRunner;

然后在处理程序方法主体之外的某个地方初始化查询运行器:

    ComboPooledDataSource dataSource = new ComboPooledDataSource();
    dataSource.setJdbcUrl(jdbcUrl);
    dataSource.setUser(System.getenv("USERNAME"));
    dataSource.setPassword(System.getenv("PASSWORD"));
    queryRunner = new QueryRunner(dataSource);

当你想在你的 lambda 函数中查询时,调用:

List<Map<String, Object>> result = queryRunner.query("SELECT * FROM schema.users WHERE column = vall", new MapListHandler());

希望这可以帮助。

另外,请记住,当您重新部署一个函数时,您的活动 jdbc 连接可能直到稍后才会被回收。这可能不是问题,具体取决于使用 jdbc 连接的函数数量以及您的数据库可以支持的数量。

于 2017-11-16T13:26:17.693 回答