Как пул соединений mysql работает с микросервисами Node?

У меня есть два микросервиса 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).

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

Кроме того, если я выполняю нагрузочное тестирование любого API-интерфейса службы узла с частотой запросов 50 в секунду, то как мне проверить за это время продолжительность нагрузочного тестирования, сколько подключений было выполнено этой службой узла?

userb 09.04.2019 12:12
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
1
416
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

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

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

Спасибо за ответ... Не могли бы вы пояснить первый пункт? Как соединение будет закрыто на стороне клиента, а не на стороне сервера? Я считал, что соединения всегда закрываются на стороне сервера, а не на стороне клиента.

userb 09.04.2019 12:07

Кроме того, если я выполняю нагрузочное тестирование любого API-интерфейса службы узла с частотой запросов 50 в секунду, то как мне проверить за это время продолжительность нагрузочного тестирования, сколько подключений было выполнено этой службой узла?

userb 09.04.2019 12:12

на MySQL; вы можете легко выполнить SQL-запрос, чтобы увидеть количество подключений и сервер, исходящий для этих подключений.

Deepak Singhal 09.04.2019 13:25

относительно вашего первого комментария; это может произойти в некоторых условиях гонки, когда клиент явно не закрывает соединение, и время ожидания истекает со стороны сервера.

Deepak Singhal 09.04.2019 14:57

Другие вопросы по теме