深度剖析物聯網服務結構如何構建
講到物聯網,大多數人還是不太清楚物聯網具體是什么、運作模式什么樣、作用如何。而本文中,筆者就從物聯網的三個構成要素出發,向我們介紹什么是物聯網。
近年來,物聯網在國內乃至全世界都非常火熱,它被稱為三次信息產業浪潮,將極大地改變人們的生活方式與人類社會的運行。
作為發展不是特別成熟的行業,很多人對于物聯網結構還不具備特別清晰的認識。作為物聯網行業中摸爬滾打6年的老兵,本次我將用通俗易懂的語言,解開物聯網服務的神秘面紗,希望幫助各位童鞋更加深刻的理解物聯網服務結構的搭建。
一、引言
簡單地說實現物聯網時,主要是在服務上解決兩個層面的東西:
1. 把設備采集的傳感器數據,通過各種網絡方式傳輸到服務器保存在數據庫,并對采集的數據進行加工分析,然后執行對應呈現和響應。
2. 基于控制設備的需求,需要能夠實現向設備發送相關指令和信息,讓設備作出對應響應。
本次我們也將是主要這兩個層面進行剖析,幫助大家理解清楚如何構建物聯網服務,以及用于實現物聯網的重要要素。
結合物聯網標準的三層的結構定義,同時考慮實際運用的通俗說法,我們可以將物聯網劃分為3個構成要素:設備、網關、服務器。
二、要素之設備
大家很容易理解和感知的是——身邊的智能手機以及其他智能硬件設備,都是由硬件和軟件兩部分組成的。
硬件主要是經過ID設計、MD設計,然后基于實體制作的精致實體。軟件則是基于使用使用需求制作來控制硬件的。設備開發的角度看問題,就是在最大限度內實現硬件和軟件的完美結合。
對于平日里從事應用程序開發的工程師來說,說到設備開發,多少都很感覺茫然,在考慮設備軟件開發時,也多少會擔心以下問題:
- 做硬件設備的控制軟件需不需要對硬件有深入的了解
- 開發設備軟件需要什么樣的專業知識
- 開發設備軟件需要一些不同于應用程序的開發環境嗎
毫無疑問,需要!
設備軟件就是大家通常聽到的“嵌入式程序”,主要就是控制設備中的各種器件,需要較強的專業性以及一些硬件功底。
2.1 連通性給設備帶來的變化
在設備層面,物聯網會帶來哪些變化呢?總結下來就是“連通性”,幫助設備實現與外部系統或者設備的相互連接。
以前由于一些原因,很多設備是不具備連通性的:一些是因為之前沒有詳細的需求,另外一些是由于設備本身就是用來獨立實現功能的。這樣的設備一旦出廠就沒有再對產品進行升級了,所以研發周期相對較長,對于測試也相對嚴苛。
賦予連通性后,物聯網設備就不僅僅是是一個設備本身份,還提供的是一種與云服務或者智能手機等外部機器組合在一起的服務。這樣的情況下,更新設備應用程序變得非常簡單,產品發布之后,還可以根據用戶反饋,采用OTA方式不斷改良設備軟件。此外,還可以在云端對大量設備進行匯總和信息整合加工,以應用程序的方式向用戶提供有益的信息。
硬件本身的開發成本競爭一直都異常激化,物聯網會導致設備開發走向高級化?;谠O備開發,將服務整體作為一個生態系統來進行適宜的設計規劃,重要性不言而喻。
比如:基于大數據算法,為用戶提供吃力設備數據的高級分析服務,或者構建應用程序呈現設備的變化情況,亦或者基于人工智能計劃,使設備基于變化情況作出一些正確的反饋動作。
為了最大程度適應物聯網帶來的連通性變化,設備開發工程師和應用程序開發工程師,需要相互理解對方并達成共識。只有雙方各自理解對方領域的程序是如何工作和運行的,才能在應用程序高速開發的牽引下,打造成非常匹配的物聯網設備和對應的服務。
2.2 物聯網設備的組成要素
物聯網設備和傳統生活中我們所見的其他設備沒有多大的本質區別,主要作用均是通過感知周邊環境變化,然后輸出對應信息,或者在用戶操控下執行某些動作,差異點就在于多了一個物聯網網絡服務。
微控制器
也就是我們常說的單片機,使用較為廣泛的是傳統的51系列單片機及STM32,是一個微型控制器芯片。支持編寫程序,然后按照對應程序讀取各IO口狀態信息,或者利用IO口輸出各特定電信號。微控制器主要由CPU、內存、外圍電路組成。
輸入設備
輸入設備主要是幫助設備感知周邊的數據信息,主要是一些傳感器或者按鈕等電子元件。比如我們常見的麥克風、鼠標、鍵盤、溫度傳感器、重力感應陀螺儀等都屬于輸入設備,主要是負責采集信號,幫助了解周邊現實世界的信息。
輸出設備
設備要實現的不僅僅是對周邊的環境信息的感知,還需要將感知的信息進行呈現,將狀態“可視化”。方便人類獲取信息,并進行干預操作。向用戶反饋信息,我們常見的輸出設備有LED顯示屏、蜂鳴器等。
連接網絡
物聯網一個重要的特性就是連接網絡,設備通過網絡與服務器進行信息交換,積累數據做出分析決策,同時可以遠程控制設備。連接的網絡包含了有線網絡和無線網絡兩種方式,根據不同應用需求可以選擇不同連接網絡方式。有線連接包含以太網、串口通信、USB、等,無線連接包含WIFI、2G/3G/4G/5G、藍牙、NB等等。
2.3 物聯設備連接網絡的方式
設備連接網絡的方式有兩種,一種是設備直連,一種是設備連接網關,網關連接網絡。目前發展最快的方式,主要是直連型的方式,尤其是廣域網通信方式下。
網關設備與物聯網設備相比較,其更加復雜可以處理數據再次發送及數據存儲,另外通常情況下,網關設備還支持高級加密數據,可以加大數據安全性。直連型設備無須考慮網關,構建系統更容易,但是需要考慮再次發送數據等。
2.4 傳感器機制
利用物理特性的傳感器
傳感器根據用途而內置不同的檢測元件,檢測元件的電子特性會隨著環境的變化而變化,檢測電子特性的變化就可以檢測對應信息的變化。
利用幾何變異的傳感器
傳感器根據不同的幾何學特性來輸出特定信息,例如測距傳感器利用與障礙物之間的幾何學關系來測算距離,不同距離傳感器輸出對應的電壓值。
2.5 傳感器的利用過程
微控制器主要是負責接收傳感器輸出的信息及控制設備,它具體是如何控制處理電子信號的呢?
首先我們需要先了解一下傳感器的電子信號特性。傳感器具備具有毫伏級的微信號,并且輸出的是具有一定噪聲的模擬信號,控制器要完整接收信息就需要進行一系列的信號處理。
傳感器采集到信號后,由于信號比較微弱因此需要先放大信號,由于微控制芯片屬于數字器件因此需要將模擬信號轉為數字信號,最后是轉換成具體測量的數值。
2.6 輸出設備使用
傳感器的作用是采集信息進行分析,處理后同樣需要把結果反饋給用戶或者環境,那么就需要使用到輸出設備。使用輸出設備,我們需要注意的輸出設備的利用效能,以便將相關結果進行很好的呈現。
三、要素之網關
3.1 網關組成
在物聯網系統中,不能連接到互聯網的設備就需要使用網關,網關主要就是負責把這些設備連接到互聯網那個。網關是指能連接多臺設備,并具備直接連接到互聯網的功能機器和軟件。
3.2 網關的作用
網關扮演的重要作用是采集數據的環節,主要是三種功能:
1)從設備接收數據
設備和網關通過各種各樣的接口連接,當通過傳感器終端連接時,多數情況下是傳感器單方面持續向服務器發送數據。根據設備不同,也存在設備申請從外部獲取數據時,服務器向設備發送數據的情況,這個時候就需要通過網關申請數據。
2)生成要發送的數據
從設備接收到數據后,就需要轉換成能發送給服務器的格式,通常是轉化成數值數據或者字符串格式。發送數據的過程中,可能會存在這樣的操作,對數據進行整合減少數據量,或者合并發送。
3)把數據發送到服務器
向服務器發送數據的協議取決于服務器端,如果需要發現接收數據,需要實現準備好相關功能設置。
四、要素之服務器
服務器在整個物聯網服務結構中,主要扮演者4層作用,即:數據接收、數據處理、存儲數據、反控數據發送。
4.1 數據接收
服務器通過約定的協議接收來自設備端的數據,協議包含有HTTP協議、WebSocket、MQTT、COAP等,下面我們將來詳細了解一下各個協議。
HTTP、WebSocket都是常見協議我們就不說了,我們來看一下MQTT協議。
MQTT是最近幾年出來的協議,物聯網領域會將其作為標準協議,MQTT原本是IBM公司開發的協議,現在開源了。
MQTT協議能夠實現一對多通信,主要由發布者、訂閱者、中介構成。中介承擔著轉發MQTT通信的服務器作用,發布者和訂閱者承擔的是客戶端的作用。發布者是發送消息的客戶端,訂閱者是接收消息的客戶端。
COAP協議設計的初衷是為了在受約束的網絡和終端環境下傳輸物聯網應用數據,所以COAP協議的設計有一些特別的考慮——它的數據包很小,再加上嚴格的重傳機制,使得COAP特別適合在帶寬不高,終端能力受限的網絡中使用。優點是數據包小、傳輸靈活、實現簡單,具有完善的請求應答模型和重傳機制。
COAP和HTTP存在一定的對應關系,二者互譯較為簡單,這為物聯網和互聯網的對接提供了很好的標準化基礎。COAP的缺點是在業務發現、組播和安全方面的設計仍不完善。
聊完部分協議,還有一個重點的東西我們需要說一下:
數據時經過協議進行交換,但是數據的格式也是這個過程中很重要的一環,典型的就是XML和JSON。從物聯網的角度來說,除了設備傳感器數據之外,還需要發送例如接收時間、設備信息等一些其他數據,因此使用者就需要將從設備發送過來的數據結構化,我們分別用XML和JSON表示傳感器的信息、設備狀態、獲取數據的時間以及發送數據的設備名稱等。
對比二者,我們可以發現XML格式比JSON更容易理解,然而XML字符相比更多,數據量更大,JSON格式則相反。XML和JSON數據究竟使用哪一種更好呢,我們不能直接一概而論,不過JSON數據最小,更適合移動數據通信的情況。
設備傳來的數據和Web是有差異的,大多數是傳感器數據、語音、圖像等數值數據。與文本而言比較而言,這樣的數據更適合二進制形式處理。基于物聯網服務處理這些格式時,需要把文本數據轉換成數值數據和二進制數據,因此需要解析XML和JSON格式數據,以及把解析的結果從文本格式轉換到二進制形式。
如果能夠直接以二進制形式接收數據,是不是就更夠更快速地處理數據呢,對此產生了MessagePack格式,其數據格式與JSON相似,卻保留了二進制的形式。人們不方便閱讀,但是機器卻很容易處理。同時因為MessagePack發送的是二進制數據,所以比起文本形式的JSON更加緊湊。
4.2 數據處理
服務器接收到數據之后,接下來就需要對數據進行處理。說到數據處理,基本上就是常見的那4樣:數據分析、數據加工、數據保存以及向設備發送指令。
對于數據的分析與加工,常見的有“批處理”和“流處理”兩種典型的處理方式,下面我們一起來看一下這兩種處理方式。
批處理
顧名思義批處理就是每隔一段時間處理一批積攢下來的數據,通常情況下是先把數據存入數據庫,隔一段時間就從數據庫獲取數據,執行處理操作。
批處理重點在于在規定時間內處理完成所有的數據,因此數據的數據量越大,就需要越好性能的機器。要處理來自于數量龐大的設備發出來的傳感器數據和圖像等大型數據,就需要使用分布式處理平臺軟件,高效處理數據,常見的是Hadoop和Spark。
流處理
指不保存數據,按照到達服務器的順序對數據依次進行處理,對于實時對數據作出反應,流處理就是一個有效的方法。
批處理是把數據積攢之后進行隔一段時間處理,所以從數據到達至處理完畢會出現時間延遲。因此,流處理這樣把到達的數據逐次立即處理的方法就變得比較重要。流處理基本上不會保存數據,使用過的數據直接丟棄,保存處理結果就好。
4.3 數據存儲
說到數據存儲不得不說的是數據庫,數據庫的作用主要是存儲并靈活運用數據,除此之外還包括從保存的數據中找出與所指定條件相符的數據。數據庫從作用上講,主要是數據的增刪改查,下面我們就介紹一下常見的數據庫及其特性。
關系數據庫
關系數據庫是最普通的數據庫,其具備一種叫作表格的表格型數據結構,其用途在于存儲數據,用戶通過SQL語言可以對其執行數據的提取、插入以及刪除。關系型數據庫不擅長于保存圖片、語音等二進制形式的數據。舉個例子,如下圖可以看看示意的表格結構:
文檔型數據庫
文檔型數據庫屬于NoSQL數據庫的一種,其可以以XML和JSON這種結構化文檔的格式保存數據。比如MongoDB就是典型的文檔型數據庫,它以JSON的格式保存數據,同時能夠用JSON指令檢索條件。這樣一來,在用JSON交換傳感器信息時,就能直接對數據進行保存和使用即使增加新的數據條目或者新增設備,也能直接以JSON格式保存數據。非常適合用于無法讀出設備數量和數據種類的情況,以及保存傳感器等設備的數據。
鍵值存儲
鍵值存儲也屬于NoSQL數據庫的一種,就是巴一中叫作“值”(value)的數據值和與其一一對應的“鍵”(key)的集合保存在一起。鍵值存儲可以保存在內存里,也可以保存硬盤里。前者能夠實現高速保存,但是軟件停止運行時,保存的內容就會消失,因此前者適合當緩存用。后者的速度不如前者,但是即使軟件停止運行,數據仍然不會丟失。
4.4 反控數據發送
“反控”主要是指服務器端向設備端發送數據或者指令,控制設備,發送時可以采取接收時的相關協議。下面我們列舉一下HTTP、MQTT是如何實現同步異步數據傳輸的。
通過HTTP發送數據
HTTP是簡單的方法,在這個方法里服務器是等待接收HTTP請求的Web服務器,設備申請,服務器下發數據給設備,設備端需要不斷地執行輪詢連接,來獲取看服務器是否有需要下發的數據信息。
采用HTTP方法的主要應用場景:
- 無法確定設備唯一地址,不知道該把數據發給哪個設備
- 設備考慮移動傳輸費用問題(節?。?/li>
通過MQTT發送數據
上面我們已經介紹了HTTP方法由設備訪問服務器獲取數據,這種方法只要客戶端沒有發出申請,數據就不會被發送。當然使用者可以在服務器端來連接設備,但是新增設備后,服務器如何管理龐大的設備呢?基于此我們考慮MQTT方法,運用其發布/訂閱的優點。
實現步驟:
step1:設備作為訂閱者,向MQTT中介進行訂閱
step2:服務器作為發布者,向MQTT中介進行發布
該種模式下,發送服務器只需要把確定的數據加在主題上發送就行了,服務器和設備之間無需知道對方的地址,只需要知道中介的地址即可。一旦訂閱者斷開,中介將肩負起斷開時的發送,在設備重連后再次發送數據。運用MQTT協議后,服務器反控下發數據到設備就變得簡單了很多。
五、總結
相信經過上面的分析總結,無論是剛入門或者還是已經接觸過一定物聯網的童鞋,都能夠將整個物聯網的實現架構串聯起來了吧;并且知道中間的數據信息怎么流轉和處理,各個部分分別是怎樣的,扮演什么樣的作用。
無論你是物聯網硬件設備產品經理,亦或者是物聯網云平臺及應用產品經理,相信你對于物聯網服務架構都有了更加深刻的理解。最后,歡迎同行加我個人微信liu58liu進行交流。
作者:Kent,微信公眾號:Liuke2019
本文由 @Kent 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基于CC0協議
網關作用部分主要描述北向的問題,實際上應該描述成雙向,可以注意下。
比之前的文章更有深度,干貨滿滿的!!
點個贊,通俗易懂,學習了!