簡體   English   中英

mysql連接池如何與Node微服務一起使用?

[英]How does mysql connection pooling works with Node microservices?

我有兩個節點微服務與一個常見的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. 將每個微服務的pool connectionLimit設置為10時,在任何情況下或情況下,任何微服務的連接數都將超過10? 即,節點服務何時以及如何能夠維持比預期更多的連接?
  2. 如果我有3個實例在同一微服務上運行,那么池connectionLimit如何工作? 每個微服務實例的連接限制是多少?
  3. 用一個微服務說,我有兩個API,它們執行數據庫事務,並且都通過兩個不同的函數連接到數據庫(獲取連接),這些函數具有與mysql.createPool({})相同的實現。 如果同時調用兩個api,並且每個api每秒發出的請求數為100或更多,將會發生什么情況? 可用的連接數是10還是20(因為創建了兩個mysql池,每個connectionLimit數量為10)?
  1. 理想情況下不會; 但可以超過10; 如果某些連接失效,即它們從客戶端關閉,但在服務器端仍然打開。

  2. 如果您在多個VM或Docker容器中部署了同一微服務的多個實例; 它們就像獨立的服務。彼此之間沒有連接。因此,它們每個都將創建自己的10個連接。

  3. 首先,如果您將連接池限制設置為10; 這並不意味着在第一時間將創建10個連接。 您還要指定初始連接參數,假設為5 ..因此,服務啟動時將僅創建5個連接,並且僅在需要時才創建更多連接,且UPPER Limit由參數max_connections定義。 回到您的問題; 如果您尚未正確實現同步等,那么可以,兩個池都可能會初始化其INITIAL_CONNECTIONS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM