打造“雲邊一體化”,時序時空資料庫TSDB技術原理深度解密

芊寶寶最可愛發表於2019-10-21

本文選自雲棲大會下一代雲資料庫分析專場講師 自修的演講——《TSDB雲邊一體化時序時空資料庫技術揭秘》 
自修 —— 阿里雲智慧資料庫產品事業部高階專家

vbox11015_561A6408_102654_small.JPG

認識TSDB

第一代時序時空資料處理工具 雖然通用關聯式資料庫可以儲存時序資料,但是由於缺乏針對時間的特殊最佳化,比如按時間間隔儲存和檢索資料等等,因此在處理這些資料時效率相對不高。 第一代時序資料典型來源於監控領域,直接基於平板檔案的簡單儲存工具成為這類資料的首先儲存方式。 以RRDTool,Wishper為代表,通常這類系統處理的資料模型比較單一,單機容量受限,並且內嵌於監控告警方案。

第二代面向時序時空領域的資料庫伴隨著大資料和Hadoop的發展,時序資料量開始迅速增長,系統業務對於處理時序資料的擴充套件性等方面提出更多的要求。 基於通用儲存而專門構建的時間序列資料庫開始出現,它可以按時間間隔高效地儲存和處理這些資料。像OpenTSDB,KairosDB等等。

這類時序資料庫在繼承通用儲存優勢的基礎上,利用時序的特性規避部分通用儲存的劣勢,並且在資料模型,聚合分析方面做了貼合時序的大量創新。 比如OpenTSDB繼承了HBase的寬表屬性結合時序設計了偏移量的儲存模型,利用salt緩解熱點問題等等。 然而它也有諸多不足之處,比如低效的全域性UID機制,聚合資料的載入不可控,無法處理高基數標籤查詢等等。 隨著docker,kubernetes, 微服務等技術的發展,以及對於IoT的發展預期越來越強烈。

在資料隨著時間而增長的過程中,時間序列資料成為增長最快的資料型別之一。 高效能,低成本的垂直型時序資料庫開始誕生,以InfluxDB為代表的具有時序特徵的資料儲存引擎逐步引領市場。 它們通常具備更加高階的資料處理能力,高效的壓縮演算法和符合時序特徵的儲存引擎。 比如InfluxDB的基於時間的TSMT儲存,Gorilla壓縮,面向時序的視窗計算函式p99,rate,自動rollup等等。 同時由於索引分離的架構,在膨脹型時間線,亂序等場景下依然面臨著很大的挑戰。

第三代雲時序時空資料庫 從2016年開始,各大雲廠商紛紛佈局TSDB,2017.4 Microsoft釋出時序見解預覽版,提供的完全託管、端到端的儲存和查詢高度情景化loT時序資料解決方案。強大的視覺化效果用於基於資產的資料見解和豐富的互動式臨時資料分析。 針對資料型別分為暖資料分析和原始資料分析,按照儲存空間和查詢量分別計費。2018.11 Amazon在AWS re Invent大會發布Timestream預覽版。適用於 IoT 和運營應用程式等場景。 提供自適應查詢處理引擎快速地分析資料,自動對資料進行彙總、保留、分層和壓縮處理。 按照寫入流量,儲存空間,查詢資料量的方式計費,以serverless的形式做到最低成本管理。

阿里雲智慧TSDB團隊自2016年第一版時序資料庫落地後,逐步服務於DBPaaS,Sunfire等集團業務,在2017年中旬公測後,於2018年3月底正式商業化。 在此過程中,TSDB在技術方面不斷吸納時序領域各家之長,逐步形成了高效能低成本,免運維,易用性逐步提升,邊雲一體化,生態豐富等產品優勢。

技術揭秘

vbox11015_561A6418_102843_small.JPG

1. 分散式流式聚合器

