天天看點

如何使用 AutoPilot 對作業自動調優?

作者 | 呂文龍(龍三),阿裡巴巴進階技術專家

摘要:本文由阿裡巴巴進階技術專家呂文龍(龍三)分享,主要介紹如何使用 AutoPilot 對作業自動調優。内容将通過以下四個部分來介紹:

  1. AutoPilot簡介
  2. AutoPilot實操示範
  3. 如何選擇AutoPilot政策
  4. AutoPilot使用注意事項

一、AutoPilot簡介

1.AutoPilot解決的難題

AutoPilot的主要目标是解決 Flink 作業開發和運維的兩大難題。

  • 第一、作業調優難,開發和運維成本高的問題。

Flink作業通常需要很長時間運作,資料和作業的流量也會随着時間不斷變化,是以作業資源也會随着時間不斷變化。通常,我們需要随着時間變化對作業不斷調優,才能保證作業長時間穩定運作。

Flink SQL的引入大大簡化了作業的開發的難度,但是加大了作業的調優的難度。因為SQL的使用者通常對底層的具體實作不了解,這就導緻作業的調優難度會變大。

如何使用 AutoPilot 對作業自動調優?
  • 第二、作業資源使用率低、執行資源成本高的問題。

造成這個問題的原因是因為作業在沒有動态資源優化的時候,通常都需要以最高峰時期的資源需求進行配置,在長時間運作中,非高峰時期的資源使用率就會比較低,這就會導緻作業運作的成本偏高。

總體來說AutoPilot的目标是希望通過自動化的、自适應的資源調優來降低 Flink 的使用的門檻,同時降低 Flink 的使用的成本。

2.AutoPilot的系統架構

AutoPilot屬于 Flink 管控服務的一部分,主要包括異常檢測跟異常解決兩個部分。AutoPilot異常檢測主要通過實時訂閱 Flink 作業的事件資訊進行統計分析,識别因為資源問題導緻的異常狀态。當出現異常時,會觸發資源自動調優來解決。AutoPilot異常解決主要通過動态更新作業資源配置的參數來實作的。作業配置參數更新後,管控服務的另外一個服務,也就是APP Manager就會自動重新開機 Flink 的作業,來實作最新的配置上限,進而實作作業配置的更新。

如何使用 AutoPilot 對作業自動調優?

目前AutoPilot主要支援三個功能:

  • 根據作業的實際負載動态調整作業的并發度,同時對應的調整TM的個數,這樣就可以保證作業的資源随着流量的變化而變化,實作動态的調整;
  • 根據TM的記憶體使用率,動态調整TM的資源,這樣可以保證單個TM記憶體的資源處于一個合理的狀态;
  • 自動識别作業因為資源問題導緻的異常,動态調整TM的資源,保證作業處于一個穩定的狀态。

二、AutoPilot實操示範

1.如何為作業配置AutoPilot

AutoPilot支援為每個作業獨立配置,可以動态更新AutoPilot的配置,不影響作業的正常運作。

■ AutoPilot提供了三種模式:

  • 預設的Disabled模式:即AutoPilot不會進行作業狀态的監控;
  • Active模式:AutoPilot啟動作業狀态監控,并再必要的時候自動更新作業參數配置;
  • Monitoring模式: 啟動作業狀态監控,在識别到作業異常時,提供配置更建立議,但是需要使用者确認,手動觸發更新作業配置。

■ AutoPilot提供了五種政策:

  • Cpu-based政策:主要基于TM的CPU實際使用率來動态調整并發度,這是一個典型的彈性計算伸縮政策。當CPU使用率高的時候,說明作業比較繁忙,這時候AutoPilot就會擴大作業的并發度,來減少單個TM的負載。當CPU使用率低的時候,說明 TM比較空閑,這時候就可以反過來減少作業的并發度,來釋放多餘的資源;
  • Source-delay-based政策:主要根據source的delay metrics來判斷是否需要進行并發度調整。這個政策目前隻支援sls和datahub兩種source。正在社群推進metrics标準化即FLIP-33,完成以後,這個政策會支援更多的 source;
  • Slot-utilization-based政策:主要根據task的slot使用率判斷是否需要調小并發度。和CPU的使用率不同的而是,如果task裡有io wait或者sleep的邏輯也會被計算在内,使用率的計算會更加準确。但這個政策依賴對source節點的使用率的統計,會依賴FLIP-27,是以也需要等到FLIP-27完全完成後才能實際生效;
  • Memory-utilization-based政策:主要基于TM實際記憶體的使用率以及GC metrics資訊來判斷是否需要調整 TM記憶體大小。當TM整體記憶體使用率低,而且沒有GC嚴重的時候,可以調整記憶體的大小;當TM記憶體使用率已經偏高,或者說GC嚴重的時候,可以調大單個TM的記憶體,來保證上面跑的task處于比較健康的狀态;
  • Job-exception-based政策:主要是自動識别因為資源異常所産生的作業的異常。當識别到這種異常的時候,AutoPilot會自動調大單個TM記憶體的大小來解決這種資源的異常,保證作業處于穩定的狀态。
如何使用 AutoPilot 對作業自動調優?

■ AutoPilot的冷卻時間

