5

हम क्लाउड एसक्यूएल डेटाबेस के साथ Google कंटेनर इंजन पर एक Sails.js एपीआई चला रहे हैं और हाल ही में हम अपने कुछ अंतराल को रोक रहे हैं, कभी प्रतिक्रिया नहीं दे रहे हैं।Google क्लाउड एसक्यूएल कोई प्रतिक्रिया

मेरे पास स्वास्थ्य जांच निगरानी/v1/स्थिति थी और जब मैंने निम्नलिखित सरल प्रतिक्रिया दी तो यह 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) 

अकेले त्रुटियों को देखते हुए, मैं कहना है कि हम कुछ गलत तरह से कॉन्फ़िगर है परीक्षा होगी। लेकिन तथ्य यह है कि यह कुछ समय काम करता है (और पहले ठीक काम कर रहा है!) मुझे विश्वास दिलाता है कि यहां काम पर कुछ और काला जादू है। हमारा क्लाउड एसक्यूएल उदाहरण डी 0 है (हालांकि हमने आकार को डी 4 तक बढ़ाने की कोशिश की है) और हमारी सक्रियण नीति "हमेशा चालू" है।

संपादित करें: मैंने दूसरों को Google क्लाउड एसक्यूएल उदाहरण के बारे में शिकायत की है। this SO post और मैं संदिग्ध था लेकिन हमने बाद में हमारे डेटाबेस को अमेज़ॅन आरडीएस में स्थानांतरित कर दिया है और हम अभी भी एक ही समस्या को देख रहे हैं, इसलिए यह सेल और MySQL एडाप्टर के साथ एक समस्या होनी चाहिए।

यह समस्या दिन में डाउनटाइम के घंटों तक पहुंच रही है, हमें इसे हल करने की आवश्यकता है, किसी भी मदद की बहुत सराहना की जाती है!

उत्तर

1

क्या Google क्लाउड एसक्यूएल के लिए क्यूपीएस सीमा तक पहुंचने का कोई तरीका है? यहां देखें: https://cloud.google.com/sql/faq#sizeqps

+0

लिंक में यह बताता है कि कोई क्यूपीएस सीमा नहीं है बल्कि अधिकतम समवर्ती कनेक्शन सीमा है। हम एक डी 0 इंस्टेंस का उपयोग कर रहे हैं जिसमें 250 समवर्ती कनेक्शन की सीमा है, हमने कभी भी इस्तेमाल किया है। हालांकि सुझाव के लिए धन्यवाद! –

1

मेरा डेटाबेस उदाहरण कभी-कभी प्रतिक्रिया देने में धीमा क्यों होता है? प्रति उपयोग बिलिंग योजनाओं पर उदाहरणों के लिए आपके द्वारा ली गई राशि को कम करने के लिए, डिफ़ॉल्ट रूप से आपका उदाहरण निष्क्रिय हो जाता है यदि इसे 15 मिनट तक नहीं पहुंचाया जाता है। अगली बार जब इसे एक्सेस किया जाता है तो सक्रिय होने पर थोड़ी देर हो जाएगी। उदाहरण के सक्रियण नीति को कॉन्फ़िगर करके आप इस व्यवहार को बदल सकते हैं। उदाहरण के लिए, क्लाउड एसडीके का उपयोग करके एक इंस्टेंस संपादित करना देखें।

यह आपकी नीति सेटिंग से संबंधित हो सकता है। यदि आप इसे ON_DEMAND पर सेट करते हैं, तो उदाहरण आपके बजट को सहेजने के लिए सो जाएगा ताकि इंस्टेंस को सक्रिय करने के लिए पहली क्वेरी धीमी हो। यह टाइमआउट का कारण बन सकता है।

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

+0

सुझाव के लिए धन्यवाद, लेकिन हम "हमेशा चालू" सक्रियण नीति का उपयोग नहीं करते हैं, मैं इस जानकारी को अपने प्रश्न में जोड़ दूंगा। –

2

यह एक sails issue प्रतीत होता है, और जरूरी क्लाउड SQL से संबंधित नहीं।

+0

धन्यवाद निक! हमने परीक्षण के रूप में पूरे डेटाबेस को अमेज़ॅन आरडीएस में ले जाया और फिर भी हम एक ही मुद्दे को देखते हैं। जैसा कि आप कहते हैं, पाल होना चाहिए, हालांकि यह मुद्दा काफी पुराना है। यह वही बात हो सकती है, कम से कम हमारे पास परीक्षण करने के लिए कुछ है! –

संबंधित मुद्दे