裝置管理
在IoT領域核心的場景之一就是雲和裝置互動。如圖1是一個典型的
業務場景,
- 裝置上報資料到阿裡雲物聯網(IoT)平台,
- 然後阿裡雲物聯網(IoT)平台,将上報的資料存儲到DB中,
- 當然裝置上報的資料也可以通過AMQP服務同步到使用者的伺服器。
- 當使用者管理裝置時,調用開放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所示,為整個任務管理使用的流程資訊
- 前置準備
- 建立産品和裝置,詳見 建立産品 。 已有産品和裝置,可以忽略此步驟。
- 對于屬性設定和服務調用類型任務,相關的屬性和服務需提前在産品功能定義中編輯并釋出。
- 裝置開發
- 服務定義或者屬性設定類型服務,裝置采用服務 調用和屬性設定的topic 和阿裡雲物聯網平台通信。
- 自定義類型服務,裝置采用 自定義任務的topic
- 裝置和相關的功能開發完成後,可以使用任務管理控制裝置
- 按照業務類型選擇不同類型的任務,并設定相應的參數,具體參考 任務管理說明文檔 。
- 任務建立後阿裡雲物聯網平台,會進行排程執行,可以在控制台上檢視任務執行的詳情。
- 任務執行完成後,可以通過任務重試,重新執行任務中失敗的作業。