一、背景
隨著移動(dòng)互聯(lián)網(wǎng)、物聯(lián)網(wǎng)、大數(shù)據(jù)等行業(yè)的高速發(fā)展,數(shù)據(jù)在持續(xù)的以指數(shù)級(jí)的速度增長(zhǎng),比如我們使用手機(jī)訪問互網(wǎng)絡(luò)時(shí)的行為數(shù)據(jù),各種可穿戴設(shè)備上報(bào)的狀態(tài)數(shù)據(jù),工廠中設(shè)備傳感器采集的指標(biāo)數(shù)據(jù),傳統(tǒng)互聯(lián)網(wǎng)公司的監(jiān)控?cái)?shù)據(jù)等。實(shí)際上,這些按照時(shí)間順序記錄系統(tǒng)、設(shè)備狀態(tài)變化的數(shù)據(jù)都是時(shí)序數(shù)據(jù)(Time Series),它普遍存在于互聯(lián)網(wǎng)、物聯(lián)網(wǎng)、IT基礎(chǔ)設(shè)施中。
得益于軟硬件技術(shù)的快速發(fā)展,處理如此龐大的時(shí)序數(shù)據(jù)集的成本在持續(xù)降低,更多公司開始持續(xù)收集、分析數(shù)據(jù),用于異常處理、趨勢(shì)預(yù)測(cè)、精準(zhǔn)營(yíng)銷、風(fēng)險(xiǎn)控制等場(chǎng)景,希望利用數(shù)據(jù)的潛在價(jià)值,提高公司盈利能力和競(jìng)爭(zhēng)力。這里舉兩個(gè)例子:
1.下圖為某共享單車在舊金山某熱門區(qū)域的車輛借還情況。通過分析該區(qū)域車輛的歷史借還數(shù)據(jù),單車公司可優(yōu)化熱點(diǎn)時(shí)間段的車輛補(bǔ)給。
2. 下圖為某互聯(lián)網(wǎng)服務(wù)的出入流量歷史記錄。從圖中可以明顯看到入流量(藍(lán)色線)在某時(shí)間段有毛刺,服務(wù)提供商可基于此段時(shí)間排查服務(wù)有無異常??梢赃M(jìn)一步基于流量監(jiān)控做告警,使運(yùn)維人員能夠及時(shí)處理線上問題。
二、傳統(tǒng)時(shí)序數(shù)據(jù)解決方案存在大量問題
傳統(tǒng)的時(shí)序數(shù)據(jù)解決方案及問題如下:
1. MySQL等關(guān)系型數(shù)據(jù)庫:
。 寫入吞吐低:?jiǎn)螜C(jī)寫入吞吐低,很難滿足時(shí)序數(shù)據(jù)千萬級(jí)的寫入壓力;
。 存儲(chǔ)成本大:對(duì)于時(shí)序數(shù)據(jù)壓縮不佳,需占用大量機(jī)器資源;
。 維護(hù)成本高:?jiǎn)螜C(jī)系統(tǒng),需要在上層人工的分庫分表,維護(hù)成本高;
。 查詢性能差:適用于交易處理,海量數(shù)據(jù)的聚合分析性能差。
2. Hadoop、Spark等批處理系統(tǒng)
。 數(shù)據(jù)延遲高:離線批處理系統(tǒng),數(shù)據(jù)從產(chǎn)生到可分析,耗時(shí)數(shù)小時(shí)、甚至天級(jí);
。 查詢性能差:不能很好的利用索引,依賴批處理任務(wù),查詢耗時(shí)一般在分鐘級(jí)以上。
3. HBase
。 多維分析能力差:HBase可以較好的滿足寫入壓力,但對(duì)于非RowKey前綴的查詢性能較差;
。 維護(hù)成本:使用HBase需要同時(shí)維護(hù)HBase和Hadoop等系統(tǒng),且HBase的穩(wěn)定性會(huì)進(jìn)一步加大維護(hù)成本。
三、寫入、存儲(chǔ)、查詢多環(huán)節(jié)優(yōu)化,時(shí)序數(shù)據(jù)庫優(yōu)勢(shì)明顯
1. 時(shí)序數(shù)據(jù)模型及特點(diǎn)
在引入時(shí)序數(shù)據(jù)庫之前,先要了解「時(shí)序數(shù)據(jù)」的模型及特點(diǎn)。
1.1 時(shí)序數(shù)據(jù)的數(shù)學(xué)模型
前面介紹了時(shí)序數(shù)據(jù)的場(chǎng)景,也說明了分析時(shí)序數(shù)據(jù)的意義及傳統(tǒng)方案。那么時(shí)序數(shù)據(jù)該怎樣存儲(chǔ)呢?數(shù)據(jù)的存儲(chǔ)要考慮其數(shù)學(xué)模型和特點(diǎn),時(shí)序數(shù)據(jù)當(dāng)然也不例外。這里以一段時(shí)序數(shù)據(jù)為例,介紹下時(shí)序數(shù)據(jù)的數(shù)學(xué)模型。
下列數(shù)據(jù)記錄了一段時(shí)間內(nèi)某集群里各機(jī)器上各端口的出入流量,每半小時(shí)記錄一個(gè)觀測(cè)值:
。 metric: 相關(guān)聯(lián)的數(shù)據(jù)集合,類似于關(guān)系型數(shù)據(jù)庫中的 table;
。 point: 一個(gè)時(shí)序數(shù)據(jù)點(diǎn),類似于關(guān)系型數(shù)據(jù)庫中的 row;
。 timestamp: 時(shí)間戳,表征時(shí)序數(shù)據(jù)產(chǎn)生的時(shí)間點(diǎn);
。 tag: 維度列,用于描述設(shè)備/系統(tǒng)的屬性,表明是哪個(gè)設(shè)備/模塊產(chǎn)生的,一般不隨著時(shí)間變化;
。 field: 指標(biāo)列,用于描述設(shè)備/系統(tǒng)狀態(tài)的變化,隨時(shí)間平滑波動(dòng)。
1.2 時(shí)序數(shù)據(jù)特點(diǎn)
。 數(shù)據(jù)模式: 時(shí)序數(shù)據(jù)隨時(shí)間增長(zhǎng),相同設(shè)備/系統(tǒng)的維度信息不變,指標(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ù)庫
2.1 時(shí)序數(shù)據(jù)庫
時(shí)序數(shù)據(jù)庫是管理時(shí)序數(shù)據(jù)的專業(yè)化數(shù)據(jù)庫,并針對(duì)時(shí)序數(shù)據(jù)的特點(diǎn)對(duì)寫入、存儲(chǔ)、查詢等流程進(jìn)行了優(yōu)化,從而解決時(shí)序數(shù)據(jù)處理難題:
。 存儲(chǔ)成本:
o 利用維度重復(fù)、時(shí)間遞增、指標(biāo)平滑變化等特性,合理選擇編碼壓縮算法,提高數(shù)據(jù)壓縮比;