全部產品
Search
文件中心

SchedulerX:通過任務優先順序隊列進行應用層級限流

更新時間:Jan 14, 2025

在任務調度過程中,您可以通過兩種策略來實現應用層級的限流:開啟限流並設定適當的隊列大小、配置支援搶佔的優先順序隊列,以確保調度系統的穩定性以及核心任務的及時性。本文將介紹如何有效地管理應用層級的資源和任務優先順序調度。

應用情境

在面對突發峰值任務調度的情境下,系統可能面臨巨大的壓力。例如,當許多天層級的任務被設定在同一時間啟動時,若無有效調控措施,會導致後端業務無法承受這些並發負載,從而引發系統崩潰的風險。為瞭解決這一問題,引入任務調度中的隊列機制,控制整個應用在同一時間內的最大運行任務數。通過逐步分配和調度任務,確保系統資源的合理使用和業務的穩定運行。

配置方式

應用開啟限流並設定隊列大小

  1. 建立和編輯應用分組時,在進階配置中可以開啟流控開關(預設關閉)。建立應用分組具體內容,請參見建立應用分組

    開啟開關後,可以配置任務執行個體並發數(即應用層級的任務隊列)。該隊列表示一個應用最多同時啟動並執行任務執行個體個數,超過並發數的任務執行個體不會丟棄,會在隊列中等待執行。

    image

  2. 在該分組下建立3個任務,分別單擊操作列下的運行一次

    image

  3. 在左側導覽列的執行列表頁面中,選擇任務執行個體列表後,可觀察到第一個觸發的任務hello_jobA在運行中,hello_jobB和hello_jobC在池子中排隊等待。

  4. 等待hello_jobA運行成功後,hello_jobB會進入執行隊列。

配置可搶佔的優先順序隊列

下圖是yarn的優先順序隊列,對不同優先順序的任務做資源隔離。

image

下面將介紹SchedulerX如何通過應用限流與任務優先順序結合的方式,實現可搶佔的任務優先順序隊列。

  1. 任務支援優先順序,同一個應用下,調度時間一樣,優先順序高的任務會優先調度。

    image

  2. 將dts-all.hxm樣本應用開啟限流,並設定任務執行個體並發數為1方便觀察,建立3個高中低優先順序任務。按先後順序先觸發1次中優先順序任務,再觸發1次低優先順序任務,最後觸發1次高優先順序任務。

    image

  3. 在左側導覽列的執行列表頁面中,選擇任務執行個體列表後,可觀察到當中優先順序任務被觸發時,由於隊列中為空白,暫無其他任務,所以中優先順序任務先執行。

  4. 在中優先順序任務完成後,當隊列出現空閑槽位時,高優先順序任務將優先於低優先順序任務進行搶佔式執行。

F&Q

  • 將任務優先順序全部設定為非常高,是不是能保證自己的任務比其他使用者的任務優先調度?

    任務優先順序是應用層級的,只會在該應用下生效,不會影響其他應用。

  • 分鐘層級的任務,可以用隊列限流嗎?

    該功能適合是有突發峰值的情境,如果每分鐘調度量很大,則不適合用該功能,不然會導致隊列越堆越多。可以在用戶端做業務限流或者擴容用戶端來解決。