時序聚合運算是時序資料庫區別於通用資料庫的特一。TSDB的聚合器主要運算元涵蓋了插值,降取樣,降維等等OpenTSDB協議中的計算函式。借鑑傳統資料庫執行模式,引入pipeline的執行模式(aka Volcano / Iterator 執行模式)。

Pipeline包含不同的執行計算運算元(operator), 一個查詢被物理計劃生成器解析分解成一個DAG或者operator tree, 由不同的執行運算元組成,DAG上的root operator負責驅動查詢的執行,並將查詢結果返回撥用者。在執行層面,採用的是top-down需求驅動 (demand-driven)的方式,從root operator驅動下面operator的執行。這樣的執行引擎架構具有優點:

  • 這種架構方式被很多資料庫系統採用並證明是有效;
  • 介面定義清晰,不同的執行計算運算元可以獨立最佳化,而不影響其他運算元;
  • 易於擴充套件:透過增加新的計算運算元,很容易實現擴充套件功能。比如目前查詢協議裡只定義了tag上的查詢條件。如果要支援指標值上的查詢條件(cpu.usage <= 70% and cpu.usage <=90%),可以透過增加一個新的FieldFilterOp來實現
  • 從查詢最佳化器到生成執行計劃,把查詢語句重寫成子查詢後構建Operator Tree, 執行器驅動Operators完成聚合邏輯,執行Fragment順序:Filtering -> Grouping -> Downsampling -> Interpolation -> Aggregation -> Rate Conversion -> Functions
  • 區分不同查詢場景,採用不同聚合運算元分別最佳化,支援結果集的流式讀取和物化, Operator的結果在包含None,dsOp等情況下采用流式聚合,而一些時間線之間的聚合仍然是物化運算。

2.時空資料的查詢和分析

在介紹時空資料的查詢分析之前,簡單介紹下什麼是時空資料以及時空資料的特點。

大資料時代產生了大量的有時間和空間、標記物件個體行為的時空資料。

比如個人手機產生的信令資料、共享出行的司乘位置和訂單資料、車聯網和無人駕駛行業的實時車輛資料、物流的位置流資料,以及外賣小哥的送餐軌跡等,都是這類資料。

時空資料的特點之一是複雜性和目標的多樣性,存在許多時空分析方法,比如聚類,預測,變化檢測,頻繁模式挖掘,異常檢測和關係挖掘。

時空資料另外一個特點是資料量級呈指數型增長,也是時序資料的在高維空間的展開。傳統資料庫可伸縮性差,難以管理海量時空資料。高併發情況下,由於儲存和計算沒有分離,時空資料的檢索會是很大瓶頸,可能造成檢索效能急劇下降,響應時間超過數分鐘。

面對這樣的資料量、計算量和對分析延時要求的挑戰,時空資料庫TSDB從多個技術維度進行了突破。如儲存計算分離、高效能時空索引、時空SQL最佳化器、時空計算引擎、時空資料壓縮演算法。

**時空過濾條件的識別與下推
**
有別於通用資料的<,>和=關係,時空資料的查詢過濾條件通常是一些類似於st_contains(),
st_intersects() 的空間分析函式。因此SQL最佳化器會解析識別過濾條件之中的時空過濾條件,根據儲存引擎的特性,決定哪些過濾條件可以下推,如果有無法下推的條件,則會將這些條件留在Filter運算元之中,由計算引擎來進行過濾。而如果過濾條件可以被下推,則最佳化器會生成新的Filter運算元。最佳化前後的關係運算元如下圖所示:

1.png

時空計算引擎

在通用資料庫中,JOIN是兩張表之中某兩個列相等,對應的有NestedLoopJOIN、HashJOIN,SortMergeJOIN等演算法。

對於時空資料而言,找到兩個相等的幾何物件幾乎不可能,多是基於st_contains()等空間位置關係或是st_distance()距離關係,來做JOIN。

