天天看點

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

本文選自雲栖大會下一代雲資料庫分析專場講師自修的演講——《TSDB雲邊一體化時序時空資料庫技術揭秘》

自修 —— 阿裡雲智能資料庫産品事業部進階專家

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

認識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在技術方面不斷吸納時序領域各家之長,逐漸形成了高性能低成本,免運維,易用性逐漸提升,邊雲一體化,生态豐富等産品優勢。

技術揭秘

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

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算子。優化前後的關系算子如下圖所示:

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

時空計算引擎

在通用資料庫中,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資料節點的高可用組。
雲栖深度幹貨 | 打造“雲邊一體化”,時序時空資料庫TSDB技術原理深度解密

全局記憶體管理

  1. 阿裡雲influxDB®通過對influxDB代碼的優化,實作了全局記憶體管理,可以通過動态調整記憶體使用
  2. 全局記憶體管理支援阿裡雲influxDB建立任意多個database
  3. 全局記憶體管理實作了資料寫入以及資料查詢的記憶體管理,可以非常顯著的防止由于OOM引發的穩定性問題,提高整個系統的可用性

TICK生态相容

  1. 阿裡雲influxDB全面相容TICK生态,支援對接telegraf,chronograf以及kapacitor
  2. 除此之外,阿裡雲influxDB支援對接grafana,使用者能夠使用更加豐富的圖形化工具展示influxDB中的資料
  3. 阿裡雲influxDB提供“一鍵式”的資料采集工具,使用者可以非常友善的安裝、啟動資料采集工具,并且在阿裡雲管理平台上管理資料采集工具
雲栖深度幹貨 | 打造“雲邊一體化”,時序時空資料庫TSDB技術原理深度解密

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

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

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

原生态對接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、交通出行、車聯網、物流等行業,緻力于打造雲邊一體化的時序時空資料庫,歡迎各位開發者和企業客戶使用,給我們提出寶貴意見。

相關資源

歡迎加入阿裡資料庫産品釘釘群,一起交流

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