天天看點

任務管理入門:如何有效控制大規模裝置一、裝置管理二、為什麼需要任務管理三、任務管理提供能力四、裝置選擇服務五、任務排程服務六、自定義任務服務七、任務管理技術挑戰八、如何使用任務管理

來源 | HaaS技術社群

一、裝置管理

在IoT領域核心的場景之一就是雲和裝置互動。如圖1是一個典型的業務場景

  1. 裝置上報資料到阿裡雲物聯網(IoT)平台,
  2. 然後阿裡雲物聯網(IoT)平台,将上報的資料存儲到DB中,
  3. 當然裝置上報的資料也可以通過AMQP服務同步到使用者的伺服器。
  4. 當使用者管理裝置時,調用開放API将控制指令通過給使用者。

     圖1是個很簡單的業務場景,隻有一個裝置。當裝置規模成倍增加時該如何有效的管理控制這些裝置呢,阿裡雲物聯網(IoT)平台提供了面向大規模裝置管理的任務管理服務解決這些問題。

任務管理入門:如何有效控制大規模裝置一、裝置管理二、為什麼需要任務管理三、任務管理提供能力四、裝置選擇服務五、任務排程服務六、自定義任務服務七、任務管理技術挑戰八、如何使用任務管理

(圖1)

二、為什麼需要任務管理

      可能我們還有些疑惑,裝置數量增加管理控制裝置會有什麼問題,以下已是兩個比較典型的場景。

      場景一,批量控制一批裝置。如圖2所示,需要不斷的輪詢查詢裝置資訊,然後批量的調用阿裡雲物聯網平台提供的開放API,物聯網(IoT)平台服務将消息發送給裝置。第一步輪詢可能中斷,第二步服務調用可能失敗、限流等需要重試,第四步裝置可能不線上消息不能正常觸發裝置。

任務管理入門:如何有效控制大規模裝置一、裝置管理二、為什麼需要任務管理三、任務管理提供能力四、裝置選擇服務五、任務排程服務六、自定義任務服務七、任務管理技術挑戰八、如何使用任務管理

(圖2)

場景二,定時批量控制一批裝置。如圖3所示,對于定時的觸發的場景,需要增加定時器。當時間到時觸發server輪詢查詢裝置資訊,然後調用阿裡雲物聯網平台提供的服務将消息推送給裝置。場景2需要自己實作定時回調的能力,增加業務的複雜度。

任務管理入門:如何有效控制大規模裝置一、裝置管理二、為什麼需要任務管理三、任務管理提供能力四、裝置選擇服務五、任務排程服務六、自定義任務服務七、任務管理技術挑戰八、如何使用任務管理

(圖3)

場景一和場景二,都是比較典型的批量管理控制裝置的場景。實作穩定的批量管理控制裝置場景有一定的成本。阿裡雲物聯網提供的任務管理服務,提供簡單易用的批量控制裝置的服務,簡化批量管理控制裝置流程,降低批量控制裝置的成本。

三、任務管理提供能力

    便捷精準的裝置選擇服務:無需批量的循環查詢裝置,不需要考慮機器重新開機循環中的問題。同時提供多樣的裝置選擇政策,便捷精準的選擇一批目标裝置,進而管理控制這批裝置。

    快速批量的任務排程服務:無需循環調用IoT開放API,不需要考慮容錯、限流的問題。

    友善的自定義任務服務:無需修改産品功能定義,可以自由擴充下發給裝置的資訊内容,避免批量服務調用和屬性設定需要修改産品的功能定義。

    任務管理提供以上3種能力,助力建構大規模運維裝置的場景。解決循環查詢裝置、服務調用容錯、友善搭建業務場景。如下是任務管理整體的架構。

任務管理入門:如何有效控制大規模裝置一、裝置管理二、為什麼需要任務管理三、任務管理提供能力四、裝置選擇服務五、任務排程服務六、自定義任務服務七、任務管理技術挑戰八、如何使用任務管理

(圖4)

四、裝置選擇服務

任務管理入門:如何有效控制大規模裝置一、裝置管理二、為什麼需要任務管理三、任務管理提供能力四、裝置選擇服務五、任務排程服務六、自定義任務服務七、任務管理技術挑戰八、如何使用任務管理

(圖5)

    建立任務時,阿裡雲物聯網平台同步初始化一個關聯的裝置選擇服務。按照建立任務的政策,選擇目标裝置然後将裝置持久化到DB中。

     阿裡雲物聯網平台提供按照産品、分組選擇裝置能力,同時也支援指定的裝置。後續将提供sql方式支援更多的場景友善選擇需要控制的裝置。

五、任務排程服務

任務管理入門:如何有效控制大規模裝置一、裝置管理二、為什麼需要任務管理三、任務管理提供能力四、裝置選擇服務五、任務排程服務六、自定義任務服務七、任務管理技術挑戰八、如何使用任務管理

(圖6)

當任務到了需要執行的時間點, 阿裡雲物聯網平台從DB中擷取出需要執行的任務詳情,并行分發到執行器進行批量執行,同時保障任務完整的執行。

六、自定義任務服務

