馮占利 安進朝
摘要:在大型系統(tǒng)軟件中,需要眾多異步工作的節(jié)點參與提供服務(wù),各節(jié)點要生成大量在空間上離散而時間上又相關(guān)的數(shù)據(jù),運行期間傳統(tǒng)離散日志難以追蹤故障,對這些數(shù)據(jù)進行分析過程中,一般期望通過可視化的圖表來展示詳盡的數(shù)據(jù)和解釋,以提高故障追蹤效率。通過合理利用時間序列數(shù)據(jù)庫高效且靈活索引,利用其較好的查詢展現(xiàn)能力,并按照需求延伸數(shù)據(jù)表的結(jié)構(gòu),以時序型數(shù)據(jù)庫與分布式通信系統(tǒng)核心網(wǎng)結(jié)合進行深入設(shè)計為例,分析和解決了大型系統(tǒng)軟件中服務(wù)監(jiān)控系統(tǒng)的需求難題。
關(guān)鍵詞:時間序列;數(shù)據(jù)庫;服務(wù)監(jiān)控;InfluxDB;通信系統(tǒng)
中圖分類號:TP311文獻標志碼:A文章編號:1008-1739(2021)06-60-4
0引言
在大型系統(tǒng)軟件設(shè)計中服務(wù)監(jiān)控系統(tǒng)有海量數(shù)據(jù)的快速寫入和讀取需求,要能夠適應(yīng)多個完全不同的項目同時對面向研發(fā)與運維的監(jiān)控的需求,且可以不需修改業(yè)務(wù)無關(guān)部分的代碼,也不需修改數(shù)據(jù)庫的結(jié)構(gòu)。經(jīng)調(diào)研,時間序列數(shù)據(jù)庫可以建立高效且靈活的索引,實現(xiàn)更好的查詢能力,并且可以隨時延伸數(shù)據(jù)表的結(jié)構(gòu),適合使用“按列存儲”以時間為主要線索的非關(guān)系數(shù)據(jù)庫來管理。其中比較知名的時序數(shù)據(jù)庫InfluxDB是由InfluxData使用GO語言開發(fā),經(jīng)過不斷改進現(xiàn)已在開源時序數(shù)據(jù)庫中排名第一[1-2],應(yīng)用較為廣泛,著力于高性能查詢與存儲時序型數(shù)據(jù),被廣泛應(yīng)用于存儲系統(tǒng)的監(jiān)控數(shù)據(jù)、IoT行業(yè)的實時數(shù)據(jù)等場景。
1時間序列數(shù)據(jù)庫
在眾多的NoSQL數(shù)據(jù)庫存儲模型中,時間序列數(shù)據(jù)庫通過使用特殊的存儲方式,使得時序數(shù)據(jù)可以高效存儲和快速查詢,是管理海量只讀數(shù)據(jù)的一項重要技術(shù)。InfluxDB是當(dāng)今最流行的時序數(shù)據(jù)庫之一,采用了特殊數(shù)據(jù)存儲方式,有較高的以時間作為主要線索的非結(jié)構(gòu)化數(shù)據(jù)的處理能力。與傳統(tǒng)關(guān)系數(shù)據(jù)庫相比,時序數(shù)據(jù)庫的特點主要表現(xiàn)為以下幾個方面:
①數(shù)據(jù)模型:同樣支持數(shù)據(jù)庫、數(shù)據(jù)表和記錄的3級存儲結(jié)構(gòu),但同一個表中的不同記錄可異構(gòu),甚至索引也可異構(gòu)。很多應(yīng)用都會從這種非結(jié)構(gòu)化數(shù)據(jù)模型中獲益,這些數(shù)據(jù)庫也非常適合于創(chuàng)建原型或是快速融入應(yīng)用開發(fā),因為這種靈活性使得新特性的開發(fā)變得非常容易。開發(fā)者希望使用非常靈活的數(shù)據(jù)庫,能夠輕松容納新的數(shù)據(jù)列,而不用去重構(gòu)數(shù)據(jù)表的結(jié)構(gòu)。
②查詢效率:使用面向列的存儲,同一列的數(shù)據(jù)毗鄰能夠?qū)崿F(xiàn)數(shù)據(jù)的高效插入與追加、多重索引,能夠?qū)崿F(xiàn)數(shù)據(jù)高效的多條件查詢,查詢性能不因條件的增多而顯著下降。
③功能專一:現(xiàn)有產(chǎn)品所提供的功能都圍繞核心功能與優(yōu)化性能,因而大多數(shù)NoSQL數(shù)據(jù)庫都不支持視圖、事務(wù)、存儲過程與觸發(fā)器。InfluxDB主要針對時間作為主要查詢線索優(yōu)化,并且多個列作為條件查詢時性能優(yōu)異。
④容災(zāi):自身大量使用內(nèi)存做索引的緩存,提供離線備份功能,方便備份與恢復(fù),也節(jié)約空間,提供集群部署能力。
⑤元數(shù)據(jù):使用多個相對獨立的列保存,每一列都可以有獨立的索引。在查詢時不用連續(xù)出現(xiàn),支持同時對多個索引列的查詢,支持豐富的篩選關(guān)鍵詞。
⑥執(zhí)行代碼:InfluxDB使用編譯的本地機器代碼,性能有保證。單機部署即可實現(xiàn)很高的檢索性能,若選擇集群部署更能夠提供業(yè)界較為領(lǐng)先的能算比,節(jié)約運維成本。
2服務(wù)監(jiān)控節(jié)點數(shù)據(jù)分析
對于需要大量采集數(shù)據(jù)的服務(wù)監(jiān)控系統(tǒng)來說,時間序列數(shù)據(jù)庫還有一些特性,是關(guān)系數(shù)據(jù)庫無法簡單實現(xiàn)的。這些特性中,最重要的就是無結(jié)構(gòu)(Schema Less)。無結(jié)構(gòu)無需提前創(chuàng)建表,數(shù)據(jù)表中的列是隨著數(shù)據(jù)的插入和刪除而發(fā)生變化的,即表的結(jié)構(gòu)會自動去適應(yīng)新插入數(shù)據(jù)。這一點在大量有關(guān)聯(lián)的異構(gòu)數(shù)據(jù)的收集方面有著先天的優(yōu)勢,對于服務(wù)監(jiān)控的開發(fā)來說,項目初期開發(fā)人員并不知道采集的數(shù)據(jù)都要哪些列、哪些類型的數(shù)據(jù),數(shù)據(jù)表的格式是隨著項目的進行而不斷豐富的。圖1是通信系統(tǒng)核心網(wǎng)服務(wù)監(jiān)控系統(tǒng)的追蹤前端界面,可以看到追蹤的過程中,為了便于分析需要展示一些異構(gòu)的數(shù)據(jù)。
服務(wù)監(jiān)控系統(tǒng)要能夠適應(yīng)多個完全不同的項目對于面向研發(fā)與運維的監(jiān)控需求,而不用修改業(yè)務(wù)無關(guān)部分的代碼,也不用修改數(shù)據(jù)庫的結(jié)構(gòu)。只要增加業(yè)務(wù)有關(guān)的數(shù)據(jù)解析組件、在前端增加過濾規(guī)則就能夠迅速適應(yīng)新項目。只有無結(jié)構(gòu)的存儲才能滿足這樣的需求,這是大數(shù)據(jù)與數(shù)據(jù)挖掘優(yōu)先選用非關(guān)系數(shù)據(jù)庫管理的一個主要原因。
3分布式通信系統(tǒng)核心網(wǎng)服務(wù)監(jiān)控系統(tǒng)設(shè)計
3.1系統(tǒng)需求分析
在眾多大型系統(tǒng)軟件中,例如分布式通信系統(tǒng)核心網(wǎng)架構(gòu)都需要眾多的異步工作的節(jié)點參與提供服務(wù),各節(jié)點要生成大量在空間上離散的、時間上又是相關(guān)的數(shù)據(jù),如狀態(tài)變化、數(shù)據(jù)變化及調(diào)用流程日志等運行信息,傳統(tǒng)離散日志難以追蹤故障。這就需要預(yù)先研發(fā)專門的可用于監(jiān)控軟件系統(tǒng)的框架來支持研發(fā)與后續(xù)運維,這一服務(wù)監(jiān)控系統(tǒng)要滿足下面的需求[4],包括:
①增加透明度:對于分布式通信系統(tǒng)來說,各節(jié)點運行狀態(tài)、節(jié)點間消息、網(wǎng)元對數(shù)據(jù)庫的查詢、終端的請求響應(yīng)等信息都需要采集,這就會產(chǎn)生大量異構(gòu)卻又相關(guān)的數(shù)據(jù),而這些數(shù)據(jù)都需要納入監(jiān)控的采集范圍。
②定位關(guān)鍵點:分析監(jiān)控記錄是非常痛苦的,系統(tǒng)每小時可能會產(chǎn)生大量監(jiān)控日志,發(fā)生事件的時候不能寄希望依靠人眼查看數(shù)據(jù)就能迅速找出問題原因,需要高效率的檢索來保證維護人員能夠快速定位問題。
③自動化:數(shù)千項的數(shù)據(jù)不可能每一項都靠人工去看,必須要跟自動報警相關(guān)聯(lián),需要后臺有算法不斷自動檢索。發(fā)現(xiàn)數(shù)值異常時,可以通過短信、郵件還有系統(tǒng)本身來發(fā)出報警信息。報告產(chǎn)生可以無人值守,還可以作為持續(xù)集成和持續(xù)測試快速判定結(jié)果的依據(jù)。
④可視化:通過信息采集與分析,記錄關(guān)鍵行為的詳細信息,形成便于觀察的數(shù)據(jù)表,生成可視化的圖表,讓人直觀上就能迅速判定系統(tǒng)是否有異常。
⑤支持研發(fā)過程中把監(jiān)控嵌入基礎(chǔ)框架:用于在調(diào)試、測試與運維階段探測軟件內(nèi)部運行情況的技術(shù)集合。服務(wù)于研發(fā)與優(yōu)化的過程,減少人為因素造成缺陷的可能性。一般來說項目進行編碼時,并不是每個編碼人員都會意識到需要在關(guān)鍵的地方嵌入一個監(jiān)控點,所以要在基礎(chǔ)框架本身的關(guān)鍵點預(yù)埋監(jiān)控“探針”。
⑥異地分析:數(shù)據(jù)采集與分析存儲分離,只需要在目標上采集原始數(shù)據(jù),支持通過傳輸?shù)疆惖卦龠M行解析、儲存與分析。
3.2服務(wù)監(jiān)控系統(tǒng)技術(shù)棧設(shè)計
分布式通信系統(tǒng)核心網(wǎng)的服務(wù)監(jiān)控系統(tǒng)中,相關(guān)的技術(shù)棧設(shè)計以微服務(wù)架構(gòu)監(jiān)控系統(tǒng)中的技術(shù)棧為基礎(chǔ),做出適應(yīng)性的改進,以減少對網(wǎng)元的改動。
采集:探針負責(zé)采集原始數(shù)據(jù),將原始數(shù)據(jù)通過一次內(nèi)存拷貝轉(zhuǎn)交給傳輸代理,即完成自身任務(wù);傳輸:透過傳輸代理,使用可靠傳輸協(xié)議來傳輸,當(dāng)數(shù)據(jù)到達服務(wù)監(jiān)控系統(tǒng)中,再轉(zhuǎn)交給負責(zé)數(shù)據(jù)解析的解析服務(wù),運行期間保證傳輸質(zhì)量,斷線時還要能夠使用文件做緩存,傳輸和緩存與業(yè)務(wù)無關(guān),與被探測對象無耦合;解析:使用動態(tài)加載的插件解析數(shù)據(jù),根據(jù)不同項目的需要動態(tài)組合出不同的數(shù)據(jù)解析進程,支持負載均衡,插件負責(zé)將解析出的記錄插入數(shù)據(jù)對應(yīng)的數(shù)據(jù)表;存儲:使用時間序列數(shù)據(jù)庫保存采集到的大量異構(gòu)信息,提供高效且靈活的查詢能力。
另外還應(yīng)使用關(guān)系數(shù)據(jù)庫保存重要的或者檢索條件局限于索引字段的信息,分析手動或自動的分析采集到的監(jiān)控信息。其中手工分析需要為研發(fā)運維人員提供豐富的信息,例如:狀態(tài)數(shù)據(jù)、網(wǎng)元日志、注冊上下文、呼叫上下文、信令消息、系統(tǒng)資源占用、數(shù)據(jù)庫操作、代碼覆蓋統(tǒng)計及性能統(tǒng)計等。
圖2是InfluxDB在分布式通信系統(tǒng)核心網(wǎng)的服務(wù)監(jiān)控系統(tǒng)中所處的位置。
3.3服務(wù)監(jiān)控系統(tǒng)效果分析
以分布式通信系統(tǒng)的呼叫為例,分析不僅僅要有呼叫的簡單信息還要有可以支持研發(fā)人員觀察的詳盡細節(jié),通過可視化的圖表、詳盡的數(shù)據(jù)和解釋,從而提高故障追蹤的效率[5]。圖3和圖4是一個實際的呼叫分析過程。
如圖3所示,分析呼叫對于研發(fā)與運維人員來說,只要簡單的查詢即可開始分析,分析過程可以是直觀的、圖形化的,分析之前無需再花費很多時間去過濾日志和抓包,通過時序數(shù)據(jù)庫的檢索能力即可迅速找到所有的相關(guān)數(shù)據(jù),快速呈現(xiàn)。這樣的分析過程改變了原本需要多個工具參與的、多個步驟相互分離的、依賴研發(fā)運維人員經(jīng)驗的分析過程。把分析過程統(tǒng)一到了同一個分析系統(tǒng)之中,直觀且高效率,降低了對人員的熟練程度要求。
通過與InfluxDB的結(jié)合,本服務(wù)監(jiān)控系統(tǒng)提供了一種高效檢索支持,研發(fā)與運維人員在面對數(shù)十億條的服務(wù)監(jiān)控數(shù)據(jù)時,就能夠通過運用面向列存儲的數(shù)據(jù)庫減少IO總量,減少負載,提高檢索效率,大大節(jié)約了調(diào)試時間。再利用InfluxDB提供的“類SQL”語法查詢能力,讓統(tǒng)計分析變得非常簡單,結(jié)合前端頁面設(shè)計,能夠迅速實現(xiàn)統(tǒng)計分析的功能。圖5是一個簡單的拓撲統(tǒng)計頁面演示,有多個統(tǒng)計信息,得到結(jié)果所用的時間少于1 s。
4結(jié)束語
面向研發(fā)的監(jiān)控是軟硬件研發(fā)過程質(zhì)量控制的關(guān)鍵一環(huán),能夠提供對數(shù)據(jù)的豐富分析與追蹤能力。核心思想是通過提高關(guān)鍵事件的溯源效率,來為系統(tǒng)開發(fā)過程提供高效“腳手架”,使得研發(fā)、測試、運維人員均能從中獲益。當(dāng)前5G系統(tǒng)核心網(wǎng)的架構(gòu)發(fā)展出了更多層次,劃分出了更多微服務(wù)[6],可以容納更多的節(jié)點分擔(dān)負載,由于不同節(jié)點間完全的異步工作,并通過異步的消息傳遞來通信,對故障定位提出更高的要求,傳統(tǒng)日志框架難于駕馭,對面向研發(fā)與運維的“服務(wù)監(jiān)控系統(tǒng)”提出更高的要求。
智能化就是未來,服務(wù)監(jiān)控系統(tǒng)除了提供面向編碼、測試人員的功能外,還要能夠提供自動化的數(shù)據(jù)分析算法。這樣才能夠讓系統(tǒng)自動尋找故障來源,自動化生成客觀報告,甚至根據(jù)預(yù)先制定的策略,自動調(diào)節(jié)自身運行狀態(tài),實現(xiàn)智能化運維。
參考文獻
[1]徐化巖,初彥龍.基于InfluxDB的工業(yè)時序數(shù)據(jù)庫引擎設(shè)計[J].計算機應(yīng)用與軟件,2019,36(9):33-36.
[2]柴亞剛.基于時序數(shù)據(jù)庫的分布式網(wǎng)絡(luò)波動監(jiān)控系統(tǒng)[J].中國傳媒科技,2018(3):36-37.
[3]程天天.基于Redis的時間序列數(shù)據(jù)庫的研究與實現(xiàn)[D].成都:電子科技大學(xué),2020.
[4]呂毅.服務(wù)監(jiān)控方法及系統(tǒng):北京,CN103209100A[P].2013.
[5]劉金.大規(guī)模集群狀態(tài)時序數(shù)據(jù)采集、存儲與分析[D].北京:北京郵電大學(xué),2018.
[6]許碧洲,路遙,孫道禹.5G核心網(wǎng)的組網(wǎng)架構(gòu)和演進發(fā)展[J].電子技術(shù)與軟件工程,2018(20):12.