溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密

發(fā)布時(shí)間:2020-06-24 03:33:29 來源:網(wǎng)絡(luò) 閱讀:3772 作者:騰訊技術(shù) 欄目:數(shù)據(jù)庫

背景:隨著互聯(lián)網(wǎng)的高速發(fā)展、大數(shù)據(jù)的迅速膨脹和物聯(lián)網(wǎng)的飛速崛起,我們發(fā)現(xiàn)生活和工作中的大部分?jǐn)?shù)據(jù)漸漸和時(shí)間產(chǎn)生了關(guān)聯(lián)。比如微信運(yùn)動(dòng)的實(shí)時(shí)步數(shù)、股票每天的收盤價(jià)格、共享單車的設(shè)備狀態(tài)等等。為了存儲(chǔ)這些與時(shí)間相關(guān)的數(shù)據(jù),積極擁抱物聯(lián)網(wǎng)時(shí)代,各大企業(yè)紛紛推出自家的時(shí)序數(shù)據(jù)庫。本文將對(duì)時(shí)序數(shù)據(jù)庫的基本概念、應(yīng)用場(chǎng)景及騰訊時(shí)序數(shù)據(jù)庫CTSDB做簡(jiǎn)要介紹。



什么是時(shí)序數(shù)據(jù)庫



1. 時(shí)序數(shù)據(jù)

1.1 什么是時(shí)序數(shù)據(jù)?

在引入時(shí)序數(shù)據(jù)庫之前,先要了解“時(shí)序數(shù)據(jù)”的概念:按照時(shí)間順序記錄系統(tǒng)、設(shè)備狀態(tài)變化的數(shù)據(jù)被稱為時(shí)序數(shù)據(jù)(TimeSeries Data)。它普遍存在于IT基礎(chǔ)設(shè)施、運(yùn)維監(jiān)控系統(tǒng)和物聯(lián)網(wǎng)中。


時(shí)序數(shù)據(jù)從時(shí)間維度上將孤立的觀測(cè)值連成一條線,從而揭示軟硬件系統(tǒng)的狀態(tài)變化。孤立的觀測(cè)值不能叫時(shí)序數(shù)據(jù),但如果把大量的觀測(cè)值用時(shí)間線串起來,我們就可以研究和分析觀測(cè)值的趨勢(shì)及規(guī)律。其意義體現(xiàn)在兩方面:


(1)從時(shí)間軸往后看,時(shí)序數(shù)據(jù)可做成報(bào)表,觀測(cè)數(shù)據(jù)變化規(guī)律、捕獲異常。這里舉兩個(gè)例子:
下圖為共享單車在舊金山某熱門區(qū)域的每小時(shí)車輛的借還數(shù)量。通過分析該區(qū)域車輛數(shù)目的歷史數(shù)據(jù),單車公司可得知熱點(diǎn)借車時(shí)間段是否需要車輛補(bǔ)給。

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密

 

下圖為某互聯(lián)網(wǎng)服務(wù)的出入流量歷史記錄。從圖中可以明顯看到入流量(藍(lán)色線)在某時(shí)間段有毛刺,服務(wù)提供商可基于此段時(shí)間排查服務(wù)有無異常。也可以進(jìn)一步基于流量監(jiān)控做告警,使運(yùn)維人員能夠及時(shí)處理線上問題。

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密


(2)從時(shí)間軸向前看,時(shí)序數(shù)據(jù)可以建立數(shù)學(xué)模型、做統(tǒng)計(jì)分析,預(yù)測(cè)事物發(fā)展趨勢(shì)。
舉例,下圖為聯(lián)合國(guó)在2015年分析過往人口增長(zhǎng)趨勢(shì)后,發(fā)布的人口數(shù)字及預(yù)測(cè)報(bào)告。從圖中可以看出未來非洲人口將持續(xù)增長(zhǎng),這是任何一個(gè)跨國(guó)企業(yè)都不該忽略的市場(chǎng),也預(yù)示著當(dāng)?shù)卣媾R重大挑戰(zhàn)。

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密

 

