我們在Google Container Engine上運行帶有Cloud SQL數據庫的Sails.js API,最近我們發現我們的一些端點一直在拖延,從未發送任何響應。Google Cloud SQL沒有回覆
我有一個健康檢查監測/ v1 /狀態,並且當我有如下簡單的響應時,它記錄了100%的正常運行時間;
status: function(req, res){
res.ok('Welcome to the API');
}
只要我們添加了數據庫查詢,端點就開始超時。它不是一直髮生,而是看似隨機間隔,有時幾個小時結束。這就是我們已經改變了查詢;
status: function(req, res){
Email.findOne({ value: "[email protected]" }).then(function(email){
res.ok('Welcome to the API');
}).fail(function(err){
res.serverError(err);
});
}
而是懷疑,這一切工作在我們的分期和發展環境優良,只有當代碼部署在生產的超時和只出現在某些時候 。在暫存和生產之間唯一的變化是我們正在連接的數據庫和服務器上的負載。
正如我前面提到的,我們使用的是Google Cloud SQL和Sails-MySQL適配器。我們有來自生產服務器的以下錯誤堆棧;
AdapterError: Invalid connection name specified
at getConnectionObject (/app/node_modules/sails-mysql/lib/adapter.js:1182:35)
at spawnConnection (/app/node_modules/sails-mysql/lib/adapter.js:1097:7)
at Object.module.exports.adapter.find (/app/node_modules/sails-mysql/lib/adapter.js:801:16)
at module.exports.find (/app/node_modules/sails/node_modules/waterline/lib/waterline/adapter/dql.js:120:13)
at module.exports.findOne (/app/node_modules/sails/node_modules/waterline/lib/waterline/adapter/dql.js:163:10)
at _runOperation (/app/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:408:29)
at run (/app/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:69:8)
at bound.module.exports.findOne (/app/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/basic.js:78:16)
at bound [as findOne] (/app/node_modules/sails/node_modules/lodash/dist/lodash.js:729:21)
at Deferred.exec (/app/node_modules/sails/node_modules/waterline/lib/waterline/query/deferred.js:501:16)
at tryCatcher (/app/node_modules/sails/node_modules/waterline/node_modules/bluebird/js/main/util.js:26:23)
at ret (eval at <anonymous> (/app/node_modules/sails/node_modules/waterline/node_modules/bluebird/js/main/promisify.js:163:12), <anonymous>:13:39)
at Deferred.toPromise (/app/node_modules/sails/node_modules/waterline/lib/waterline/query/deferred.js:510:61)
at Deferred.then (/app/node_modules/sails/node_modules/waterline/lib/waterline/query/deferred.js:521:15)
at Strategy._verify (/app/api/services/passport.js:31:7)
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:341:16)
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:342:7)
at Object.AuthController.login (/app/api/controllers/AuthController.js:119:5)
at bound (/app/node_modules/sails/node_modules/lodash/dist/lodash.js:729:21)
at routeTargetFnWrapper (/app/node_modules/sails/lib/router/bind.js:179:5)
at callbacks (/app/node_modules/sails/node_modules/express/lib/router/index.js:164:37)
Error (E_UNKNOWN) :: Encountered an unexpected error :
Could not connect to MySQL: Error: Pool is closed.
at afterwards (/app/node_modules/sails-mysql/lib/connections/spawn.js:72:13)
at /app/node_modules/sails-mysql/lib/connections/spawn.js:40:7
at process._tickDomainCallback (node.js:381:11)
望着單獨的錯誤,我會忍不住地說,我們有一些錯誤配置。但事實上,它在某些時候起作用(並且以前一直工作正常!)讓我相信在這裏工作還有其他一些黑魔法。我們的雲端SQL實例是D0(儘管我們已經嘗試將大小增加到D4),並且我們的激活策略是「始終開啓」。
編輯:我看到其他人抱怨谷歌雲SQL例如。 this SO post並且我很懷疑,但是我們之後將數據庫移到了Amazon RDS,而且我們仍然看到相同的問題,所以它必須是sails和mysql適配器的問題。
這個問題每天都會導致數小時的停機,我們需要它解決,任何幫助都非常感謝!
在鏈接它解釋說沒有QPS上限,而是一個最大併發連接數限制。我們正在使用一個D0實例,它具有250個併發連接的限制,我們使用過的最多的是12個。感謝您的建議! –