如何進(jìn)行OpenTSDB設(shè)計(jì)解讀

今天給大家介紹一下如何進(jìn)行OpenTSDB設(shè)計(jì)解讀。文章的內(nèi)容小編覺得不錯(cuò),現(xiàn)在給大家分享一下,覺得有需要的朋友可以了解一下,希望對(duì)大家有所幫助,下面跟著小編的思路一起來閱讀吧。

成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的灞橋網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

OpenTSDB是基于HBase存儲(chǔ)時(shí)間序列數(shù)據(jù)的一個(gè)開源數(shù)據(jù)庫,確切地說,它只是一個(gè)HBase的應(yīng)用而已,其對(duì)于時(shí)間序列數(shù)據(jù)的處理可以供其他系統(tǒng)參考和借鑒。下面會(huì)針對(duì)它在數(shù)據(jù)庫的設(shè)計(jì)方面展開一些探索和討論。

基于的是OpenTSDB最早的一個(gè)穩(wěn)定版本1.0.0進(jìn)行講解的,下載部署完成之后,我們首先需要了解的是它的數(shù)據(jù)庫Schema, 它主要有兩個(gè)表:tsdb-uid和tsdb. 前者描述指標(biāo)(metrics)相關(guān)的元數(shù)據(jù),后者存儲(chǔ)時(shí)間序列數(shù)據(jù)。首先我們來了解一下“指標(biāo)”(metrics)的概念,簡單講一個(gè)指標(biāo)就是一個(gè)需要收集的數(shù)據(jù)項(xiàng),但是只有指標(biāo)是不能全面地描述出一條數(shù)據(jù)產(chǎn)生的相關(guān)背景信息的,比如:如果我們要統(tǒng)計(jì)cpu的使用率,我們可以建立一下名為proc.stat.cpu的metrics,如果我們從不同的機(jī)器和用戶下收集了大量的cpu信息,如果沒有對(duì)一條信息進(jìn)行一定地標(biāo)識(shí),我們是無法區(qū)分出哪些數(shù)據(jù)來自哪臺(tái)機(jī)器的哪個(gè)用戶,所以我們還需要建立一些“標(biāo)簽”(Tag)來標(biāo)識(shí)一條數(shù)據(jù)。嚴(yán)格地說,指標(biāo)和標(biāo)簽之間并沒有必然的從屬關(guān)系,就像兩個(gè)不同的指標(biāo)的數(shù)據(jù)可能都有指示其來自哪臺(tái)主機(jī)的host標(biāo)簽一樣,但是有一點(diǎn)是確定的,即:對(duì)于一條數(shù)據(jù)來說,應(yīng)該至少含有一個(gè)指標(biāo)和一個(gè)標(biāo)簽,這樣的數(shù)據(jù)才是有意義的,因此,在OpenTSDB的表設(shè)計(jì)上,就把“指標(biāo)”(metrics)和“標(biāo)簽”(Tag)統(tǒng)一放在了tsdb-uid表中存儲(chǔ),格式為:RowKey(自增ID,3字節(jié)數(shù)組):name:metrics,name:tagk,name:tagv,同時(shí)對(duì)它們之間的反向關(guān)聯(lián)關(guān)系也作了展開存儲(chǔ)。

實(shí)際上我們看以看到,對(duì)于數(shù)據(jù)來說,指標(biāo)到數(shù)據(jù)是一對(duì)多的父子關(guān)系,標(biāo)簽對(duì)數(shù)據(jù)也是一對(duì)多的父子關(guān)系,OpenTSDB在這里的設(shè)計(jì)是非常具有典型性的,實(shí)際上這也是HBase表設(shè)計(jì)上的一種常見的“Pattern”把表間關(guān)聯(lián)關(guān)系展開,以JOIN的結(jié)果為RowKey存儲(chǔ)數(shù)據(jù)!包括正向關(guān)聯(lián)和反向關(guān)聯(lián)兩類數(shù)據(jù)!(請(qǐng)仔細(xì)參考圖1理解)

下面讓我們插入2個(gè)metrics:proc.stat.cpuproc.stat.mem,以及一條記錄: proc.stat.cpu 1297574486 54.2 host=foo type=user來觀察一下數(shù)據(jù)表結(jié)構(gòu)

首先是tsdb-uid表:

如何進(jìn)行OpenTSDB設(shè)計(jì)解讀

圖一

從表中的記錄可知:

1. 第一條記錄:rowkey為\x00,含3個(gè)字段:metrics,tagk,tagv, 其值分別是已經(jīng)添加的所有指標(biāo)、標(biāo)簽名和標(biāo)簽值的數(shù)量。這一條數(shù)據(jù)是系統(tǒng)生成和維護(hù)的。這里有兩個(gè)metrics:cpu和mem,兩個(gè)key:host和type,兩個(gè)value:foo和user,所以 rowkey為\x00的三個(gè)數(shù)據(jù)的value都是2

2. 在OpenTSDB中,每一個(gè)metric、tagk或者tagv在創(chuàng)建的時(shí)候被分配一個(gè)唯一標(biāo)識(shí)叫做UID,他們組合在一起可以創(chuàng)建一個(gè)序列的UID或者TSUID。在OpenTSDB的存儲(chǔ)中,對(duì)于每一個(gè)metric、tagk或者tagv都存在從0開始的計(jì)數(shù)器,每來一個(gè)新的metric、tagk或者tagv,對(duì)應(yīng)的計(jì)數(shù)器就會(huì)加1。當(dāng)data point寫到TSD時(shí),UID是自動(dòng)分配的。你也可以手動(dòng)分配UID,前提是auto metric被設(shè)置為true。

