年輕人不講武德,TDengine邊緣側數據存儲方案挑戰SQLite


上周,濤思數據與EMQ在線上Meetup上聯合發布了工業互聯網一體化解決方案,基於TDengine、EMQ X搭建一個集工業數據采集、匯聚、清洗、存儲分析以及可視化展示等能力於一體的輕量級邊緣計算工業互聯網平台。目前TDengine已經全面支持ARM 32和ARM 64處理器,那么為什么,TDengine是邊緣側數據更高效的存儲選擇?它比SQLite好在哪里?在Meetup上,濤思數據聯合創始人侯江燚分享了這背后的技術原理。

從互聯網到移動互聯網再到現在我們的物聯網,計算機、移動終端、可穿戴設備、汽車、甚至家里的燈以及工廠里各種設備都已經接入網絡。整體來說,各種各樣的設備不斷地采集實時狀態數據,再把這個數據匯集到雲端的一個計算平台,這是物聯網雲計算的大概思路。

整個物聯網技術鏈有4層結構:通過傳感器采集設備的狀態數據 -> 通過通訊模組將數據發往雲端 -> 在雲端進行存儲、查詢和計算 -> 最后接入分析及應用系統。


然而,在雲計算模式中,數據必須要傳到雲上進行集中式的存儲、歸檔及分析等。邊緣側的節點可能是一個網關,也可能是我們真正使用的一個終端。如果它沒有自身的計算能力,必須把采集的數據發給雲端,依托雲端計算資源進行復雜的計算,得到一個指導性的結論,再通過網絡下發給終端。很容易看出,這個過程中終端的工作非常依賴於網絡。如果網絡一旦出現一些中斷或故障的話,終端無法與雲端進行交互,其某些工作就會大受影響。因此這種中心側(雲端)主控的思路,對邊雲之間的通信要求非常高,應用起來往往要使用高成本的高速通信網絡。從另一個層面說,隨着數據量不斷增長,雲端的存儲成本和計算成本也會不斷升高。


解決這個問題的一個很好的思路就是邊緣計算,即把一部分的存儲和計算的能力下沉到邊緣側(即設備側),終端設備較獨立地進行數據存儲、計算、決策和應用。這樣邊緣側就變得更智能,對雲端依賴更小,數據處理的時效性也更高,且不再受網絡影響。


邊緣計算帶來的優勢簡單總結如下。


然而邊緣計算目前有什么困難還沒解決呢?我們知道,邊緣側往往是一些能夠大量鋪設的小型智能終端,處於成本考慮,其配置的內存、CPU等硬件資源和計算能力都很有限。邊緣計算的難點就在於能否在有限的計算資源下,實現最高效的數據存儲、分析和計算。這就讓邊緣側的數據庫選擇顯得尤為重要。邊緣側的終端設備采集的數據有很明顯的特征,一般都是帶有時間戳的、結構化的時序數據流。因此邊緣計算對數據庫能力的要求就反映在以下幾個方面:

  • 超高讀寫性能
  • 低硬件開銷
  • 通用接口,適配邊緣側多樣計算需求
  • 實時數據的緩存能力、流式計算能力
  • 歷史數據持久化存儲、高效壓縮能力
  • 歷史數據回溯能力、按時間窗口的統計聚合能力
  • 雲邊協同能力

TDengine——更適合邊緣側的大數據引擎

時序數據庫是具備上述各項能力的,也是邊緣側采集數據存儲的最佳選擇。但如OpenTSDB(底層基於HBase改造)、InfluxDB等時序數據庫對於邊緣側來說還是太重了,運行起來的硬件資源開銷過高。一個極輕量化的開源時序數據庫就是TDengine,整個安裝包只有2MB多。其核心功能是一個高性能分布式時序數據庫;除此之外,還自帶了消息隊列、緩存、流式計算、數據訂閱等功能,為時序結構化數據存儲提供一個All-in-One的解決方案。


目前TDengine社區已經發布了支持ARM32和ARM64處理器的版本,可以順暢地運行在樹莓派等主流的邊緣側硬件上,同時提供對實時數據的緩存、歷史數據回溯、按時間段聚合計算等多種能力。雖然在邊緣側用到分布式集群的概率比較小,但如果哪幾個樹莓派、盒子或網關想要搭建一個集群,也是完全可以的。


TDengine ARM版本支持的接口也有很多種,與正常集群版幾乎沒有區別。同時,還提供了一個 taos shell客戶端,讓調試人員可以方便地去查看TDengine的運行狀態。


TDengine 邊雲協同思路

邊緣側資源有限,能存儲的數據總量也是有限的,因此還是要向雲端做數據備份和協同。邊雲協同思路也有很多,這里講一下我們的一些思路。

舉個例子方便大家更好的理解。邊緣側廠區有很多網關,我們可以在每個網關里都裝一個TDengine的邊緣側版本,那么TDengine就成為邊緣側的一個存儲引擎,可以把網關采集到的數據持久化存儲。取決於數據采集頻率和壓縮情況,邊緣側可以根據現有的存儲資源選擇性存儲一定時間長度的原始數據(比如一個月到半年等)。對於整型或者浮點型數據,TDengine可以將其壓縮到原來的10%左右,當然這個取決於具體的數據類型,如果數據的值隨機變化非常大,這個壓縮比確實會受一定影響,但整體來講,從實際情況來看,壓縮比還是在10%左右。因此,如果我們在網關里配一個2GB甚至1GB的SD卡的話,大概可以存儲10GB的原始數據量。這個量級對邊緣側實時分析來說已經足夠。