1.2 時(shí)序數(shù)據(jù)的數(shù)學(xué)模型

上面介紹了時(shí)序數(shù)據(jù)的基本概念,也說明了分析時(shí)序數(shù)據(jù)的意義。那么時(shí)序數(shù)據(jù)該怎樣存儲(chǔ)呢?數(shù)據(jù)的存儲(chǔ)要考慮其數(shù)學(xué)模型和特點(diǎn),時(shí)序數(shù)據(jù)當(dāng)然也不例外。所以這里先介紹時(shí)序數(shù)據(jù)的數(shù)學(xué)模型和特點(diǎn)。

下圖為一段時(shí)序數(shù)據(jù),記錄了一段時(shí)間內(nèi)的某個(gè)集群里各機(jī)器上各端口的出入流量,每半小時(shí)記錄一個(gè)觀測(cè)值。這里以圖中的數(shù)據(jù)為例,介紹下時(shí)序數(shù)據(jù)的數(shù)學(xué)模型(不同的時(shí)序數(shù)據(jù)庫中,基本概念的稱謂有可能不同,這里以騰訊CTSDB為準(zhǔn)):

  • metric: 度量的數(shù)據(jù)集,類似于關(guān)系型數(shù)據(jù)庫中的 table;

  • point: 一個(gè)數(shù)據(jù)點(diǎn),類似于關(guān)系型數(shù)據(jù)庫中的 row;

  • timestamp: 時(shí)間戳,表征采集到數(shù)據(jù)的時(shí)間點(diǎn);

  • tag: 維度列,代表數(shù)據(jù)的歸屬、屬性,表明是哪個(gè)設(shè)備/模塊產(chǎn)生的,一般不隨著時(shí)間變化,供查詢使用;

  • field: 指標(biāo)列,代表數(shù)據(jù)的測(cè)量值,隨時(shí)間平滑波動(dòng),不需要查詢。

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密


如上圖所示,這組數(shù)據(jù)的metric為Network,每個(gè)point由以下部分組成:

  • timestamp:時(shí)間戳

  • 兩個(gè)tag:host、port,代表每個(gè)point歸屬于哪臺(tái)機(jī)器的哪個(gè)端口

  • 兩個(gè)field:bytes_in、bytes_out,代表piont的測(cè)量值,半小時(shí)內(nèi)出入流量的平均值

同一個(gè)host、同一個(gè)port,每半小時(shí)產(chǎn)生一個(gè)point,隨著時(shí)間的增長(zhǎng),field(bytes_in、bytes_out)不斷變化。如host:host4,port:51514,timestamp從02:00 到02:30的時(shí)間段內(nèi),bytes_in 從 37.937上漲到38.089,bytes_out從2897.26上漲到3009.86,說明這一段時(shí)間內(nèi)該端口服務(wù)壓力升高。


1.3 時(shí)序數(shù)據(jù)特點(diǎn)

  • 數(shù)據(jù)模式: 時(shí)序數(shù)據(jù)隨時(shí)間增長(zhǎng),相同維度重復(fù)取值,指標(biāo)平滑變化:這點(diǎn)從上面的Network表的數(shù)據(jù)變化可以看出。

  • 寫入: 持續(xù)高并發(fā)寫入,無更新操作:時(shí)序數(shù)據(jù)庫面對(duì)的往往是百萬甚至千萬數(shù)量級(jí)終端設(shè)備的實(shí)時(shí)數(shù)據(jù)寫入(如摩拜單車2017年全國(guó)車輛數(shù)為千萬級(jí)),但數(shù)據(jù)大多表征設(shè)備狀態(tài),寫入后不會(huì)更新。

  • 查詢: 按不同維度對(duì)指標(biāo)進(jìn)行統(tǒng)計(jì)分析,且存在明顯的冷熱數(shù)據(jù),一般只會(huì)頻繁查詢近期數(shù)據(jù)。

2. 時(shí)序數(shù)據(jù)庫

