天天看點

任務管理輕松實作大規模裝置管理控制裝置管理為什麼需要任務管理任務管理提供能力任務管理技術挑戰如何使用任務管理

裝置管理

在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. 建立産品和裝置,詳見 建立産品 。 已有産品和裝置,可以忽略此步驟。
  3. 對于屬性設定和服務調用類型任務,相關的屬性和服務需提前在産品功能定義中編輯并釋出。
  4. 裝置開發
  5. 服務定義或者屬性設定類型服務,裝置采用服務 調用和屬性設定的topic 和阿裡雲物聯網平台通信。
  6. 自定義類型服務,裝置采用 自定義任務的topic
  7. 裝置和相關的功能開發完成後,可以使用任務管理控制裝置
  8. 按照業務類型選擇不同類型的任務,并設定相應的參數,具體參考 任務管理說明文檔
  9. 任務建立後阿裡雲物聯網平台,會進行排程執行,可以在控制台上檢視任務執行的詳情。
  10. 任務執行完成後,可以通過任務重試,重新執行任務中失敗的作業。