0

我部署了GCP HTTP觸發的雲功能,該功能通過密鑰從GCP數據存儲查詢實體。這裏是代碼:使用帶GCP雲功能的GCP數據存儲緩慢查詢時間

const datastore = require('@google-cloud/datastore'); 

exports.helloWorld = function helloWorld(req, res) { 
    const client = datastore(); 
    const key = client.key(['Person', 'harry']); 

    client.get(key, function(err, entity) { 
    res.status(200).send(JSON.stringify(entity)); 
    }); 
}; 

根據日誌,這個函數在調用時需要1.6秒才能完成。重複調用不會更快。

刪除查詢並響應HTTP請求需要0.5秒才能完成,因此查詢需要大約1.1秒才能完成。對我來說,這是無法緩慢的,這似乎不太可能是GCP數據存儲的預期性能。

我認爲DB或函數可能運行在不同的區域,但我無法檢查,文檔中給出的說明是不正確的(https://cloud.google.com/datastore/docs/locations#location-r)。該區域不顯示在我的頁面上。

我的設置有什麼問題?我期待〜50ms的簡單查詢,而不是〜1100ms。

+0

我不確定您的設置存在問題,但我可以確認您應該能夠在「您的項目ID」下的Google App Engine信息中心的右上角看到位置信息。 appspot.com「,請你再檢查一次嗎? –

回答

2

this問題中,您可以找到Google堆棧跟蹤的附加屏幕截圖,並查看Datastore和GCP的最佳時間大約爲100 ms。

老實說,我們在GCF和Datastore工作了3個多月,這次通常價值超過100毫秒,每次通話時間約爲200 - 400毫秒。我與GCP支持人員進行了交談,並可以確認,目前他們遇到了麻煩,有些請求僅在GCF和Datastore之間進行路由和優化。我通過Yandex-Tank收集了多個性能測試數據集,以及平均請求延遲,其中大約800ms到7秒(大約4-5個數據存儲串行請求)。

經過3個月的開發,我們轉移到App Engine,發現Datastore在這種環境下行爲速度更快,每個數據存儲請求的平均時間大約爲20-30毫秒(4-5倍的時間更快)。

我也注意到,Datastore的查找時間幾乎不依賴於它正在運行的數據量。它是1記錄還是1000記錄,時間將幾乎相同20-30毫秒。我相信,如果我們可以在沒有任何網絡通信額外的情況下查看Datstore本身,這一次更好。

現在我們添加redis作爲緩存服務來加速所有請求。我想它可能也適用於GCF和數據存儲,但我不認爲這將是一個有保證的解決方案。 因此,考慮使用GCF作爲實用程序處理單元而不是主要處理端點。

+0

非常有幫助。謝謝。因爲Lambda和Dynamo DB沒有這個問題,所以我選擇使用AWS來執行此任務。 – lpil