5

クラウド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 SQLSails-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日に数時間のダウンタイムにつながります。解決する必要があります。ご協力いただければ幸いです!

答えて

1

Google Cloud SQLのQPS制限に達している方法はありますか?ここをクリックしてください:https://cloud.google.com/sql/faq#sizeqps

+0

このリンクでは、QPS制限はなく最大同時接続制限が説明されています。私たちは最大同時接続数が250であるD0インスタンスを使用していますが、これまで使用していたもののうち最大のものは12です。 –

1

なぜ私のデータベースインスタンスが応答するのが遅いのですか? 1回の料金プランでインスタンスに課金される金額を最小限に抑えるため、デフォルトでインスタンスは15分間アクセスされないとパッシブになります。次にアクセスされると、アクティブになっている間に短い遅延があります。この動作を変更するには、インスタンスのアクティベーション・ポリシーを構成します。例については、「Cloud SDKを使用したインスタンスの編集」を参照してください。

お客様のポリシー設定に関連している可能性があります。 ON_DEMANDに設定すると、インスタンスをスリープして予算を保存し、インスタンスをアクティブ化する最初のクエリが遅くなるようにします。これにより、タイムアウトが発生する可能性があります。

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

+0

提案していただきありがとうございますが、私たちは「常時起動」ポリシーを使用していません。この情報を私の質問に追加します。 –

2

これはsails issueように見える、とは必ずしもクラウドSQLとは関係ありません。

+0

ありがとうニック!私たちは、データベース全体をテストとしてAmazon RDSにアップしましたが、同じ問題がまだ発生しています。あなたが言うように、その問題はかなり古いですが、セーリングする必要があります。それは同じことかもしれません、少なくとも私たちは今テストするものがあります! –

関連する問題