工作佇列總覽

本頁面說明工作佇列的定義、使用時機及使用方式。工作佇列可讓應用程式在使用者要求之外,以非同步方式執行工作,這類作業稱為「工作」。如果應用程式需要在背景執行工作,就會將工作新增至工作佇列。這些工作之後會由工作站服務來執行。

工作佇列服務是針對非同步作業所設計。工作佇列無法明確保證工作交付的時程,因此不適合使用者正在等待結果的互動式應用程式。

發送佇列和提取佇列

工作佇列有兩種類型,分別為「發送」和「提取」。工作佇列服務將工作要求傳送至工作站服務的方式,會依據不同的佇列而異。

發送佇列會將 HTTP 要求傳送至 App Engine 工作站服務,以便執行工作。這些佇列會以穩定的頻率分派要求,並保證可靠的工作執行。由於您能控制工作從佇列傳送的速率,因此能控制工作站的資源調度行為,進而對成本有所掌控。

由於工作會以 App Engine 服務指定的要求來執行,因此有嚴格的期限。自動調整資源配置服務處理的工作,必須在 10 分鐘內完成。基本資源配置和手動調整資源配置服務處理的工作,執行時間最長可達 24 小時。

提取佇列不會傳送任何工作。這類佇列依靠其他工作站服務因本身計劃所需而向佇列「租用」工作。您可以透過提取佇列對工作的處理時間與位置享有更多掌控與彈性,但您也需要針對程序管理多付點心力。租用工作的工作站會在租用時宣告租用期限。在期限到達時,工作站必須完成工作並刪除,否則工作佇列服務會允許其他工作站租用該工作。

工作佇列的所有工作都以非同步方式執行。建立工作的應用程式會將工作交給佇列。無論工作完成或成功與否,來源應用程式都不會收到通知。

如果工作站無法處理工作,工作佇列服務會提供具有重試機制的佇列,所以工作可以進行有限次數的重試。

用途

發送佇列

典型的發送佇列使用方式是「緩慢」作業。請試想社交網路的訊息傳遞系統。使用者每次傳送訊息時,網路就需要更新寄件者的追蹤者。這可能是非常費時的作業。應用程式可以使用發送佇列,將每則訊息的工作在到達時放入佇列,以傳送到工作站服務進行處理。工作站接收到工作要求時,能夠擷取寄件者的追蹤者清單,並且更新每位追蹤者的資料庫。工作站可將另一個發送工作放入佇列,以更新每個資料庫,藉此提升作業效率。

發送佇列的另一種用法是排定的工作。請想像一個實作廣告活動的應用程式。經編寫用來傳送電子郵件的一組工作,可新增至發送佇列中,其中附有在未來指定時間之前保留工作的指示。當到期日期來到時,工作佇列服務將開始發送要求以執行工作。

提取佇列

提取佇列適合需要分批處理工作以提升效率的情形。有個解決方法是妥善利用為提取工作附加「標記」的功能,如此工作站就可租用一組具有相同標記的工作。常見的例子是維護多個不同遊戲排行榜並有許多玩家與團隊時常上線遊戲的應用程式。每次出現創新高分時,應用程式可將具有分數與玩家資訊的提取工作放入佇列,並且使用遊戲 ID 作為工作標記。工作站會定期「啟動」,租用一組具有相同遊戲 ID 的工作,然後更新排行榜。您可以使用指定標記值直接租用工作,或讓服務決定要傳送哪些具類似標記的一組工作。

使用標記分批處理工作非常實用。由於代碼可在應用程式執行期間動態產生,工作者就能處理新的遊戲 ID,無須特別處理。

後續步驟