作(zuo)者(zhe):雷達臺站運維項目(mu)研發團隊
小 T 導讀:該雷(lei)達和平(ping)安(an)(an)城市研發(fa)單位是國家技(ji)術創新示范(fan)企(qi)(qi)業、國家高(gao)新技(ji)術企(qi)(qi)業、全國電(dian)子(zi)信息(xi)行業標桿企(qi)(qi)業、“平(ping)安(an)(an)城市”建設(she)優秀安(an)(an)防工程建設(she)企(qi)(qi)業,是首批安(an)(an)徽(hui)省創新型企(qi)(qi)業、安(an)(an)徽(hui)省產學(xue)研聯合示范(fan)企(qi)(qi)業、安(an)(an)徽(hui)省重點軟件企(qi)(qi)業,股票代碼(ma)600990。
隨著大(da)數據時代的(de)(de)(de)(de)(de)到來,民(min)航(hang)行(xing)業(ye)對(dui)數據的(de)(de)(de)(de)(de)重視程度提(ti)(ti)(ti)高(gao),對(dui)空(kong)管(guan)(guan)設(she)(she)施設(she)(she)備(bei)可靠性、安(an)全性、智(zhi)能化(hua)(hua)(hua)水平也提(ti)(ti)(ti)出了更高(gao)的(de)(de)(de)(de)(de)要求(qiu)。在這一背景下,智(zhi)慧化(hua)(hua)(hua)雷(lei)達臺(tai)站(zhan)的(de)(de)(de)(de)(de)建(jian)設(she)(she)提(ti)(ti)(ti)上日程,為(wei)便于對(dui)臺(tai)站(zhan)進(jin)(jin)(jin)行(xing)全局的(de)(de)(de)(de)(de)管(guan)(guan)理(li)(li),提(ti)(ti)(ti)高(gao)臺(tai)站(zhan)運行(xing)效率(lv),民(min)航(hang)開(kai)始推動(dong)以集中化(hua)(hua)(hua)的(de)(de)(de)(de)(de)管(guan)(guan)理(li)(li)模式對(dui)雷(lei)達臺(tai)站(zhan)進(jin)(jin)(jin)行(xing)智(zhi)慧運行(xing)管(guan)(guan)控——以臺(tai)站(zhan)智(zhi)能化(hua)(hua)(hua)設(she)(she)備(bei)為(wei)基(ji)礎,利用(yong)先進(jin)(jin)(jin)的(de)(de)(de)(de)(de)信息化(hua)(hua)(hua)技術構建(jian)臺(tai)站(zhan)管(guan)(guan)理(li)(li)信息化(hua)(hua)(hua)應用(yong)體系。這一舉(ju)動(dong)旨在為(wei)業(ye)務(wu)統一、高(gao)效管(guan)(guan)理(li)(li)提(ti)(ti)(ti)供(gong)信息服務(wu)支撐,解決臺(tai)站(zhan)運行(xing)維護痛點,推進(jin)(jin)(jin)空(kong)管(guan)(guan)臺(tai)站(zhan)向管(guan)(guan)控自動(dong)化(hua)(hua)(hua)、智(zhi)慧化(hua)(hua)(hua)發展。
我(wo)們在雷達(da)臺站運(yun)維管理系統中搭建了數個傳(chuan)感器(qi)(qi)設(she)備,這(zhe)些(xie)傳(chuan)感設(she)備種類雜(za)數量(liang)多,大致可以分(fen)為(wei)以下幾類:聲音傳(chuan)感器(qi)(qi)、XYZ三向軸(zhou)振動傳(chuan)感器(qi)(qi)、傾斜角度傳(chuan)感器(qi)(qi)、電力模(mo)擬量(liang)傳(chuan)感器(qi)(qi)、風速傳(chuan)感器(qi)(qi)等(deng)等(deng)。
由(you)于(yu)(yu)傳感(gan)器設備采(cai)集數(shu)(shu)(shu)據(ju)頻度高(gao),數(shu)(shu)(shu)據(ju)傳輸量(liang)大,要求存儲(chu)數(shu)(shu)(shu)據(ju)庫具有極高(gao)的(de)數(shu)(shu)(shu)據(ju)吞吐率和存儲(chu)低延(yan)時,特(te)別是(shi)聲音(yin)傳感(gan)器,每秒鐘要采(cai)集22050條數(shu)(shu)(shu)據(ju),常規的(de)事務(wu)型數(shu)(shu)(shu)據(ju)庫(MySQL、Oracle等(deng))對這類(lei)數(shu)(shu)(shu)量(liang)級的(de)結構(gou)化(hua)數(shu)(shu)(shu)據(ju)存儲(chu)早已力(li)不從心,而使用(yong)基于(yu)(yu)事務(wu)型數(shu)(shu)(shu)據(ju)庫的(de)分表(biao)分庫中(zhong)間件(ShardingSphere、MyCat等(deng))又會把技術(shu)架構(gou)變得更加復(fu)雜,也會大大提高(gao)后期系統運維成本。
基于此,我們決定進行數據庫選型,以匹配雷達臺站運維管理系統的搭建。
為什么會選擇TDengine Database
綜合考慮軟硬件成本和后期系統的技術維護成本,我們先后調研了時間序列數據庫中的InfluxDB、TDengine、OLAP工具ClickHouse以及曾使用過的Hadoop技術棧中的HBase(Hive、Kylin)。由于服務器數量所限,我們首先放棄了基于HBase(Hive、Kylin)的技術方案,隨后對InfluxDB、TDengine和ClickHouse做了寫入和查詢性能對比,發現在相同配置的服務器硬件資源中,TDengine Database都發揮出了最好的性能表現。部分性能對比如下(xia)圖(tu):


