從前世今生聊一聊,大廠為啥親睞時序資料庫
摘要:本文會從時序資料庫的基本概念、應用場景、需求與能力等方面一一展開,帶你了解時序資料庫的前世今生。
時序資料庫忽然火了起來。Facebook開源了beringei時序資料庫,基於PostgreSQL打造的時序資料庫TimeScaleDB也開源了。時序資料庫作為物聯網方向一個非常重要的服務,業界的頻頻發聲,正說明各家企業已經迫不及待的擁抱物聯網時代的到來。
本文會從時序資料庫的基本概念、應用場景、需求與能力等方面一一展開,帶你了解時序資料庫的前世今生。
應用場景
時序資料庫是一種針對時序數據高度優化的垂直型資料庫。在製造業、銀行金融、DevOps、社交媒體、衛生保健、智慧家居、網路等行業都有大量適合時序資料庫的應用場景:
- 製造業:比如輕量化的生產管理雲平台,運用物聯網和大數據技術,採集、分析生產過程產生的各類時序數據,實時呈現生產現場的生產進度、目標達成狀況,以及人、機、料的利用狀況,讓生產現場完全透明,提高生產效率。
- 銀行金融:傳統證券、新興的加密數字貨幣的交易系統,採集、分析交易過程中產生的時序數據,實現金融量化交易。
- DevOps:IT基礎設施和應用的運維繫統,採集、分析設備運行和應用服務運行監控指標,實時掌握設備和應用的健康狀態。
- 社交媒體:社交APP大數據平台,跟蹤用戶交互數據,分析用戶習慣、改善用戶體驗;直播系統,採集直播過程中包括主播、觀眾以及中間各環節的監控指標數據,監控直播品質。
- 衛生保健:商業智慧工具,採集智慧手錶,智慧手環中的健康數據,跟蹤關鍵指標和業務的總體健康情況
- 智慧家居:居家物聯網平台,採集家居智慧設備數據,實現遠程監控。
- 網路:網路監控系統,實時呈現網路延時、頻寬使用情況。
時序數據的需求
在上述場景中,特別在IoT物聯網以及OPS運維監控領域,存在海量的監控數據需要存儲管理。以華為雲Cloud Eye Service(CES)服務為例,單個Region需要監控7000多萬個監控指標,每秒需要處理90萬個上報的監控指標項,假設每個指標50個位元組,一年的監控數據有1PB;自動駕駛的車輛一天各種感測器監測數據就80G。
傳統關係型資料庫很難支撐這麼大的數據量以及這麼大的寫入壓力,Hadoop大數據解決方案以及現有的時序資料庫也會面臨非常大的挑戰。大規模IoT物聯網,以及公有雲規模的運維監控場景,對時序資料庫的需求主要包括:
- 持續高性能寫入:監控指標往往以固定的頻率採集,部分工業物聯網場景感測器的採集頻率非常高,有的已經達到100ns,公有雲運維監控場景基本也是秒級採集。時序資料庫需要支援7*24小時不中斷的持續高壓力寫入。
- 高性能查詢:時序資料庫的價值在於數據分析,而且有較高的實時性要求,典型分析任務如異常檢測及預測性維護,這類時序分析任務需要頻繁的從資料庫中獲取大量時序數據,為了保證分析的實時性,時序資料庫需要能快速響應海量數據查詢請求。
- 低存儲成本:IoT物聯網及運維監控場景的數據量曾現指數級增長,數據量是典型的OLTP資料庫場景的千倍以上,並且對成本非常敏感,需要提供低成本的存儲方案。
- 支援海量時間線:在大規模IoT物聯網及公有雲規模的運維場景,需要監控的指標通常在千萬級甚至億級,時序資料庫要能支援億級時間線的管理能力。
- 彈性:監控場景也存在業務突發增長的場景,例如:華為Welink服務的運維監控數據在疫情期間暴增100倍,時序資料庫需要提供足夠靈敏的彈性伸縮能力,能夠快速擴容以應對突發的業務增長。
開源時序資料庫能力
過去10年,隨著移動互聯網、大數據、人工智慧、物聯網、機器學習等相關技術的快速應用和發展,湧現出許多時序資料庫,因為不同資料庫採用的技術和設計初衷不一樣,所以在解決上述時序數據需求上,他們之間也表現出現較大的差異,本文在下面內容將選擇使用最多的幾種開源時序資料庫為分析對象進行討論。
- OpenTSDB
OpenTSDB基於Hbase資料庫作為底層存儲,向上封裝自己的邏輯層和對外介面層。這種架構可以充分利用Hbase的特性實現了數據的高可用和較好的寫入性能。但相比Influxdb,OpenTSDB數據棧較長,在讀寫性能和數據壓縮方面都還有進一步優化的空間。
- InfluxDB
Influxdb是業界比較流行的一個時間序列資料庫,它擁有自研的數據存儲引擎,引入倒排索引增強了多維條件查詢的功能,非常適合在時序業務場景中使用。由於時序洞察報表和時序數據聚合分析,是時序資料庫主要的查詢應用場景,每次查詢可能需要處理上億數據的分組聚合運算,所以在這方面,InfluxDB採用的火山模型對聚合查詢性能影響較大。
- Timescale
TimeScale是一個基於傳統關係型資料庫postgresql改造的時間序列資料庫,繼承了postgresql許多優點,比如支援SQL,支援軌跡數據存儲,支援join,可擴展等等,讀寫性能好。TimeScale採用固定schema,數據佔用空間大,對於時序業務長期相對固定且對數據存儲成本不敏感的業務來說,也是一種選擇。
GaussDB(For Influx)的出現
針對高性能寫入、海量時間線和高數據壓縮的需求,當前還未能有比較好的開源解決方案。GaussDB(For Influx)汲取了開源各家之長,設計了雲原生架構的時序資料庫。架構如下圖所示。
相比現有的開源時序資料庫,架構設計上有以下兩方面的考慮:
- 存儲與計算分離
存儲計算分離,一方面利用成熟的分散式存儲系統提高系統的可靠性。監控數據一直持續高性能寫入,同時還有大量的查詢業務,任何系統故障導致業務中斷甚至數據丟失都會造成嚴重的業務影響,而利用經過驗證的成熟的分散式存儲系統,能夠顯著的提升系統可靠性,降低數據丟失風險,並明顯縮短構建本系統的時間。
另一方面,解除在傳統Share Nothing架構下,數據和節點物理綁定的約束,數據只是邏輯上歸宿於某個計算節點,使得計算節點無狀態化。這樣在擴容計算節點時,可以避免在計算節點間遷移大量的數據,只需要邏輯上將部分數據從一個節點移交給另外一個節點即可,可以將集群擴容的耗時從以天為單位縮短為分鐘級別。
再一方面,通過將多副本複製從計算節點卸載到分散式存儲節點,可以避免用戶以Cloud Hosting形態在雲上自建資料庫時,分散式資料庫和分散式存儲分別做3副本複製導致總共9副本冗餘的問題,能夠顯著降低存儲成本。
- Kernel Bypass
為了避免在用戶態內核態來回拷貝數據帶來的性能損失,GaussDB(for Influx)系統端到端考慮Kernel bypass設計,沒有選擇使用標準的分散式塊或分散式文件服務,而是訂製的針對資料庫設計的分散式存儲,對外暴露用戶態介面,計算節點採用容器化部署,通過專用存儲網路直接和存儲節點通訊
除了架構之外,GaussDB(for Influx)還針對IoT物聯網及運維監控場景的其他需求做了如下優化:
- 寫優化的LSM-Tree布局和非同步Logging方案,相比當前時序資料庫提升94%寫性能。
- 通過向量化查詢引擎,ARC Block Cache,以及Aggregation Result Cache提升聚合查詢性能,相比當前時序資料庫提升最高可達9倍
- 設計針對時序數據分布特徵的壓縮演算法,壓縮率相比Gorilla提升2倍,並自動將冷數據分級到對象存儲,降低60%存儲成本
- 優化海量時間線的索引演算法,提升索引效率,在千萬時間線量級下,寫入性能是當前時序資料庫的5倍。
GaussDB(for Influx)成功保障了公司welink和雲監控CES兩大服務之後上線商用,接下來我們還將探索如何在海量數據中尋找有價值數據的高效分析方法,為用戶提供更加合適的分析和洞察能力。
參考文獻
//zhuanlan.zhihu.com/p/32709932
//www.cnblogs.com/jpfss/p/12183214.html