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

OpenTSDB 應(yīng)用遷移到 TDengine 的最佳實(shí)踐

作為一個(gè)分布式、可伸縮、基于 HBase 的分布式時(shí)序數(shù)據(jù)庫(kù)系統(tǒng),得益于其先發(fā)優(yōu)勢(shì),OpenTSDB 被 DevOps 領(lǐng)域的人員引入并廣泛地應(yīng)用在了運(yùn)維監(jiān)控領(lǐng)域。但最近幾年,隨著云計(jì)算、微服務(wù)、容器化等新技術(shù)快速落地發(fā)展,企業(yè)級(jí)服務(wù)種類變得越來越多,架構(gòu)也越來越復(fù)雜,應(yīng)用運(yùn)行基礎(chǔ)環(huán)境日益多樣化,給系統(tǒng)和運(yùn)行監(jiān)控帶來的壓力也越來越大。從這一現(xiàn)狀出發(fā),使用 OpenTSDB 作為 DevOps 的監(jiān)控后端存儲(chǔ),越來越受困于其性能問題以及遲緩的功能升級(jí),以及由此而衍生出來的應(yīng)用部署成本上升和運(yùn)行效率降低等問題,這些問題隨著系統(tǒng)規(guī)模的擴(kuò)大日益嚴(yán)重。

在這一背景下,為滿足高速增長(zhǎng)的物聯(lián)網(wǎng)大數(shù)據(jù)市場(chǎng)和技術(shù)需求,在吸取眾多傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)、NoSQL 數(shù)據(jù)庫(kù)、流計(jì)算引擎、消息隊(duì)列等軟件的優(yōu)點(diǎn)之后,濤思數(shù)據(jù)自主開發(fā)出創(chuàng)新型大數(shù)據(jù)處理產(chǎn)品 TDengine。在時(shí)序大數(shù)據(jù)處理上,TDengine 有著自己獨(dú)特的優(yōu)勢(shì)。就 OpenTSDB 當(dāng)前遇到的問題來說,TDengine 能夠有效解決。

相對(duì)于 OpenTSDB,TDengine 具有如下顯著特點(diǎn):

  • 數(shù)據(jù)寫入和查詢的性能遠(yuǎn)超 OpenTSDB;
  • 針對(duì)時(shí)序數(shù)據(jù)的高效壓縮機(jī)制,壓縮后在磁盤上的存儲(chǔ)空間不到 1/5;
  • 安裝部署非常簡(jiǎn)單,單一安裝包完成安裝部署,不依賴其他的第三方軟件,整個(gè)安裝部署過程秒級(jí)搞定;
  • 提供的內(nèi)建函數(shù)覆蓋 OpenTSDB 支持的全部查詢函數(shù),還支持更多的時(shí)序數(shù)據(jù)查詢函數(shù)、標(biāo)量函數(shù)及聚合函數(shù),支持多種時(shí)間窗口聚合、連接查詢、表達(dá)式運(yùn)算、多種分組聚合、用戶定義排序、以及用戶定義函數(shù)等高級(jí)查詢功能。采用類 SQL 的語法規(guī)則,更加簡(jiǎn)單易學(xué),基本上沒有學(xué)習(xí)成本。
  • 支持多達(dá) 128 個(gè)標(biāo)簽,標(biāo)簽總長(zhǎng)度可達(dá)到 16 KB;
  • 除 HTTP 之外,還提供 Java、Python、C、Rust、Go 等多種語言的接口,支持 JDBC 等多種企業(yè)級(jí)標(biāo)準(zhǔn)連接器協(xié)議。

如果我們將原本運(yùn)行在 OpenTSDB 上的應(yīng)用遷移到 TDengine 上,不僅可以有效地降低計(jì)算和存儲(chǔ)資源的占用、減少部署服務(wù)器的規(guī)模,還能夠極大減少運(yùn)行維護(hù)的成本的輸出,讓運(yùn)維管理工作更簡(jiǎn)單、更輕松,大幅降低總擁有成本。與 OpenTSDB 一樣,TDengine 也已經(jīng)進(jìn)行了開源,不同的是,除了單機(jī)版,后者還實(shí)現(xiàn)了集群版開源,被廠商綁定的顧慮一掃而空。

