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