【发布时间】:2019-08-29 21:25:16
【问题描述】:
我有两个节点微服务与一个通用 mysql 数据库通信。两个微服务都有以下代码来创建一个连接限制为 10 的连接池,如下所示:
// 初始化池
var pool = mysql.createPool({
connectionLimit: 10,
host: 'localhost',
port: '3306',
user: 'root',
password: 'root'
});
function addConnection(req, res) {
pool.getConnection(function (err, connection) {
if (err) {
connection.release();
res.json({ "code": 500, "status": "Error" });
return;
}
connection.query("select * from user", function (err, rows) {
connection.release();
if (!err) {
res.json(rows);
}
});
connection.on('error', function (err) {
res.json({ "code": 500, "status": "Error" });
return;
});
});
}
对于 mysql 数据库,我将 max_connections 设置为 200(SHOW VARIABLES LIKE 'max_connections'; 返回 200)。
- 将每个微服务的池 connectionLimit 设置为 10,在哪些情况或场景下,任何微服务的连接数会超过 10? 即节点服务何时以及如何能够维持比预期更多的连接?
- 如果我有 3 个实例运行相同的微服务,那么池 connectionLimit 是如何工作的?每个微服务实例的连接限制是多少?
- 在其中一个微服务中说我有两个执行数据库事务的 api,并且都通过两个不同的函数连接到数据库(获取连接) mysql.createPool({}) 的实现与上面相同。如果两个 api 被同时调用并且每秒为每个 api 发出的请求数是 100 或更多,会发生什么? 可用的连接数是 10 还是 20(因为创建了两个 mysql 池,每个池的 connectionLimit 为 10)?
【问题讨论】:
-
另外,如果我正在以每秒 50 次的请求速率对任何节点服务 API 进行负载测试,那么如何检查该节点服务建立了多少连接的负载测试持续时间?
标签: mysql node.js connection microservices connection-pooling