然而如果需要存儲更久的歷史數據,進一步做大數據挖掘等分析,則要把數據同步到雲端數據中心存儲。TDengine邊緣側的版本可以被雲端的TDengine客戶端直接訪問(網絡暢通情況下),因此從邊到雲的數據同步變得非常簡單。雲端的應用程序可以通過TDengine的訂閱模塊實時拉取邊緣側網關中的最新數據,再把收到增量數據實時寫入本地TDengine集群做歷史歸檔。這個技術實現上,本質是一個定時查詢,因此TDengine允許用戶添加一些數據篩選條件,有選擇性地同步邊緣側的數據(比如只拉取采集之大於某個閾值的記錄,沒有就不要),而不用把所有的歷史數據都上報給雲端。


基於TDengine在邊緣側的存儲優勢以及邊雲協同的整體思路,濤思數據和EMQ也聯合做了一個邊緣側的解決方案。簡單來說,邊緣側網關中部署EMQ X Neuron、EMQ X Edge和EMQ X Kuiper以及TDengine,將設備采集的流式數據通過Neuron做協議解析轉換成MQTT消息,然后發布Edge(邊緣側MQTT Broker),再通過Kuiper存入在邊緣部署的 TDengine 中。這樣在邊緣端運行的應用即可從 TDengine 中獲取和處理數據,做實時顯示和報警。EMQ 在邊緣端運行的 Edge Manager 提供了一個管理控制台,可以很方便地實現軟件配置和管理其他三個組件。點擊「這里」,詳細了解該方案的配置方法。這種方案相當於把協調的工作交給了EMQ。


但也可能有的用戶已經在雲端用了TDengine的集群,現在也有一些工業設備,想直接通過TDengine Cluster客戶端直接去訪問邊緣側的TDengine。這種也可以通過TDengine的數據訂閱的模塊直接實現,即雲端的應用調用數據訂閱模塊創建一系列的訂閱任務,直接去實時拉取邊緣側TDengine中的最新增量數據。這種方案相當於把協同的工作又交給了TDengine,當然這里要保證網絡是暢通的。


TDengine邊緣版本在樹莓派上的編譯

下面也簡單介紹一下在樹莓派上編譯、安裝、運行TDengine的實戰步驟。

環境准備

1. 燒錄操作系統

燒制操作系統到SD卡。TDengine支持Ubuntu16.04、CentOS7.0及以上等主流操作系統。

2. 網絡設置

配置樹莓派上的網絡環境,為開發版設置靜態IP和hostname等,並連接到網絡。

3. 下載編譯TDengine

www.github.com/taosdata/TDengine 克隆TDengine源碼到樹莓派,編譯並運行。

編譯過程

# clone source code
$ git clone --recursive --recurse-submodules https://github.com/taosdata/TDengine.git


# checkout to the latest version
$ cd TDengine/
$ git checkout ver-2.0.7.0


# compile and install
$ mkdir build && cd build
$ cmake ../ -DCPUTYPE=aarch64 -DVERNUMBER=2.0.7.0 -DVERCOMPATIBLE=2.0.0.0
$ make && make install


# start taosd
$ systemctl start taosd
$ taosde

​​​​​​​編譯安裝完成后,就可以看到我們提供的taosdemo程序,方便大家進行極速體驗。大家可以通過taosdemo來測試一下TDengine的數據寫入和查詢效率。

TDengine與SQLite的簡單比較

邊緣側、嵌入式設備中的數據存儲不得不提SQLite。SQLite是一個不需要后台的超輕量級數據庫,可謂即插即用,也是世界上裝機量最高的數據庫。SQLite甚至在官網上將自己定位與fopen()對標,而不是數據庫:Think of SQLite not as a replacement for Oracle but as a replacement for fopen() SQLite is a compact library. 當然,SQLite提供的一系列API都是對標關系型數據庫的,它甚至還支持了事務,因此業界常常把它用作嵌入式關系型數據庫。

兩者相對比一下,SQLite在Linux上的安裝包為1.9MB,TDengine為2.7MB。兩者都是把輕量化做到極致。由於TDengine是專門針對時序結構化數據的一種方案,不支持事務和復雜的表關系處理,但會提供時序數據的時間索引、實時流計算、列式存儲及更好的壓縮比、按照時間的降采樣聚合能力、數據保存時限等。從這個角度來說,TDengine要比SQLite更貼近邊緣側生產環境中對時序數據的處理需求。TDengine邊緣側版本也可以做到雲端的產品無縫對接,如果網絡不暢,TDengine可以實現數據自動緩存,聯網后自動續傳,實現邊雲協同的能力。下面用一張圖來簡單總結下TDengine和SQLite的區別。


作為新興的時序數據庫代表,TDengine的諸多優點,在邊緣側的存儲選擇上着實挑戰到了一代宗師SQLite,倒真有點年輕人不講武德啊。但需要認識到的一點,TDengine和SQLite要處理的問題側重點不同,兩者並非必須取舍,而是可以根據自己的業務需求,靈活搭配使用,由TDengine處理時序數據,由SQLite處理關系數據,更好地實現邊緣側的數據自治。

關注公眾號“TDengine”,后台回復“1117”,獲取PPT完整版


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM