Как пул соединений mysql работает с микросервисами Node? - PullRequest
1 голос
/ 08 апреля 2019

У меня есть два узла микроуслуг, говорящих с одной общей базой данных 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 (ПОКАЗАТЬVARIABLES LIKE 'max_connections'; возвращает 200).

  1. При установленном пуле connectionLimit, равном 10, для каждого микросервиса, в каких случаях или сценариях число соединений для любого из микросервисов будет выше10?то есть когда и как службы узла смогут поддерживать больше соединений, чем ожидалось?
  2. Если у меня 3 экземпляра, работающих на одном микросервисе, то как работает пул connectionLimit?Каков будет предел соединений для каждого экземпляра микросервиса?
  3. В одном из микросервисов говорят, что у меня есть два apis, которые выполняют транзакции базы данных, и оба подключаются к базе данных (получение соединения) через две разные функции, имеющие одинаковую реализациюmysql.createPool ({}), как указано выше.Что произойдет, если оба apis будут вызываться одновременно, а количество запросов, сделанных для каждого из них в секунду, составляет 100 или более?Будет ли количество доступных подключений равным 10 или 20 (поскольку существует два пула mysql, созданных с ограничением соединения 10)?

1 Ответ

2 голосов
/ 08 апреля 2019
  1. В идеале это не так; но это может пойти выше 10; если предположить, что некоторые соединения устарели, т.е. они закрыты со стороны клиента, но все еще открыты со стороны сервера.

  2. Если у вас есть несколько экземпляров одного и того же микросервиса, развернутого в нескольких контейнерах виртуальных машин или док-станции; они похожи на независимые службы ... и они не имеют никакой связи друг с другом .. Следовательно, каждый из них создаст свою собственную 10-ю связь.

  3. Во-первых, если вы установили предел пула соединений равным 10; это НЕ означает, что в первый момент будет создано 10 соединений. При создании пула; Вы также указываете начальный параметр соединения, предположим, что 5 .. поэтому, когда служба запускается, будет создано только 5 соединений ... и больше будет создано только при необходимости ... с верхним пределом, установленным параметром max_connections. Возвращаясь к вашему вопросу; хорошо, если вы НЕ реализовали синхронизацию и т. д. правильно, тогда да, возможно, что оба пула инициализируют свои INITIAL_CONNECTIONS ..

...