隨著物(wu)(wu)聯(lian)網、車聯(lian)網的(de)(de)(de)(de)高速發展,IT 基礎(chu)設施規(gui)模的(de)(de)(de)(de)增大,數(shu)據(ju)的(de)(de)(de)(de)采集量(liang)(liang)越(yue)來越(yue)大,單(dan)機(ji)是(shi)沒有辦法解決問題的(de)(de)(de)(de),底層數(shu)據(ju)庫(ku)必(bi)須(xu)具有水平擴展能力。大部分(fen)開(kai)(kai)源(yuan)的(de)(de)(de)(de)時序數(shu)據(ju)庫(ku)都不是(shi)分(fen)布(bu)式的(de)(de)(de)(de),換(huan)句話說,就(jiu)是(shi)集群(qun)版(ban)不開(kai)(kai)源(yuan),包括 InfluxDB 集群(qun)功(gong)能也只能在企(qi)業(ye)版(ban)中使用(yong)。很多(duo)企(qi)業(ye)使用(yong)的(de)(de)(de)(de)是(shi)開(kai)(kai)源(yuan)時序數(shu)據(ju)庫(ku)的(de)(de)(de)(de)單(dan)機(ji)版(ban),后續為了(le)應對海量(liang)(liang)數(shu)據(ju)的(de)(de)(de)(de)處理,只好自己投入人力物(wu)(wu)力,在單(dan)機(ji)版(ban)的(de)(de)(de)(de)基礎(chu)上,開(kai)(kai)發自己的(de)(de)(de)(de) Proxy,對數(shu)據(ju)進行分(fen)片處理。對于數(shu)據(ju)寫入,這種方法簡單(dan)而(er)且(qie)有效。但是(shi)對于查詢,往(wang)往(wang)牽涉多(duo)個節點,那么 Proxy 就(jiu)要做(zuo)各種查詢的(de)(de)(de)(de)聚合,因此開(kai)(kai)發的(de)(de)(de)(de)工作量(liang)(liang)很大。
有些公司為了(le)避免麻煩,就選用(yong)(yong) OpenTSDB,因為它(ta)把分(fen)布(bu)式(shi)版本也開源了(le)。從使(shi)用(yong)(yong)的(de)角(jiao)度來看,OpenTSDB 底(di)層的(de)存儲引(yin)擎用(yong)(yong)的(de)是 HBase,安裝維護極為復雜,存儲壓縮性(xing)能不夠(gou),查詢(xun)效率也很低,不是一個(ge)優秀的(de)產品。但它(ta)仍然有相當多的(de)用(yong)(yong)戶,這唯一的(de)原因就是由于它(ta)支(zhi)持分(fen)布(bu)式(shi),可以水(shui)平(ping)線(xian)性(xing)擴(kuo)展。
TDengine 的(de)(de)設(she)計(ji)(ji)是(shi)(shi)基于單(dan)個硬件、軟件系(xi)(xi)統(tong)不可靠(kao),基于任何單(dan)臺計(ji)(ji)算機都無法提(ti)供足夠計(ji)(ji)算能力和存儲能力處理海量(liang)數(shu)據的(de)(de)假設(she)而進行設(she)計(ji)(ji)的(de)(de)。因(yin)此 TDengine 從研發(fa)的(de)(de)第(di)一天(tian)起,就是(shi)(shi)按照水(shui)平(ping)擴(kuo)(kuo)展、高可用架構進行設(she)計(ji)(ji)的(de)(de)。通(tong)過對(dui)數(shu)據進行分(fen)區、分(fen)片,而且采用虛擬節點(dian)(vnode)技術(shu),保(bao)證系(xi)(xi)統(tong)的(de)(de)處理能力是(shi)(shi)水(shui)平(ping)擴(kuo)(kuo)展的(de)(de)。如果要增(zeng)加系(xi)(xi)統(tong)的(de)(de)處理能力,只需要增(zeng)加新的(de)(de)節點(dian)即可。
更好的是,和 InfluxDB集群功能閉源不同,2020年8月,TDengine 團隊將集群版開源了。
TDengine 是通過數(shu)據(ju)采集點以(yi)及時間兩(liang)個維(wei)度,對大數(shu)據(ju)進行切(qie)分(fen),實現水平擴展的。

分片:在(zai) TDengine Database 的(de)(de)設計(ji)與實現(xian)里(li),一(yi)(yi)個(ge)集群(qun)有多(duo)個(ge)節(jie)(jie)點(dian)(dian)(dian),每個(ge)節(jie)(jie)點(dian)(dian)(dian)可以有一(yi)(yi)個(ge)或多(duo)個(ge)虛(xu)擬節(jie)(jie)點(dian)(dian)(dian)(vnode),每個(ge)虛(xu)擬節(jie)(jie)點(dian)(dian)(dian)里(li)存儲了一(yi)(yi)定(ding)數(shu)(shu)(shu)量(liang)(liang)的(de)(de)數(shu)(shu)(shu)據(ju)采集點(dian)(dian)(dian)的(de)(de)數(shu)(shu)(shu)據(ju),而一(yi)(yi)個(ge)數(shu)(shu)(shu)據(ju)采集點(dian)(dian)(dian)的(de)(de)數(shu)(shu)(shu)據(ju)永(yong)遠(yuan)只(zhi)存放在(zai)一(yi)(yi)個(ge) vnode 里(li)。這樣如果有很多(duo)數(shu)(shu)(shu)據(ju)采集點(dian)(dian)(dian),這些數(shu)(shu)(shu)據(ju)采集點(dian)(dian)(dian)的(de)(de)數(shu)(shu)(shu)據(ju)將(jiang)會分布在(zai)多(duo)個(ge) vnode 上(shang),分布在(zai)多(duo)個(ge)節(jie)(jie)點(dian)(dian)(dian)里(li)。數(shu)(shu)(shu)據(ju)寫(xie)入時,TDengine Database 的(de)(de)客戶端將(jiang)要寫(xie)入的(de)(de)數(shu)(shu)(shu)據(ju)直接寫(xie)入對應的(de)(de) vnode,從而實現(xian)寫(xie)入的(de)(de)水平擴展。對于單個(ge)數(shu)(shu)(shu)據(ju)采集點(dian)(dian)(dian)數(shu)(shu)(shu)據(ju)的(de)(de)查(cha)(cha)詢(xun),毫無疑(yi)問,是(shi)水平擴展的(de)(de),節(jie)(jie)點(dian)(dian)(dian)越多(duo),吞吐率就越大(da)(da)。對于聚(ju)合(he)(he)(he)(he)查(cha)(cha)詢(xun),查(cha)(cha)詢(xun)請(qing)求將(jiang)先發送到對應的(de)(de) vnode 里(li),vnode 先做完聚(ju)合(he)(he)(he)(he)操(cao)作,客戶端然后將(jiang)來(lai)自多(duo)個(ge) vnode 的(de)(de)查(cha)(cha)詢(xun)結果做第二次(ci)聚(ju)合(he)(he)(he)(he),因為 vnode 數(shu)(shu)(shu)量(liang)(liang)有限(xian),這樣在(zai)客戶端做的(de)(de)聚(ju)合(he)(he)(he)(he)查(cha)(cha)詢(xun)計(ji)算量(liang)(liang)不大(da)(da),從而實現(xian)聚(ju)合(he)(he)(he)(he)查(cha)(cha)詢(xun)的(de)(de)水平擴展能力。
分區:除將數(shu)(shu)據(ju)(ju)(ju)(ju)分片(pian)之外,TDengine 還(huan)將一個(ge) vnode 里(li)存(cun)(cun)儲的(de)(de)時(shi)(shi)序數(shu)(shu)據(ju)(ju)(ju)(ju)按照時(shi)(shi)間(jian)(jian)段(duan)進(jin)行切(qie)分。每個(ge)時(shi)(shi)間(jian)(jian)段(duan)的(de)(de)數(shu)(shu)據(ju)(ju)(ju)(ju)都一定(ding)保存(cun)(cun)在一起,不(bu)同時(shi)(shi)間(jian)(jian)段(duan)的(de)(de)數(shu)(shu)據(ju)(ju)(ju)(ju)不(bu)會有(you)交集(ji),時(shi)(shi)間(jian)(jian)段(duan)可(ke)以是一天,幾天,一周,由用戶自己定(ding)義。按照時(shi)(shi)間(jian)(jian)段(duan)切(qie)分時(shi)(shi)序數(shu)(shu)據(ju)(ju)(ju)(ju)有(you)很多好處,查(cha)詢(xun)數(shu)(shu)據(ju)(ju)(ju)(ju)時(shi)(shi),根(gen)據(ju)(ju)(ju)(ju)時(shi)(shi)間(jian)(jian)段(duan),可(ke)以直接定(ding)位要查(cha)找的(de)(de)文件,從(cong)而加快查(cha)詢(xun)速(su)度。另(ling)外一方面,可(ke)以高效地實現(xian)數(shu)(shu)據(ju)(ju)(ju)(ju)保留策(ce)略。超過(guo)最長(chang)保留時(shi)(shi)間(jian)(jian)的(de)(de)數(shu)(shu)據(ju)(ju)(ju)(ju),直接刪(shan)除一個(ge)時(shi)(shi)間(jian)(jian)段(duan)對應的(de)(de)文件即可(ke)。而且按照時(shi)(shi)間(jian)(jian)段(duan)切(qie)分數(shu)(shu)據(ju)(ju)(ju)(ju),還(huan)可(ke)以方便實現(xian)多級存(cun)(cun)儲,冷熱(re)數(shu)(shu)據(ju)(ju)(ju)(ju)放在不(bu)同存(cun)(cun)儲介質(zhi)上(shang),進(jin)一步降低存(cun)(cun)儲成本。
TDengine 還通過虛擬(ni)節點組(zu)技術來提(ti)供系(xi)(xi)統的(de)高可(ke)用。不同物理節點上(shang)(shang)的(de) vnode 可(ke)以(yi)形成一個(ge)虛擬(ni)節點組(zu),這個(ge)虛擬(ni)節點組(zu)里的(de)數據(ju)是通過 Master-Slave 來進行(xing)同步的(de),來保證(zheng)這個(ge)虛擬(ni)節點組(zu)內(nei)數據(ju)的(de)一致性。數據(ju)寫(xie)入只能在 master 進行(xing),但查(cha)詢可(ke)以(yi)在 master 和 slave 上(shang)(shang)同時進行(xing)。如果 Master 出(chu)現故障,系(xi)(xi)統將自動選(xuan)主,這樣來保證(zheng)系(xi)(xi)統的(de)高可(ke)用,不會由(you)于某臺機器宕機,而無(wu)法對外提(ti)供服(fu)務。
關于(yu)集群的具體使用,請看《》。


