有了時(shí)序數(shù)據(jù)后,該存儲(chǔ)在哪里呢?首先我們看下傳統(tǒng)的解決方案在存儲(chǔ)時(shí)序數(shù)據(jù)時(shí)會(huì)遇到什么問題。


2.1 傳統(tǒng)解決方案

時(shí)序數(shù)據(jù)往往是由百萬級(jí)甚至千萬級(jí)終端設(shè)備產(chǎn)生的,寫入并發(fā)量比較高,屬于海量數(shù)據(jù)場(chǎng)景。傳統(tǒng)的時(shí)序數(shù)據(jù)解決方案主要有兩種:關(guān)系型數(shù)據(jù)庫(MySQL)、Hadoop生態(tài)。

·        MySQL:在海量的時(shí)序數(shù)據(jù)場(chǎng)景下存在如下問題

    • 存儲(chǔ)成本大:對(duì)于時(shí)序數(shù)據(jù)壓縮不佳,需占用大量機(jī)器資源;

    • 維護(hù)成本高:?jiǎn)螜C(jī)系統(tǒng),需要在上層人工的分庫分表,維護(hù)成本高;

    • 寫入吞吐低:?jiǎn)螜C(jī)寫入吞吐低,很難滿足時(shí)序數(shù)據(jù)千萬級(jí)的寫入壓力;

    • 查詢性能差:適用于交易處理,海量數(shù)據(jù)的聚合分析性能差。

·        Hadoop生態(tài)(Hadoop、Spark等)

    • 數(shù)據(jù)延遲高:離線批處理系統(tǒng),數(shù)據(jù)從產(chǎn)生到可分析,耗時(shí)數(shù)小時(shí)、甚至天級(jí);

    • 查詢性能差:不能很好的利用索引,依賴MapReduce任務(wù),查詢耗時(shí)一般在分鐘級(jí)。

2.2 時(shí)序數(shù)據(jù)庫

時(shí)序數(shù)據(jù)庫是管理時(shí)序數(shù)據(jù)的專業(yè)化數(shù)據(jù)庫,并針對(duì)時(shí)序數(shù)據(jù)的特點(diǎn)對(duì)寫入、存儲(chǔ)、查詢等流程進(jìn)行了優(yōu)化,這些優(yōu)化與時(shí)序數(shù)據(jù)的特點(diǎn)息息相關(guān):

1) 存儲(chǔ)成本:

利用時(shí)間遞增、維度重復(fù)、指標(biāo)平滑變化的特性,合理選擇編碼壓縮算法,提高數(shù)據(jù)壓縮比;

通過預(yù)降精度,對(duì)歷史數(shù)據(jù)做聚合,節(jié)省存儲(chǔ)空間。

2)  高并發(fā)寫入:

批量寫入數(shù)據(jù),降低網(wǎng)絡(luò)開銷;

數(shù)據(jù)先寫入內(nèi)存,再周期性的dump為不可變的文件存儲(chǔ)。

3)  低查詢延時(shí),高查詢并發(fā):

優(yōu)化常見的查詢模式,通過索引等技術(shù)降低查詢延時(shí);

通過緩存、routing等技術(shù)提高查詢并發(fā)。


2.3 開源時(shí)序數(shù)據(jù)庫對(duì)比

目前行業(yè)內(nèi)比較流行的開源時(shí)序數(shù)據(jù)庫產(chǎn)品有 InfluxDB、OpenTSDB、Prometheus、Graphite等,其產(chǎn)品特性對(duì)比如下圖所示:

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密

 

從上表可以看出,開源的時(shí)序數(shù)據(jù)庫存在如下問題:

  • 沒有free、易用的分布式版本(OpenTSDB支持分布式部署,但依賴系統(tǒng)過多,維護(hù)成本高);

  • 聚合能力普遍較弱,而時(shí)序數(shù)據(jù)大多需要來做統(tǒng)計(jì)分析;

  • 沒有free的權(quán)限管理;

  • 沒有針對(duì)時(shí)間序列的多維度對(duì)比分析工具。


