六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

復(fù)雜場景,從 OpenTSDB 遷移到 TDengine 的最佳實(shí)踐

在上一篇文章中,我們介紹了運(yùn)維監(jiān)控場景下,如何從OpenTSDB遷移到TDengine。

如果應(yīng)用特別復(fù)雜,或者應(yīng)用領(lǐng)域并不是運(yùn)維監(jiān)控場景,本文將更加全面深入地介紹將OpenTSDB應(yīng)用遷移到TDengine的高級話題。

其他場景的遷移評估與策略

1、TDengine 與 OpenTSDB 的差異

本節(jié)將詳細(xì)介紹OpenTSDB與TDengine在系統(tǒng)功能層面上存在的差異。

讀完本節(jié)之后,你可以全面地評估是否能將某些基于OpenTSDB的復(fù)雜應(yīng)用遷移到TDengine上,以及遷移之后應(yīng)該注意的問題。

TDengine Database當(dāng)前只支持Grafana的可視化看板呈現(xiàn),所以如果應(yīng)用中使用的是其他看板(例如TSDash、Status Wolf等),那么暫時無法直接遷移到TDengine,需要將其重新適配到Grafana才可以正常運(yùn)行。

截止到2.3.0.x 版本,TDengine Database只能夠支持collectd和StatsD作為數(shù)據(jù)收集匯聚軟件,當(dāng)然后面會陸續(xù)提供更多的數(shù)據(jù)收集聚合軟件的接入支持。如果收集端使用了其他類型的數(shù)據(jù)匯聚器,則需要適配到這兩個數(shù)據(jù)匯聚端系統(tǒng),才能正常寫入。除了上述兩個數(shù)據(jù)匯聚端軟件協(xié)議以外,TDengine還支持通過 InfluxDB的行協(xié)議和OpenTSDB的數(shù)據(jù)寫入?yún)f(xié)議、Json格式將數(shù)據(jù)直接寫入,可以重寫數(shù)據(jù)推送端的邏輯,使用TDengine支持的行協(xié)議來寫入數(shù)據(jù)。

此外,如果應(yīng)用中使用了OpenTSDB的以下特性,在遷移之前還需要了解以下注意事項(xiàng):

  1. /api/stats:如果應(yīng)用中使用了該項(xiàng)特性來監(jiān)控OpenTSDB的服務(wù)狀態(tài),并在應(yīng)用中建立了相關(guān)的邏輯來聯(lián)動處理,那么這部分狀態(tài)讀取和獲取的邏輯需要重新適配到TDengine。TDengine提供了全新的處理集群狀態(tài)監(jiān)控機(jī)制,來滿足應(yīng)用對其進(jìn)行的監(jiān)控和維護(hù)的需求。
  2. /api/tree:如果依賴于OpenTSDB的該項(xiàng)特性來進(jìn)行時間線的層級化組織和維護(hù),那么便無法將其直接遷移至TDengine。TDengine采用了數(shù)據(jù)庫->超級表->子表這樣的層級來組織和維護(hù)時間線,歸屬于同一個超級表的所有的時間線在系統(tǒng)中同一個層級,但是可以通過不同標(biāo)簽值的特殊構(gòu)造來模擬應(yīng)用邏輯上的多級結(jié)構(gòu)。
  3. Rollup And PreAggregates:采用了Rollup和PreAggregates,需要應(yīng)用來決定在合適的地方訪問Rollup的結(jié)果,在某些場景下又要訪問原始的結(jié)果,這種結(jié)構(gòu)的不透明性讓應(yīng)用處理邏輯變得極為復(fù)雜而且完全不具有移植性。我們認(rèn)為這種策略是時序數(shù)據(jù)庫無法提供高性能聚合情況下的妥協(xié)與折中。TDengine暫不支持多個時間線的自動降采樣和(時間段范圍的)預(yù)聚合,由于 其擁有的高性能查詢處理邏輯,即使不依賴于Rollup 和 (時間段)預(yù)聚合計(jì)算結(jié)果,也能夠提供很高性能的查詢響應(yīng),而且讓你的應(yīng)用查詢處理邏輯更加簡單。
  4. Rate: TDengine提供了兩個計(jì)算數(shù)值變化率的函數(shù),分別是Derivative(其計(jì)算結(jié)果與InfluxDB的Derivative行為一致)和IRate(其計(jì)算結(jié)果與Prometheus中的IRate函數(shù)計(jì)算結(jié)果一致)。但是這兩個函數(shù)的計(jì)算結(jié)果與 Rate 有細(xì)微的差別,但整體上功能更強(qiáng)大。此外,OpenTSDB提供的所有計(jì)算函數(shù),TDengine 均有對應(yīng)的查詢函數(shù)支持,并且TDengine的查詢函數(shù)功能遠(yuǎn)超過OpenTSDB支持的查詢函數(shù),可以極大地簡化應(yīng)用處理邏輯。

通過上面的介紹,相信你應(yīng)該能夠了解OpenTSDB遷移到TDengine帶來的變化,這些信息也有助于你正確地判斷是否可以接受將應(yīng)用遷移到TDengine之上,體驗(yàn)TDengine提供的強(qiáng)大的時序數(shù)據(jù)處理能力。

2、遷移策略

首先將基于OpenTSDB的系統(tǒng)進(jìn)行遷移涉及到的數(shù)據(jù)模式設(shè)計(jì)、系統(tǒng)規(guī)模估算、數(shù)據(jù)寫入端改造,進(jìn)行數(shù)據(jù)分流、應(yīng)用適配工作;之后將兩個系統(tǒng)并行運(yùn)行一段時間,再將歷史數(shù)據(jù)遷移到 TDengine 中。當(dāng)然如果你的應(yīng)用中有部分功能強(qiáng)依賴于上述OpenTSDB特性,同時又不希望停止使用,可以考慮保持原有的OpenTSDB系統(tǒng)運(yùn)行,同時啟動 TDengine來提供主要的服務(wù)。

數(shù)據(jù)模型設(shè)計(jì)

一方面,TDengine 要求其入庫的數(shù)據(jù)具有嚴(yán)格的模式定義。另一方面,TDengine 的數(shù)據(jù)模型相對于 OpenTSDB 來說又更加豐富,多值模型能夠兼容全部的單值模型的建立需求。 現(xiàn)在讓我們假設(shè)一個運(yùn)維監(jiān)控場景,我們使用了collectd收集設(shè)備的基礎(chǔ)度量(metrics),包含了 memory、swap和disk 等幾個度量,其在 OpenTSDB 中的模式如下:

序號 測量(metric) 值名稱 類型 tag1 tag2 tag3 tag4 tag5
1 memory value double host memory_type memory_type_instance source
2 swap value double host swap_type swap_type_instance source
3 disk value double host disk_point disk_instance disk_type source

TDengine要求存儲的數(shù)據(jù)具有數(shù)據(jù)模式,即寫入數(shù)據(jù)之前需創(chuàng)建超級表并指定超級表的模式。對于數(shù)據(jù)模式的建立,有兩種方式來完成此項(xiàng)工作:

1)充分利用TDengine對OpenTSDB的數(shù)據(jù)原生寫入的支持,調(diào)用TDengine提供的API將(文本行或 JSON 格式)數(shù)據(jù)寫入,并自動化地建立單值模型。采用這種方式不需要對數(shù)據(jù)寫入應(yīng)用進(jìn)行較大的調(diào)整,也不需要對寫入的數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換。 在C語言層面,TDengine提供了taos_insert_lines來直接寫入OpenTSDB格式的數(shù)據(jù)(在2.3.x 版本中該函數(shù)對應(yīng)的是 taos_schemaless_insert )。其代碼參考示例請參見安裝包目錄下示例代碼 schemaless.c。

2)在充分理解TDengine數(shù)據(jù)模型的基礎(chǔ)上,結(jié)合生成數(shù)據(jù)的特點(diǎn),手動建立OpenTSDB到TDengine的數(shù)據(jù)模型調(diào)整的映射關(guān)系。TDengine能夠支持多值模型和單值模型,考慮到OpenTSDB均為單值映射模型,這里推薦使用單值模型在TDengine中進(jìn)行建模。

  • 單值模型

具體步驟如下:將度量(metrics)的名稱作為 TDengine 超級表的名稱,該超級表建成后具有兩個基礎(chǔ)的數(shù)據(jù)列—時間戳(timestamp)和值(value),超級表的標(biāo)簽等效于 度量 的標(biāo)簽信息,標(biāo)簽數(shù)量等同于度量 的標(biāo)簽的數(shù)量。子表的表名采用具有固定規(guī)則的方式進(jìn)行命名:metric + '_' + tags1_value + '_' + tag2_value + '_' + tag3_value ... 作為子表名稱。

在TDengine中建立3個超級表:

create stable memory(ts timestamp, val float) tags(host binary(12),memory_type binary(20), memory_type_instance binary(20), source binary(20));
create stable swap(ts timestamp, val double) tags(host binary(12), swap_type binary(20), swap_type_binary binary(20), source binary(20));
create stable disk(ts timestamp, val double) tags(host binary(12), disk_point binary(20), disk_instance binary(20), disk_type binary(20), source binary(20));

對于子表使用動態(tài)建表的方式創(chuàng)建如下所示:

insert into memory_vm130_memory_bufferred_collectd using memory tags(‘vm130’, ‘memory’, 'buffer', 'collectd') values(1632979445, 3.0656);

