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

存儲空間降為 MySQL 的十分之一,TDengine 在貨拉拉數據庫監(jiān)控場景的應用

貨拉拉 馬祥榮

2022-01-07 /

小T導讀:作為一家業(yè)務遍及多個國家及地區(qū)的物流公司,貨拉拉面臨的技術環(huán)境是非常復雜的,在云時代浪潮下基于混合云快速構建環(huán)境搭建系統(tǒng)成為其必然的選擇。但是在混合云上如何對基于各家云構建的系統(tǒng)進行有效的管理是個挑戰(zhàn),尤其對處于系統(tǒng)最底層的數據庫層面臨的問題、業(yè)務訴求、各方痛點,是貨拉拉DBA團隊現(xiàn)下所需要重點解決的。

目前DBA團隊管理的數據存儲包括MySQL、Redis、Elasticsearch、Kafka、MQ、Canal等,為了保證監(jiān)控采樣的實時性,我們自研的監(jiān)控系統(tǒng)設置的采樣間隔為10秒,這樣每天都會產生龐大的監(jiān)控數據,監(jiān)控指標的數據量達到20億+。前期由于管理實例少,監(jiān)控數據量也少,所有數據都被存放到了MySQL中;之后隨著管理實例越來越多,使用MySQL來存儲規(guī)模日益龐大的監(jiān)控數據越發(fā)力不從心,急需進行升級改造。結合實際具體需求,通過對不同時序數據庫進行調研,最終我們選擇了TDengine,順利完成了數據存儲監(jiān)控的升級改造。

一、監(jiān)控系統(tǒng)開發(fā)中遇到的問題

從存儲路徑來看,每種數據存儲都分布在多個區(qū)域,每個區(qū)域將監(jiān)控采樣數據投遞上報到消息總線,然后由消費程序統(tǒng)?消費,消費程序會將必要的告警數據更新到告警表,同時將監(jiān)控原始數據存儲到MySQL。比如,針對Redis這款數據存儲,監(jiān)控采樣間隔設置10秒,那么每天實例采樣次數就會達到3000萬+,監(jiān)控指標累計6億+,數據量之龐大可見一斑。早期為了將數據存儲到MySQL中,同時也能很好地支持監(jiān)控繪圖的使用,每?次實例監(jiān)控采樣時都會計算出該實例全量監(jiān)控項采樣數據,然后將本次采樣的結果作為?條記錄存儲下來。

存儲路徑圖
TDengine Database

即使通過這樣的優(yōu)化處理,在做時間跨度大的監(jiān)控繪圖時,前端依然會出現(xiàn)延遲卡頓的問題,后端監(jiān)控數據存儲的MySQL也壓力山大,經常滿載,天天被吐槽。因此針對這種時間跨度大的查詢,我們專門開發(fā)了?系列的數據聚合調度任務——按照不同的時間跨度,提前將10秒采集間隔的監(jiān)控數據做好聚合,監(jiān)控繪圖程序再根據不同的時間跨度選取不同的聚合數據表繪圖,以此解決長時間跨度監(jiān)控繪圖展示延遲卡頓的問題。

但這仍然治標不治本。為了壓縮監(jiān)控數據存儲空間,原始10秒間隔的監(jiān)控數據表只能歸檔保留3天時間的監(jiān)控數據,但存儲大小也將近有200GB, 加上與之相關的不同時間段的數據聚合表,存儲一下子突破300GB。這還只是Redis監(jiān)控數據的存儲大小,加上其它數據存儲的監(jiān)控數據,至少需要1TB+空間的MySQL存儲。

數據集合任務管理復雜、后期監(jiān)控原數據回溯缺失、MySQL存儲空間日益增長帶來的隱患,都是亟待解決的問題。

二、時序數據庫選型

為了解決MySQL監(jiān)控數據存儲的問題,我們把注意力轉移到了適合存儲監(jiān)控數據的時序數據庫上。市面上各種時序數據庫產品琳瑯滿目,有老牌的,也有后起之秀,經過?系列調研選型,我們選擇了時序數據庫TDengine,主要是因為其具備的如下幾大優(yōu)點:

值得一提的是,TDengine的SQL原生語法支持時間維度聚合查詢,同時數據存儲壓縮率?存儲空間小, 這兩點直接切中了我們的痛點。落地后實測相同數據的存儲空間只有MySQL存儲空間的十分之?甚至更少。還有?個驚喜是,在現(xiàn)有監(jiān)控數據存儲(MySQL)頂不住的情況下,?臺8C16GB的單機版TDengine輕松就抗下目前所有監(jiān)控流量和存儲壓力,且運行穩(wěn)定,基本沒有故障。