CTSDB


騰訊CTSDB(Cloud Time Series Database)是一種分布式、高性能、多分片、自均衡的時(shí)序數(shù)據(jù)庫,針對(duì)時(shí)序數(shù)據(jù)的高并發(fā)寫入、存在明顯的冷熱數(shù)據(jù)、IoT用戶場(chǎng)景等做了大量?jī)?yōu)化,同時(shí)也支持各行業(yè)的日志解析和存儲(chǔ),其架構(gòu)如下圖所示。

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密


1. CTSDB主要特點(diǎn)

1)  高性能:(具體性能數(shù)據(jù)將在后文給出)

支持批量寫入、高并發(fā)查詢;

通過集群擴(kuò)展,隨時(shí)線性提升系統(tǒng)性能;

支持sharding、routing,加速查詢。

2)  高可靠:

支持多副本;

機(jī)架感知,自動(dòng)錯(cuò)開機(jī)架分配主從副本。

3)  易使用:

豐富的數(shù)據(jù)類型,REST接口,數(shù)據(jù)寫入查詢均使用json格式;

原生分布式,彈性可伸縮,數(shù)據(jù)自動(dòng)均衡;

4)  低成本:

支持列存儲(chǔ),高壓縮比(0.1左右),降低存儲(chǔ)成本;

支持?jǐn)?shù)據(jù)預(yù)降精度:降低存儲(chǔ)成本的同時(shí),提高查詢性能。

副本數(shù)可按需調(diào)整。

5)  強(qiáng)大的聚合能力:

max,min,avg,percentile,sum,count,group by等常用聚合;

復(fù)雜的腳本聚合(例如可對(duì)多字段間的計(jì)算結(jié)果做聚合);

時(shí)間區(qū)間聚合、GEO聚合、嵌套聚合。

6)  亮點(diǎn)能力:

數(shù)據(jù)監(jiān)控告警:對(duì)存入數(shù)據(jù)進(jìn)行數(shù)據(jù)量、字段統(tǒng)計(jì)、基線對(duì)比等監(jiān)控,通過微信、短信、郵件告警;

權(quán)限系統(tǒng):支持用戶名密碼、機(jī)器白名單的權(quán)限系統(tǒng);

數(shù)據(jù)時(shí)效性:支持?jǐn)?shù)據(jù)過期刪除;

數(shù)據(jù)導(dǎo)出。


2. 競(jìng)品性能對(duì)比測(cè)試

這里選用業(yè)界較為流行的InfluxDB來與CTSDB做性能對(duì)比測(cè)試。


2.1 測(cè)試場(chǎng)景

CTSDB與InfluxDB對(duì)比測(cè)試:CTSDB與InfluxDB均單節(jié)點(diǎn)部署,單節(jié)點(diǎn)占用24個(gè)cpu核心,128g內(nèi)存,萬兆網(wǎng)卡,,磁盤SSD RAID0。


CTSDB單節(jié)點(diǎn)集群與雙節(jié)點(diǎn)集群對(duì)比測(cè)試:用以驗(yàn)證CTSDB的線性擴(kuò)展能力。


2.2 寫入性能測(cè)試

數(shù)據(jù)樣例:

導(dǎo)入的數(shù)據(jù)由InfluxDB的官方測(cè)試工具產(chǎn)生,https://github.com/influxdata/influxdb-comparisons。

數(shù)據(jù)為若干host的時(shí)序數(shù)據(jù),每個(gè)point包含10個(gè)tag(均為string類型),10個(gè)filed(均為float類型),timestamp為時(shí)間戳(一個(gè)host每10秒一個(gè)點(diǎn))。

樣例如下所示:

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密


測(cè)試結(jié)果:
(1) CTSDB單節(jié)點(diǎn)集群與InfluxDB單機(jī)版寫入性能對(duì)比

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密

 橫坐標(biāo):并發(fā)數(shù)(寫入線程數(shù)),縱坐標(biāo):QPS(單位:萬次/s)


