文/何錚 朱迪
為滿足企業級大并發需求場景,該系統的設計需要實現以下目標:
(1)內容分發:從傳統的拷貝模式,或者互聯網自動下載模式改變成物聯網指令模式。
(2)物聯網化:前端設備支持最新的物聯網設備如電子墨水屏。同時也可以將傳統前端顯示設備物聯網化,統一的在物聯網平臺上進行管理。如:傳統電視屏幕、智能電視屏幕、LED屏幕、拼接屏。
(3)智能化:加入AI的接口能力,可以將電子標牌的顯示和場景進行互動,除傳統的定時下發和手動下發以外,擴展出語音分析發下指令,人臉識別后下發指令等。
(4)高并發需求:需要支持十萬級別的前端支持。
(5)同步能力:高并發情況下,低延遲同步播放視頻。
(6)可兼容新型內容的播放:除去傳統的圖片和視頻,支持HTML5,以及一些內容輸出平臺的內容比如:易企秀、WPS H5格式等。
該系統需要需要分離出三層結構來設計完成:
內容分發層設計用于大并發內容分發(按照設計要求是十萬級別),采用一種發布/訂閱傳輸協議。
提供一對多的消息發布,可以解除應用程序耦合,信息冗余小。該協議需要客戶端和服務端,而協議中主要有三種身份:發布者(Publisher)、代理(Broker,服務器)、訂閱者(Subscriber)。其中,消息的發布者和訂閱者都是客戶端,消息代理是服務器,而消息發布者可以同時是訂閱者,實現了生產者與消費者的脫耦。使用 TCP/IP 提供網絡連接,提供有序、無損、雙向連接;設備聯網,也需要連接到互聯網中,應用MQTT在 TCP 的上層,指定了如何組織數據字節并通過 TCP/IP 網絡傳輸它們,提高了可靠性。
對負載內容屏蔽的消息傳輸;可以對消息訂閱者所接受到的內容有所屏蔽。
該層的設計是對前端不同的顯示設備進行內容適配,每一種顯示將提供一個適配程序,這個適配程序將告訴分發程序那些類型和格式的內容可以下發到對應前端設備上,比如前端設備為電子墨水屏的時候將無法發送視頻和音頻內容,只能發送文字、簡單圖片(32位,雙色)信息,如果前端設備為Android系統(如智能電視機),那可以發送圖片、文字、音頻、視頻和HTML5頁面。這樣就可以兼容不同的前端顯示設備,并且未來可以進行擴展。
物聯網層只負責物聯網絡(IoT)的建立、連接和通信。這層設計對上面兩層進行隔離和透明,它需要實現以下功能。
2.3.1 快速發現和組網
模塊(前端物聯網設備)和網關之間是主從的星型網絡拓撲結構,使用者先將網關設置信道和組編號,并開啟自組網功能,然后在模塊上按照設置的變化進行撥片分組,便可是網內模塊快速發現和組網。
模塊在自組網模式下,主機模塊會自動選擇周圍沒有被使用的物理信道和調制參數形成一個獨立的網絡,并能自動分配一個唯一的本地網絡地址給從機模塊,從機模塊使用時在使能了自組網功能后就不需要進行任何的配置操作,從機模塊在加入網絡后就能跟主機進行通訊。
2.3.2 快速發送信息
消息快速發送,小型傳輸,開銷小,固定長度的頭部是2字節,協議交換最小化,以降低網絡流量;整體上協議可拆分為:固定頭部+可變頭部+消息體。
2.3.3 轉發和重發
消息超時后,自動由網關判斷是否通過轉發還是重發進行消息的傳輸,當網關在其他設備中獲取到了這次的消息體,這可以通過調用這個設備的轉發程序,將消息再次送往目的地設備,如果全網沒有發現這個消息體,那么可以調用網關的重發機制進行整體消息重發。
2.3.4 安全加密
每個消息體會和前端設備的一個唯一硬件碼進行加密,采用AES[AES]算法對采集數據進行加密。
前端設備:根據其資源受限情況,使用適合的輕量級密碼加密算法對通信鏈路進行保護,小型設備采集的數據采用對應算法加密后發送到業務網關進行數據匯總。
業務網關:負責解密各小型設備采集數據的密文,根據管理小型設備使用的輕量級密碼類型,可能需要配置不同的輕量級密碼對應的解密功能。為對采集數據在業務處理過程進行保護,業務網關需要將數據使用臺式機/服務器環境下的數據加密算法進行保護,建議使用對稱加密算法+公鑰加密算法結合的方式進行處理。
2.3.5 高并發機制
設計目標是十萬級的前端設備,因此網關要能夠支撐十萬級連接的24小時運行,由于內容分發的頻率較低,所以物聯網前端和網關通信不需要保持長連接或者快速同步,在設計上需要將前端和網關的主從關系打亂,利用轉發機制。可以讓前端設備獨立運行,在沒有網關的情況下,可以將其他前端設備當成網關,接受指令后恢復客戶端狀態。這樣有效的節約了網關的開銷,同時可以支持更高的并發。
LoRa是Semtech公司創建的低功耗局域網無線標準,最大特點是在同樣的功耗條件下比其他無線方式傳播的距離更遠,實現了低功耗和遠距離的統一,它在同樣的功耗下比傳統的無線射頻通信距離擴大3-5倍。
電子墨水屏,是一種革新信息顯示的新方法和技術。像多數傳統墨水一樣,電子墨水和改變它顏色的線路可以打印到多種材質表面。和傳統紙差異是電子墨水在通電時改變顏色,并可顯示變化的圖象。
對于電視屏幕、拼接屏、投影等傳統設備,需要添加一個Android主機作為前端設備,該設備需要能夠有HDMI和VGA輸出,并且支持POE供電,體積小,方便安裝在電視機等顯示設備的背面。
MQTT(Message Queue Telemetry Transport),遙測傳輸協議,主要提供訂閱/發布模式,屬于物聯網的一個傳輸協議。由于其開放、簡單、輕量、易于實現,適用于受限環境(帶寬低、網絡延遲高、網絡通信不穩定)。
將需要下發的內容材料上傳到內容分發服務器中,包括圖片、視頻、音頻等。然后選擇需要下發的目的地群組,以及下發的時間和播放的時間。
經過檢查后內容準備在消息隊列當中,然后設置消息傳輸模式為“至多一次”(Qos==0),然后發布下發指令,消息包通過LoRa協議被訂閱的前端設備獲取,此時當前端設備獲取到信息后立即回傳一個單字節的確認信息給網關。網關在5s時間內會檢查一次是否所有的前端設備都收到了下發指令,如果沒有則重發3次。3次過后及超時,超時后是否繼續需要用戶自行確認,如果繼續將拋棄之前沒有響應的前端設備(如設備損壞,斷電等情況)。
下發校驗完成后,需要直接發送第二條指令,設置消息傳輸模式為“至少一次”(Qos==1),這條指令將直接發送給已經校驗完成的前端設備,前端設備獲取到這條指令后將通過AES算法進行解密,解密過程中需要帶上自己的硬件設備ID,解密后獲取內容的實際地址,后通過TCP/IP協議獲取內容圖片,視頻,音頻等內容。在這個環節有需要做本地緩存(Cache),首選存放在前端設備的存儲中,由于存儲完成的時間不一致,需要在存儲完成之后回調一個程序,通知網關準備就緒。
在網關接收到全部準備就緒的信號后,需要下發第三條指令,設置消息傳輸模式為“至少一次”(Qos==1),指令發送后,所有前端設備進入播放預備狀態,界面顯示預備中,每個預備完成設備將發送給網關信息,并且不斷心跳獲取最終播放指令,網關不斷等待所有播放前端的預備信息,在所有設備預備就緒后,網關發送播放指令。如果在這個階段有前端設備沒有回傳預備狀態信號,則等待10秒,如果依然沒有回傳,則拋棄此設備直接進行播放。