我在Node JS中使用mysql连接池。在一些空闲时间之后,连接到期,下次执行查询时,需要创建新连接。这可能会导致几秒钟的延迟。不可接受!
我希望实现keepalive功能,以定期轮询数据库并确保与后端的连接的一致健康状况。我正在寻找其他尝试相同的人的意见,或者反馈我的方法。
const mysql = require('mysql');
const pool = createConnectionPool();
setInterval(keepalive, 180000); // 30 mins
function keepalive() {
pool._freeConnections.forEach((connection) => pool.acquireConnection(connection,function () {
connection.query('SELECT 1 + 1 AS solution', function (err) {
if (err) {
console.log(err.code); // 'ER_BAD_DB_ERROR'
}
console.log('Keepalive RDS connection pool using connection id', connection.threadId);
})
}));
}
这种保持活跃有点成功:
- 一旦连接打开,它将保持打开状态
- 连接永远不会超时
- 如果连接丢失,则在下一个间隔重新创建
这种保持活力并不理想:
- mysql连接池是懒惰的,只根据需要创建和恢复连接。有了这个keepalive,游泳池不再是懒惰。一旦打开连接,keepalive将保持打开状态。根据交通情况,游泳池不再缩放
- 我不相信我在迭代自由连接列表和执行查询的方法将是一个明智的方法。应用程序是否可以在保持连接使用相同连接时从池中检出相同的连接?
另一种可能的方法是放弃应用程序中的keepalive功能,并依靠心跳流量来保持最少的连接。
是否有人试图实施keepalive功能,使用提供此功能的软件包或工具,或最终使用其他方法?