首頁  >  文章  >  後端開發  >  使用 Golang 的 Cloud Functions Gen2 - 實例生命週期和 BigQuery 插入安全,無需等待作業完成

使用 Golang 的 Cloud Functions Gen2 - 實例生命週期和 BigQuery 插入安全,無需等待作業完成

王林
王林轉載
2024-02-09 21:33:10402瀏覽

使用 Golang 的 Cloud Functions Gen2 - 实例生命周期和 BigQuery 插入安全,无需等待作业完成

php小編蘋果為您帶來了一篇關於使用 Golang 的 Cloud Functions Gen2 的文章。這篇文章將重點放在實例生命週期和 BigQuery 插入的安全性,以及如何在無需等待作業完成的情況下進行操作。透過閱讀本文,您將了解如何優化和提升您的應用程式的效能和安全性。讓我們一起來探索這個令人興奮的主題吧!

問題內容

我正在使用用 Golang 編寫的 Google Cloud Function (Gen2),該函數由 HTTP 請求觸發。我的用例需要在 BigQuery 中儲存一些數據,我希望避免在回應 HTTP 請求之前等待作業完成。

但是,我對從函數傳回後 Cloud Function 實例的行為感到擔憂:

發送 HTTP 回應後實例保持活動狀態多久? 不等待 BigQuery 作業完成是否安全?如果在作業完成之前終止實例,我是否會面臨遺失資料的風險? 任何有關此場景的見解或最佳實踐將不勝感激。

解決方法

不鼓勵這種方法。請參閱以下文件:

函數執行時間軸

#函數只能在函數執行期間存取其分配的資源(記憶體和 CPU)。在執行週期之外運行的程式碼不保證執行,並且可以隨時停止。因此,您應該始終正確地發出函數執行結束的訊號,並避免執行超出函數執行範圍的任何程式碼。

不啟動後台活動

#後台活動是指函數終止後發生的任何事情。一旦函數傳回或以其他方式發出完成訊號,函數呼叫就會完成,例如透過呼叫 Node.js 事件驅動函數中的 callback 參數。優雅終止後運行的任何程式碼都無法存取 CPU,也不會取得任何進展。

此外,當在同一環境中執行後續呼叫時,您的後台活動將恢復,從而乾擾新的呼叫。這可能會導致難以診斷的意外行為和錯誤。函數終止後存取網路通常會導致連線被重設(ECONNRESET 錯誤代碼)。

透過尋找呼叫完成行之後記錄的任何內容,通常可以在各個呼叫的日誌中偵測到後台活動。後台活動有時可能會埋藏在程式碼中更深處,尤其是當存在回呼或計時器等非同步操作時。檢查您的程式碼以確保在終止函數之前完成所有非同步操作。

另一種解決方案是將其實作為事件驅動函數(請參閱雲端函數的類型)。然後為此函數指定 Pub/Sub 觸發器和 Pub/Sub 主題(請參閱 Pub /子觸發器)。必須重寫客戶端才能將事件發佈到該主題。

如果客戶端無法重寫,解決方法是同時保留 HTTP 函數和事件驅動函數,並透過向主題發布事件來使 HTTP 函數將工作卸載到事件驅動函數。根據事件的大小和 BigQuery 作業的執行時間,也許它不會讓客戶端等待更少的時間。而且我認為這種方法會顯著增加成本。

以上是使用 Golang 的 Cloud Functions Gen2 - 實例生命週期和 BigQuery 插入安全,無需等待作業完成的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除