2014-02-13 29 views
1

在我的Google App Engine Go應用程序中,我需要每5-10秒執行一次任務。我知道使用標準的Cron將不起作用,因爲它只能每分鐘計劃一次任務。同樣,睡在這樣的線程可能不是最好的選擇。據我所知,我需要使用一些後端實例來執行這些任務。GAE Golang - 如何配置後端每X秒執行一項任務?

如何配置我的應用程序以及時和資源高效的方式處理此類任務?我是否只是全天候運行後端,直到我需要做某件事,或者是否有一些更有效的方式來執行任務,然後安排另一項任務在5-10秒內運行?

+1

0123.time.Ticker https://gobyexample.com/tickers – elithrar

回答

2

這個問題凸顯了處理效率和服務質量(計時精度)之間的緊張關係。最有效的方法是使用延遲或ETA選項的Task Queue(推送隊列樣式),但API不提供有關準確性的服務級別協議。最準確的方法是您描述的24/7後端,但其開銷更高[編輯 - 而AppEngine不保證其正常運行時間]。

我對基於Java的推送隊列的使用體驗是超過90%的任務在預定時間的2秒內執行,並且1%的任務在晚點開始超過10秒。沒有任何事情似乎很早就運行。

編輯 - 正如Zig從經驗中指出的那樣,AppEngine可能會隨時關閉後端,並且不會自動重新啓動它。因此後端的及時性被不可預知的停機時間損壞。

總之任務隊列是高效可靠的,但不及時比後端更加昂貴和不可靠。在大多數情況下使用任務隊列而不是後端。

+0

後端解決方案將破產,因爲如果運氣好的話,後端最多隻能運行15分鐘,谷歌會無緣無故地將其關閉,您將需要cron或其他東西重新啓動它。 –

+0

根據[Backends Go API概述](https://developers.google.com/appengine/docs/go/backends/),後端在理論上可以「無限期」和「數小時」運行,但我仍然推薦任務隊列,除非時間要求非常嚴格。 –

+0

是的,理論上。你有嘗試過嗎?我從來沒有見過我的後端熬夜超過30分鐘,谷歌將無緣無故地停止它,而且這是記錄(後端可以在任何時候收到關閉消息)。因此,您的後端必須能夠在任何時候處理停止,並且您必須通過其他方式重新啓動它來做好準備。 –