小T導(dǎo)讀
泛能網(wǎng)能碳產(chǎn)業(yè)智能平臺(tái)作為新奧數(shù)能科技有限公司打造的一體化智能平臺(tái),服務(wù)于公建、工廠、園區(qū)等場景,旨在通過物聯(lián)網(wǎng)、大數(shù)據(jù)與人工智能技術(shù),實(shí)現(xiàn)能源設(shè)備的實(shí)時(shí)監(jiān)控、運(yùn)營管理與能碳分析。隨著客戶規(guī)模擴(kuò)大與數(shù)據(jù)量激增,平臺(tái)面臨海量設(shè)備數(shù)據(jù)采集、高并發(fā)查詢、長期存儲(chǔ)及指標(biāo)計(jì)算準(zhǔn)確性等多重挑戰(zhàn)。平臺(tái)原先基于 OpenTSDB 的架構(gòu)已無法滿足業(yè)務(wù)發(fā)展需求,尤其在數(shù)據(jù)處理及時(shí)性、準(zhǔn)確性與資源成本方面存在明顯瓶頸。通過引入 TDengine 時(shí)序數(shù)據(jù)庫,平臺(tái)實(shí)現(xiàn)了從任務(wù)調(diào)度到流式計(jì)算的架構(gòu)升級(jí),數(shù)據(jù)處理性能顯著提升,計(jì)算時(shí)效性最高提升 100 倍,計(jì)算時(shí)長縮短 2-8 倍,客戶投訴率幾乎降為零,同時(shí)服務(wù)器資源從原先的十多臺(tái)物理機(jī)大幅縮減,整體運(yùn)維成本顯著降低。
背景和痛點(diǎn)
泛能網(wǎng)平臺(tái)自 2018 年啟動(dòng)建設(shè)以來,已服務(wù)超過 5000 家客戶,每客戶平均接入約 50 臺(tái)設(shè)備,每臺(tái)設(shè)備每分鐘采集 10-20 個(gè)數(shù)據(jù)點(diǎn),系統(tǒng)每秒數(shù)據(jù)處理量(TPS)高達(dá) 9 萬。隨著業(yè)務(wù)擴(kuò)展,以 OpenTSDB 為基礎(chǔ)的架構(gòu)平臺(tái)在數(shù)據(jù)采集、存儲(chǔ)、查詢和計(jì)算方面面臨嚴(yán)峻挑戰(zhàn):
- 海量數(shù)據(jù)采集與高并發(fā)寫入:設(shè)備數(shù)量龐大,采集頻率高,部分場景要求秒級(jí)甚至毫秒級(jí)上報(bào),數(shù)據(jù)量呈指數(shù)級(jí)增長。
- 多維度實(shí)時(shí)查詢需求:客戶需按時(shí)間維度查詢最大值、最小值、平均值等統(tǒng)計(jì)指標(biāo),并要求查詢響應(yīng)速度快。
- 長期數(shù)據(jù)存儲(chǔ)壓力:部分客戶要求保留 5-10 年歷史數(shù)據(jù),對存儲(chǔ)空間和索引管理帶來極大壓力。
- 指標(biāo)計(jì)算不準(zhǔn)確與延遲:原有基于任務(wù)周期調(diào)度的計(jì)算方式導(dǎo)致日、月、年指標(biāo)計(jì)算結(jié)果不一致。同時(shí),計(jì)算延遲嚴(yán)重,影響數(shù)據(jù)及時(shí)性。
架構(gòu)升級(jí)
基于上述痛點(diǎn),平臺(tái)在數(shù)據(jù)庫選型中設(shè)定了明確目標(biāo):支持高并發(fā)寫入與查詢、具備高效壓縮與長期存儲(chǔ)能力、支持流式計(jì)算與實(shí)時(shí)處理、具備良好的擴(kuò)展性與運(yùn)維便利性。在對比了多款時(shí)序數(shù)據(jù)庫(Timeseries Database)后,項(xiàng)目初期我們選擇使用了 TDengine TSDB 2.x 的社區(qū)版本,社區(qū)版本在集群高可用、性能方面可以很好支撐業(yè)務(wù)平穩(wěn)運(yùn)行。但我們在使用 2.x 社區(qū)版本中遇到幾個(gè)問題:
- 2.x 社區(qū)版本不支持?jǐn)?shù)據(jù)刪除,但是新版本 3.x 里默認(rèn)支持;
- 2.x 社區(qū)版本 UPDATE 參數(shù)無法動(dòng)態(tài)修改,新版本 3.x 默認(rèn)開啟了更新數(shù)據(jù)的功能;
- 2.x 版本已經(jīng)停止維護(hù)更新,且社區(qū)版沒有專有的售后運(yùn)維的支持;
基于以上幾點(diǎn),為了保障未來業(yè)務(wù)穩(wěn)定運(yùn)行,我們決定升級(jí)到 TDengine TSDB 3.3.6.x 的企業(yè)版穩(wěn)定版本。
業(yè)務(wù)架構(gòu)
平臺(tái)采用“采算分離”架構(gòu),物聯(lián)網(wǎng)平臺(tái)負(fù)責(zé)數(shù)據(jù)采集,TDengine 時(shí)序數(shù)據(jù)庫(Timeseries Database)作為核心存儲(chǔ)與計(jì)算引擎,配合流式計(jì)算模塊實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理。
- 數(shù)據(jù)采集層:通過物聯(lián)網(wǎng)平臺(tái)接入設(shè)備數(shù)據(jù)。
- 流式計(jì)算層:替換原有任務(wù)調(diào)度,實(shí)現(xiàn)實(shí)時(shí)指標(biāo)計(jì)算。
- 存儲(chǔ)層:TDengine TSDB 集群負(fù)責(zé)測點(diǎn)數(shù)據(jù)與指標(biāo)結(jié)果的存儲(chǔ)與查詢。

