クラウドSQLデータベースを使用してGoogle Container EngineでSails.js APIを実行していますが、最近ではエンドポイントの一部が停止していて応答を送信していないことがわかりました。Google Cloud SQLレスポンス
私は以下の単純な応答があったときに/ 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にサイズをアップしようとしましたが)。そして、アクティブ化ポリシーは "Always On"です。
EDIT:他の人がGoogle Cloud SQLについて不平を言うのを見ました。 this SO postと私は疑いがありましたが、私たちはデータベースをAmazon RDSに移しましたが、私たちは引き続き同じ問題を抱えているので、セイルとmysqlアダプタの問題でなければなりません。
この問題は、1日に数時間のダウンタイムにつながります。解決する必要があります。ご協力いただければ幸いです!
このリンクでは、QPS制限はなく最大同時接続制限が説明されています。私たちは最大同時接続数が250であるD0インスタンスを使用していますが、これまで使用していたもののうち最大のものは12です。 –