當前位置: 華文星空 > 汽車

物聯網、車聯網研發涉及到哪些關鍵技術,如儲存、大數據分析、高並行訊息處理(數據采集、分發、流轉)?

2015-03-09汽車

我之前做過一段時間的物聯網卡業務,對物聯網/車聯網進行過一些調研,對行業現狀有一些基本的了解,並且我之前很長時間都從事於訊息推播與資料倉儲等相關工作,所以對你提出的這個問題很想分享一下自己的看法,希望可以拋磚引玉,大家一起討論,互相學習進步。

一、整體流程

首先說一下整體流程,以車聯網為例(我認為車聯網是物聯網的一個細分場景,具有很強的代表性,而且它對聯網及其他技術的要求要高於普通物聯網場景),它可以包含以下流程:

1.車載器材采集數據:車體執行監控數據、環境監控數據、GPS定位資訊及車載多媒體使用資訊等;

2.物聯網卡即時傳輸數據:目前用於車聯網的一般是4G或5G的SIM卡,可以將采集到的數據即時高速上傳到廠商的伺服端;

3.伺服端接收數據:伺服端接收車載器材發送的數據,並保存到訊息佇列或數據庫等;

4.伺服端即時處理:即時處理常式對接收到的數據進行簡單處理,得到即時監控資訊,用於判斷車輛狀態是否正常以及是否需要產生互動等;

5.伺服端離線處理:離線處理常式對數據進行清洗、分析及視覺化等,用於指導業務升級。

>>舉例說明:一輛貨車行駛在高速公路上,此時發動機轉速、冷卻液溫度、胎壓、GPS定位及本次行駛時長正在由車載器材即時采集,車載器材透過一張中國移動的4G SIM卡聯網,將采集到的數據發送到廠商的伺服端,廠商的伺服端接收到數據後,先將其寫入訊息佇列,即時處理常式進行簡單的判斷認為數據一切正常,然後將數據寫入數據庫中,離線程式對數據庫中的數據進行深入的統計分析,得出貨車的發動機轉速與冷卻液溫度及行駛時長的關聯關系,工程師將這一關系進行標準化,得到一個判定標準,增加到即時處理的判斷邏輯中。

二、關鍵技術

上述流程中涉及到的軟硬件較多,大概包含以下內容:

1.車載器材采集數據:各種傳感器(速度傳感器、溫度傳感器及GPS傳感器等)、嵌入式主機板、嵌入式作業系統、數據收集軟件:

如果不做創新,那這一塊就很容易,嵌入式主機板及各種傳感器都很成熟,有很多廠家支持DIY客製,價格也不高,作業系統目前以Linux與Android等為主,基於此開發套用的學習成本不算高。

2.物聯網卡即時傳輸數據:SIM卡通訊模組、SIM卡、通訊協定、客戶端軟件:

除貼片卡等特殊形式的卡之外,物聯網卡在外形與使用上與普通手機卡沒有區別,主要由移動/聯通/電信三家營運商發行,由於各地域訊號差異,一般在車載器材上會放置至少兩張卡,兩個通訊模組會根據訊號狀況進行智能切換。通訊協定一般基於udp協定或http協定,有廠商自訂,客戶端與伺服端保持一致即可。

3.伺服端接收數據:tcp/udp/http/websocket伺服端、負載均衡、數據庫、記憶體數據庫、訊息佇列:

為了支持更多器材更快速更穩定的接入,需要開發一個高效穩定的伺服端用來接收數據,並且需要支持橫向擴充套件,其中最主要的是負載均衡,可以透過F5等硬件實作,也可以透過lvs等軟件實作。由於程式記憶體有限,而且常見關系型數據庫的寫入速度不高,為避免高速高並行的數據引起平台故障,伺服端應該先把數據先寫入記憶體數據庫或訊息佇列中。

4.伺服端即時處理:訊息訂閱、流計算、多執行緒、分布式:

即時處理的要求之一就是快,讀數據要快、處理數據要快、輸出數據要快,訊息訂閱是指上遊有新數據寫入中介軟體後,下遊馬上就能讀到,流計算是指在讀寫數據的過程中進行邏輯處理,多執行緒能夠提升同時處理數據的數量,分布式能夠使多台機器同時處理數據。

5.伺服端離線處理:資料倉儲、機器學習、推薦系統、WebUI:

資料倉儲是指能夠儲存大規模數據量,並且能夠較快速的從中分析出有價值的資訊的軟件系統。機器學習提供的統計分析與知識發現等方法適用於分析海量數據,同時推薦系統可以根據數據中存在的一定規律對未來數據進行預測,用於風險預測或數據初判等方面。從資料倉儲中可以得到一些統計結果、數據趨勢、關聯關系或周期規律等,基於此開發前端圖表進行展示。

三、伺服端架構舉例

1.傳統設計:

(1)伺服端采用多點多活部署,使用F5對外提供負載均衡;

(2)伺服端接收數據後寫入記憶體數據庫Redis 中或訊息佇列Kafka中;

(3)入庫程式從Redis或Kafka中讀取數據,寫入Oracle等關系型數據庫或Hive等檔案系統數據庫或其他;

(4)即時處理常式從Redis或Kafka中讀取數據進行處理;

(5)離線處理常式從Oracle或Hive或其他數據庫中讀取並分析數據。

2.推薦使用TDengine重構設計:

由上圖可以看出,傳統設計中流程多、元件多、機器多,由此帶來的問題是效率低、風險高、投入高,所以我們需要做出一些最佳化,經過長時間的調研與測試,對多種架構進行了優劣對比,最終認為使用TDengine可以很好的解決上述問題。我們先看它的官網介紹:

TDengine 是一款開源、高效能、雲原生的時序數據庫(Time Series Database, TSDB), 它專為物聯網、車聯網、工業互聯網、金融、IT 運維等場景最佳化設計。同時它還帶有內建的緩存、流式計算、數據訂閱等系統功能,能大幅減少系統設計的復雜度,降低研發和營運成本,是一款極簡的時序數據處理平台。

所以,它的時序儲存特性可以取代Redis/Kafka作為第一步的訊息儲存,流式計算與數據訂閱又滿足數據處理的場景,它的集群模式也保證了系統的穩定,的確「大幅減少系統設計的復雜度」,改造後的架構如下圖所示:

當然這只是我個人淺見,希望大家指正。