在下文中我們將就“使用最典型并廣泛應(yīng)用的運(yùn)維監(jiān)控(DevOps)場(chǎng)景”來說明,如何在不編碼的情況下將 OpenTSDB 的應(yīng)用快速、安全、可靠地遷移到 TDengine 之上。后續(xù)的章節(jié)會(huì)做更深度的介紹,以便于進(jìn)行非 DevOps 場(chǎng)景的遷移。

DevOps 應(yīng)用快速遷移

1、典型應(yīng)用場(chǎng)景

一個(gè)典型的 DevOps 應(yīng)用場(chǎng)景的系統(tǒng)整體的架構(gòu)如下圖(圖1) 所示。

IT-DevOps-Solutions-Immigrate-OpenTSDB-Arch

圖1. DevOps 場(chǎng)景中典型架構(gòu)

在該應(yīng)用場(chǎng)景中,包含了部署在應(yīng)用環(huán)境中負(fù)責(zé)收集機(jī)器度量(Metrics)、網(wǎng)絡(luò)度量(Metrics)以及應(yīng)用度量(Metrics)的 Agent 工具、匯聚 agent 收集信息的數(shù)據(jù)收集器,數(shù)據(jù)持久化存儲(chǔ)和管理的系統(tǒng)以及監(jiān)控?cái)?shù)據(jù)可視化工具(例如:Grafana 等)。

其中,部署在應(yīng)用節(jié)點(diǎn)的 Agents 負(fù)責(zé)向 collectd/Statsd 提供不同來源的運(yùn)行指標(biāo),collectd/StatsD則負(fù)責(zé)將匯聚的數(shù)據(jù)推送到 OpenTSDB 集群系統(tǒng),然后使用可視化看板 Grafana 將數(shù)據(jù)可視化呈現(xiàn)出來。

2、遷移服務(wù)

  • TDengine 安裝部署

首先是 TDengine 的安裝,從官網(wǎng)上下載 TDengine 最新穩(wěn)定版,解壓縮后運(yùn)行 install.sh 進(jìn)行安裝。各種安裝包的使用幫助請(qǐng)參見博客《TDengine 多種安裝包的安裝和卸載》。

注意,安裝完成以后,不要立即啟動(dòng) taosd 服務(wù),在正確配置完成參數(shù)以后再啟動(dòng)。

  • 調(diào)整數(shù)據(jù)收集器配置

在 TDengine 2.3 版本中,我們發(fā)布了 taosAdapter ,taosAdapter 是一個(gè)無狀態(tài)、可快速?gòu)椥陨炜s的組件,它可以兼容 Influxdb 的 Line Protocol 和 OpenTSDB 的 telnet/JSON 寫入?yún)f(xié)議規(guī)范,提供了豐富的數(shù)據(jù)接入能力,有效的節(jié)省用戶遷移成本,降低用戶應(yīng)用遷移的難度。

用戶可以根據(jù)需求彈性部署 taosAdapter 實(shí)例,結(jié)合場(chǎng)景的需要,快速提升數(shù)據(jù)寫入的吞吐量,為不同應(yīng)用場(chǎng)景下的數(shù)據(jù)寫入提供保障。

通過 taosAdapter,用戶可以將 collectd 和 StatsD 收集的數(shù)據(jù)直接推送到 TDengine ,實(shí)現(xiàn)應(yīng)用場(chǎng)景的無縫遷移,非常的輕松便捷。taosAdapter 還支持Telegraf、Icinga、TCollector 、node_exporter 的數(shù)據(jù)接入,使用詳情參考taosAdapter。

如果使用 collectd,修改其默認(rèn)位置 /etc/collectd/collectd.conf 的配置文件為指向 taosAdapter 部署的節(jié)點(diǎn) IP 地址和端口。假設(shè) taosAdapter 的 IP 地址為192.168.1.130,端口為 6046,配置如下:

LoadPlugin write_tsdb
<Plugin write_tsdb>
    <Node>
        Host "192.168.1.130"
        Port "6046"
        HostTags "status=production"
        StoreRates false
        AlwaysAppendDS false
    </Node>
</Plugin>

