當您對函數發起非同步呼叫時,相關請求會被持久化儲存到Function Compute內部隊列中,然後被可靠地處理。如果您想追蹤並儲存非同步呼叫各個階段的狀態,實現更豐富的任務控制和可觀測能力,可以選擇開啟任務模式處理非同步請求。本文介紹非同步任務的背景資訊、使用限制和常用功能。
背景資訊
開啟非同步任務後,您可以實現以下功能:
每次函數調用將詳細記錄調用過程中的狀態轉換資訊,例如調用輸入、執行結果和錯誤資訊等。
擁有調用級的控制能力,可以主動終止調用等。
非同步任務會儲存狀態資訊,因此,函數的調用和執行會有一定的額外延遲,該延遲不會產生額外的費用。關於Function Compute計費的詳細資料,請參見計費概述。
使用限制
情境限制
非同步任務雖然功能更豐富,但相應的系統開銷更大。以下情境建議您關閉任務模式:
您對請求處理鏈路延時非常敏感,需要平均延時在百毫秒以下。
您需要每秒數千甚至更高的速率發起非同步呼叫。
地區限制
非同步任務支援華東1(杭州)、華東2(上海)、華北1(青島)、華北2(北京)、華北3(張家口)、華南1(深圳)、西南1(成都)、中國香港、新加坡、英國(倫敦)、美國(矽谷)、美國(維吉尼亞)、德國(法蘭克福)、馬來西亞(吉隆坡)、印尼(雅加達)、泰國(曼穀)、日本(東京)和韓國(首爾)地區。
時效限制
僅支援查詢7天內的任務狀態資訊。
功能對比
如果您要自行構建非同步任務處理平台,或者實現簡單的定時類任務,可以使用Kubernetes的Jobs功能來實現。以下是Function Compute非同步任務和Kubernetes的Jobs功能對比。
對比項 | Function Compute非同步任務 | Kubernetes的Jobs功能 |
適用情境 | 適用於任務執行時間長度數十毫秒的即時任務和任務執行時間長度數十小時的離線任務。 | 適用於任務提交速度要求不高,任務負載比較固定,任務即時性要求不高的離線任務。 |
任務可觀測能力 | 支援。提供日誌、任務排隊數等指標和任務鏈路耗時、任務狀態查詢等豐富的可觀測能力。 | 需自行整合開源軟體來實現。 |
任務執行個體自動擴縮容 | 支援。根據任務排隊數和執行個體資源使用率自動擴縮容。 | 需通過任務隊列自行實現擴縮容和執行個體負載平衡,複雜度較高。 |
任務執行個體伸縮速度 | 毫秒級。 | 分鐘級。 |
任務執行個體資源使用率 | 使用者只需要選擇合適的執行個體規格,執行個體自動調整,按實際處理任務的時間長度計量,資源使用率高。 | 需在Jobs提交時確定執行個體的規格和數目。執行個體難以自動調整和負載平衡,資源使用率低。 |
任務提交速度 | 單個使用者支援每秒提交數萬條任務。 | 整個叢集每秒最多啟動數百條Jobs。 |
任務定時或延時提交 | 支援。 | 支援任務定時提交,不支援任務延時提交。 |
任務去重 | 支援。 | 不支援。 |
終止指定任務 | 支援。 | 有限支援。通過終止任務執行個體間接實現。 |
任務流控 | 支援。可在使用者或任務處理函數等不同粒度進行流控。 | 不支援。 |
任務結果自動回調 | 支援。 | 不支援。 |
開發營運成本 | 只需要實現任務的處理邏輯。 | 需維護K8s叢集。 |
常見功能
非同步任務的常見功能如下所示: