您好,登錄后才能下訂單哦!
在引入時(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ǔ)給。
下圖為某互聯(lián)網(wǎng)服務(wù)的出入流量歷史記錄。從圖中可以明顯看到入流量(藍(lán)色線)在某時(shí)間段有毛刺,服務(wù)提供商可基于此段時(shí)間排查服務(wù)有無異常。也可以進(jìn)一步基于流量監(jiān)控做告警,使運(yùn)維人員能夠及時(shí)處理線上問題。
(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ù)據(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ù)據(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ù)壓力升高。
數(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ù)。
有了時(shí)序數(shù)據(jù)后,該存儲(chǔ)在哪里呢?首先我們看下傳統(tǒng)的解決方案在存儲(chǔ)時(shí)序數(shù)據(jù)時(shí)會(huì)遇到什么問題。
時(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í)。
時(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ā)。
目前行業(yè)內(nèi)比較流行的開源時(shí)序數(shù)據(jù)庫產(chǎn)品有 InfluxDB、OpenTSDB、Prometheus、Graphite等,其產(chǎn)品特性對(duì)比如下圖所示:
從上表可以看出,開源的時(shí)序數(shù)據(jù)庫存在如下問題:
沒有free、易用的分布式版本(OpenTSDB支持分布式部署,但依賴系統(tǒng)過多,維護(hù)成本高);
聚合能力普遍較弱,而時(shí)序數(shù)據(jù)大多需要來做統(tǒng)計(jì)分析;
沒有free的權(quán)限管理;
沒有針對(duì)時(shí)間序列的多維度對(duì)比分析工具。
騰訊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)如下圖所示。
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)出。
這里選用業(yè)界較為流行的InfluxDB來與CTSDB做性能對(duì)比測(cè)試。
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ò)展能力。
數(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))。
樣例如下所示:
測(cè)試結(jié)果:
(1) CTSDB單節(jié)點(diǎn)集群與InfluxDB單機(jī)版寫入性能對(duì)比
橫坐標(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ì)比
橫坐標(biāo):并發(fā)數(shù)(寫入線程數(shù)),縱坐標(biāo):QPS(單位:萬次/s)
結(jié)論:CTSDB單節(jié)點(diǎn)集群寫入最高可達(dá)20w,雙節(jié)點(diǎn)集群寫入性能34w。
查詢樣例:
這里以CTSDB的查詢語句為例:
查詢語句解讀:
取出1個(gè)host的全量數(shù)據(jù),然后任取一個(gè)小時(shí)做過濾后,按分鐘粒度分桶(groupby,最終結(jié)果有60個(gè)桶),最后輸出所有的桶,并計(jì)算桶內(nèi)所有數(shù)據(jù)的usage_user字段最大值 。
注意這里的查詢使用了CTSDB的routing功能,用以加速查詢。
查詢結(jié)果樣例:
測(cè)試結(jié)果:
(1) CTSDB單節(jié)點(diǎn)集群與InfluxDB單機(jī)版查詢性能對(duì)比
橫坐標(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ì)比
橫坐標(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)景。
CTSDB即將在騰訊云正式上線,為物聯(lián)行業(yè)提供技術(shù)服務(wù)!我們將在降低存儲(chǔ)成本、提升易用性和豐富功能性等方面進(jìn)一步優(yōu)化CTSDB!歡迎對(duì)時(shí)序數(shù)據(jù)庫和分布式存儲(chǔ)感興趣的同學(xué)加入我們!
免責(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)容。