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