The*_*der 2 mysql amazon-web-services amazon-rds node.js aws-lambda
我的移动应用程序 API 有 20 多个 lambda 函数,因为在启动时基于用户较少,所以一切顺利,但现在随着用户的增加(3000 到 4000),我的 lambda 函数面临太多连接问题,因为其中我开始从我的 API 中收到内部服务器错误,我知道我在 lambda 中创建连接时遗漏了一些东西,但是经过多次点击和尝试后,我无法找到那个丢失的链接,下面是我用于创建的代码连接
var con;
exports.handler = async (event, context) => {
context.callbackWaitsForEmptyEventLoop = false;
if (!con || con.state == "disconnected" || con === "undefined") {
con = secret
.then((result) => {
var data = JSON.parse(result.SecretString);
var connection = mysql.createConnection(
{
"host": data.host,
"user": data.username,
"password": data.password,
"database": data.db
}
);
connection.connect();
return connection;
}).catch((err) => {
throw err;
});
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试在发送响应之前添加 con.destroy() ,但它似乎并没有解决问题,所以如果我还有什么可以做的,请告诉我。
确切地知道发生了什么事情很复杂,我的第一个猜测总是围绕在context.callbackWaitsForEmptyEventLoop = false函数范围之外设置和存储连接 - 您已经正确完成了这两项操作。
话虽如此,在 Lambda 中管理连接池有点像无服务器的定义,它“缺乏”短暂性。这并不意味着您无法通过连接进行扩展,您必须深入了解有关您的问题的信息。
Jeremy Daly 在其博客的以下帖子中提供了处理此问题的良好做法:
此外,他还制作了一个为您管理这个的库,它被称为serverless-mysql - 它是为解决这个特定问题而构建的。
个人经验:我在连接 + lambdas 方面遇到了问题,因此我已经迁移到他们的DataAPI 解决方案(我不得不将我的 RDS 迁移到 Aurora Serverless,这不是什么大问题) - 它的 GA 版本大约是 2/ 3个星期前。如果您想了解有关 Aurora SLS 的更多信息,请在此处查看。
| 归档时间: |
|
| 查看次数: |
2500 次 |
| 最近记录: |