即可讓 collectd 將數(shù)據(jù)使用推送到 OpenTSDB 的插件方式推送到 taosAdapter, taosAdapter 將調(diào)用 API 將數(shù)據(jù)寫入到 taosd 中,從而完成數(shù)據(jù)的寫入工作。如果你使用的是 StatsD 相應(yīng)地調(diào)整配置文件信息。

  • 調(diào)整看板(Dashboard)系統(tǒng)

在數(shù)據(jù)能夠正常寫入 TDengine 后,可以調(diào)整適配 Grafana 將寫入 TDengine 的數(shù)據(jù)可視化呈現(xiàn)出來。獲取和使用 TDengine 提供的 Grafana 插件請(qǐng)參考與其他工具的連接。

TDengine 提供了默認(rèn)的兩套 Dashboard 模板,用戶只需要將 Grafana 目錄下的模板導(dǎo)入到 Grafana 中即可激活使用。

圖2. 導(dǎo)入 Grafana 模板

操作完以上步驟后,就完成了將 OpenTSDB 替換成為 TDengine 的遷移工作??梢钥吹秸麄€(gè)流程非常簡(jiǎn)單,不需要寫代碼,只需要對(duì)某些配置文件進(jìn)行調(diào)整即可完成全部的遷移工作。

3、遷移后架構(gòu)

完成遷移以后,此時(shí)的系統(tǒng)整體的架構(gòu)如下圖(圖 3)所示,而整個(gè)過程中采集端、數(shù)據(jù)寫入端、以及監(jiān)控呈現(xiàn)端均保持了穩(wěn)定,除了極少的配置調(diào)整外,不涉及任何重要的更改和變動(dòng)。OpenTSDB 大量的應(yīng)用場(chǎng)景均為 DevOps ,這種場(chǎng)景下,簡(jiǎn)單的參數(shù)設(shè)置即可完成 OpenTSDB 到 TDengine 遷移動(dòng)作,使用上 TDengine 更加強(qiáng)大的處理能力和查詢性能。

在絕大多數(shù)的 DevOps 場(chǎng)景中,如果你擁有一個(gè)小規(guī)模的 OpenTSDB 集群(3 臺(tái)及以下的節(jié)點(diǎn))作為 DevOps 的存儲(chǔ)端,依賴于 OpenTSDB 為系統(tǒng)持久化層提供數(shù)據(jù)存儲(chǔ)和查詢功能,那么你可以安全地將其替換為 TDengine,并節(jié)約更多的計(jì)算和存儲(chǔ)資源。在同等計(jì)算資源配置情況下,單臺(tái) TDengine 即可滿足 3 ~ 5 臺(tái) OpenTSDB 節(jié)點(diǎn)提供的服務(wù)能力。如果規(guī)模比較大,那便需要采用 TDengine 集群。

如果你的應(yīng)用特別復(fù)雜,或者應(yīng)用領(lǐng)域并不是 DevOps 場(chǎng)景,你可以繼續(xù)閱讀后續(xù)的章節(jié),更加全面深入地了解將 OpenTSDB 的應(yīng)用遷移到 TDengine 的高級(jí)話題。

IT-DevOps-Solutions-Immigrate-TDengine-Arch

圖 3. 遷移完成后的系統(tǒng)架構(gòu)

其他場(chǎng)景的遷移評(píng)估與策略

1、TDengine 與 OpenTSDB 的差異

本章將詳細(xì)介紹 OpenTSDB 與 TDengine 在系統(tǒng)功能層面上存在的差異。閱讀完本章的內(nèi)容,你可以全面地評(píng)估是否能夠?qū)⒛承┗?OpenTSDB 的復(fù)雜應(yīng)用遷移到 TDengine 上,以及遷移之后應(yīng)該注意的問題。

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

