5

Chúng tôi đang chạy API Sails.js trên Google Container Engine với cơ sở dữ liệu Cloud SQL và gần đây chúng tôi đã tìm thấy một số điểm cuối của chúng tôi đã ngừng hoạt động, không bao giờ gửi phản hồi.Google Cloud SQL Không có phản hồi

Tôi đã kiểm tra tình trạng/trạng thái/trạng thái kiểm tra và đăng ký 100% thời gian hoạt động khi tôi có phản hồi đơn giản sau đây;

status: function(req, res){ 
    res.ok('Welcome to the API');  
} 

Ngay sau khi chúng tôi thêm truy vấn cơ sở dữ liệu, điểm cuối bắt đầu hẹn giờ. Nó không xảy ra tất cả các thời gian, nhưng dường như trong khoảng thời gian ngẫu nhiên, đôi khi cho giờ kết thúc. Đây là những gì chúng tôi đã thay đổi truy vấn;

status: function(req, res){ 
    Email.findOne({ value: "[email protected]" }).then(function(email){ 
     res.ok('Welcome to the API'); 
    }).fail(function(err){ 
     res.serverError(err); 
    }); 
} 

Thay nghi ngờ, điều này tất cả hoạt động tốt trong môi trường dàn dựng và phát triển của chúng tôi, nó chỉ khi mã được triển khai trong sản xuất rằng thời gian chờ xảy ra và nó chỉ xảy ra một số thời gian . Điều duy nhất thay đổi giữa dàn dựng và sản xuất là cơ sở dữ liệu chúng tôi đang kết nối và tải trên máy chủ.

Như tôi đã đề cập trước đó, chúng tôi đang sử dụng Google Cloud SQL và bộ điều hợp Sails-MySQL. Chúng tôi có các lỗi ngăn xếp sau đây từ máy chủ sản xuất;

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) 

Nhìn vào các lỗi một mình, tôi muốn được cám dỗ để nói rằng chúng tôi có một cái gì đó sai. Nhưng thực tế là nó hoạt động một số thời gian (và trước đó đã được làm việc tốt!) Dẫn tôi để tin rằng có một số ma thuật đen khác tại nơi làm việc ở đây. Ví dụ Cloud SQL của chúng tôi là D0 (mặc dù chúng tôi đã thử tăng kích thước lên D4) và chính sách kích hoạt của chúng tôi là "Luôn bật".

EDIT: Tôi đã thấy những người khác phàn nàn về Google Cloud SQL ví dụ: this SO post và tôi đã nghi ngờ nhưng chúng tôi đã chuyển cơ sở dữ liệu của mình sang Amazon RDS và chúng tôi vẫn thấy các vấn đề tương tự, vì vậy nó phải là một vấn đề với buồm và bộ điều hợp mysql.

Vấn đề này dẫn đến hàng giờ ngừng hoạt động mỗi ngày, chúng tôi cần nó giải quyết, mọi trợ giúp đều được đánh giá cao!

Trả lời

1

Có cách nào để đạt đến giới hạn QPS cho Google Cloud SQL không? Xem tại đây: https://cloud.google.com/sql/faq#sizeqps

+0

Trong liên kết, nó giải thích rằng không có giới hạn QPS mà là giới hạn kết nối đồng thời tối đa. Chúng tôi đang sử dụng một trường hợp D0 trong đó có một giới hạn của 250 kết nối đồng thời, hầu hết chúng tôi đã từng sử dụng là 12. Cảm ơn lời đề nghị mặc dù! –

1

Tại sao bản sao cơ sở dữ liệu của tôi đôi khi chậm phản hồi? Để giảm thiểu số tiền bạn bị tính phí cho các trường hợp trên mỗi gói thanh toán sử dụng, theo mặc định, cá thể của bạn sẽ bị động nếu nó không được truy cập trong 15 phút. Lần tiếp theo nó được truy cập sẽ có một sự chậm trễ ngắn trong khi nó được kích hoạt. Bạn có thể thay đổi hành vi này bằng cách cấu hình chính sách kích hoạt của cá thể. Để biết ví dụ, hãy xem Chỉnh sửa sơ thẩm bằng SDK đám mây.

Nó có thể liên quan đến cài đặt chính sách của bạn. Nếu bạn đặt nó thành ON_DEMAND, cá thể sẽ ngủ để tiết kiệm ngân sách của bạn để truy vấn đầu tiên kích hoạt cá thể chậm. Điều này có thể gây ra thời gian chờ.

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

+0

Cảm ơn bạn đã đề xuất, nhưng chúng tôi không sử dụng chính sách kích hoạt "Luôn bật", tôi sẽ thêm thông tin này vào câu hỏi của mình. –

2

này dường như là một sails issue, và không nhất thiết liên quan đến đám mây SQL.

+0

Cảm ơn Nick! Chúng tôi đã chuyển và chuyển toàn bộ cơ sở dữ liệu sang Amazon RDS như một thử nghiệm nhưng chúng tôi vẫn thấy các vấn đề tương tự. Như bạn nói, phải là cánh buồm, mặc dù vấn đề đó là khá cũ. Nó có thể là cùng một điều, ít nhất chúng ta có một cái gì đó để kiểm tra ngay bây giờ! –

Các vấn đề liên quan