當AutoPilot處于Active或者Monitoring狀态時,需要配置 AutoPilot的冷卻時間。冷卻時間是指兩次rescale的最小時間間隔。因為AutoPilot觸發的時候,作業需要重新開機,重新開機過程中需要進行作業狀态的初始化以及預熱,是以需要把這段時間排除掉,才能避免AutoPilot的政策做出錯誤判斷。通常來說state越大,作業的初始化和預熱的時間會越長,是以這時候冷卻時間通常也要配的大一點才能保證AutoPilot正常的運作。

■ AutoPilot自定義參數

可以通過自定義的參數來個性化的控制AutoPilot的政策行為,以适配一些特殊的作業的要求。比如IO操作特别多的作業,如果開啟了cpu-based,就需要把 cpu-based觸發的門檻值調低,這樣才能适配作業實際cpu使用場景。

■ 實操示範

針對這個提前建立好的作業,當需要對它做AutoPilot配置時,需要在作業詳情頁面上選擇AutoPilot的tab頁。預設狀況AutoPilot是不會啟動的,當需要啟動的時候,需要在tab頁上把AutoPilot的模式從disable轉換成 Active或者Monitoring。

如何使用 AutoPilot 對作業自動調優?

選擇好模式後,需要選擇所需的政策以及冷卻的時間,自定義配置位置填上自定義的參數。然後儲存,這樣就可以開啟AutoPilot, 對這個作業狀态的進行監控以及資源的自動調優。

如何使用 AutoPilot 對作業自動調優?

當需要關閉一個作業的AutoPilot的時候,同樣也隻需在配置頁面,把模式切換成disable并儲存就可以了,這樣AutoPilot的狀态又回到了未啟動。無論怎樣操作AutoPilot都不會影響作業的正常運作。

2.如何檢視AutoPilot運作狀态

當AutoPilot啟動的時候,可以在自動調優的狀态頁面檢視目前AutoPilot運作的狀态。狀态資訊主要包含兩部分:

  • 第一是最新推薦的作業配置。當AutoPilot處于Monitoring狀态下面,如果有新的配置推薦産生,就會在這個頁面進行展示。同時可以手動在這個頁面觸發配置的更新。
  • 第二是看到每個AutoPilot啟動政策所監控到的作業的狀态資訊。這些狀态資訊一方面可以解釋目前AutoPilot為什麼要進行配置的更新,同時也可以用根據一些狀态資訊來輔助進行手動作業的調優或者代碼的優化。
如何使用 AutoPilot 對作業自動調優?

3.如何檢視AutoPilot曆史資訊

AutoPilot在運作過程中,一旦對作業的配置進行了修改,這些修改都會被作為事件儲存下來,讓使用者可以在後期進行AutoPilot行為的review,以及作業流量的分析。事件資訊的檢視,可以在“運作事件”裡,将AutoPilot類型的事件過濾出來并進行檢視。

如何使用 AutoPilot 對作業自動調優?

三、如何選擇AutoPilot政策

1.一般場景作業

推薦大家使用預設參數,也就是cpu-based + memory-utilization-based + job-exception-base的組合政策。在這個預設政策下面,當TM的CPU使用率長期比較高的的時候就會觸發并發度的調整;TM的記憶體的使用率偏高或者偏低的時候,就會觸發單個TM的記憶體調整;當作業出現資源相關的異常的時候,也會及時的觸發TM資源的調整。整個配置跟常見的彈性計算的自動調優配置是基本保持一樣的,是以比較簡單易懂。

2.高優先級、延遲敏感的作業

推薦不要開啟AutoPilot的Active模式,而是使用Monitoring模式。因為這種類型的作業一旦觸發AutoPilot的調優,就會導緻作業重新開機,可能會影響業務效果。通過Monitoring模式,可以人工的定時的去review,檢查是否有需要優化的配置,可以在适當的時機進行手動更新。

3.使用sls或者datahub的作業

推薦使用source-delay-based + slot-utilization-based + memory-utilization-based + job-exception-based 政策。這樣對作業并發度的調優效果會更好,整個算法的收斂的速度會更快。

如何使用 AutoPilot 對作業自動調優?

四、AutoPilot使用注意事項

如何使用 AutoPilot 對作業自動調優?

■ 首先,AutoPilot修改并發度是通過預設的并發度來實作的,是以作業代碼中不能顯示設定并發度,否則就無法實作動态調節。

■ 其次,AutoPilot觸發更新以後,控制台會自動重新開機作業,這會導緻作業短暫的停止處理資料,對于抖動敏感的作業推薦使用Monitoring模式,避免對業務産生影響。

■ 第三,是AutoPilot政策對作業的資料模型有一定假設:

  • 作業的流量需要是流量平滑變化的,不能有資料傾斜,這樣可以根據目前時間之前一小段時間作業的運作統計資料來預估作業所需資源;
  • 作業的資料不能有資料傾斜,每個算子的吞吐能力會随着并發度線性擴充,這樣才可以根據目前作業的吞吐能力去預估并發度調整後作業的吞吐能力,進而決定作業需要調整多少并發度;

當作業的pattern嚴重偏離這幾個假設時,可能會存在作業異常, AutoPilot沒有觸發自動調整,或者說AutoPilot觸發了自動的調整,但是算法可能會出現無法收斂,這時作業會持續的處于異常狀态,并且不斷的重新開機等等。此時需要關閉AutoPilot,進行手動的作業調優,才能保證作業處于健康的狀态。