將一臺設備或感測器連接到網際網路不是件容易的事─在嵌入式系統設計中沒什么事是容易的。不過,那些存在于網上(云端)、供客戶使用的優秀分析工具能夠擴展客戶設備功能,而且還能增加便利性,并透過網際網路實現運算成本的節省。然而,你必須搭建一種通道,以便讓設備或感測器的數據到達云端的應用程式,使數據在那裡得到分析和使用。對許多嵌入式系統設計團隊來說,這是一個全新領域。本文將介紹Web服務在機器到機器(M2M)應用中的工作塬理,并探討在網際網路上製作‘設備云’所要完成的主要任務。
你在什么云上?
迄今為止,我們中的大多數人都被灌輸過‘云端’和‘云端運算’等術語。除了產生雨、雪和暴風雨等自然氣候現象外,‘云’的真正含義是什么?對這個問題的簡單的回答是,不要太執迷于所謂的云術語;而應該認識到,軟體應用程式、連接和儲存可以存在于本地設備(如PC)或某個網路中的伺服器上。各種基于Web的應用就是一些最佳例子,例如電子郵件和其它集中智慧點(如映射)。云端運算的好處在于,云端通常是連網的,因此可以被連接擴展網際網路的每個人所共享。擴展網際網路這個術語意味著物體可以透過網際網路連接到物體,而不僅是人到人。機器到機器(M2M)連接可透過設備云中的擴展網際網路來實現。
駐留數據
共享數據是問題的根本。然而,這些數據需要駐留在可以得到正確消化的地方。為了將設備或感測器連接到網際網路,你首先需要知道哪裡可以‘駐留’數據。大多數現代工具依賴于Web服務直接連接擴展網際網路,因此你需要知道:Web服務是什么?如何使用Web服務?如何將Web服務應用到遠端設備或感測器?
為了設計能與云端交互的嵌入式系統,你需要一組功能將設備連接完整于云端的應用程式。記住,設備可以是任何東西,從儀表或自動調溫器到發動機或機器;也可以是固定的某些東西,如用于儲存和分配的大箱子或大容器。另一方面,應用程式可以是用于處理數據的任何系統。它可以是智慧手機上安裝的行動應用程式、基于Web的儀表板類型入口程式、企業資源規劃系統或專家系統。不管是哪種情況,挑戰在于將有關設備或資產的重要資訊傳送給應用程式。為了實現這個目標,我們首先需要定義製作這條數據傳送通道所必須的叁大功能組件。
製作通道
首先你需要如圖1所示的功能以便開始設計工作。
圖1:一種設備云的系統架構。
1. 感應和連接。這個功能具有有限的智慧,專門用于獲取資訊,包括無線電模組、簡單邏輯以及與即時需求有關的感應技術。
2. 匯聚和轉換。在將數據點透過大型網路(如網際網路)發送出去之前,需要以一種有意義的方式,有效總結或匯聚這些數據點。這個功能的另外一個關鍵部份是,將資訊放入通用表述性語言。因此,這個功能一般包括規則框架、協議轉換和映射,一般還包括通往IP網路的一條通道。
3. 設備云。設備云是擴展網際網路的組成部份,通常感知所有連接到遠端站的設備。一般來說這是一個作為通道和數據儲存的主機系統。設備云也匯聚來自所有遠端站點的資訊,其方式與匯聚和轉換功能匯合各個設備的差異資訊基本相同。
為了更好地理解這種環境,可以把云架構看作是一組的服務(如圖2所示),其定義為:
圖2:作為一組服務的云架構。
1. 基礎設備即服務(IaaS)。在最底層的IaaS是云端的‘基礎’。它包括網路連接、實體伺服器、防火墻、磁碟和路由器等。
2. 平臺即服務(PaaS)。包括了形成場景通訊鏈路和管理功能的所有軟體,同時提供頂層賴以生存的環境。
3. 軟體即服務(SaaS)。頂層是實際的應用程式,可以是網頁、映射、分析或其它軟體,也是最終智慧處理工作實施的地方。透過這種方式,設備云可以提供使用通用語言的設備場景化表述,并幫助基于Web的應用程式完成實際的工作。
會說云語嗎?
當然,我們需要一個通用詞匯表,這是Web服務的目的。Web服務的典型定義是,一種在網際網路協定骨干上使用XML、HTTP、SOAP、WSDL和UDDI開放標準整合Web應用程式的一種方法。為了簡單化,Web服務利用網際網路通用語言完成任務,以通用方式描述事件,使用常見動詞收發資訊(Put或Get),并透過請求或訂閱使用某種方法實現一到多和多到一連接。
Web服務是如何工作的?用一種支援通訊的語言開始──你已經知道了,然而,你可能不了解其中的真正含義。這是HTTP或超文本傳輸協定,是網際網路客戶端和伺服器的語言,最重要的是,這是一種將網際網路動詞應用于名詞的通用協議。聽起來不錯?我們在二年級就學習名詞和動詞了。
名詞網際網路名詞是被稱為統一資源定位器(URL)或通用資源標識符(URI)的一類東西。當然,不僅是這些──你需要描述數據的低位和數據的高位。為了做到這一點,你將使用可以靈活編碼資訊的方法。目前有許多這些方法,但最常用的兩種是可擴展標記語言(XML)和JavaScript對象符號(JSON)。這兩種方法都能用于傳送和儲存數據,并且具有自描述性,這意味著你通常不需要魔術解碼環來理解場景。這些東西的次序也不重要。表1顯示了XML和JSON的兩個常見的簡單例子。
表1、XML和JSON事例比較。
需要注意的是,意思和場景在標籤內傳送,而內容是與標籤有關的值。因為例子使用了有意義的場景標籤,你可以省略一些資訊,增加其它資訊,將它們的順序打亂,而不會改變單個元素的含義。
動詞你需要將動詞配搭名詞。對動詞而言,可以使用表述性狀態轉移(REST)。據維基百科介紹,REST“是一種用于分散式超媒體系統的軟體架構,如WWW?!盧EST意味著你在使用通用動作組,其細節由場景進行處理。對于像HTTP那樣的協議,我們一般討論7個不同的動作或動詞,其中4個完成設備云中的主要任務。這7個動詞是:Get,Put,Post,Delete,Head,Trace和Connect。本文不打算對Head、Trace和Connect多作說明。我們真正需要關注最重要的4個:Get,Put,Post和Delete。下面介紹這些動詞的含義。
每次你登錄網站,你就是在做Get。這是一個獲取或獲得文件或集合描述的一個請求。當然,就像許多問題一樣,它們通常會導致更多的問題,因此一次‘get’經常招致另一個。Get是個動詞,而URL加上所有插入的其它資訊就是那個名詞。下一個是Put。Put是Get的反義詞,因此是將文件或集合上載或‘put’到資料庫的一個請求。Delete是魔術擦除器。毫無疑問,如果有些東西已經‘放’在某個地方,我們可能想‘取得’它的拷貝,但我們大多數時候還希望‘刪除’這些東西。最后是Post。這是一個比較復雜的動詞。最好將Post認為是一個中間步驟或中繼。比方說你想要知道一個問題的答案,但確實不知道去問誰。你無法做Get,因為你不知道要問什么。這是,你可以將所有資訊打包并變成一個帖子(Post)。一旦‘張貼’過后,所謂的專家過程將看到你的帖子并作出回應。你可以即時等待響應(同步),或離開這裡并請求響應通知(非同步)。
為了將這些動詞應用到設備和應用程式,讓我們假設你有一組連接著不同建筑物的溫度感測器。每個感測器每個小時使用合適的連接、匯聚和轉換功能將溫度值發送到設備云中的資料庫。在這種場景中,溫度值被‘放(put)’進云端。下一步假設應用程式根據時間和地點對各個溫度進行分析和繪圖。在這種場景中,應用程式將從與合適時間和地點名詞相關的資料庫中‘獲取(get)’這些值。進一步假設你只想將數據保持一個月,因此每天都有一個獨立的進程對過時的溫度值進行‘刪除’。最后,假設應用程式的一位用戶想要即時的目前溫度值,而不僅僅是最近幾個小時。在這種情況下,應用程式將在指定地點‘張貼(post)’一個獲取目前值的請求,等待請求得到處理并返回結果。這些就是Web服務使用簡單的名詞和動詞的工作過程,
總之,你會發現,利用合適的連接、匯聚和轉換功能,可以很容易將設備資訊成功連接遠端應用程式。設備云和擴展網際網路隨后作為將數據橋接到應用程式的管道。所有這些事情都是使用相對簡單的、與一組網際網路名詞緊密相關的網際網路動詞組合完成的,沒有太大難度,只要記住REST和使用Post就可以了。
評論
查看更多