截止到 2.3.0.x 版本,TDengine 只能夠支持 collectd 和 StatsD 作為數(shù)據(jù)收集匯聚軟件,當(dāng)然后面會(huì)陸續(xù)提供更多的數(shù)據(jù)收集聚合軟件的接入支持。如果您的收集端使用了其他類型的數(shù)據(jù)匯聚器,您的應(yīng)用需要適配到這兩個(gè)數(shù)據(jù)匯聚端系統(tǒng),才能夠?qū)?shù)據(jù)正常寫入。除了上述兩個(gè)數(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 以下特性,在將應(yīng)用遷移到 TDengine 之前你還需要了解以下注意事項(xiàng):

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

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

2、遷移策略

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

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

一方面,TDengine 要求其入庫(kù)的數(shù)據(jù)具有嚴(yán)格的模式定義。另一方面,TDengine 的數(shù)據(jù)模型相對(duì)于 OpenTSDB 來說又更加豐富,多值模型能夠兼容全部的單值模型的建立需求。

現(xiàn)在讓我們假設(shè)一個(gè) DevOps 的場(chǎng)景,我們使用了 collectd 收集設(shè)備的基礎(chǔ)度量(metrics),包含了 memory 、swap、disk 等幾個(gè)度量,其在 OpenTSDB 中的模式如下:

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

TDengine 要求存儲(chǔ)的數(shù)據(jù)具有數(shù)據(jù)模式,即寫入數(shù)據(jù)之前需創(chuàng)建超級(jí)表并指定超級(jí)表的模式。對(duì)于數(shù)據(jù)模式的建立,你有兩種方式來完成此項(xiàng)工作:1)充分利用 TDengine 對(duì) OpenTSDB 的數(shù)據(jù)原生寫入的支持,調(diào)用 TDengine 提供的 API 將(文本行或 JSON 格式)數(shù)據(jù)寫入,并自動(dòng)化地建立單值模型。采用這種方式不需要對(duì)數(shù)據(jù)寫入應(yīng)用進(jìn)行較大的調(diào)整,也不需要對(duì)寫入的數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換。

在 C 語言層面,TDengine 提供了 taos_insert_lines() 函數(shù)來直接寫入 OpenTSDB 格式的數(shù)據(jù)(在2.3.x 版本中該函數(shù)對(duì)應(yīng)的是 taos_schemaless_insert())。其代碼參考示例請(qǐng)參見安裝包目錄下示例代碼 schemaless.c。

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

  • 單值模型

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

在 TDengine 中建立3個(gè)超級(jí)表:

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));

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

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

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

  • 多值模型

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

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

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

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

select count(*) from memory

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

TDengine 不支持采用 OpenTSDB 的查詢語法進(jìn)行查詢或數(shù)據(jù)獲取處理,但是針對(duì) OpenTSDB 的每種查詢都提供對(duì)應(yīng)的支持??梢杂脵z查附錄1獲取對(duì)應(yīng)的查詢處理的調(diào)整和應(yīng)用使用的方式,如果需要全面了解 TDengine 支持的查詢類型,請(qǐng)參閱 TDengine 的用戶手冊(cè)。

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

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

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

為了方便歷史數(shù)據(jù)的遷移工作,我們?yōu)閿?shù)據(jù)同步工具 DataX 提供了插件,能夠?qū)?shù)據(jù)自動(dòng)寫入到 TDengine 中,需要注意的是 DataX 的自動(dòng)化數(shù)據(jù)遷移只能夠支持單值模型的數(shù)據(jù)遷移過程。

DataX 具體的使用方式及如何使用 DataX 將數(shù)據(jù)寫入 TDengine 請(qǐng)參見基于 DataX 的 TDengine 數(shù)據(jù)遷移工具。

在對(duì) DataX 進(jìn)行遷移實(shí)踐后,我們發(fā)現(xiàn)通過啟動(dòng)多個(gè)進(jìn)程,同時(shí)遷移多個(gè) metric 的方式,可以大幅度的提高遷移歷史數(shù)據(jù)的效率,下面是遷移過程中的部分記錄,希望這些能為應(yīng)用遷移工作帶來參考。

datax 實(shí)例個(gè)數(shù) (并發(fā)進(jìn)程個(gè)數(shù)) 遷移記錄速度 (條/秒)
1 約13.9萬
2 約21.8萬
3 約24.9萬
5 約29.5萬
10 約33萬


(注:測(cè)試數(shù)據(jù)源自 單節(jié)點(diǎn) Intel(R) Core(TM) i7-10700 CPU@2.90GHz 16核64G硬件設(shè)備,channel 和 batchSize 分別為 8 和 1000,每條記錄包含 10 個(gè) tag)

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

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

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

