雲計算

任務管理入門:如何有效控制大規模設備

來源 | HaaS技術社區

一、設備管理

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

  1. 設備上報數據到阿里雲物聯網(IoT)平臺,

  2. 然後阿里雲物聯網(IoT)平臺,將上報的數據存儲到DB中,

  3. 當然設備上報的數據也可以通過AMQP服務同步到用戶的服務器。

  4. 當用戶管理設備時,調用開放API將控制指令通過給用戶。

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

image.png

(圖1)

二、為什麼需要任務管理

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

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

image.png

(圖2)

場景二,定時批量控制一批設備。如圖3所示,對於定時的觸發的場景,需要增加定時器。當時間到時觸發server輪詢查詢設備信息,然後調用阿里雲物聯網平臺提供的服務將消息推送給設備。場景2需要自己實現定時回調的能力,增加業務的複雜度。

image.png

(圖3)

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

三、任務管理提供能力

    便捷精準的設備選擇服務:無需批量的循環查詢設備,不需要考慮機器重啟循環中的問題。同時提供多樣的設備選擇策略,便捷精準的選擇一批目標設備,從而管理控制這批設備。

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

    方便的自定義任務服務:無需修改產品功能定義,可以自由擴展下發給設備的信息內容,避免批量服務調用和屬性設置需要修改產品的功能定義。

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

image.png

(圖4)

四、設備選擇服務

image.png

(圖5)

    創建任務時,阿里雲物聯網平臺同步初始化一個關聯的設備選擇服務。按照創建任務的策略,選擇目標設備然後將設備持久化到DB中。

     阿里雲物聯網平臺提供按照產品、分組選擇設備能力,同時也支持指定的設備。後續將提供sql方式支持更多的場景方便選擇需要控制的設備。

五、任務調度服務

image.png

(圖6)

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

六、自定義任務服務

image.png

(圖7)

   服務調用和屬性設置沒有設備執行的任務狀態信息,滿足不了業務場景,任務管理還提供了自定義任務的能力,可以方便快速的拓展業務場景,如配置下發、軟件升級。

    創建任務時選擇自定義任務,然後上傳設備執行需要文件,文件通過阿里雲安全掃描後存儲到OSS中,任務調度後,通過自定義任務的通信協議將消息發送給設備。設備可以直接從OSS中獲取,任務執行所需要的文件。

    當設備不在線時,機器重啟時可以請求當前可以執行的任務信息,避免任務的丟失。設備資源不夠時,也可以拒絕執行任務。任務執行完成後,上報任務的狀態。

    阿里雲物聯網平臺接收設備上報的任務狀態,實時統計任務的執行狀態。通過加鎖避免設備併發更新狀態,保證狀態準確性

七、任務管理技術挑戰

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

  • 機器宕機集群發佈,任務執行中斷

  • 任務執行時間長短不一樣,可能會出現飢餓

  • 任務執行優先級不一樣,優先級低的任務不能阻塞優先級高的任務

  • 任務只需要執行一次

  • 任務調度和任務執行的時間性能有差異

image.png

(圖8)

任務調度策略

    不同的任務關聯的設備數量不一致,導致任務的執行時間不一樣。對於每個用戶來說任務的執行機會都是相等的,需要避免執行時間長的任務一直被調度,新創建的時間短的任務得不到處理。

  • 任務量較少時按照調度時間升序排列,選擇待執行的任務

  • 當任務持續增多時,任務開始有一定量的積壓,採用任務的響應比排序,選擇待執行的任務。響應比計算方式(任務等待時間+任務執行時間)/(任務執行時間)

  • 採用當任務量一定時採用響應比其實是一個優化,響應比的計算需要時間較久。

任務隔離&異步化

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

  • 針對不同類型的任務,任務管理集群master節點獲取需要執行任務時,分為不同的線程池

  • 任務執行時不同類型的任務,採用不同線程池相互隔離避免任務執行時間不一樣相互影響

  • 任務的整個過程如分發、執行採用異步化避免任務執行時間過長,阻塞上游系統

     

任務檢測&重試

    集群的機器業務迭代必不可免的有發佈的需求,同時機器也可能由於某種原因宕機,因此針對任務需要檢測其狀態並採用不同的策略進行充實。如圖8所示:

  • 任務執行時,節點上定時上報其上任務的心跳信息

  • 任務管理集群的master節點定義檢測有問題的任務,並針對有問題任務的任務重試

  • 不同類型的任務採用不同的重試策略,有些任務直接出發執行,有些任務採用退避重試的策略,並控住重試的最大次數。對於超出重試次數的任務,增加監控告警,及時發現問題並處理

  • 任務的執行需要加鎖,避免任務重複執行

任務併發度控制

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

  • 採用任務類型維度、單機維度、用戶維度3個維度進行任務的併發度限制

八、如何使用任務管理

image.png

(圖9)

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

  1. 前置準備

  • 創建產品和設備,詳見創建產品。已有產品和設備,可以忽略此步驟。
  • 對於屬性設置和服務調用類型任務,相關的屬性和服務需提前在產品功能定義中編輯併發布。

    2.設備開發

  • 服務定義或者屬性設置類型服務,設備採用服務調用和屬性設置的topic和阿里雲物聯網平臺通信。

  • 自定義類型服務,設備採用自定義任務的topic和阿里雲物聯網平臺通信。

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

  • 按照業務類型選擇不同類型的任務,並設置相應的參數,具體參考任務管理說明文檔

  • 任務創建後阿里雲物聯網平臺,會進行調度執行,可以在控制檯上查看任務執行的詳情。

  • 任務執行完成後,可以通過任務重試,重新執行任務中失敗的作業。

Leave a Reply

Your email address will not be published. Required fields are marked *