У меня есть два микросервиса node, которые общаются с одной общей базой данных 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 (ПОКАЖИТЕ ПЕРЕМЕННЫЕ, КАК 'max_connections'; возвращает 200).
В идеале этого не было бы; но может быть выше 10; если предположить, что некоторые соединения устарели, то есть они закрыты со стороны клиента, но все еще открыты со стороны сервера.
Если у вас есть несколько экземпляров одного и того же микросервиса, развернутого на нескольких виртуальных машинах или в док-контейнерах; они как бы независимые сервисы.. и у них нет связи между собой.. Следовательно, каждый из них создаст свое 10 соединение.
Во-первых, если вы установите предел пула соединений как 10; это НЕ означает, что в первый момент будет создано 10 подключений. При создании пула; вы также указываете начальный параметр соединения, предположим, 5.. поэтому при запуске службы будет создано только 5 соединений.. и больше будет создано только при необходимости.. с установленным ВЕРХНИМ пределом, как определено параметром max_connections. Возвращаясь к вашему вопросу; хорошо, если вы НЕ реализовали синхронизацию и т. д. должным образом, тогда да, возможно, что оба пула инициализируют свои INITIAL_CONNECTIONS..
Спасибо за ответ... Не могли бы вы пояснить первый пункт? Как соединение будет закрыто на стороне клиента, а не на стороне сервера? Я считал, что соединения всегда закрываются на стороне сервера, а не на стороне клиента.
Кроме того, если я выполняю нагрузочное тестирование любого API-интерфейса службы узла с частотой запросов 50 в секунду, то как мне проверить за это время продолжительность нагрузочного тестирования, сколько подключений было выполнено этой службой узла?
на MySQL; вы можете легко выполнить SQL-запрос, чтобы увидеть количество подключений и сервер, исходящий для этих подключений.
относительно вашего первого комментария; это может произойти в некоторых условиях гонки, когда клиент явно не закрывает соединение, и время ожидания истекает со стороны сервера.
Кроме того, если я выполняю нагрузочное тестирование любого API-интерфейса службы узла с частотой запросов 50 в секунду, то как мне проверить за это время продолжительность нагрузочного тестирования, сколько подключений было выполнено этой службой узла?