比如找出雲棲小鎮附近1公里的所有計程車,JOIN條件就是計程車位置要包含在雲棲小鎮為圓心,半徑1公里的圓形空間範圍之內;比如找出離我最近的計程車,這就要用到KNN JOIN。而這些JOIN就超出了通用資料庫JOIN演算法可以最佳化的範疇。

在時空資料庫TSDB之中,採用了專門的Scalable Sweeping-Based Spatial Join演算法、時空索引、儲存層+計算層的Two level index進行最佳化。當SQL最佳化器識別到兩表JOIN的條件為時空分析函式時,如果引數等條件都符合要求,則SQL最佳化器會生成專門的時空JOIN運算元,採用專門的JOIN演算法來實現,這樣的演算法比樸素的JOIN運算元效能要高出很多。

開源生態

TSDB 提供開源influxDB 和 開源Prometheus 兩大生態的支援。
influxDB是DBengines上排名第一的時序資料庫,阿里雲influxDB®在開源influxDB基礎之上提供一下功能:

1.水平可擴充套件叢集方案 
2.全域性記憶體管理 
3.全面相容TICK生態

水平可擴充套件叢集方案

  1. 使用raft實現influxDB資料節點的高可用,同時提供多個高可用方案,讓使用者可以在可用性和成本中選擇最適合自己的方案。
  2. 阿里雲influxDB®支援根據資料量大小,動態增加influxDB資料節點的高可用組。

2.png

全域性記憶體管理

  1. 阿里雲influxDB®透過對influxDB程式碼的最佳化,實現了全域性記憶體管理,可以透過動態調整記憶體使用
  2. 全域性記憶體管理支援阿里雲influxDB建立任意多個database
  3. 全域性記憶體管理實現了資料寫入以及資料查詢的記憶體管理,可以非常顯著的防止由於OOM引發的穩定性問題,提高整個系統的可用性

TICK生態相容

  1. 阿里雲influxDB全面相容TICK生態,支援對接telegraf,chronograf以及kapacitor
  2. 除此之外,阿里雲influxDB支援對接grafana,使用者能夠使用更加豐富的圖形化工具展示influxDB中的資料
  3. 阿里雲influxDB提供“一鍵式”的資料採集工具,使用者可以非常方便的安裝、啟動資料採集工具,並且在阿里雲管理平臺上管理資料採集工具

3.png

阿里雲influxDB不但提供高可用、叢集方案,更加穩定性的服務以及擁抱開源生態,也積極整合資料採集,視覺化以及告警等功能,同時提供全自動監控,全託管“無運維”的服務。

Prometheus是K8S開源監控報警系統和時序列資料庫,阿里雲也提供Prometheus服務。相對於開源Prometheus,阿里雲Prometheus有以下特性:

4.png


原生態對接Prometheus

  1. 無縫對接InfluxDB
  2. 無需程式碼修改、僅需修改配置

長期資料儲存

  1. InfluxDB透過Remote Storage長期儲存Prometheus資料
  2. InfluxDB遠端儲存可以實現“多寫一讀”的查詢模式,多個prometheus對接同一個influxDB,允許聯合查詢多個Prometheus,實現資料“全域性化”查詢

高可用與高可靠

  1. InfluxDB高可用為Prometheus提供高可用儲存功能
  2. InfluxDB使用的雲盤實現Prometheus資料高可靠,有效防止資料丟失

阿里雲Prometheus充分使用阿里雲InfluxDB的能力,增強阿里雲Prometheus的能力,實現資料的長期儲存,高可用,高可靠,同時實現資料的“全域性化”查詢。

總結

阿里雲時序時空資料庫TSDB系列產品,聚焦於物聯網、監控APM、交通出行、車聯網、物流等行業,致力於打造雲邊一體化的時序時空資料庫,歡迎各位開發者和企業客戶使用,給我們提出寶貴意見。


本文為雲棲社群原創內容,未經允許不得轉載。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949601/viewspace-2660810/,如需轉載,請註明出處,否則將追究法律責任。

相關文章