任務管理入門:如何有效控制大規模裝置一、裝置管理二、為什麼需要任務管理三、任務管理提供能力四、裝置選擇服務五、任務排程服務六、自定義任務服務七、任務管理技術挑戰八、如何使用任務管理

(圖7)

   服務調用和屬性設定沒有裝置執行的任務狀态資訊,滿足不了業務場景,任務管理還提供了自定義任務的能力,可以友善快速的拓展業務場景,如配置下發、軟體更新。

    建立任務時選擇自定義任務,然後上傳裝置執行需要檔案,檔案通過阿裡雲安全掃描後存儲到OSS中,任務排程後,通過自定義任務的通信協定将消息發送給裝置。裝置可以直接從OSS中擷取,任務執行所需要的檔案。

    當裝置不線上時,機器重新開機時可以請求目前可以執行的任務資訊,避免任務的丢失。裝置資源不夠時,也可以拒絕執行任務。任務執行完成後,上報任務的狀态。

    阿裡雲物聯網平台接收裝置上報的任務狀态,實時統計任務的執行狀态。通過加鎖避免裝置并發更新狀态,保證狀态準确性。

七、任務管理技術挑戰

    任務管理的業務模型上并不是很複雜,但是需要保證任務快速穩定的僅執行一次問題就不簡單了。同時任務執行過程中時間、環境并不可控如叢集中機器可能重新開機,任務特性不同這些都給任務管理帶了挑戰。例如:

  • 機器當機叢集釋出,任務執行中斷
  • 任務執行時間長短不一樣,可能會出現饑餓
  • 任務執行優先級不一樣,優先級低的任務不能阻塞優先級高的任務
  • 任務隻需要執行一次
  • 任務排程和任務執行的時間性能有差異
任務管理入門:如何有效控制大規模裝置一、裝置管理二、為什麼需要任務管理三、任務管理提供能力四、裝置選擇服務五、任務排程服務六、自定義任務服務七、任務管理技術挑戰八、如何使用任務管理

(圖8)

任務排程政策

    不同的任務關聯的裝置數量不一緻,導緻任務的執行時間不一樣。對于每個使用者來說任務的執行機會都是相等的,需要避免執行時間長的任務一直被排程,新建立的時間短的任務得不到處理。

  • 任務量較少時按照排程時間升序排列,選擇待執行的任務
  • 當任務持續增多時,任務開始有一定量的積壓,采用任務的響應比排序,選擇待執行的任務。響應比計算方式(任務等待時間+任務執行時間)/(任務執行時間)
  • 采用當任務量一定時采用響應比其實是一個優化,響應比的計算需要時間較久。

任務隔離&異步化

   每種類型的任務自己的特性執行時間不一樣,同時任務種類多了後的任務的重要程度會有所差異。 如圖8所示:

  • 針對不同類型的任務,任務管理叢集master節點擷取需要執行任務時,分為不同的線程池
  • 任務執行時不同類型的任務,采用不同線程池互相隔離避免任務執行時間不一樣互相影響
  • 任務的整個過程如分發、執行采用異步化避免任務執行時間過長,阻塞上遊系統

任務檢測&重試

    叢集的機器業務疊代必不可免的有釋出的需求,同時機器也可能由于某種原因當機,是以針對任務需要檢測其狀态并采用不同的政策進行充實。如圖8所示:

  • 任務執行時,節點上定時上報其上任務的心跳資訊
  • 任務管理叢集的master節點定義檢測有問題的任務,并針對有問題任務的任務重試
  • 不同類型的任務采用不同的重試政策,有些任務直接出發執行,有些任務采用退避重試的政策,并控住重試的最大次數。對于超出重試次數的任務,增加監控告警,及時發現問題并處理
  • 任務的執行需要加鎖,避免任務重複執行

任務并發度控制

    任務排程的成本和時間其實很低,任務排程也很快,但是任務執行确需要一定的時間,兩者一般相差角度。如何避免任務壓垮業務系統也是需要考慮的。

  • 采用任務類型次元、單機次元、使用者次元3個次元進行任務的并發度限制

八、如何使用任務管理

任務管理入門:如何有效控制大規模裝置一、裝置管理二、為什麼需要任務管理三、任務管理提供能力四、裝置選擇服務五、任務排程服務六、自定義任務服務七、任務管理技術挑戰八、如何使用任務管理

(圖9)

如圖9所示,為整個任務管理使用的流程資訊

  1. 前置準備
  • 建立産品和裝置,詳見建立産品。已有産品和裝置,可以忽略此步驟。
  • 對于屬性設定和服務調用類型任務,相關的屬性和服務需提前在産品功能定義中編輯并釋出。

    2.裝置開發

  • 服務定義或者屬性設定類型服務,裝置采用服務調用和屬性設定的topic和阿裡雲物聯網平台通信。
  • 自定義類型服務,裝置采用自定義任務的topic和阿裡雲物聯網平台通信。

3.裝置和相關的功能開發完成後,可以使用任務管理控制裝置

  • 按照業務類型選擇不同類型的任務,并設定相應的參數,具體參考任務管理說明文檔。
  • 任務建立後阿裡雲物聯網平台,會進行排程執行,可以在控制台上檢視任務執行的詳情。
  • 任務執行完成後,可以通過任務重試,重新執行任務中失敗的作業。