TL;DR:此系統設計的垂直或水平擴展?
我有 NGINX 作為我的應用程式的負載平衡器運行。它分布在 4 個 EC2(t2.micro 的,因為我很便宜)來路由流量,這些流量目前都在訪問我的 MySQL 資料庫的一臺服務器(也是一個 t2.micro,整個系統總共有 6 個單獨的 EC2 實體)。
我考慮通過源/副本分布水平擴展我的資料庫,我的想法是我應該將所有讀取查詢/GET 請求(我將獲得的最高流量)路由到副本,并將所有寫入查詢/POST 請求路由到源D b。
我知道我必須根據請求方法以編程方式選擇我的服務器指向哪個資料庫,但我不確定如何最好地解決這個問題,或者我是否最好在那時垂直擴展我的資料庫并投資于更大的 EC2 實體。
目前我正在使用快速服務器連接到源資料庫,它正在處理一切。我還沒有實作源/副本配置,因為我想首先規劃我的服務器端。
這是當前的靜態連接設定:
const mysql = require('mysql2');
const Promise = require('bluebird');
const connection = mysql.createConnection({
host: '****',
port: 3306,
user: '****',
password: '*****',
database: 'qandapi',
});
const db = Promise.promisifyAll(connection, { multiArgs: true });
db.connectAsync().then(() =>
console.log(`Connected to QandApi as ID ${db.threadId}`)
);
module.exports = db;
我想要發生的是我想要:
- 設定一個快速中間件函式,該函式查看請求方法并通過創建 2 個配置模板連接到適當的資料庫以放入 createConnection 函式(我不確定如何確保它不會嘗試重新連接如果連接雖然已經存在)
- 如果可能,只需同時打開兩個連接并路由哪個資料庫采用哪種方法(我希望這個選項可以作業,這樣我可以讓事情變得更簡單)
這可行嗎?與將 EC2 垂直擴展到具有更多 vCPU 的情況相比,這樣做是否會導致性能更差?
如果需要任何其他資訊,請告訴我。
uj5u.com熱心網友回復:
同時連接 MySQL 資料庫
我會猶豫使用任何客戶端輸入連接到服務器,但我理解這可能是您在某些情況下需要做的事情。解決此問題的最簡單快捷的方法是創建第二個資料庫連接檔案。為了使其動態化,您可以根據代碼中的條件簡單地要求模塊,因此有時它會在特定條件后僅在特定時間點被呼叫和承諾。這個程序可能有風險,并且需要在代碼中間使用模塊,因此它并不理想,但可以完成作業。前任 :
const dbConnection = require("../utils/dbConnection");
//conditional {
const controlledDBConnection = require("../utils/controlledDBConnection");
var [row] = await controlledDBConnection.execute("SELECT * FROM `foo`;")
}
盡管使用更多檔案可能會對空間限制產生潛在影響,并且可能會在等待新承諾時減慢代碼速度,但總體影響將是最小的。ControlledDBConnection.js 只是類似于 dbConnection.js 的副本,根據您的需要,它的引數略有不同。
如果您想避免使用多個檔案,您可以采用的另一種方法是從控制器檔案中匯出具有動態設定變數的模塊,然后將其匯入標準連接檔案中。這將允許您在不重寫副本的情況下更改連接,但您將需要勤奮的錯誤檢查和默認值。
JS 中的模塊資訊:https : //javascript.info/import-export
其他一些要點
為您的資料庫資訊(如主機等)使用環境變數,因為這將使您可以輕松地在一個地方更改資料庫的資訊,同時還允許您在使用 github 時將 .env 檔案包含在 .gitignore 中
這是另一個可能有助于設定動態連接檔案的很棒的堆疊溢位問題/答案:如何在 Node.js 中創建動態資料庫連接?
如何設定 .env 檔案:https ://nodejs.dev/learn/how-to-read-environment-variables-from-nodejs
如何設定 .gitignore :https ://stackabuse.com/git-ignore-files-with-gitignore/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/371270.html