結(jié)論:CTSDB單節(jié)點(diǎn)寫入性能最高在19w,InfluxDB在15w。


(2) CTSDB單節(jié)點(diǎn)集群與CTSDB雙節(jié)點(diǎn)集群寫入性能對(duì)比

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密

橫坐標(biāo):并發(fā)數(shù)(寫入線程數(shù)),縱坐標(biāo):QPS(單位:萬次/s)


結(jié)論:CTSDB單節(jié)點(diǎn)集群寫入最高可達(dá)20w,雙節(jié)點(diǎn)集群寫入性能34w。


2.3 查詢性能測(cè)試

查詢樣例:

這里以CTSDB的查詢語句為例:

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密


查詢語句解讀:
取出1個(gè)host的全量數(shù)據(jù),然后任取一個(gè)小時(shí)做過濾后,按分鐘粒度分桶(groupby,最終結(jié)果有60個(gè)桶),最后輸出所有的桶,并計(jì)算桶內(nèi)所有數(shù)據(jù)的usage_user字段最大值 。


注意這里的查詢使用了CTSDB的routing功能,用以加速查詢。

查詢結(jié)果樣例:

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密


測(cè)試結(jié)果:

(1) CTSDB單節(jié)點(diǎn)集群與InfluxDB單機(jī)版查詢性能對(duì)比

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密

橫坐標(biāo):并發(fā)數(shù)(查詢線程數(shù)),縱坐標(biāo):QPS(單位:次/s)

結(jié)論:CTSDB查詢性能整體比InfluxDB好很多,當(dāng)并發(fā)數(shù)較高時(shí)(40),CTSDB查詢性能比InfluxDB高出近4倍,在2w左右。在并發(fā)線程數(shù)達(dá)到50時(shí),InfluxDB出現(xiàn)鏈接錯(cuò)誤,拒絕查詢請(qǐng)求;此時(shí),CTSDB可正常查詢。


(2) CTSDB單節(jié)點(diǎn)集群與雙節(jié)點(diǎn)集群查詢性能對(duì)比

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密

橫坐標(biāo):并發(fā)數(shù)(查詢線程數(shù)),縱坐標(biāo):QPS(單位:次/s)

 

結(jié)論:在并發(fā)數(shù)較高的情況下,雙節(jié)點(diǎn)集群查詢性能較單節(jié)點(diǎn)集群有了大幅度提升,呈現(xiàn)了查詢性能線性擴(kuò)展的趨勢(shì)。


關(guān)于我們




我們的現(xiàn)狀

作為騰訊唯一的時(shí)序數(shù)據(jù)庫,CTSDB支撐了騰訊內(nèi)部20多個(gè)核心業(yè)務(wù)(微信×××、財(cái)付通、云監(jiān)控、云數(shù)據(jù)庫、云負(fù)載等)。其中,云監(jiān)控系統(tǒng)的記錄了騰訊內(nèi)部各種軟硬件系統(tǒng)的實(shí)時(shí)狀態(tài),CTSDB承載了它所有的數(shù)據(jù)存儲(chǔ),在每秒千萬級(jí)數(shù)據(jù)點(diǎn)的寫入壓力、每天20TB+數(shù)據(jù)量的寫入場(chǎng)景下穩(wěn)定運(yùn)行,足以證明CTSDB可以穩(wěn)定支撐物聯(lián)網(wǎng)的海量數(shù)據(jù)場(chǎng)景。


我們的未來

騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密

CTSDB即將在騰訊云正式上線,為物聯(lián)行業(yè)提供技術(shù)服務(wù)!我們將在降低存儲(chǔ)成本、提升易用性和豐富功能性等方面進(jìn)一步優(yōu)化CTSDB!歡迎對(duì)時(shí)序數(shù)據(jù)庫和分布式存儲(chǔ)感興趣的同學(xué)加入我們!


騰訊技術(shù)工程 | 騰訊唯一時(shí)序數(shù)據(jù)庫:CTSDB解密


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI