使用 Serverless Aurora 时 Sequelize 连接超时,寻找增加超时持续时间或重试连接的方法

Posted

技术标签:

【中文标题】使用 Serverless Aurora 时 Sequelize 连接超时,寻找增加超时持续时间或重试连接的方法【英文标题】:Sequelize connection timeout while using Serverless Aurora, looking for a way to increase timeout duration or retry connection 【发布时间】:2019-02-27 03:36:51 【问题描述】:

我在尝试将无服务器 Aurora 数据库用作我的应用程序的一部分时遇到了问题。

问题本质上是当数据库冷时,建立连接的时间可能大于 30 秒(由于 db spinup) - 这似乎比 Sequelize 中的默认超时时间更长(使用 mysql),并且作为据我所知,我找不到任何其他方法来增加此超时时间,或者我可能需要某种方式重新尝试连接?

这是我当前的配置:

const sequelize = new Sequelize(DATABASE, DB_USER, DB_PASSWORD, 
    host: DB_ENDPOINT,
    dialect: "mysql",
    operatorsAliases: false,
    pool: 
      max: 2,
      min: 0,
      acquire: 120000, // This needs to be fairly high to account for a 
      serverless db spinup
      idle: 120000,
      evict: 120000
    
);

几个额外的点: 一旦数据库变热,那么一切都会完美运行。 保持数据库“热”,虽然它在技术上可以工作,但有点违背了将其作为无服务器数据库的意义(成本原因)。 如果超时是连接错误,我愿意让我的客户端重新尝试 API 调用。

这是日志,以防万一他们有帮助。


"name": "SequelizeConnectionError",
"parent": 
    "errorno": "ETIMEDOUT",
    "code": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true
,
"original": 
    "errorno": "ETIMEDOUT",
    "code": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true


【问题讨论】:

这是从哪里来的? " acquire: 120000, // 这需要相当高才能考虑无服务器数据库启动"。你能指出我的文档吗?我们目前使用以下选项: pool: max: MAX_MYSQL_POOL_CONNECTIONS, min: 0, acquire: 20000, idle: 3000, evict: 1500, retry: max: 5, backoffBase: 1000, // 初始退避持续时间,以毫秒为单位。默认值:100,backoffExponent:1.5,//每次尝试增加退避的指数。默认值:1.1 【参考方案1】:

因此,经过进一步挖掘,您似乎可以使用 options 对象上的 dialectOptions 属性将内容传递给底层连接。

dialectOptions: 
  connectTimeout: 60000

这似乎在起作用。

【讨论】:

非常感谢您发布自己的解决方案!很有用! npmjs.com/package/mysql#connection-options 感谢您发布此信息。你还在使用连接池吗?还是您禁用了它并且只有这个 connectTimeout 参数?

以上是关于使用 Serverless Aurora 时 Sequelize 连接超时,寻找增加超时持续时间或重试连接的方法的主要内容,如果未能解决你的问题,请参考以下文章

远程连接到 Aurora Serverless

使用 HikariCP 和 AWS Aurora Serverless 的连接池配置

使用 CloudFormation(和 Lambda 轮换模板)的 Aurora Serverless 密码轮换设置

AWS Aurora Serverless RdsDataClient unicode 问题

从 cloudformation 创建 Aurora Serverless 集群?

使用 Amazon Aurora Serverless构建无服务器应用程序仅仅只需要10分钟