【问题标题】:How does mysql connection pooling works with Node microservices?mysql 连接池如何与 Node 微服务一起工作?
【发布时间】: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)。

  1. 将每个微服务的池 connectionLimit 设置为 10,在哪些情况或场景下,任何微服务的连接数会超过 10? 即节点服务何时以及如何能够维持比预期更多的连接?
  2. 如果我有 3 个实例运行相同的微服务,那么池 connectionLimit 是如何工作的?每个微服务实例的连接限制是多少?
  3. 在其中一个微服务中说我有两个执行数据库事务的 api,并且都通过两个不同的函数连接到数据库(获取连接) mysql.createPool({}) 的实现与上面相同。如果两个 api 被同时调用并且每秒为每个 api 发出的请求数是 100 或更多,会发生什么? 可用的连接数是 10 还是 20(因为创建了两个 mysql 池,每个池的 connectionLimit 为 10)?

【问题讨论】:

  • 另外,如果我正在以每秒 50 次的请求速率对任何节点服务 API 进行负载测试,那么如何检查该节点服务建立了多少连接的负载测试持续时间?

标签: mysql node.js connection microservices connection-pooling


【解决方案1】:
  1. 理想情况下不会;但它可以超过 10;如果假设某些连接变得陈旧,即它们从客户端关闭但在服务器端仍然打开。

  2. 如果您在多个 VM 或 docker 容器中部署了相同微服务的多个实例;它们就像独立的服务..它们之间没有连接..因此,它们中的每一个都将创建自己的 10 个连接。

  3. 首先,如果您将连接池限制设置为 10;这并不意味着在第一时间会创建 10 个连接。在创建池时;您还指定初始连接参数假设 5.. 因此,当服务启动时,只会创建 5 个连接.. 并且仅在需要时创建更多.. UPPER Limit 设置由参数 max_connections 定义。回到你的问题;好吧,如果您没有正确实现同步等,那么是的,两个池都可能会初始化它们的 INITIAL_CONNECTIONS..

【讨论】:

  • 感谢您的回答...能否请您澄清第一点?连接如何在客户端而不是服务器端关闭?我相信连接总是在服务器端而不是客户端关闭。
  • 另外,如果我正在以每秒 50 次的请求速率对任何节点服务 API 进行负载测试,那么如何检查该节点服务建立了多少连接的负载测试持续时间?
  • 在 mysql 上;您可以轻松地进行 sql 查询以查看连接数和源自这些连接的服务器
  • 关于您的第一条评论;当客户端没有明确关闭连接并且它从服务器端超时时,它可能发生在某些竞争条件下。
猜你喜欢
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 2012-11-22
  • 2012-04-27
  • 2011-02-18
  • 1970-01-01
  • 2013-08-20
相关资源
最近更新 更多