設計特定佇列執行行為和服務限制時,Cloud Tasks 可讓您建構彈性非同步系統。您可以考量至少傳送一次、系統節流和目標資源容量,避免處理瓶頸和意外延遲。
執行順序
除了排定在未來執行的工作外,工作佇列的執行順序完全不受平台影響。系統不會保證或盡力嘗試依特定順序執行工作。具體來說,除非佇列完全清空,否則無法保證舊工作會執行。在許多常見情況下,較新的工作會比舊工作更早執行,且相關模式可能會在沒有通知的情況下變更。
執行作業延遲
由於內部系統重新啟動,Cloud Tasks 執行作業偶爾可能會出現幾分鐘的輕微延遲。工作會延遲,但不會遺失。這些是系統層級的事件,無法解決。系統不會記錄這些事件,且事件發生時間沒有固定時間表。
重複執行
Cloud Tasks 嚴格實行「只執行一次」的機制。不過,如果必須在保證執行與重複執行之間進行取捨,採取保證執行的做法會導致服務發生錯誤,因此,系統確實會重複執行動作,且次數不為零。 請確保系統能妥善處理重複執行作業,且不會導致非預期失敗。在實際工作環境中,超過 99.999% 的工作只會執行一次。
資源限制
立即處理佇列中之所以會有待處理作業,最常見的原因是目標執行個體的資源用盡。如果您嘗試在每秒只能處理 10 個要求的前端執行個體上,每秒執行 100 項工作,就會造成待處理工作積壓。這通常會透過兩種方式呈現,而增加處理要求的執行個體數通常可以解決這些問題。
輪詢錯誤與強制執行率
伺服器過載時,可能會開始傳回退避錯誤:HTTP 503 (適用於 App Engine 目標),或 HTTP 429 或 5xx (適用於外部目標)。為回應這些錯誤,Cloud Tasks 會放慢執行速度,直到錯誤停止。這項系統節流措施可避免工作站過載。請注意,系統不會變更您的設定。
系統會在下列情況下進行節流:
Cloud Tasks 會針對所有錯誤進行退避。通常會使用
rate_limits中指定的退避。但如果工作者傳回 HTTP429 Too Many Requests、503 Service Unavailable,或錯誤率偏高,Cloud Tasks 就會使用較高的輪詢率。系統會考量Retry-AfterHTTP 回應標頭中指定的重試。為防止流量激增並緩和流量突然增加的情況,當佇列剛建立或處於閒置狀態時,系統會緩慢增加調度次數;如果突然有大量工作可供調度 (因為工作建立率激增、佇列取消暫停,或許多工作排定在同一時間執行),系統也會緩慢增加調度次數。
延遲時間遽增以及並行數量上限
伺服器過載也可能導致延遲時間大幅增加。在這種情況下,要求會保留較長時間。由於佇列在執行時會受限於並行工作數上限,因此這可能會導致佇列無法依預期速度執行。如果受影響佇列所設定的 max_concurrent_dispatches 值過低,您可以提高該值,導入自訂頻率限制。不過提高 max_concurrent_dispatches 值無法解除任何根本的資源壓力。
長時間執行的工作發生升速問題
Cloud Tasks 佇列會根據先前成功調度的任務數量,逐步提高輸出量。如果工作處理常式需要相當長的時間 (以分鐘為單位) 才能完成工作並傳回成功回應,佇列的升速可能會延遲。
查看超過 5,000 項工作
如果工作超過 5,000 項,Google Cloud 控制台就不會顯示部分工作。使用 gcloud CLI 查看所有工作。
回報的佇列深度指標上限
Cloud Tasks 回報的佇列深度指標上限為 1,000,000 個工作。這項變更旨在提升基礎工作人員的效能,不會影響可傳送至佇列或由佇列處理的工作數量。傳送至佇列的工作若超過佇列深度限制,仍會照常執行。
如要擷取超過 1,000,000 項工作的目前佇列深度,可以使用 queues.tasks.list 方法。這個方法會傳回所有工作 (含分頁),方便您匯總資料及執行計數作業。不過,視佇列深度大小而定,這個方法可能會遇到配額限制。
重新建立名稱相同的佇列
如果您從 Google Cloud 控制台刪除佇列,必須等待 3 天,才能重新建立相同名稱的佇列。這段等待期可避免在刪除或等待執行的工作發生預期外的行為。此外,也能避免刪除或重新建立週期發生內部程序失敗。
使用安全周邊時不支援的目標
如果您使用 VPC Service Controls 設定安全範圍,系統會封鎖來自 Cloud Tasks 執行的 HTTP 要求,且不支援的目標會失敗並顯示 TARGET_TYPE_NOT_PERMITTED_FOR_VPC 錯誤代碼。詳情請參閱「使用 VPC Service Controls 設定服務範圍」。
資源位置限制
Cloud Tasks 支援限制資源位置,但下列地區有相關限制:
us-central1us-central2(私人 Google Cloud 區域)
如果您在機構政策中指定任一區域,就必須同時加入 us-central1 和 us-central2,即使您未在這兩個區域中建立 Cloud Tasks 資源也一樣。即使貴機構未使用us-central2私人區域,您仍可在機構政策中加入該區域。