1)在磁盤中存儲(chǔ)導(dǎo)出數(shù)據(jù)時(shí),磁盤需要有足夠的存儲(chǔ)空間以便能夠充分容納導(dǎo)出的數(shù)據(jù)文件。為了避免全量數(shù)據(jù)導(dǎo)出后導(dǎo)致磁盤文件存儲(chǔ)緊張,可以采用部分導(dǎo)入的模式,對(duì)于歸屬于同一個(gè)超級(jí)表的時(shí)間線優(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ù)解析對(duì)于 CPU 帶來的巨大負(fù)載,需要控制最大的并行任務(wù)數(shù)量,以避免因?qū)霘v史數(shù)據(jù)而觸發(fā)的系統(tǒng)整體過載。

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

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

附錄1: OpenTSDB 查詢函數(shù)對(duì)應(yīng)表

Avg

等效函數(shù):avg

示例:

SELECT avg(val) FROM (SELECT first(val) FROM super_table WHERE ts >= startTime and ts <= endTime INTERVAL(20s) Fill(linear)) INTERVAL(20s)

備注:

  1. Interval 內(nèi)的數(shù)值與外層查詢的 interval 數(shù)值需要相同。
  2. 在 TDengine 中插值處理需要使用子查詢來協(xié)助完成,如上所示,在內(nèi)層查詢中指明插值類型即可,由于 OpenTSDB 中數(shù)值的插值使用了線性插值,因此在插值子句中使用 fill(linear) 來聲明插值類型。以下有相同插值計(jì)算需求的函數(shù),均采用該方法處理。
  3. Interval 中參數(shù) 20s 表示將內(nèi)層查詢按照 20 秒一個(gè)時(shí)間窗口生成結(jié)果。在真實(shí)的查詢中,需要調(diào)整為不同的記錄之間的時(shí)間間隔。這樣可確保等效于原始數(shù)據(jù)生成了插值結(jié)果。
  4. 由于 OpenTSDB 特殊的插值策略和機(jī)制,聚合查詢(Aggregate)中先插值再計(jì)算的方式導(dǎo)致其計(jì)算結(jié)果與 TDengine 不可能完全一致。但是在降采樣(Downsample)的情況下,TDengine 和 OpenTSDB 能夠獲得一致的結(jié)果(由于 OpenTSDB 在聚合查詢和降采樣查詢中采用了完全不同的插值策略)。

Count

等效函數(shù):count

示例:

select count(*) from super_table_name;

Dev

等效函數(shù):stddev

示例:

Select stddev(val) from table_name

Estimated percentiles

等效函數(shù):apercentile

示例:

Select apercentile(col1, 50, “t-digest”) from table_name

備注:

  1. 近似查詢處理過程中,OpenTSDB 默認(rèn)采用 t-digest 算法,所以為了獲得相同的計(jì)算結(jié)果,需要在 apercentile 函數(shù)中指明使用的算法。TDengine 能夠支持兩種不同的近似處理算法,分別通過“default”和“t-digest”來聲明。

First

等效函數(shù):first

示例:

Select first(col1) from table_name

Last

等效函數(shù):last

示例:

Select last(col1) from table_name

Max

等效函數(shù):max

示例:

Select max(value) from (select first(val) value from table_name interval(10s) fill(linear)) interval(10s)

備注:Max 函數(shù)需要插值,原因見上。

Min

等效函數(shù):min

示例:

Select min(value) from (select first(val) value from table_name interval(10s) fill(linear)) interval(10s);

MinMax

等效函數(shù):max

Select max(val) from table_name

備注:該函數(shù)無插值需求,因此可用直接計(jì)算。

MimMin

等效函數(shù):min

Select min(val) from table_name

備注:該函數(shù)無插值需求,因此可用直接計(jì)算。

Percentile

等效函數(shù):percentile

備注:

Sum

等效函數(shù):sum

Select max(value) from (select first(val) value from table_name interval(10s) fill(linear)) interval(10s)

備注:該函數(shù)無插值需求,因此可用直接計(jì)算。

Zimsum

等效函數(shù):sum

Select sum(val) from table_name

備注:該函數(shù)無插值需求,因此可用直接計(jì)算。

完整示例:

// OpenTSDB 查詢 JSON
query = {
“start”:1510560000,
“end”: 1515000009,
“queries”:[{
“aggregator”: “count”,
“metric”:”cpu.usage_user”,
}]
}

