從車聯網範例學習使用 Azure 雲平台實現物聯網(IoT)精神:(1) 接收並儲存大量遙測資料

前言

Azure 雲平台提供了許多開發軟體、系統或服務的平台元件,而在最近熱門的資料分析、物聯網(IoT, Internet of Things)、機器學習等議題方面,Azure 也有許多針對這領域的需求提供相關的服務,這裡我們就以一個「車聯網」(Connected Car)的情境來說明如何運用 Azure 上的這些服務來建構一個資料分析或是物聯網的解決方案。

這裡可以下載或啟用本文所使用的範例。

情境

假設您是一個車輛管理公司,你旗下有許多車輛在路上運行,而你想要監控這些車輛的狀況(如:平均時速、機油狀況、引擎溫度等等),並且從這些監控的數據中分析及預測出車輛的健康狀況,及早為可能要進行的維修工作做好準備。

系統完整架構圖會像是這樣(點擊放大):

系列文章

這個範例將會分成三個部份來做介紹,分別是:

  1. 接收並儲存大量遙測資料
  2. 資料轉換及建立預測模型
  3. 建立資料視覺化圖表

接收資料

由於需要監控的車輛數量可能會很多,所以我們要能夠具有短時間接收大量資料的資料(高頻資料)接收能力,所以採用 Azure 事件中樞(Event Hubs) 作為接收高頻資料的入口。簡單地說,Azure Event Hub 的功能就是一個訊息佇列(message queue),但是它特別為高頻資料所設計,藉著資料分區(partition)的設計讓資料可以並行傳入,也因為這僅僅是一個佇列,雖然有一定的保存時間,但若要將傳入的事件(訊息、資料)永久儲存下來,就需要把資料從 Event Hub取出再儲存到別處的部份,這個我們稍候再談。

在這個範例中,我們並不是真正去蒐集真實的車輛資料,而是用一個模擬程式模擬產生資料,這些資料就直接送到 Azure Event Hub,而送進 Azure Event Hub 裡可以是任何字串資料,不過為了後續資料處理的方便,在這個範例中是使用 JSON 格式的資料來傳送。


圖:模擬程式執行的畫面,可以看到它會產生許多模擬資料,並且是使用 JSON 資料格式。

資料傳入 Azure Event Hub 的方式也很簡單,只要使用 HTTP 的 Web 呼叫就可以將資料寫入 Azure Event Hubs。

關於 Azure Event Hubs 的相關參考資料如下:

取出資料

前一部份我們使用了 Azure Event Hubs 來解決高頻資料接收的問題,但不論是要拿這些資料產生報表、餵進機器學習建立預測模型、還是要永久儲存下來等等,我們終究要把資料從這個佇列中取出再送到不同的位置,這時就能使用 Azure 串流分析(Stream Analytics) 的服務來完成這項任務。您可以在 Azure Stream Analytics 中設定一些查詢字串(類似 SQL 查詢語法),當您啟動 Azure Stream Analytics 的服務時,它會監控指定的 Event Hub 或 Blob 儲存體,並且將所有進入該 Event Hub 中的資料與設定的查詢字串進行比對,若符合查詢字串的條件,則會將這份資料送到指定的位置(甚至是寫回另一個 Event Hub)。這一連串的動作幾乎可以視為是即時完成。


圖: Azure Stream Analytics 會監控 Event Hub,然後根據查詢條件將資料送到指定的位置。

注意:Event Hub 的資料也可以自己寫程式取出,但若要使用 Azure Stream Analytics 來處理的話,目前 Azure Stream Analytics 支援的資料格式有:Avro, CSV, 與 JSON;而字串編碼則僅支援 UTF-8

而若要傳入 CSV 格式的資料時,必須多一列欄位名稱的資料,舉例來說,不要直接傳 Eric,33,Taiwan 這樣的資料,而是應該要傳入 Name,Age,Nationality\nEric,33,Taiwan 這樣的資料才對,否則後續取出的資料會不易操作。

在這個範例中,Azure Stream Analytics 主要會將取出的資料送到 Power BI 服務做視覺化的圖形報表(事實上是將資料儲存在 Azure Blob Storage 以及 SQL 資料庫,再由 Power BI 去這些地方將資料匯入),以及將資料寫入 Azure Blob Storage 中永久儲存下來,這些操作都會在設定的查詢語法中完成。

關於 Azure Stream Analytics 的相關參考資料有:

我們學會了什麼?

到目前的階段,我們瞭解到如何使用 Azure Event Hubs 來接收高頻資料,而使用 Azure Stream Analytics 將資料從 Event Hubs 中取出再轉存到其它儲存體,初步完成整套 Azure IoT 任務拼圖的前端部份。而透過這個範例也可以瞭解,在 Azure IoT 思維中,事件來源(event source)可以是任何形式,它可能是感測器,也可能是應用程式,但不論前端的「物」是什麼,只要有一個能夠連上 Internet 的裝置就可以將資料上傳至 Azure 來處理,同時上傳的方式也僅僅是透過 HTTP 呼叫 Azure Event Hubs 的 RESTful API 來傳遞資料如此簡單(當然,Azure Event Hubs 已經由官方提供了許多語言版本的 SDK,不一定都要使用這麼低階的方式呼叫)。

下一步,我們將瞭解如何對於這些大量的資料進行資料轉換,或是根據不同需求建立查詢表格,最後還能透過機器學習的方式建立預測模型,當然,這些動作都要能夠經得起大數據的考驗。

原始文章發佈於「開發者之魂」部落格