孫友林
(金朋物聯網技術研究院(廣州)有限公司,廣東 廣州 511400)
物聯網云平臺主要為了滿足物聯網產品的云端接入服務、后臺管理、APP 接口等方面的需求[1-4],云平臺建設必須滿足以下3 個方面的要求:
(1)平臺伸縮性強,即能夠滿足前期的小規模部署,也能方便應對后期用戶的規模化增長的需求;
(2)平臺的數據結構必須高度抽象,不能過多陷于具體某一款產品的定義和功能開發中;
(3)云平臺的代碼應該應用目前主流的通用方法進行開發,便于開發人員的招聘以及項目的維護管理。
基于以上要求,同時考慮到系統的通用性、擴展性、高可用性等方面,系統必須采用分布式、節點多活的部署方式,將相關業務模塊進行充分拆分,然后再對各個服務進行集群部署,以確保服務的高可用性。
整個系統選用MQTT 作為物聯網通信協議標準,云平臺架構如圖1所示。整個云平臺需要提供對各類設備的接入和消息收發服務,除此之外還需要提供對APP 以及設備端的REST 服務。消息服務器將只作為一個通道的功能存在,不進行業務邏輯的處理,MQTT 可以直接傳輸二進制數據,相對于XMPP 協議的XML,效率更高,更輕量化。所有暴露的接口和通道綁定域名地址,系統之間的數據交互跟IP地址解耦。搭建WebService 服務,開放統一的數據接口給APP/Web 客戶端使用,管理人員在Web 控制臺可以對設備進行管理。物聯網平臺的建立需要經過一個設備量的增長過程,在平臺建設初期,要充分考慮后期的系統擴容[5-7]。云平臺的任意節點均可以實現快速集群,系統可以根據業務發展情況,通過調整平臺的集群部署結構,快速實現系統擴容。

圖1 MQTT 物聯網云服務系統架構
硬件設備需要在云端注冊后,才能夠正常使用,設備接入注冊流程如圖2所示。注冊時,需要給云端提供ProductKey和Passcode,云端根據ProductKey 和Passcode 以及隨機數生成 Did 后返回給設備,設備收到后保存到FLASH 中,除非設備被Reset,否則一直使用此Did。同時,設備在注冊時也要提供給服務器一個類似MAC 的值,這個可以是MAC 地址,也可以是設備序列號,但必須是用戶在設備外面可以直接見到的唯一標識,用來給用戶綁定設備。開發者在云上新建一個產品時,會得到一個ProductKey。設備在初始化后,自身的嵌入式程序隨機產生 Passcode,用于云端注冊和APP 綁定的安全鑒權;用戶想通過手機控制設備前,必須先與該設備綁定。綁定的過程其實就是獲取設備的Did和Passcode的過程,需要有接觸設備權限的用戶才能獲取設備的Passcode。當用戶按下設備的某個按鈕后,設備會在短時間內處于可被配對狀態,這時用戶可以通過手機獲取到設備的Did 和Passcode,手機會把用戶與設備的綁定信息同步到云端。

圖2 新設備接入注冊流程
設備接入云并開始正常運行之后,各種傳感器的實時數據會根據業務設定,定期上報數據。上報的數據通過MQTT推送到APP 給用戶,同時云端也會對消息進行存儲。設備上報消息流程如圖3所示。

圖3 設備上報消息流程
用戶需要注冊之后才能使用云平臺提供的服務,因為云平臺需要對設備進行各種綁定,所以即使用戶是通過第三方帳號注冊的,也需要創建對應的帳號。新用戶注冊賬號流程如圖4所示。

圖4 新用戶注冊賬號流程
用戶發送的指令成功到達設備之后,設備的狀態將被更改。設備狀態被更改后會觸發設備上報運行數據的消息,把設備的新數據推送到APP 和服務器。APP 控制設備流程如圖5所示。

圖5 APP 控制設備流程
在本文設計框架中,DB、MQTT 服務器、MQTT Client、Webservice、Spring MVC 等模塊是相對獨立的,可以很輕易地部署在不同的服務器上而不需要做太多的改動。在系統建設初期,可以安排兩臺服務器,一臺服務器作為MQTT 服務器,另外一臺服務器則把DB 和業務邏輯處理的部分部署上去。根據Emqttd 官方的測試,一臺i3 CPU 配4 GB 內存的服務器就可以支持十萬級別數量的并發[8-10]。后期可以根據實際需求,進行靈活擴展。
物聯網系統的安全性是至關重要的,如果系統被人入侵,后果不堪設想。基于此,系統的安全設計要求如下:(1)全站實現HTTPS 通信;(2)MQTT 實現賬號認證和非對稱加密雙重安全機制;(3)物聯網云平臺,除暴露必要的端口外,其他全部內網運行,內網運行也需要通過防火墻實現嚴格的審核機制;(4)所有的數據庫,MongoDB、Redis 等均開啟指定IP 登錄,限制非法登錄來源;(5)所有密碼均采用Hash+Salt 的方式進行存儲,避免數據庫暴露后賬號被撞庫;(6)所有對外的Rest 接口,開啟防刷功能,針對同一個API接口,對同一認證賬號,限制每秒訪問次數;(7)對APP端的接口采用Token 驗證機制,所有Token 均有時效性,在超過之前,APP 端應該主動更新Token,否則用戶將需要重新登錄驗證;(8)在MQTT 側,對所有的客戶端開啟ACL鑒權,后臺開啟監控,可隨時取消非法設備的MQTT 權限;(9)所有的MQTT 報文、Rest 接口請求,均寫入日志或者數據庫中,以備審計查詢。
新浪微博、QQ、微信、百度等各大社交網站平臺都開放了第三方登錄的API,申請通過之后,客戶可以利用他們的帳號體系比較方便地注冊和登錄。注冊登錄具體流程如圖6所示。

圖6 第三方賬號登錄注冊流程
物聯網云平臺的Client 端有兩大類:一類是各種硬件設備,另一類是使用這些硬件設備的人。對于設備級別的帳號,可以通過新設備注冊流程來實現。對于人這個級別的用戶,又可以分為設備的直接使用者、設備的開發者以及物聯網云系統的管理者和超級管理員等各種類型的用戶,這些用戶可以使用各種手機APP、電腦瀏覽器等與物聯網云平臺交互。這種類型的用戶應支持直接注冊或者第三方帳號登錄注冊等方式。
本文構建了一個基于MQTT 協議的物聯網云平臺,對云平臺的基礎框架及基礎能力進行了設計及實現,云平臺已經在智能家居、智慧路燈等系統中得到了應用。物聯網平臺為設備提供安全可靠的連接通信能力,向下連接海量設備,支撐設備數據采集上云;向上提供云端API,指令數據通過API 調用下發至設備端,實現遠程控制。未來,物聯網平臺還要提供其他增值能力,如規則引擎、數據分析、邊緣計算等,為各類IoT 場景和行業開發者賦能。