5

Мы запускаем 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.

Эта проблема приводит к часам простоя в день, мы нуждаемся в ней, любая помощь очень ценится!

ответ

1

Существует ли какой-либо предел QPS для Google Cloud SQL? См. Здесь: https://cloud.google.com/sql/faq#sizeqps

+0

В этой связи объясняется, что ограничение QPS отсутствует, а максимальное ограничение одновременных подключений. Мы используем экземпляр D0, который имеет ограничение в 250 одновременных соединений, тем больше мы когда-либо использовали 12. Спасибо за предложение! –

1

Почему мой экземпляр базы данных иногда медленно реагирует? Чтобы свести к минимуму сумму, которую вы платите за экземпляры в планах выставления счетов за использование, по умолчанию ваш экземпляр становится пассивным, если он не доступен в течение 15 минут. В следующий раз, когда он будет доступен, при его активации будет небольшая задержка. Вы можете изменить это поведение, настроив политику активации экземпляра. Например, см. Редактирование экземпляра с помощью Cloud SDK.

Это может быть ссылка на вашу политику. Если вы установите его на ON_DEMAND, экземпляр будет спать, чтобы сохранить ваш бюджет, чтобы первый запрос для активации экземпляра был медленным. Это может привести к таймауту.

https://cloud.google.com/sql/faq?hl=en

+0

Спасибо за предложение, но мы не используем политику активации «Всегда включено», я добавлю эту информацию к моему вопросу. –

2

Это, как представляется sails issue, и не обязательно связаны с Cloud SQL.

+0

Спасибо, Ник! Мы подняли и переместили всю базу данных на Amazon RDS в качестве теста, но мы по-прежнему видим те же проблемы. Как вы говорите, должны быть паруса, хотя эта проблема довольно старая. Это может быть одно и то же, по крайней мере, у нас есть что испытать сейчас! –

 Смежные вопросы

  • Нет связанных вопросов^_^