【问题标题】:Aws lambda function too many connection issue rdsAws lambda函数太多连接问题rds
【发布时间】:2019-10-28 06:54:49
【问题描述】:

我的移动应用 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;
        });
}

我已经尝试在发送响应之前添加 con.destroy() ,但它似乎并没有解决问题,所以如果还有什么我可以做的,请告诉我。

【问题讨论】:

标签: mysql node.js amazon-web-services aws-lambda amazon-rds


【解决方案1】:

确切地知道发生了什么很复杂,我的第一个猜测总是围绕设置 context.callbackWaitsForEmptyEventLoop = false 并将连接存储在函数范围之外 - 你已经正确完成了。

话虽如此,在 Lambda 中管理连接池有点像无服务器定义的另一种方式,它“缺乏”短暂性。这并不意味着您无法通过连接进行扩展,您必须深入挖掘有关您的问题的信息。

Jeremy Daly 在其博客的以下帖子中提供了处理此问题的良好做法:

此外,他还为您创建了一个库,名为serverless-mysql - 专为解决此特定问题而构建。

个人经历:我在连接 + lambda 方面遇到了问题,因此我已迁移到他们的 DataAPI solution(我不得不将我的 RDS 迁移到 Aurora Serverless,这不是大痛苦) - 它的 GA 版本大约在 2/3 周前发布。 如果您想了解有关 Aurora SLS 的更多信息,请check it out here

【讨论】:

    【解决方案2】:

    解决此类问题的另一种方法是使用 AWS RDS 代理:https://aws.amazon.com/fr/rds/proxy/

    许多应用程序,包括那些基于现代无服务器架构构建的应用程序,可能会与数据库服务器建立大量打开的连接,并且可能会高速打开和关闭数据库连接,从而耗尽数据库内存和计算资源。 Amazon RDS Proxy 允许应用程序汇集和共享与数据库建立的连接,从而提高数据库效率和应用程序可扩展性。借助 RDS Proxy,Aurora 和 RDS 数据库的故障转移时间最多可缩短 66%,并且可以通过与 AWS Secrets Manager 和 AWS Identity and Access Management (IAM) 集成来管理数据库凭证、身份验证和访问。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2017-12-27
    • 1970-01-01
    • 2019-10-14
    • 2021-03-17
    • 2017-07-25
    • 2018-11-16
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    相关资源
    最近更新 更多