Мы запускаем API Sails.js в Google Container Engine с облачной базой данных SQL, и в последнее время мы обнаружили, что некоторые из наших конечных точек зашли в тупик, никогда не отправляя ответ.Google Cloud SQL No Response
У меня был контроль проверки работоспособности/v1/status, и он зарегистрировал 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)
Глядя на один ошибках, я был бы соблазну сказать, что у нас есть что-то неправильно настроенное. Но тот факт, что он работает некоторое время (и ранее работал отлично!), Заставляет меня поверить, что здесь есть какая-то другая черная магия. Наш экземпляр Cloud SQL - D0 (хотя мы попытались увеличить размер до D4), и наша политика активации «Всегда включена».
EDIT: Я видел, как другие жалуются на Google Cloud SQL, например. this SO post, и я был подозрительным, но с тех пор мы переместили нашу базу данных на Amazon RDS, и мы по-прежнему видим те же проблемы, поэтому это должно быть проблемой с парусами и адаптером mysql.
Эта проблема приводит к часам простоя в день, мы нуждаемся в ней, любая помощь очень ценится!
В этой связи объясняется, что ограничение QPS отсутствует, а максимальное ограничение одновременных подключений. Мы используем экземпляр D0, который имеет ограничение в 250 одновременных соединений, тем больше мы когда-либо использовали 12. Спасибо за предложение! –