數(shù)據(jù)模型
平臺(tái)基于 TDengine TSDB 的超級(jí)表與子表模型進(jìn)行建模:
- 測點(diǎn)超級(jí)表:按設(shè)備類型分類,如電能表、流量計(jì)等,每臺(tái)設(shè)備對應(yīng)一個(gè)子表。
- 指標(biāo)超級(jí)表:按時(shí)間維度(時(shí)、分、日、月、年)分類,每個(gè)子指標(biāo)對應(yīng)一個(gè)子表,記錄指標(biāo)值。

遷移經(jīng)驗(yàn)
面對千億級(jí)歷史數(shù)據(jù)、新舊數(shù)據(jù)模型差異以及在線業(yè)務(wù)零中斷的核心要求,我們設(shè)計(jì)了一套灰度遷移與數(shù)據(jù)同步方案。整個(gè)遷移過程分為三個(gè)階段:新版本測試驗(yàn)證、歷史數(shù)據(jù)遷移、灰度切換與流量遷移。全程采用漸進(jìn)式灰度策略,確保業(yè)務(wù)平穩(wěn)過渡。
第一階段:新版本測試驗(yàn)證
我們在 TDengine TSDB 3.x 企業(yè)版集群中測試驗(yàn)證業(yè)務(wù)應(yīng)用是否正常工作,需要升級(jí) taosjdbc driver 版本至 TDengine TSDB 3.x。其他業(yè)務(wù) SQL 無需修改,與 TDengine TSDB 2.x 版本保持一致。
第二階段:歷史數(shù)據(jù)遷移
歷史數(shù)據(jù)規(guī)模龐大,且需保證遷移過程中不影響線上查詢性能。我們放棄了傳統(tǒng)的數(shù)據(jù)導(dǎo)出-導(dǎo)入方式,而是采用 TDengine TSDB企業(yè)版工具 taosX 進(jìn)行在線熱遷移。該工具支持從 TDengine TSDB 2.x 集群直接向 3.x 集群同步數(shù)據(jù),具備斷點(diǎn)續(xù)傳、增量同步和一致性校驗(yàn)?zāi)芰Α?/p>
具體步驟如下:
- 全量數(shù)據(jù)同步:首先啟動(dòng)全量遷移任務(wù),將歷史數(shù)據(jù)按照時(shí)間范圍分片同步,避免單次任務(wù)負(fù)載過高。
- 增量數(shù)據(jù)追趕:在全量遷移期間,系統(tǒng)持續(xù)產(chǎn)生新數(shù)據(jù),我們通過 taosX 實(shí)時(shí)捕獲 TDengine TSDB 2.x 集群的增量寫入,并同步至 TDengine TSDB 3.x 集群,保持兩者數(shù)據(jù)差距在分鐘級(jí)別。
- 數(shù)據(jù)一致性驗(yàn)證:每日選取關(guān)鍵業(yè)務(wù)時(shí)段,對比兩個(gè)集群的統(tǒng)計(jì)指標(biāo),確保數(shù)據(jù)完整無誤。
整個(gè)遷移過程在業(yè)務(wù)低峰期執(zhí)行,并通過監(jiān)控平臺(tái)實(shí)時(shí)觀測源集群與目標(biāo)集群的負(fù)載、延遲及錯(cuò)誤率,確保系統(tǒng)穩(wěn)定。
第三階段:灰度切換與流量遷移
數(shù)據(jù)同步完成后,我們通過可配置的路由開關(guān)逐步將客戶請求導(dǎo)向新集群:
- 讀灰度策略:先選取少數(shù)非核心客戶,將其查詢請求路由至 TDengine TSDB 3.x 集群,對比返回結(jié)果與原有集群是否一致,并監(jiān)控查詢延遲。
- 雙寫并行期:在確認(rèn)查詢無誤后,開啟雙寫機(jī)制——物聯(lián)網(wǎng)平臺(tái)同時(shí)向兩個(gè)集群寫入數(shù)據(jù),新集群作為主查詢源,舊集群作為備份和比對基準(zhǔn)。
- 分批切換:按照客戶分組、地域、業(yè)務(wù)線等維度,分批次將全部查詢流量切換至新集群,每批切換后觀察業(yè)務(wù)指標(biāo)與系統(tǒng)性能,如有異常立即回退。
- 最終切換與降級(jí):當(dāng)全部流量穩(wěn)定運(yùn)行于 TDengine TSDB 3.x 集群一周后,停止向舊集群寫入數(shù)據(jù),并逐步歸檔舊集群數(shù)據(jù)。舊集群仍保留一段時(shí)間作為應(yīng)急回退保障。
通過上述分階段、灰度化的遷移方案,我們實(shí)現(xiàn)了千萬級(jí)測點(diǎn)、千億條數(shù)據(jù)的平滑遷移,全程業(yè)務(wù)無感知,客戶查詢零中斷。遷移過程中積累的模型映射腳本、驗(yàn)證工具和監(jiān)控方案,也為后續(xù)其他業(yè)務(wù)的數(shù)據(jù)遷移提供了重要模板。
收益總結(jié)
- 性能提升:通過這次平臺(tái)升級(jí),指標(biāo)計(jì)算的及時(shí)性得到了大幅提升。對比以往,我們的計(jì)算時(shí)效性最少提高了 4 倍,最高的時(shí)候,例如從年指標(biāo)計(jì)算頻率兩天一次提高到每分鐘一次,時(shí)效性提高了 100 倍。計(jì)算時(shí)長方面,最少也縮短了兩倍,最高提升了 8 倍。

