今天給大家介紹一下如何進行OpenTSDB設(shè)計解讀。文章的內(nèi)容小編覺得不錯,現(xiàn)在給大家分享一下,覺得有需要的朋友可以了解一下,希望對大家有所幫助,下面跟著小編的思路一起來閱讀吧。
成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的灞橋網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
OpenTSDB是基于HBase存儲時間序列數(shù)據(jù)的一個開源數(shù)據(jù)庫,確切地說,它只是一個HBase的應(yīng)用而已,其對于時間序列數(shù)據(jù)的處理可以供其他系統(tǒng)參考和借鑒。下面會針對它在數(shù)據(jù)庫的設(shè)計方面展開一些探索和討論。
基于的是OpenTSDB最早的一個穩(wěn)定版本1.0.0進行講解的,下載部署完成之后,我們首先需要了解的是它的數(shù)據(jù)庫Schema, 它主要有兩個表:tsdb-uid和tsdb. 前者描述指標(metrics)相關(guān)的元數(shù)據(jù),后者存儲時間序列數(shù)據(jù)。首先我們來了解一下“指標”(metrics)的概念,簡單講一個指標就是一個需要收集的數(shù)據(jù)項,但是只有指標是不能全面地描述出一條數(shù)據(jù)產(chǎn)生的相關(guān)背景信息的,比如:如果我們要統(tǒng)計cpu的使用率,我們可以建立一下名為proc.stat.cpu的metrics,如果我們從不同的機器和用戶下收集了大量的cpu信息,如果沒有對一條信息進行一定地標識,我們是無法區(qū)分出哪些數(shù)據(jù)來自哪臺機器的哪個用戶,所以我們還需要建立一些“標簽”(Tag)來標識一條數(shù)據(jù)。嚴格地說,指標和標簽之間并沒有必然的從屬關(guān)系,就像兩個不同的指標的數(shù)據(jù)可能都有指示其來自哪臺主機的host標簽一樣,但是有一點是確定的,即:對于一條數(shù)據(jù)來說,應(yīng)該至少含有一個指標和一個標簽,這樣的數(shù)據(jù)才是有意義的,因此,在OpenTSDB的表設(shè)計上,就把“指標”(metrics)和“標簽”(Tag)統(tǒng)一放在了tsdb-uid表中存儲,格式為:RowKey(自增ID,3字節(jié)數(shù)組):name:metrics,name:tagk,name:tagv,同時對它們之間的反向關(guān)聯(lián)關(guān)系也作了展開存儲。
實際上我們看以看到,對于數(shù)據(jù)來說,指標到數(shù)據(jù)是一對多的父子關(guān)系,標簽對數(shù)據(jù)也是一對多的父子關(guān)系,OpenTSDB在這里的設(shè)計是非常具有典型性的,實際上這也是HBase表設(shè)計上的一種常見的“Pattern”:把表間關(guān)聯(lián)關(guān)系展開,以JOIN的結(jié)果為RowKey存儲數(shù)據(jù)!包括正向關(guān)聯(lián)和反向關(guān)聯(lián)兩類數(shù)據(jù)?。ㄕ堊屑殔⒖紙D1理解)
下面讓我們插入2個metrics:proc.stat.cpu和proc.stat.mem,以及一條記錄: proc.stat.cpu 1297574486 54.2 host=foo type=user來觀察一下數(shù)據(jù)表結(jié)構(gòu):
首先是tsdb-uid表:
圖一
從表中的記錄可知:
1. 第一條記錄:rowkey為\x00,含3個字段:metrics,tagk,tagv, 其值分別是已經(jīng)添加的所有指標、標簽名和標簽值的數(shù)量。這一條數(shù)據(jù)是系統(tǒng)生成和維護的。這里有兩個metrics:cpu和mem,兩個key:host和type,兩個value:foo和user,所以 rowkey為\x00的三個數(shù)據(jù)的value都是2
2. 在OpenTSDB中,每一個metric、tagk或者tagv在創(chuàng)建的時候被分配一個唯一標識叫做UID,他們組合在一起可以創(chuàng)建一個序列的UID或者TSUID
。在OpenTSDB的存儲中,對于每一個metric、tagk或者tagv都存在從0開始的計數(shù)器,每來一個新的metric、tagk或者tagv,對應(yīng)的計數(shù)器就會加1。當data point寫到TSD時,UID是自動分配的。你也可以手動分配UID,前提是auto metric
被設(shè)置為true。
關(guān)于UID,我們再看一張圖解:
然后我們看tsdb表:
圖二
我們看重點看一下紀錄表的rowkey:
指標UID(指標+標簽的某個組合)+ 數(shù)據(jù)生成時間(取整點時間)+標簽1-Key的UID+標簽1-Vlaue的UID+...+標簽N-Key的UID+標簽N-Vlaue的UID
讓我們以圖紀錄為例,重點看一下時間的處理:
1297574486 = 2011-02-13 13:21:26
MWeP = 01001101 01010111 01100101 01010000 = 1297573200 = 2011-02-13 13:00:00 (截取整點小時位)
PK = 01010000 01101011 = 1286 (從整點小時到記錄時間的秒偏差,1286秒正是21分鐘26秒)
1297573200+1286=1297574486
PK,即小時內(nèi)秒數(shù)被當作了Column
一些設(shè)計技巧:
1. 針對Hot Spot的應(yīng)對策略
OpenTSDB處理的是典型的時間序列化數(shù)據(jù),必然面臨“熱點”問題,關(guā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.
一般來說,如果使用時間做rowkey,那么前面就必須加“哈?!弊侄危ㄒ簿褪莝alted處理)。但是OpenTSDB并沒有特別的哈希字段,它的處理比較聰明:首先,時間字段不會放在rowkey的開始位置,其次,rowkey開始位置挑選了自身的一個理想的業(yè)務(wù)字段“metrics"來替代了“哈希”字段。
從OpenTSDB的處理上我們可以總結(jié)出一點:在處理時間序列數(shù)據(jù)時,如果系統(tǒng)中存在“理想的”“天然的”起哈希作用的字段應(yīng)該優(yōu)先考慮其作為rowkey的起始組成部分,后接時間字段,但如果找不到這樣的字段再設(shè)置人工的哈希字段
2. rowkey的設(shè)計思想
一.為了能夠檢索特定的metrics,tag name,tag name的data point, 將 metrics,tag name,tag name編入rowkey是顯然的事情,但是直接使用它們來組成rowkey有兩個明顯的問題:
1. 會占用大量的存儲空間(因為這些值會大量重復地出現(xiàn)在很多的rowkey中)
2. 由于每一個metrics,tag key,tag value的長度都是不固定的,這不利于通過字節(jié)偏移量來直接定位它們.(否則需要使用特定的分隔符,而且為了避免輸入信息中可能存在特定的分隔符導致解析出錯,還要對所有輸入信息的分割符進行轉(zhuǎn)義處理)
圍繞一個性能指標,會有多種附加"屬性"(或者說"標簽")對其進行說明與描述, 那么對指標的查詢也自然是以這些標簽或標簽值展開的,因此一條指標記錄的rowkey必然要包含這些標簽和標簽值.但是由于標簽和標簽值是不定長的,這為rowkey的設(shè)計帶來麻煩,所以需要為這些標簽和標簽值分配一個定長的ID,在rowkey中使用它們的ID來指代它們,這樣rowkey就可以規(guī)范化,方便從rowkey中直接通過偏移截取需要的"部分".
二.Tall-Narrow和Wide-Flat兩種表設(shè)計風格相結(jié)合
以上就是如何進行OpenTSDB設(shè)計解讀的全部內(nèi)容了,更多與如何進行OpenTSDB設(shè)計解讀相關(guān)的內(nèi)容可以搜索創(chuàng)新互聯(lián)之前的文章或者瀏覽下面的文章進行學習哈!相信小編會給大家增添更多知識,希望大家能夠支持一下創(chuàng)新互聯(lián)!
當前題目:如何進行OpenTSDB設(shè)計解讀
本文鏈接:http://www.rwnh.cn/article16/jdcjgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、商城網(wǎng)站、用戶體驗、外貿(mào)建站、域名注冊、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)