導(dǎo)讀:本次分享主要介紹以下四方面:
- 時(shí)序業(yè)務(wù)全景
- TSDB介紹
- 核心技術(shù)
- 總結(jié)展望
01
時(shí)序業(yè)務(wù)全景
從底層的機(jī)器監(jiān)控到直面用戶的應(yīng)用,都離不開(kāi)時(shí)序性的業(yè)務(wù)場(chǎng)景,而時(shí)序性的數(shù)據(jù)一般都由專業(yè)的時(shí)序數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)分析,下面主要介紹TSDB覆蓋的業(yè)務(wù)場(chǎng)景以及面臨的挑戰(zhàn)。
1. 時(shí)序數(shù)據(jù)庫(kù)覆蓋場(chǎng)景
- 基礎(chǔ)設(shè)施層:機(jī)柜、物理機(jī)、操作系統(tǒng)監(jiān)控日志
- 基礎(chǔ)運(yùn)維:sunfire(集團(tuán)統(tǒng)一監(jiān)控、采集、報(bào)警系統(tǒng))、阿里云監(jiān)控、GOC(阿里全球應(yīng)急調(diào)度指揮系統(tǒng))
- 資源調(diào)度:集團(tuán)內(nèi)部調(diào)度系統(tǒng)、Kubernetes
- 集群管理:DBPaas(阿里所有數(shù)據(jù)庫(kù)實(shí)例的監(jiān)控和調(diào)度)
- 應(yīng)用層:APM場(chǎng)景下的各種應(yīng)用
2. 時(shí)序數(shù)據(jù)庫(kù)面臨的挑戰(zhàn)
由于面臨各個(gè)層級(jí)的不用場(chǎng)景,所以時(shí)序數(shù)據(jù)庫(kù)也面臨不同挑戰(zhàn):
- 應(yīng)用層挑戰(zhàn):由于直面客戶所以需要提供高頻率、低延遲的查詢
- olap數(shù)據(jù)庫(kù)本身特性:海量數(shù)據(jù)的聚合
- 時(shí)序數(shù)據(jù)庫(kù)特有的:發(fā)散時(shí)間線
- 雙十一大促:突然流量十倍以上增長(zhǎng)
—
02
TSDB介紹
1.TSDB的發(fā)展及性能
TSDB于2016年開(kāi)始服役,到目前為止參與了三次雙十一大促,相比于2017年讀寫吞吐翻倍增長(zhǎng),寫入TPS4000w,查詢2wQPS覆蓋集團(tuán)130+業(yè)務(wù)線及存儲(chǔ)百億的時(shí)間線。
2.TSDB架構(gòu)介紹
如上圖,從左到右為數(shù)據(jù)的采集到展現(xiàn)的過(guò)程:
邊緣計(jì)算:輕量可靠的計(jì)算方案,主要負(fù)責(zé)數(shù)據(jù)的采集,與云端的TSDB打通,在OLAP場(chǎng)景或者資源不穩(wěn)定的場(chǎng)景下實(shí)現(xiàn)數(shù)據(jù)的穩(wěn)定采集、清洗等。
時(shí)序引擎:
時(shí)序索引:時(shí)間線的查詢;
儲(chǔ)存引擎:時(shí)序數(shù)據(jù)、海量數(shù)據(jù)存儲(chǔ)的解決方案;
流式數(shù)據(jù)聚合:在時(shí)序數(shù)據(jù)庫(kù)的海量數(shù)據(jù)里做高效的的聚合分析;
穩(wěn)定性管理:在云上穩(wěn)定安全的運(yùn)行;
計(jì)算引擎、sql引擎、智能引擎:主要與時(shí)序引擎交互實(shí)現(xiàn)數(shù)據(jù)計(jì)算、sql解析、模型算法等功能,可以擴(kuò)展時(shí)序引擎的能力,降低使用的門檻;
協(xié)議支持:主要面向用戶,為用戶提供一些可視化的查詢和分析支持。
—
03
核心技術(shù)
1.海量時(shí)序數(shù)據(jù)存儲(chǔ)
(1)數(shù)據(jù)壓縮
說(shuō)起存儲(chǔ)就離不開(kāi)壓縮,數(shù)據(jù)的壓縮方法和壓縮算法的選擇很大程度上支持了海量數(shù)據(jù)的儲(chǔ)存。
如上圖代表時(shí)間窗口為一小時(shí)的數(shù)據(jù),0-3600代表過(guò)去一個(gè)小時(shí)內(nèi)的數(shù)據(jù),采用key-value存儲(chǔ)格式,以秒值作為key,每秒的數(shù)據(jù)作為value存儲(chǔ)。
這里參考facebook grada思想引入了時(shí)序壓縮算法,通過(guò)列合并的方式把所有的時(shí)間戳和對(duì)應(yīng)的value聚合長(zhǎng)兩個(gè)的大數(shù)據(jù)塊,然后對(duì)這個(gè)兩個(gè)大塊進(jìn)行時(shí)序壓縮算法,然后再用通用的塊壓縮算法進(jìn)行壓縮。
另外不同的數(shù)據(jù)類型采用不同的數(shù)據(jù)壓縮格式,如:
- 時(shí)間戳:delta- delta
- 浮點(diǎn)型:XOR編碼
- 整型:variable length encoding
- 字符串:LZ4,實(shí)現(xiàn)了存儲(chǔ)層亂序數(shù)據(jù)壓縮,保證壓縮數(shù)據(jù)的準(zhǔn)確性,整理的壓縮率在15:1。
(2)數(shù)據(jù)壓縮效果
為什么要采用時(shí)序壓縮+塊壓縮,我們可以看一下這個(gè)圖。
首先時(shí)序壓縮針對(duì)不同類型的數(shù)據(jù)采用了不同的壓縮格式,所以整體的效果優(yōu)于塊壓縮算法,而在時(shí)序壓縮算法對(duì)數(shù)據(jù)壓縮后在采用通用的塊壓縮,不會(huì)影響到塊壓縮的壓縮效率,用時(shí)序壓縮+塊壓縮相比單獨(dú)的塊壓縮能有40%的壓縮率提升,這為海量數(shù)據(jù)的存儲(chǔ)提供了有力的幫助。
2.高頻、低延遲查詢
淘寶魔兔是阿里一款應(yīng)用無(wú)線端數(shù)據(jù)分析和監(jiān)控的產(chǎn)品,支持集團(tuán)內(nèi)部500+的應(yīng)用,在雙十一大促是查詢峰值可達(dá)4000QPS,相較于平常查詢量有10倍的提升,,99%讀寫rt都要求在20ms以內(nèi),那么TSDB是如何實(shí)現(xiàn)用戶端高頻、低延遲的查詢呢?
(1)分布式緩存存儲(chǔ)適配
參考Facebook Gorilla論文,基于java做了一套分布式的內(nèi)存緩存存儲(chǔ),基于zookeeper實(shí)現(xiàn)分片及容量的調(diào)整,可以實(shí)現(xiàn)動(dòng)態(tài)的擴(kuò)容和縮容,在整個(gè)雙11過(guò)程中支持1000wTPS的寫入和4000的QPS的查詢。
(2)TsMem設(shè)計(jì)
如圖所示,TsMem基于Disruptor做一個(gè)RingBuffer,把用戶讀寫的請(qǐng)求都暫存在RingBuffer中,采用多個(gè)生產(chǎn)者和一個(gè)消費(fèi)者模式,一個(gè)消費(fèi)者的請(qǐng)求會(huì)打到多個(gè)worker線程中,每一個(gè)worker線程又是一個(gè)分片,所以其實(shí)就是基于RingBuffer做了一個(gè)內(nèi)存的分片,這樣一來(lái)就是一個(gè)線程對(duì)應(yīng)一個(gè)分片,這樣就不會(huì)產(chǎn)生共享資源,也就無(wú)需考慮鎖的實(shí)現(xiàn)。
把寫和讀都分配到一個(gè)鏈路上,一個(gè)worker同時(shí)處理讀和寫,提高讀寫性能
同時(shí)還利用了RingBuffer的batching特性,將用戶的讀寫請(qǐng)求都暫存在一個(gè)butching中,然后當(dāng)達(dá)到一定閾值或時(shí)間worker將直接提交一個(gè)batching,這樣雖然會(huì)是請(qǐng)求有一定的延遲,但是大大提高了worker的吞吐量。
那么如何保證高效的內(nèi)存管理和極低毛刺的延遲呢?
對(duì)于數(shù)據(jù)塊基于引用計(jì)數(shù)的chunk池化管理,把所有的時(shí)序數(shù)據(jù)塊在內(nèi)存中做了池化,這樣就能減少讀取數(shù)據(jù)時(shí)臨時(shí)對(duì)象的創(chuàng)建,而且還能避免大塊時(shí)產(chǎn)生的抖動(dòng)和延遲。
3.高緯聚合分析
(1)TSDB引擎核心模塊
TSDB和核心模塊主要包含兩部分,分別是時(shí)序索引和流式聚合引擎,當(dāng)用戶的一個(gè)查詢請(qǐng)求過(guò)來(lái)時(shí)將會(huì)由時(shí)序查詢引擎返回對(duì)應(yīng)的時(shí)序索引構(gòu)建Pipeline時(shí)間線集合,然后再由流式聚合引擎計(jì)算出相應(yīng)的聚合結(jié)果。
(2)時(shí)序索引
時(shí)序索引是什么?
本質(zhì)是一個(gè)帶時(shí)間戳的倒排索引,對(duì)數(shù)據(jù)進(jìn)行倒排索引,然后在加上時(shí)間戳,這樣當(dāng)用戶的請(qǐng)求過(guò)來(lái)時(shí)就可以根據(jù)用戶的篩選條件獲取數(shù)據(jù)的位置,然后再用時(shí)間線和時(shí)間戳進(jìn)行二次過(guò)濾,這樣提高了索引的命中率,同時(shí)也支持對(duì)時(shí)間線的TTL。
如何存儲(chǔ)?
時(shí)序索引是基于kv進(jìn)行存儲(chǔ),是一個(gè)無(wú)狀態(tài)的節(jié)點(diǎn),可以支持水平擴(kuò)展。
(3)時(shí)序索引優(yōu)化器
時(shí)序索引優(yōu)化器主要是為了幫助用戶在查詢倒排索引的時(shí)候提高效率,這里優(yōu)化器會(huì)對(duì)于用戶的請(qǐng)求有三個(gè)處理:
- HLL計(jì)數(shù)器:根據(jù)用戶的查詢規(guī)則匹配歷史的時(shí)間線數(shù)量,或者某個(gè)tag下的時(shí)間線數(shù)量;
- BloomFilter:根據(jù)布隆過(guò)濾器判斷某個(gè)時(shí)間線是否存在;
- 時(shí)序索引緩存:直接查詢緩存中是否已有相同的時(shí)間線內(nèi)容。
優(yōu)化器對(duì)于用戶查詢?nèi)绾卧u(píng)估優(yōu)化?
首先會(huì)根據(jù)用戶的查詢條件選取最小的集合進(jìn)行計(jì)算,然后會(huì)判斷查詢的時(shí)間線是否存在,如果不存在直接返回,一些明確限定的條件優(yōu)先于模糊的條件,例如等于肯定優(yōu)先于包含。
(4)流式聚合引擎
流式聚合引擎采用輕量單進(jìn)程實(shí)現(xiàn),在用戶查詢的時(shí)候?qū)⒂脩舻膹?fù)雜查詢轉(zhuǎn)換為聚合算子組合,流式聚合引擎包含了10+核心的聚合算子、20+填充策略、10+插值算法。
由于是將復(fù)雜的查詢轉(zhuǎn)換為算子組合運(yùn)算,所以在實(shí)現(xiàn)上是一個(gè)松耦合的結(jié)構(gòu),擴(kuò)展性很強(qiáng)而且每個(gè)算子的執(zhí)行都非常高效,快速,減少了對(duì)內(nèi)存的開(kāi)銷以及底層存儲(chǔ)的壓力,另外聚合出和數(shù)據(jù)還可以與外部預(yù)聚合、降精度聚合的數(shù)據(jù)實(shí)現(xiàn)無(wú)縫銜接,提高了查詢結(jié)果的復(fù)用率。
4.穩(wěn)定性保障
(1)TSBD穩(wěn)定保障機(jī)制
TSDB不僅服務(wù)于專有云,更服務(wù)于公有云上的客戶,因此穩(wěn)定性是一個(gè)可以和內(nèi)核提到同等層次的問(wèn)題,TSDB從三個(gè)方面實(shí)現(xiàn)了穩(wěn)定性的保障。
- 資源隔離
讀寫線程分離:保障了查詢有故障時(shí)不會(huì)影響寫入,寫入有故障時(shí)不會(huì)影響查詢;
慢查詢、大查詢的隔離:根據(jù)用戶的查詢條件生成一個(gè)指紋,在根據(jù)歷史記錄判斷這個(gè)指紋是不是一個(gè)慢查詢或者大查詢,如果是的話會(huì)將這個(gè)查詢放到一個(gè)單獨(dú)的隊(duì)列,這個(gè)隊(duì)列的資源是受限的,而正常的查詢會(huì)進(jìn)入到正常的隊(duì)列,這樣一定程度上加速了整體查詢的速度;
查詢狀態(tài)管理和調(diào)度:查詢?nèi)蝿?wù)的狀態(tài)管理和監(jiān)控與任務(wù)的調(diào)度分離,這樣降低了任務(wù)管理和調(diào)度的耦合性,提高了任務(wù)運(yùn)行的穩(wěn)定性。
- 基于時(shí)間線、時(shí)序數(shù)據(jù)的細(xì)粒度流控
每一份數(shù)據(jù)都通過(guò)倒排索引+時(shí)間戳的索引方式定位,保證用戶的查詢條件能更粒度的命中數(shù)據(jù),減少不必須的資源消耗。
- 全面的監(jiān)控指標(biāo)
TSDB對(duì)整體的吞吐量、查詢響應(yīng)時(shí)間、IO層關(guān)鍵指標(biāo)、以及各個(gè)核心模塊都有詳細(xì)而全面的監(jiān)控,保證能實(shí)時(shí)的了解到TSDB內(nèi)部發(fā)生了什么問(wèn)題,繼而快速的定位解決問(wèn)題。
(2)TSDB工作負(fù)載管理
端到端的流控:在用戶的寫入接口會(huì)做資源的IO控制,兩個(gè)核心模塊時(shí)序索引、聚合引擎的入口層也會(huì)做一個(gè)IO流控,保證黨用戶的寫入量或多或者查詢量過(guò)大時(shí),兩個(gè)核心模塊不收影響;
多維度的控制:從不同維度對(duì)TSDB的讀寫進(jìn)行一些限制,例如查詢的時(shí)間線過(guò)長(zhǎng)、訪問(wèn)的數(shù)據(jù)點(diǎn)過(guò)多,讀取的字節(jié)數(shù)過(guò)大、整個(gè)查詢消耗的時(shí)間過(guò)長(zhǎng)等等。
—
04
總結(jié)展望
前面已經(jīng)介紹了TSDB的發(fā)展歷程和解決的問(wèn)題,下面將要介紹TSDB未來(lái)的發(fā)展方向及特性:
1. 冷熱數(shù)據(jù)異構(gòu)存儲(chǔ)
隨著時(shí)間的推移數(shù)據(jù)量會(huì)越來(lái)越龐大,為了降低用戶成本一些不必要或者低熱度的數(shù)據(jù)不需要按照現(xiàn)有的數(shù)據(jù)存儲(chǔ)方式來(lái)保存,可以換成一種更低成本的存儲(chǔ)方式。
2. 提高Serverless讀寫能力
- 提供能高頻率、低延遲的查詢
- OLAP系統(tǒng)長(zhǎng)時(shí)間高緯度的分析
- 對(duì)于歷史數(shù)據(jù)分析或者冷數(shù)據(jù)的分析
- 降低計(jì)算和查詢的成本
3. 擁抱時(shí)序生態(tài)
將已有的時(shí)序引擎和計(jì)算引擎與業(yè)界很多成熟的時(shí)序生態(tài),比如prometheus、kubernetes、openTSDB等結(jié)合,為用戶體用更好的解決方案。
4. 時(shí)序智能分析
為用戶提供更多穩(wěn)定、可靠的智能分析模型,深入行業(yè)內(nèi)部了解一些用戶的痛點(diǎn),解決一些亟待解決的問(wèn)題。
本文經(jīng)授權(quán)發(fā)布,不代表增長(zhǎng)黑客立場(chǎng),如若轉(zhuǎn)載,請(qǐng)注明出處:http://allfloridahomeinspectors.com/cgo/product/66820.html