- 準(zhǔn)確性提升:通過流式處理和層級(jí)加工的方式,我們的指標(biāo)數(shù)據(jù)能夠前后一致地匹配,解決了無序數(shù)據(jù)帶來的準(zhǔn)確性問題,客戶投訴率接近零。同時(shí),延遲數(shù)據(jù)的處理也更加智能化,可以自動(dòng)計(jì)算延遲測點(diǎn)的數(shù)據(jù),并遞歸修正受影響的所有指標(biāo)。對于日、月、年指標(biāo)計(jì)算頻率不一致的問題,我們也做了統(tǒng)一處理,現(xiàn)在所有計(jì)算頻率統(tǒng)一為 15 分鐘,并使用統(tǒng)一的時(shí)間窗口進(jìn)行計(jì)算,確保數(shù)據(jù)的準(zhǔn)確性。
- 成本降低:原有的 OpenTSDB 架構(gòu)使用十多臺(tái)物理服務(wù)器,每臺(tái) 60+ 核心,仍無法完全滿足需求。遷移至 TDengine TSDB 后,服務(wù)器數(shù)量大幅減少,資源利用率顯著提升,整體硬件與運(yùn)維成本降低約 60%。服務(wù)器資源減少,運(yùn)維復(fù)雜度下降。
過去與未來
從最初的選擇 OpenTSDB,到我們面臨種種挑戰(zhàn),決定進(jìn)行新一輪的數(shù)據(jù)庫選型,這一路走來充滿了思考與抉擇。2018 年到 2022 年,OpenTSDB 在我們私有化場景中的表現(xiàn)曾一度支撐著我們的系統(tǒng),但隨著業(yè)務(wù)的不斷擴(kuò)展,問題也接踵而至——高昂的部署成本、復(fù)雜的運(yùn)維難題,讓我們不得不尋求新的解決方案。
正是在這個(gè)關(guān)鍵時(shí)刻,TDengine 走入了我們的視野。初次接觸 TDengine 時(shí),我們帶著試探的心態(tài),先在私有化場景中做了嘗試。出乎意料的是,它不僅幫助我們降低了部署和運(yùn)維成本,還讓我們對未來充滿了信心。于是 2023 年 6 月,我們正式啟動(dòng)了平臺(tái)的全面切換,將 TDengine 應(yīng)用到核心生產(chǎn)環(huán)境。
TDengine TSDB 在泛能網(wǎng)平臺(tái)中的成功應(yīng)用,為系統(tǒng)性能與運(yùn)維效率帶來顯著提升。未來,團(tuán)隊(duì)將持續(xù)關(guān)注 TDengine TSDB 新版本功能,進(jìn)一步探索其在邊緣計(jì)算、多級(jí)存儲(chǔ)、實(shí)時(shí)分析等場景中的深度應(yīng)用,推動(dòng)平臺(tái)向更智能、更高效的方向演進(jìn)。
公司簡介
新奧數(shù)能科技有限公司成立于 2018 年,隸屬于新奧集團(tuán),專注于能源行業(yè)智能化平臺(tái)研發(fā)與運(yùn)營,致力于通過物聯(lián)網(wǎng)、大數(shù)據(jù)與人工智能技術(shù),為客戶提供一體化的能碳管理與運(yùn)維解決方案。泛能網(wǎng)依托新奧集團(tuán)深厚的產(chǎn)業(yè)實(shí)踐,以泛能理念為牽引,聚焦能源數(shù)智化,圍繞 3100 萬家庭用戶、27 萬工商業(yè)客戶、260 個(gè)城市燃?xì)忭?xiàng)目積累了豐富的應(yīng)用場景。
作者
龔恒星



互聯(lián)網(wǎng).png)



-1.png)




.png)


證.png)


伙伴.png)
伙伴.png)
伙伴.png)