三、改造過程

TDengine用于存儲監(jiān)控數據的超級表設計原則就是簡單高效,字段?般都比較少,每?種監(jiān)控項類型(INT、FLOAT、NCHAR等)的數據存儲都需要單獨建立?個超級表,超級表?般都有關鍵的ts、type、value字段,具體監(jiān)控項由type字段標識,加上必要的tag及少量其它字段構成。

之前監(jiān)控數據存儲在MySQL的時候,每條數據記錄包含了該實例?次監(jiān)控采樣的所有監(jiān)控項(25+)數據。如果采用通用的監(jiān)控超級表設計原則,就需要改造采樣的數據結構,改造方式有兩種:

  • 改造監(jiān)控數據投遞的數據結構
  • 改造消費程序消費邏輯重組數據結構

但消費端有時效性要求,改造難度大,生產端涉及范圍大阻力也不小。經過綜合考量,最后我們決定采用類似MySQL數據存儲的表結構來設計超級表,這樣的改造對原來系統(tǒng)入侵最少,改造難度系數最低,改造大致過程如下:

  • TDengine,每種數據存儲的監(jiān)控數據單獨建庫存放
taos> create database redis; 
taos> create database es; 
... ... ... 
  • TDengine,建超級表,以Redis為例
taos> use redis; 
taos> create table redis_node_meters (created_at TIMESTAMP, qps INT, . ..) TAGS (region NCHAR(10), cluster_name NCHAR(50), ip NCHAR(20), port INT, role NCHAR(15)); 
  • 監(jiān)控數據消費,由于新增的實例節(jié)點是不確定的,比如Redis的節(jié)點資源是由Agent自動發(fā)現(xiàn)注冊后自動進行監(jiān)控指標采集,這時寫入數據并不確定某個子表是否存在,就需要TDengine的自動建表語法來創(chuàng)建不存在的子表,若該子表已存在則不會建立新表只會寫入數據。
 taos > INSERT INTO tablename USING redis_node_meters TAGS ('China', 't est', '127.0.0.3', 9200, 'master') VALUES ('2021-12-02 14:21:14', 6490 , ...) 
  • 繪圖展示,繪圖程序沒有安裝客戶端驅動,直接使用了TDengine提供的RESTful API,采用HTTP的方式進行數據查詢。在SQL查詢上大量使用了TDengine提供的時間維度聚合函數INTERVAL,長時間跨度的數據查詢,只需要合理選擇聚合間隔,基本都是毫秒級響應,保障了前端繪圖的流暢穩(wěn)定。

四、改造后的落地效果

將監(jiān)控的數據存儲由MySQL改造為TDengine后,不僅頂住了監(jiān)控數據增長所帶來的壓力,還節(jié)約了存儲空間,成本壓縮到了原來的十分之?甚至更低。歷史原生監(jiān)控數據可回溯時間也變得更長,之前存儲3天原生數據及聚合數據的空間,現(xiàn)在可供原始數據存儲45天。

此外,改造之后不再需要維護復雜的數據聚合調度任務,大幅降低了監(jiān)控系統(tǒng)、監(jiān)控數據管理復雜度,同時前端繪圖數據查詢也變得更加簡潔高效。

使用TDengine改造后
TDengine Database

五、寫在最后

隨著對TDengine越發(fā)深入的了解及經驗累積,后續(xù)我們也會逐步考慮將貨拉拉大監(jiān)控系統(tǒng)、業(yè)務數據(行車軌跡)等時序數據均遷移至TDengine。為了方便有需要的朋友更好地使用TDengine,在此也分享一下我們的一些使用經驗:

  • 由于TDengine不支持太復雜的SQL查詢語法,在設計超級表tag的時候需要充分考慮清楚,目前只有tag的字段支持函數運算結果的分組(GROUP BY)查詢,普通字段是不支持的。
  • 子表tag的值是可以改變的,但是同?個子表tag的值是唯?的,建議用子表tag的組合值來生成子表名。

在本次項目中,TDengine很好地幫助我們實現(xiàn)了降本增效,是一款值得嘗試的時序數據庫產品,未來也希望其能夠發(fā)揮出越來越豐富的功能和特性,也期待我們之后能有更緊密深入的合作。