web-dev-qa-db-ja.com

サーバーレスAuroraの使用中に接続タイムアウトを逐次化し、タイムアウト期間を延長する方法または接続を再試行する方法を探す

アプリケーションの一部としてサーバーレスAuroraデータベースを利用しようとしているときに問題が発生しています。

問題は基本的に、データベースがコールドの場合、接続を確立するための時間が30秒より長くなる可能性があることです(dbスピンアップにより)-これは、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
}
}
8
Scott Carpenter

したがって、さらに掘り下げた後、optionsオブジェクトでdialectOptionsプロップを使用して、基礎となる接続に物事を渡すことができるように見えます。

dialectOptions: {
  connectTimeout: 60000
}

これはトリックをしているようです。

11
Scott Carpenter