同時我們也查詢了兩款數據庫軟件在和Gitee等國內外開源托管平臺上的社區活躍程度,并了解到TDengine不僅集群版已經進行開源且還是一款國產化的數據庫產品,在當下國產化的大趨勢背景下,我們就此選定了TDengine作為存儲海量傳感器數據的時序數據庫,配合傳統的關系型數據庫MySQL(用于存儲組織機構、用戶名、密碼、巡檢記錄等強事務型數據)一起作為系統的后端底層存儲數據庫。
選定數據庫之后,搭建便開始進行。下面我會介紹一下我們在搭建時遇到的一些避坑經驗,給到大家參考。
TDengine具體實踐
具體到我們的場(chang)景(jing)中,使用TDengine建庫建表思路(lu)如(ru)下(xia)圖(tu)所示。


TDengine在使用數(shu)據(ju)(ju)庫的(de)(de)時間(jian)精(jing)(jing)度(du)上默(mo)認的(de)(de)是毫(hao)秒(miao),但是系統的(de)(de)聲音振動(dong)傳(chuan)感器(qi)采集頻率是22050HZ,即每秒(miao)鐘采集22050條數(shu)據(ju)(ju),因(yin)此我們(men)對數(shu)據(ju)(ju)存儲(chu)的(de)(de)時間(jian)精(jing)(jing)度(du)要(yao)求到納秒(miao)級(ji)別,需(xu)要(yao)修改數(shu)據(ju)(ju)庫默(mo)認的(de)(de)時間(jian)精(jing)(jing)度(du)。相(xiang)關指令如下(xia):
#振動聲音表(微妙時間精度)(22050/s)
#創建納秒時間精度數據庫
CREATE DATABASE radar_us_sc precision "us" KEEP 365 DAYS 10 BLOCKS 4 UPDATE 1;
#使用剛剛創建的數據庫
USE radar_us_sc;
#創建超級表
CREATE TABLE st_sc_shock (ts timestamp, ch1 float,ch2 float,ch3 float) TAGS (location binary(32), groupdId int);
#創建普通表(繼承上面的超級表)
CREATE TABLE t_sc_shock_hf20101 USING st_sc_shock TAGS ("test", 1);
#手動插入微秒級時間戳數值(測試數據)
INSERT INTO t_sc_shock_hf20101 VALUES (1613799712123412, 10,10,10);
這里需要注(zhu)意的(de)是(shi)由于是(shi)納秒(miao)級別(bie)的(de)時(shi)間(jian)精度,在插入測試(shi)數據時(shi),時(shi)間(jian)戳(chuo)字段對應的(de)數值(zhi)比普通(tong)時(shi)間(jian)戳(chuo)多3位數字,且(qie)不(bu)需要有(you)小(xiao)數點。
其它傳(chuan)感器例如(ru)風速(su)傳(chuan)感器,使用默(mo)認的時間精(jing)度建表語句即可:
#風速表-建庫(時間精度是默認的毫秒)
CREATE DATABASE radar_sc KEEP 365 DAYS 10 BLOCKS 4 UPDATE 1;
#使用風速表
USE radar_sc;
#建超級表,Tag里面只定義,不設置具體值
CREATE TABLE st_sc_wind (ts timestamp, speed float) TAGS (location binary(32), groupdId int);
#建普通表,在定義普通表的時候給出Tag的具體值
CREATE TABLE t_sc_wind_hf40101 USING st_sc_wind TAGS ("test", 1);
在(zai)上(shang)層的(de)(de)(de)業務應用(yong)(yong)中,用(yong)(yong)戶(hu)需要試(shi)聽一段時間(jian)的(de)(de)(de)雷(lei)達轉(zhuan)機(ji)的(de)(de)(de)聲(sheng)音去判(pan)斷雷(lei)達運行(xing)狀態是否(fou)正常(chang),頁(ye)面請求數據庫給(gei)出開始(shi)時間(jian)和結束(shu)時間(jian)這兩個時間(jian)段的(de)(de)(de)數據,再(zai)(zai)通過聲(sheng)音還(huan)原(yuan)算法將這些結構化文(wen)本(ben)數據還(huan)原(yuan)成可以播放的(de)(de)(de)WAV或者MP3文(wen)件,用(yong)(yong)戶(hu)在(zai)頁(ye)面上(shang)即可實時聽到部署在(zai)雷(lei)達轉(zhuan)機(ji)運轉(zhuan)的(de)(de)(de)聲(sheng)音,再(zai)(zai)配合(he)我(wo)們在(zai)前(qian)端網(wang)頁(ye)上(shang)渲染出來的(de)(de)(de)頻(pin)譜圖、時域圖、頻(pin)域圖,來一起判(pan)斷雷(lei)達轉(zhuan)機(ji)工(gong)作是否(fou)正常(chang)。
由于(yu)我(wo)們(men)需(xu)要基于(yu)時域(yu)(yu)圖和頻(pin)(pin)域(yu)(yu)圖去判斷(duan)雷達轉機工作(zuo)是(shi)否正常(chang),因此在生成頻(pin)(pin)域(yu)(yu)圖之前,我(wo)們(men)需(xu)要預(yu)先在數(shu)據(ju)庫中把原始數(shu)據(ju)按照頻(pin)(pin)率分段(duan)生成數(shu)千張(zhang)子頻(pin)(pin)率段(duan)表,再基于(yu)這些子頻(pin)(pin)率段(duan)表進行FFT轉換從而得到頻(pin)(pin)域(yu)(yu)圖。
在一次刪(shan)除(chu)數(shu)(shu)(shu)(shu)千張子頻率段表操(cao)作(zuo)中,刪(shan)除(chu)語句執行(xing)(xing)之后,數(shu)(shu)(shu)(shu)據(ju)庫(ku)(ku)訪(fang)問和(he)插(cha)入變得異常(chang)緩慢,我們(men)的(de)(de)第(di)一反應是數(shu)(shu)(shu)(shu)據(ju)庫(ku)(ku)負載(zai)過(guo)高,于是嘗試重啟(qi)(qi)數(shu)(shu)(shu)(shu)據(ju)庫(ku)(ku),在數(shu)(shu)(shu)(shu)據(ju)庫(ku)(ku)關閉并且重新啟(qi)(qi)動之后,數(shu)(shu)(shu)(shu)據(ju)庫(ku)(ku)服務狀態(tai)顯(xian)示啟(qi)(qi)動正(zheng)常(chang),但客戶端卻仍然連接(jie)不(bu)上。此時我們(men)找到(dao)(dao)TDengine的(de)(de)日志(zhi),通(tong)過(guo)翻看日志(zhi)發現(xian)命令行(xing)(xing)程序taos,正(zheng)在恢復重啟(qi)(qi)數(shu)(shu)(shu)(shu)據(ju)庫(ku)(ku)之前的(de)(de)尚未(wei)完成的(de)(de)刪(shan)除(chu)表操(cao)作(zuo),操(cao)作(zuo)WAL(Write Ahead Log),而(er)此時taos僅僅讀取了數(shu)(shu)(shu)(shu)千個日志(zhi)中的(de)(de)前幾百個。大(da)約等(deng)待了數(shu)(shu)(shu)(shu)小時后,數(shu)(shu)(shu)(shu)據(ju)庫(ku)(ku)客戶端才可以查詢(xun)到(dao)(dao)數(shu)(shu)(shu)(shu)據(ju),數(shu)(shu)(shu)(shu)據(ju)庫(ku)(ku)得以正(zheng)常(chang)使用。
systemctl status taosd
journalctl -u taosd.service
在濤思數(shu)據(ju)技(ji)術支持人員的幫助下(xia),我們決定(ding)升級TDengine,升級數(shu)據(ju)庫需要(yao)先卸(xie)載舊版本(ben),操作(zuo)如下(xia):
rmtaos或者rpm -e TDengine
然后下載新版本的TDengine,在Server的目錄里執行(xing)命令如下:
install.sh
TDengine的整個升級過程比較簡單,新版本的數據庫啟動之后即可使用,同時也建議濤思數據的研發人員在taos啟動時監測下上次未完成讀取的WAL文件,再啟動進度條中顯示讀取執行WAL文件進度,這樣可以讓數據庫使用者知道現在數據庫的真實狀態和進度。
搭載TDengine的系統架構詳解
整體來看,雷達臺(tai)站(zhan)智(zhi)能(neng)運維(wei)系(xi)統分(fen)為單(dan)臺(tai)站(zhan)系(xi)統和中心(xin)站(zhan)系(xi)統兩種類型。單(dan)臺(tai)站(zhan)系(xi)統組成內容(rong)包(bao)括臺(tai)站(zhan)現場的主設(she)備監(jian)控(kong)、網絡設(she)備監(jian)控(kong)、動(dong)力設(she)備監(jian)控(kong)、環境(jing)設(she)備監(jian)控(kong)、專(zhuan)項數據分(fen)析、機器(qi)人巡檢、雷達臺(tai)站(zhan)智(zhi)能(neng)運維(wei)系(xi)統管理平(ping)臺(tai)、雷達臺(tai)站(zhan)智(zhi)能(neng)運維(wei)系(xi)統APP等。
中心站(zhan)是遠端(duan)多個單臺站(zhan)信(xin)息集成的(de)中心,可以對多個單臺站(zhan)的(de)數(shu)據進(jin)行融(rong)合處理,功能(neng)包括(kuo)總體運(yun)行態(tai)勢(shi)分(fen)析、數(shu)據融(rong)合、數(shu)據挖(wa)掘、專家知(zhi)識庫、自(zi)主(zhu)學習、輔助決策等功能(neng),日常管理人員可以通(tong)過該(gai)中心站(zhan)平(ping)臺遠程管理所(suo)有(you)接入雷達臺站(zhan)智能(neng)運(yun)維系統系統的(de)單臺站(zhan)。
雷(lei)達臺站(zhan)智能運維系統移動終(zhong)端軟件可在(zai)手機(ji)或平板電腦上運行,功能由臺站(zhan)態勢監(jian)測(ce)、實(shi)時數據監(jian)測(ce)、報(bao)警(jing)預警(jing)、工單流轉、技術會診(zhen)、專項(xiang)分析、知識庫、機(ji)器(qi)人控制、視頻(pin)監(jian)控等(deng)應用功能。
其業務架構主要包括數(shu)據來源層(ceng)、數(shu)據存儲層(ceng)、數(shu)據模型層(ceng),數(shu)據接口(kou)層(ceng)、業務應用層(ceng)、業務展示(shi)層(ceng)和用戶終端幾個部分,如下圖所示(shi)。