最終系統(tǒng)中會建立 340 個左右的子表,3個超級表。需要注意的是,如果采用串聯(lián)標(biāo)簽值的方式導(dǎo)致子表名稱超過系統(tǒng)限制(191字節(jié)),那么需要采用一定的編碼方式(例如 MD5)將其轉(zhuǎn)化為可接受的長度。

  • 多值模型

如果想利用TDengine的多值模型能力,需要首先滿足以下要求:不同的采集量具有相同的采集頻率,且能夠通過消息隊(duì)列同時到達(dá)數(shù)據(jù)寫入端,從而確保使用SQL語句將多個指標(biāo)一次性寫入。將度量的名稱作為超級表的名稱,建立具有相同采集頻率且能夠同時到達(dá)的數(shù)據(jù)多列模型。子表的表名采用具有固定規(guī)則的方式進(jìn)行命名。上述每個度量均只包含一個測量值,因此無法將其轉(zhuǎn)化為多值模型。

數(shù)據(jù)分流與應(yīng)用適配

從消息隊(duì)列中訂閱數(shù)據(jù),并啟動調(diào)整后的寫入程序?qū)懭霐?shù)據(jù)。

數(shù)據(jù)開始寫入持續(xù)一段時間后,可以采用SQL語句檢查寫入的數(shù)據(jù)量是否符合預(yù)計(jì)的寫入要求。

統(tǒng)計(jì)數(shù)據(jù)量使用如下SQL語句:

select count(*) from memory

完成查詢后,如果寫入的數(shù)據(jù)與預(yù)期的相比沒有差別,同時寫入程序本身沒有異常的報錯信息,那么可用確認(rèn)數(shù)據(jù)寫入是完整有效的。

TDengine不支持采用OpenTSDB的查詢語法進(jìn)行查詢或數(shù)據(jù)獲取處理,但是針對OpenTSDB的每種查詢都提供了對應(yīng)的支持。具體可以參考相關(guān)文檔。

TDengine支持以標(biāo)準(zhǔn)的JDBC 3.0接口來操縱數(shù)據(jù)庫,也可以使用其他類型的高級語言的連接器來查詢讀取數(shù)據(jù),以適配應(yīng)用。具體的操作和使用幫助也請參閱用戶手冊。

歷史數(shù)據(jù)遷移

1、使用工具自動遷移數(shù)據(jù)

為了方便歷史數(shù)據(jù)的遷移工作,我們?yōu)閿?shù)據(jù)同步工具DataX提供了插件,能夠?qū)?shù)據(jù)自動寫入到TDengine中,需要注意的是DataX的自動化數(shù)據(jù)遷移只能夠支持單值模型的數(shù)據(jù)遷移過程。 DataX 具體的使用方式及如何使用DataX將數(shù)據(jù)寫入TDengine請參見其使用幫助手冊 github.com/taosdata/datax。

2、手動遷移數(shù)據(jù)

如果需要使用多值模型寫入數(shù)據(jù),就需要自行開發(fā)一個將數(shù)據(jù)從OpenTSDB導(dǎo)出的工具,然后確認(rèn)哪些時間線能夠合并導(dǎo)入到同一個時間線,再將可以同時導(dǎo)入的時間通過SQL語句寫入數(shù)據(jù)庫中。

手動遷移數(shù)據(jù)需要注意以下兩個問題:

1)在磁盤中存儲導(dǎo)出數(shù)據(jù)時,磁盤需要有足夠的存儲空間以便能夠充分容納導(dǎo)出的數(shù)據(jù)文件。為了避免全量數(shù)據(jù)導(dǎo)出后導(dǎo)致磁盤文件存儲緊張,可以采用部分導(dǎo)入的模式,對于歸屬于同一個超級表的時間線優(yōu)先導(dǎo)出,然后將導(dǎo)出部分的數(shù)據(jù)文件導(dǎo)入到TDengine系統(tǒng)中。

2)在系統(tǒng)全負(fù)載運(yùn)行下,如果有足夠的剩余計(jì)算和IO資源,可以建立多線程的導(dǎo)入機(jī)制,最大限度地提升數(shù)據(jù)遷移效率??紤]到數(shù)據(jù)解析對于CPU帶來的巨大負(fù)載,需要控制最大的并行任務(wù)數(shù)量,以避免因?qū)霘v史數(shù)據(jù)而觸發(fā)的系統(tǒng)整體過載。

由于TDegnine本身操作簡易性,所以不需要在整個過程中進(jìn)行索引維護(hù)、數(shù)據(jù)格式的變化處理等工作,整個過程只需要順序執(zhí)行即可。

當(dāng)歷史數(shù)據(jù)完全導(dǎo)入到TDengine以后,此時兩個系統(tǒng)處于同時運(yùn)行的狀態(tài),之后便可以將查詢請求切換到TDengine上,從而實(shí)現(xiàn)無縫的應(yīng)用切換。