雲棲深度乾貨 | 打造「雲邊一體化」,時序時空數據庫TSDB技術原理深度解密

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

 

vbox11015_561A6408_102654_small.JPG

認識TSDB

第一代時序時空數據處理工具 雖然通用關係數據庫能夠存儲時序數據,可是因爲缺少針對時間的特殊優化,好比按時間間隔存儲和檢索數據等等,所以在處理這些數據時效率相對不高。 第一代時序數據典型來源於監控領域,直接基於平板文件的簡單存儲工具成爲這類數據的首先存儲方式。 以RRDTool,Wishper爲表明,一般這類系統處理的數據模型比較單一,單機容量受限,而且內嵌於監控告警方案。算法

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

這類時序數據庫在繼承通用存儲優點的基礎上,利用時序的特性規避部分通用存儲的劣勢,而且在數據模型,聚合分析方面作了貼合時序的大量創新。 好比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在技術方面不斷吸納時序領域各家之長,逐步造成了高性能低成本,免運維,易用性逐步提高,邊雲一體化,生態豐富等產品優點。less

技術揭祕

 

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、交通出行、車聯網、物流等行業,致力於打造雲邊一體化的時序時空數據庫,歡迎各位開發者和企業客戶使用,給咱們提出寶貴意見。

相關資源

 

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索