在任務調度過程中,您可以通過兩種策略來實現應用層級的限流:開啟限流並設定適當的隊列大小、配置支援搶佔的優先順序隊列,以確保調度系統的穩定性以及核心任務的及時性。本文將介紹如何有效地管理應用層級的資源和任務優先順序調度。
應用情境
在面對突發峰值任務調度的情境下,系統可能面臨巨大的壓力。例如,當許多天層級的任務被設定在同一時間啟動時,若無有效調控措施,會導致後端業務無法承受這些並發負載,從而引發系統崩潰的風險。為瞭解決這一問題,引入任務調度中的隊列機制,控制整個應用在同一時間內的最大運行任務數。通過逐步分配和調度任務,確保系統資源的合理使用和業務的穩定運行。
配置方式
應用開啟限流並設定隊列大小
-
建立和編輯應用分組時,在進階配置中可以開啟流控開關(預設關閉)。建立應用分組具體內容,請參見建立應用分組。
開啟開關後,可以配置任務執行個體並發數(即應用層級的任務隊列)。該隊列表示一個應用最多同時啟動並執行任務執行個體個數,超過並發數的任務執行個體不會丟棄,會在隊列中等待執行。
-
在該分組下建立3個任務,分別單擊操作列下的运行一次。
-
在左側導覽列的执行列表頁面中,選擇任務執行個體列表後,可觀察到第一個觸發的任務hello_jobA在運行中,hello_jobB和hello_jobC在池子中排隊等待。
-
等待hello_jobA運行成功後,hello_jobB會進入執行隊列。
此時執行列表中 hello_jobB 狀態變為 運行,hello_jobC 仍處於 池子 狀態。
配置可搶佔的優先順序隊列
以下是 YARN 的優先順序隊列,對不同優先順序的任務做資源隔離。
YARN ResourceManager 的 Application Queues 面板展示了 root、research、default 三個隊列的容量使用方式:root 隊列使用率為 100.0%,research 子隊列使用率為 93.8%,default 子隊列使用率為 101.6%(已超出分配容量),體現了不同優先順序任務的資源隔離與競爭狀態。
下面將介紹SchedulerX如何通過應用限流與任務優先順序結合的方式,實現可搶佔的任務優先順序隊列。
-
任務支援優先順序,同一個應用下,調度時間一樣,優先順序高的任務會優先調度。
在建立任務的基本配置步驟中,優先順序下拉框提供四個選項:低、中、高和非常高。
-
將dts-all.hxm樣本應用開啟限流,並設定任務執行個體並發數為1方便觀察,建立3個高中低優先順序任務。按先後順序先觸發1次中優先順序任務,再觸發1次低優先順序任務,最後觸發1次高優先順序任務。
控制台任務管理頁面的工作清單中顯示三個已建立的任務,優先順序列分別標記為高、中和低,每個任務的操作列均包含運行一次按鈕。
-
在左側導覽列的执行列表頁面中,選擇任務執行個體列表後,可觀察到當中優先順序任務被觸發時,由於隊列中為空白,暫無其他任務,所以中優先順序任務先執行。
此時高優先順序任務和低優先順序任務的狀態均為池子,中優先順序任務的狀態為運行。
-
在中優先順序任務完成後,當隊列出現空閑槽位時,高優先順序任務將優先於低優先順序任務進行搶佔式執行。
此時在工作清單中,中優先順序任務狀態為成功,高優先順序任務狀態為運行,低優先順序任務仍處於池子狀態等待調度。
F&Q
-
將任務優先順序全部設定為非常高,是不是能保證自己的任務比其他使用者的任務優先調度?
任務優先順序是應用層級的,只會在該應用下生效,不會影響其他應用。
-
分鐘層級的任務,可以用隊列限流嗎?
該功能適合是有突發峰值的情境,如果每分鐘調度量很大,則不適合用該功能,不然會導致隊列越堆越多。可以在用戶端做業務限流或者擴容用戶端來解決。