使用 RDS 在 AWS Lambda 中建立连接池?

Swa*_*adu 5 mysql connection-pooling node.js aws-lambda

我需要 AWS Lambda 中有效的 MySQL 数据库连接(使用 Node Js)。

这不是为每个请求创建连接/池,而是重用它。

我得到的一个解决方案就像在 AWS lambda 处理程序之外打开连接。但是这种情况下的问题是如果我们不结束连接,我们最终会得到超时结果。例如

"use strict";
var db = require('./db');
exports.handler = (event, context, callback) => {
    db.connect(function (conn) {
        if (conn == null) {
            console.log("Database connection failed: ");
            callback("Error", "Database connection failed");
        } else {
            console.log('Connected to database.');
            conn.query("INSERT INTO employee(name,salary) VALUE(?,?)",['Joe',8000], function(err,res){
                if(err) throw err;
                else {
                    console.log('A new employee has been added.');
                }
            });
            db.getConnection().end();
            callback(null, "Database connection done");
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

das*_*mug 5

在 AWS Lambda 中处理数据库连接的最可靠方法是在调用本身内连接断开与数据库的连接,这正是您的代码已经在执行的操作。

有一些已知的方法可以重用现有连接,但成功率根据数据库服务器配置(空闲连接等)和生产负载的不同而有很大差异。

此外,在 AWS Lambda 的上下文中,由于 Lambda 中的扩展工作方式,重用数据库连接不会给您带来太多性能优势。

例如,在始终在线的服务器应用程序中,并发和后续请求使用并共享相同的连接或连接池。

然而,在 Lambda 中,并发请求由不同的服务器处理,每个服务器都有自己的数据库连接。10 个并发请求将启动 10 个独立的服务器连接到您的数据库。重用连接或连接池在这里没有任何帮助。