爲什麼物聯網大數據平臺,使用TDengine,可以不要Redis、Kafka和Spark等軟件?

爲什麼物聯網大數據平臺,使用TDengine,可以不要Redis、Kafka和Spark等軟件? - TDengine | 濤思數據 (taosdata.com)

 

TDengine是一高效的時序空間大數據處理引擎,因爲充分利用物聯網、車聯網、工業互聯網等場景的數據特點並做了很多優化,因此性能上遠勝通用的大數據平臺。但TDengine的核心功能是時序數據庫(Time-Series Database),而大數據處理平臺往往還需要有消息隊列、緩存、流式計算等功能,怎麼能不要Redis、Kafak和Spark這些軟件了呢?本文將給出詳細解答。

消息隊列

與互聯網應用不一樣的是,物聯網場景中,只要指定聯網設備數量,數據採集頻次,系統所需要的流量是可較爲準確估算出來的,流量是較爲平穩的。而互聯網場景中,流量不平穩,比如雙11的時候,電商的流量可以幾十倍的變化。同時,物聯網設備都有一定的數據緩存能力,不能僅僅依靠雲端的緩存來解決。因爲即使整個系統都工作正常,但網絡任何部分都可能出現中斷,數據就無法傳輸,物聯網設備必須有能力把數據先緩存起來,因此物聯網平臺對消息隊列的需求沒有那麼強烈。而TDengine內部實現了一簡單的消息隊列,任何收到的消息都會寫進WAL日誌,只要回覆確認了的消息,就一定不會丟失。同時TDengine提供訂閱功能,用戶可以訂閱原始數據,一個數據子集、時間軸上聚合計算的結果,或是多條時間線定時聚合的結果,這樣就不需要使用Kafka等類似的消息隊列軟件。使用TDengine,將數據寫入消息隊列,就是標準的SQL insert指令,訂閱數據,C/C++語言的接口是:

taos_subscribe(char *host, char *user, char *pass, char *db, char *table, long time, int mseconds)

這個API裏的參數是鏈接數據庫所需要的IP地址、用戶名、密碼、數據庫以及表的名字,但參數mseconds控制了多快返回一次數據給應用,參數time是指離現在多長時間之前的數據需要返回給應用,如果沒有返回過的話。其他語言的API可以參考TDengine的用戶手冊。

緩存

TDengine對數據庫分配了固定的內存池,新插入的數據,會先寫入內存池。每個數據採集設備或是每張表,都會從內存池中分配到一個或多個數據塊。對於互聯網應用,需要緩存的數據往往是用戶讀取頻次較高的數據,取決於用戶行爲。比如某頭條文章或微博,一天之後還很有熱度,需要緩存纔行。而物聯網數據,絕大部分情況下,剛剛採集的數據纔是熱數據,歷史數據一般情況下都是冷數據。因此TDengine按照先進先出的原則對內存池進行管理,內存不足時,老的數據會被持久化存儲,而內存裏的老數據會被最新的覆蓋掉。TDengine還保證了任何一臺設備最後一條記錄一定在內存中,如果應用要獲取每個設備的最新數據或狀態,都將從內存裏直接獲取。系統提供了一個特殊的函數SQL last_row專門用來返回最後一條記錄。如果使用TDengine超級表,還可以快速返回所有設備或一組設備的最後一條記錄,便於應用顯示系統實時狀態。比如查詢所有北京的溫度傳感器的最新溫度值,使用下面的SQL即可:

  select last_row(*) from thermometers where location=’beijing’

這樣的設計讓系統可以不再需要Redis這類軟件。

流式計算

物聯網數據是一個流數據,需要實時流式計算來進行各種預警、預測或生成實時報表。基於滑動窗口,TDengine後臺可定時的拉起查詢計算,提供了一簡化的流式計算,便於做各種實時的統計聚合操作。比如,某個溫度傳感器每隔10秒鐘採集一次溫度,但系統需要每隔1分鐘計算一下剛過去的三分鐘的溫度平均值,TDengine裏就可以使用如下SQL語句實現:

select avg(degree) from thermometer interval(3m) sliding(1m)

其中的選項interval是指滑動窗口的時間長度,sliding是指窗口多快滑動一次。這樣對於一般的物聯網場景,不再需要使用Spark等類型的流式計算軟件。

全棧的數據處理引擎

綜上所述,TDengine提供了大數據處理所需要的緩存、消息隊列、流式計算等系列功能。但一個物聯網、車聯網大數據平臺,往往還有很多業務數據需要處理。這些業務數據包括人員、設備的管理數據,交易記錄等等,這些數據不是時序的,而且往往有複雜的關係查詢,無法由TDengine處理,還需要使用傳統的關係型數據庫,比如MySQL來處理。只不過,這些業務數據的量都不大,根本不需要大數據技術來處理。

在典型的物聯網、車聯網場景裏,採集的數據量佔有整個系統的數據量的99%以上,使用TDengine,就能很好的解決整個平臺的大數據問題,完全可拋棄掉Kafka、HDFS、HBase、Spark和Redis等一大堆軟件,大幅簡化數據平臺的設計,降低研發成本大,降低運維門檻。而且系統將更加健壯,數據的一致性更有保證。

最後值得一提的是,對於私有化部署的物聯網、車聯網平臺,因爲TDengine部署簡單,增加一個節點幾秒搞定,無歷史數據實時數據之分,數據備份恢復全部自動,相對於通用的大數據平臺而言,將大幅節省現場實施和後續的維護成本。

文章導航

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章