關(guān)于UID,我們?cè)倏匆粡垐D解:

如何進(jìn)行OpenTSDB設(shè)計(jì)解讀

然后我們看tsdb表:

如何進(jìn)行OpenTSDB設(shè)計(jì)解讀

圖二

我們看重點(diǎn)看一下紀(jì)錄表的rowkey:

指標(biāo)UID(指標(biāo)+標(biāo)簽的某個(gè)組合)+ 數(shù)據(jù)生成時(shí)間(取整點(diǎn)時(shí)間)+標(biāo)簽1-Key的UID+標(biāo)簽1-Vlaue的UID+...+標(biāo)簽N-Key的UID+標(biāo)簽N-Vlaue的UID

讓我們以圖紀(jì)錄為例,重點(diǎn)看一下時(shí)間的處理:

1297574486 = 2011-02-13 13:21:26    

MWeP = 01001101 01010111 01100101 01010000 = 1297573200 = 2011-02-13 13:00:00 (截取整點(diǎn)小時(shí)位)

PK = 01010000 01101011 = 1286 (從整點(diǎn)小時(shí)到記錄時(shí)間的秒偏差,1286秒正是21分鐘26秒)

1297573200+1286=1297574486

PK,即小時(shí)內(nèi)秒數(shù)被當(dāng)作了Column

一些設(shè)計(jì)技巧:

1. 針對(duì)Hot Spot的應(yīng)對(duì)策略

OpenTSDB處理的是典型的時(shí)間序列化數(shù)據(jù),必然面臨“熱點(diǎn)”問題,關(guān)于它對(duì)熱點(diǎn)問題的處理,HBase的官方文檔 http://hbase.apache.org/book/rowkey.design.html 中專門提到過:

 However, the difference is that the timestamp is not in the lead position of the key, and the design assumption is that there are dozens or hundreds (or more) of different metric types. Thus, even with a continual stream of input data with a mix of metric types, the Puts are distributed across various points of regions in the table.    

一般來說,如果使用時(shí)間做rowkey,那么前面就必須加“哈?!弊侄危ㄒ簿褪莝alted處理)。但是OpenTSDB并沒有特別的哈希字段,它的處理比較聰明:首先,時(shí)間字段不會(huì)放在rowkey的開始位置,其次,rowkey開始位置挑選了自身的一個(gè)理想的業(yè)務(wù)字段“metrics"來替代了“哈?!弊侄巍?/p>

從OpenTSDB的處理上我們可以總結(jié)出一點(diǎn):在處理時(shí)間序列數(shù)據(jù)時(shí),如果系統(tǒng)中存在“理想的”“天然的”起哈希作用的字段應(yīng)該優(yōu)先考慮其作為rowkey的起始組成部分,后接時(shí)間字段,但如果找不到這樣的字段再設(shè)置人工的哈希字段

2. rowkey的設(shè)計(jì)思想

一.為了能夠檢索特定的metrics,tag name,tag name的data point, 將 metrics,tag name,tag name編入rowkey是顯然的事情,但是直接使用它們來組成rowkey有兩個(gè)明顯的問題:

1. 會(huì)占用大量的存儲(chǔ)空間(因?yàn)檫@些值會(huì)大量重復(fù)地出現(xiàn)在很多的rowkey中)

2. 由于每一個(gè)metrics,tag key,tag value的長度都是不固定的,這不利于通過字節(jié)偏移量來直接定位它們.(否則需要使用特定的分隔符,而且為了避免輸入信息中可能存在特定的分隔符導(dǎo)致解析出錯(cuò),還要對(duì)所有輸入信息的分割符進(jìn)行轉(zhuǎn)義處理)

圍繞一個(gè)性能指標(biāo),會(huì)有多種附加"屬性"(或者說"標(biāo)簽")對(duì)其進(jìn)行說明與描述, 那么對(duì)指標(biāo)的查詢也自然是以這些標(biāo)簽或標(biāo)簽值展開的,因此一條指標(biāo)記錄的rowkey必然要包含這些標(biāo)簽和標(biāo)簽值.但是由于標(biāo)簽和標(biāo)簽值是不定長的,這為rowkey的設(shè)計(jì)帶來麻煩,所以需要為這些標(biāo)簽和標(biāo)簽值分配一個(gè)定長的ID,在rowkey中使用它們的ID來指代它們,這樣rowkey就可以規(guī)范化,方便從rowkey中直接通過偏移截取需要的"部分".

二.Tall-Narrow和Wide-Flat兩種表設(shè)計(jì)風(fēng)格相結(jié)合

以上就是如何進(jìn)行OpenTSDB設(shè)計(jì)解讀的全部內(nèi)容了,更多與如何進(jìn)行OpenTSDB設(shè)計(jì)解讀相關(guān)的內(nèi)容可以搜索創(chuàng)新互聯(lián)之前的文章或者瀏覽下面的文章進(jìn)行學(xué)習(xí)哈!相信小編會(huì)給大家增添更多知識(shí),希望大家能夠支持一下創(chuàng)新互聯(lián)!

當(dāng)前題目:如何進(jìn)行OpenTSDB設(shè)計(jì)解讀
本文鏈接:http://bm7419.com/article16/jdcjgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、商城網(wǎng)站、用戶體驗(yàn)、外貿(mào)建站、域名注冊(cè)網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管