//等效查詢 SQL:
SELECT count(*)
FROM `cpu.usage_user`
WHERE ts>=1510560000 AND ts<=1515000009

附錄2: 資源估算方法

數(shù)據(jù)生成環(huán)境

我們?nèi)匀皇褂玫?4 章中的假設(shè)環(huán)境,3個(gè)測(cè)量值。分別是:溫度和濕度的數(shù)據(jù)寫入的速率是每 5 秒一條記錄,時(shí)間線 10萬個(gè)。空氣質(zhì)量的寫入速率是 10 秒一條記錄,時(shí)間線 1 萬個(gè),查詢的請(qǐng)求頻率 500 QPS。

存儲(chǔ)資源估算

假設(shè)產(chǎn)生數(shù)據(jù)并需要存儲(chǔ)的傳感器設(shè)備數(shù)量為 n,數(shù)據(jù)生成的頻率為t條/秒,每條記錄的長(zhǎng)度為 L bytes,則每天產(chǎn)生的數(shù)據(jù)規(guī)模為 n×t×L bytes。假設(shè)壓縮比為 C,則每日產(chǎn)生數(shù)據(jù)規(guī)模為 (n×t×L)/C bytes。存儲(chǔ)資源預(yù)估為能夠容納 1.5 年的數(shù)據(jù)規(guī)模,生產(chǎn)環(huán)境下 TDengine 的壓縮比 C 一般在 5 ~ 7 之間,同時(shí)為最后結(jié)果增加 20% 的冗余,可計(jì)算得到需要存儲(chǔ)資源:

(n×t×L)×(365×1.5)×(1+20%)/C

結(jié)合以上的計(jì)算公式,將參數(shù)帶入計(jì)算公式,在不考慮標(biāo)簽信息的情況下,每年產(chǎn)生的原始數(shù)據(jù)規(guī)模是 11.8TB。需要注意的是,由于標(biāo)簽信息在 TDengine 中關(guān)聯(lián)到每個(gè)時(shí)間線,并不是每條記錄。所以需要記錄的數(shù)據(jù)量規(guī)模相對(duì)于產(chǎn)生的數(shù)據(jù)有一定的降低,而這部分標(biāo)簽數(shù)據(jù)整體上可以忽略不記。假設(shè)壓縮比為5,則保留的數(shù)據(jù)規(guī)模最終為 2.56 TB。

存儲(chǔ)設(shè)備選型考慮

硬盤應(yīng)該選用具有較好隨機(jī)讀性能的硬盤設(shè)備,如果能夠有 SSD,盡可能考慮使用 SSD。較好的隨機(jī)讀性能的磁盤對(duì)于提升系統(tǒng)查詢性能具有極大的幫助,能夠整體上提升系統(tǒng)的查詢響應(yīng)性能。為了獲得較好的查詢性能,硬盤設(shè)備的單線程隨機(jī)讀IOPS的性能指標(biāo)不應(yīng)該低于 1000,能夠達(dá)到 5000 IOPS 以上為佳。為了獲得當(dāng)前的設(shè)備隨機(jī)讀取的IO性能的評(píng)估,建議使用 fio 軟件對(duì)其進(jìn)行運(yùn)行性能評(píng)估(具體的使用方式請(qǐng)參閱附錄1),確認(rèn)其是否能夠滿足大文件隨機(jī)讀性能要求。

硬盤寫性能對(duì)于 TDengine 的影響不大。TDengine 寫入過程采用了追加寫的模式,所以只要有較好的順序?qū)懶阅芗纯?,一般意義上的 SAS 硬盤和 SSD 均能夠很好地滿足 TDengine 對(duì)于磁盤寫入性能的要求。

計(jì)算資源估算

由于物聯(lián)網(wǎng)數(shù)據(jù)的特殊性,數(shù)據(jù)產(chǎn)生的頻率固定以后,TDengine 寫入的過程對(duì)于(計(jì)算和存儲(chǔ))資源消耗都保持一個(gè)相對(duì)固定的量?!?a href="http://m.fjzmyy.cn/cn/documentation/administrator">TDengine 的運(yùn)營(yíng)與維護(hù)》上的描述,該系統(tǒng)中每秒 22000個(gè)寫入,消耗 CPU 不到 1 個(gè)核。

