我们在带有 Cloud SQL 数据库的 Google Container Engine 上运行 Sails.js API,最近我们发现我们的一些端点停滞不前,从不发送响应。
我有一个运行状况检查监控/v1/status,当我收到以下简单响应时,它记录了 100% 的正常运行时间;
status: function( req, res ){
res.ok('Welcome to the API');
}
一旦我们添加了数据库查询,端点就开始超时。它不会一直发生,但似乎是随机发生的,有时会持续数小时。这就是我们将查询更改为的内容;
status: function( req, res ){
Email.findOne({ value: "someone@example.com" }).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)
单看错误,我很想说我们配置有误。但事实上它有时会起作用(并且之前一直运行良好!),这让我相信这里还有其他一些黑魔法在起作用。我们的 Cloud SQL 实例是 D0(虽然我们已经尝试将大小增加到 D4)并且我们的激活策略是“始终开启”。
编辑:我曾看到其他人提示 Google Cloud SQL,例如。 this SO post我很怀疑,但我们已经将数据库移动到 Amazon RDS,但我们仍然看到同样的问题,所以这一定是 sails 和 mysql 适配器的问题。
此问题导致每天停机数小时,我们需要解决它,非常感谢任何帮助!
最佳答案
这似乎是一个 sails issue ,并且不一定与 Cloud SQL 相关。
关于mysql - 谷歌云 SQL 无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32793856/