整體架(jia)構由底層(ceng)(ceng)到上層(ceng)(ceng)組(zu)成主要分為以(yi)下幾個層(ceng)(ceng)面:數據(ju)來源層(ceng)(ceng)、數據(ju)存儲層(ceng)(ceng)、數據(ju)模(mo)型層(ceng)(ceng)、數據(ju)接口層(ceng)(ceng)、業(ye)務模(mo)塊(kuai)層(ceng)(ceng)、業(ye)務展(zhan)示層(ceng)(ceng)。
數據來源層可以利用物聯(lian)網傳感器(qi)和智能采集(ji)技(ji)術對(dui)臺站運行情況進(jin)行多維度信息采集(ji)。物聯(lian)數據采集(ji)包括臺站的環境監(jian)測、設(she)備檢測、動力(li)監(jian)測、數據監(jian)測、服務監(jian)測、網絡鏈路監(jian)測、資源監(jian)測等幾個方(fang)面。
數據存儲層的作用是對所有監測的數據進行統一的數據清洗,剔除異常數據后融合成標準化的格式并進行存儲。數據存儲層對不同的數據類型采用不同的底層存儲方式,具有明顯時間序列屬性的傳感器數據將會被存放在TDengine中,并且按照不同的業務數據形成不同的業務主題庫。
而且數(shu)(shu)(shu)(shu)據(ju)(ju)(ju)存儲(chu)層具有數(shu)(shu)(shu)(shu)據(ju)(ju)(ju)緩(huan)沖的功能,并能按數(shu)(shu)(shu)(shu)據(ju)(ju)(ju)的訪(fang)(fang)問(wen)頻率自動建立數(shu)(shu)(shu)(shu)據(ju)(ju)(ju)緩(huan)存,合理(li)規劃系統內(nei)冷(leng)熱(re)數(shu)(shu)(shu)(shu)據(ju)(ju)(ju)的存儲(chu)方(fang)式(shi),提(ti)高數(shu)(shu)(shu)(shu)據(ju)(ju)(ju)訪(fang)(fang)問(wen)的速度(du)。此外,存儲(chu)層還會定時對數(shu)(shu)(shu)(shu)據(ju)(ju)(ju)進行備份存儲(chu)、冷(leng)熱(re)數(shu)(shu)(shu)(shu)據(ju)(ju)(ju)替(ti)換以及數(shu)(shu)(shu)(shu)據(ju)(ju)(ju)診斷,及時發現(xian)數(shu)(shu)(shu)(shu)據(ju)(ju)(ju)存儲(chu)的故障隱(yin)患(huan)、保證數(shu)(shu)(shu)(shu)據(ju)(ju)(ju)的存儲(chu)安(an)全(quan)性。
數(shu)據(ju)模(mo)型(xing)(xing)層能夠根據(ju)業務(wu)需求利用存儲(chu)的數(shu)據(ju)建立多個(ge)(ge)數(shu)據(ju)分(fen)析(xi)模(mo)型(xing)(xing),提供模(mo)型(xing)(xing)算(suan)法(fa)統一(yi)的運行環境,包括(kuo)實時(shi)分(fen)析(xi)和批處理分(fen)析(xi),并能對運行的模(mo)型(xing)(xing)算(suan)法(fa)進行統一(yi)管理,包括(kuo)算(suan)法(fa)任務(wu)啟停、服務(wu)編排、算(suan)法(fa)運行監控、算(suan)法(fa)資源管理、算(suan)法(fa)運行告(gao)警(jing)、算(suan)法(fa)模(mo)型(xing)(xing)庫等(deng)多個(ge)(ge)功能。
通過分析算法歷(li)史(shi)對(dui)海量監測(ce)數(shu)據(ju)進(jin)(jin)行(xing)綜合分析,利(li)用多維(wei)數(shu)據(ju)相(xiang)關性(xing)分析技(ji)術(shu),可(ke)以將以往一些(xie)不被(bei)注意但會產生實(shi)(shi)(shi)際影響的(de)傳感器數(shu)據(ju)囊括進(jin)(jin)特征提取建模(mo)和(he)神經網絡建模(mo)的(de)過程中,結(jie)(jie)合歷(li)史(shi)數(shu)據(ju)對(dui)實(shi)(shi)(shi)時全量數(shu)據(ju)進(jin)(jin)行(xing)深(shen)度挖掘,再結(jie)(jie)合過往的(de)設(she)備運(yun)維(wei)實(shi)(shi)(shi)際經驗便可(ke)預(yu)測(ce)出(chu)故(gu)障(zhang)發生的(de)概率,實(shi)(shi)(shi)現智能故(gu)障(zhang)預(yu)測(ce)。
數(shu)(shu)據(ju)(ju)接口層利用(yong)多(duo)種行(xing)業(ye)內通用(yong)的(de)數(shu)(shu)據(ju)(ju)共享(xiang)(xiang)接口實現(xian)系統數(shu)(shu)據(ju)(ju)和(he)其它第三方(fang)(fang)(fang)平(ping)臺以及(ji)APP端的(de)數(shu)(shu)據(ju)(ju)共享(xiang)(xiang),支持的(de)數(shu)(shu)據(ju)(ju)接口方(fang)(fang)(fang)式(shi)包括RESTful、消息隊(dui)列(lie)、中間(jian)庫等多(duo)種方(fang)(fang)(fang)式(shi),且能控制數(shu)(shu)據(ju)(ju)的(de)共享(xiang)(xiang)權(quan)限和(he)共享(xiang)(xiang)目錄。
業(ye)務模塊層通(tong)過平(ping)臺底(di)層提供的數(shu)據(ju)和基礎服務,可在上層開發構建多個業(ye)務智能(neng)應用,同時提供了上層應用統一運(yun)行的環(huan)境。業(ye)務模塊功能(neng)主要包(bao)括(kuo)工(gong)單系統、實時監測、智能(neng)預警(jing)、態勢分(fen)析、遠(yuan)程控(kong)制、專項分(fen)析、健康評價、告警(jing)聯(lian)動、自(zi)動巡檢(jian)、專家(jia)知識(shi)庫(ku)、智能(neng)安防等(deng)。
在業務展示層,可根據系統使用人員和使用場景的區別來構建多個業務展示平臺。其中本地管理平臺和遠程管理平臺分別作用于單臺站和中心站的管理,同時配備了移動端軟件方便臺站管理人員遠程對臺站進行管理和監控。展示平臺可按用戶使用權限的不同來展示不同的數據和視圖,管理人員視圖更傾向于宏觀全局的數據展示維度,維保人員視圖展示的是細節和本人工作相關的展示維度。
寫在最后
在實現(xian)快速(su)查詢檢索提升(sheng)用(yong)戶體驗的(de)(de)同時,TDengine還可以達到節省硬件服務(wu)器資源和降低系統(tong)后期運維成本的(de)(de)目的(de)(de)。考慮到TDengine在本項目中(zhong)各項性(xing)能指標和數據庫穩定性(xing)的(de)(de)優(you)異(yi)表現(xian),在未來的(de)(de)平安(an)城市、智慧社區等(deng)業務(wu)場(chang)景中(zhong),我們也會(hui)考慮使用(yong)TDengine用(yong)于存儲過車記(ji)錄、人臉(lian)識(shi)別記(ji)錄和WiFi探針記(ji)錄等(deng)數據,展開更深層次的(de)(de)合(he)作。


