在針對(duì)查詢所需要消耗的 CPU 資源的估算上,假設(shè)應(yīng)用要求數(shù)據(jù)庫(kù)提供的 QPS 為 10000,每次查詢消耗的 CPU 時(shí)間約 1 ms,那么每個(gè)核每秒提供的查詢?yōu)?1000 QPS,滿足 10000 QPS的查詢請(qǐng)求,至少需要 10 個(gè)核。為了讓系統(tǒng)整體上 CPU 負(fù)載小于 50%,整個(gè)集群需要 10 個(gè)核的兩倍,即 20 個(gè)核。

內(nèi)存資源估算

數(shù)據(jù)庫(kù)默認(rèn)為每個(gè) Vnode 分配內(nèi)存 16MB*3 緩沖區(qū),集群系統(tǒng)包括 22 個(gè) CPU 核,則默認(rèn)會(huì)建立 22 個(gè)虛擬節(jié)點(diǎn) Vnode,每個(gè) Vnode 包含 1000 張表,則可以容納所有的表。則約1個(gè)半小時(shí)寫滿一個(gè) block,從而觸發(fā)落盤,可以不做調(diào)整。22 個(gè) Vnode 共計(jì)需要內(nèi)存緩存約 1GB??紤]到查詢所需要的內(nèi)存,假設(shè)每次查詢的內(nèi)存開銷約 50MB,則 500 個(gè)查詢并發(fā)需要的內(nèi)存約 25GB。

綜上所述,可使用單臺(tái) 16 核 32GB 的機(jī)器,或者使用 2 臺(tái) 8 核 16GB 機(jī)器構(gòu)成的集群。

附錄3: 集群部署及啟動(dòng)

TDengine 提供了豐富的幫助文檔說明集群安裝、部署的諸多方面的內(nèi)容,這里提供響應(yīng)的文檔索引,供你參考。

集群部署

首先是安裝 TDengine,從官網(wǎng)上下載 TDengine 最新穩(wěn)定版,解壓縮后運(yùn)行 install.sh 進(jìn)行安裝。各種安裝包的使用幫助請(qǐng)參見博客《TDengine 多種安裝包的安裝和卸載》

注意安裝完成以后,不要立即啟動(dòng) taosd 服務(wù),在正確配置完成參數(shù)以后才啟動(dòng) taosd 服務(wù)。

設(shè)置運(yùn)行參數(shù)并啟動(dòng)服務(wù)

為確保系統(tǒng)能夠正常獲取運(yùn)行的必要信息。請(qǐng)?jiān)诜?wù)端正確設(shè)置以下關(guān)鍵參數(shù):

FQDN、firstEp、secondEP、dataDir、logDir、tmpDir、serverPort。各參數(shù)的具體含義及設(shè)置的要求,可參見文檔《TDengine 集群安裝、管理

按照相同的步驟,在需要運(yùn)行的節(jié)點(diǎn)上設(shè)置參數(shù),并啟動(dòng) taosd 服務(wù),然后添加 Dnode 到集群中。

最后啟動(dòng)taos,執(zhí)行命令 show dnodes,如果能看到所有的加入集群的節(jié)點(diǎn),那么集群順利搭建完成。具體的操作流程及注意事項(xiàng),請(qǐng)參閱文檔《TDengine 集群安裝、管理

附錄4: 超級(jí)表名稱

由于 OpenTSDB 的 metric 名稱中帶有點(diǎn)號(hào)(“.“),例如“cpu.usage_user”這種名稱的 metric。但是點(diǎn)號(hào)在 TDengine 中具有特殊含義,是用來分隔數(shù)據(jù)庫(kù)和表名稱的分隔符。TDengine 也提供轉(zhuǎn)義符,以允許用戶在(超級(jí))表名稱中使用關(guān)鍵詞或特殊分隔符(如:點(diǎn)號(hào))。為了使用特殊字符,需要采用轉(zhuǎn)義字符將表的名稱括起來,例如:cpu.usage_user這樣就是合法的(超級(jí))表名稱。

附錄5:參考文章

  1. 使用 TDengine + collectd/StatsD + Grafana 快速搭建 IT 運(yùn)維監(jiān)控系統(tǒng)
  2. 通過 collectd 將采集數(shù)據(jù)直接寫入 TDengine