胡曉曄
(寶雞文理學院教學設備與實驗室管理處,陜西 寶雞 721007)
隨著人們對軟件系統功能需求的不斷增加,軟件系統變得越來越龐大和復雜,尤其是軟件系統的缺陷和漏洞很難避免。軟件系統在達到一定規模之后,隨著軟件的長時間運行,軟件系統模塊存在“老化”的特點,總是面臨各種故障或者失效問題,或者由于內在的缺陷漏洞從而導致受到不同程度的攻擊。總而言之,現代社會的正常運作越來越依賴于基礎設施的軟件系統的安全可靠的運行。
軟件系統的可信性問題已經成為國際上普遍關注的問題。現代大規模軟件系統導致其產生可信問題的原因總結起來有:
(1)軟件規模越來越復雜,人為配置以及使用不當,或者軟件存在內在缺陷。
(2)軟件的開發和運行環境已經由傳統的靜態封閉環境發展為開放多變的互聯網環境,而惡意代碼的大量存在會破壞軟件系統的正常運行。
為了解決系統面臨的迫切的可信問題,國內外眾多組織機構已成立全球的計算平臺和可信計算聯盟組織,正致力于解決面臨的安全和可信問題。
基于上述背景,本文將基于復雜網絡研究的理論基礎,著重研究大規模軟件系統中的故障預測與定位問題,主要包括大規模軟件系統的動態與靜態分析方法,基于復雜網絡的故障預測與定位方法,以及結果的可視化界面顯示部分。
本文基于復雜網絡理論,將大規模軟件系統的動態運行信息和靜態信息提取出來,再將軟件的動態運行方法調用序列所映射的調用關系網絡進行分析,并利用可視化界面直觀地展示出來,進而達到故障與異常的檢測與定位。
本文提出了一種基于調用動態網絡的系統檢測機制,通過本文實現的大規模軟件故障預測與定位系統完成了調用關系網絡的生成,并利用本模型對網絡進行實時分析和監控。模型基本性質有:
(1)復雜網絡適應性:基于K核分解算法對網絡靜態結果分析,能夠形象地顯示出大規模復雜網絡的層次結構信息與核心節點,更加難得的是此思想可以分析超大規模的網絡,這一點在利用K-core分解全美各航線大規模節點數據上已經得到了充分的體現,因此說我們提出的模型系統可以用來分析超大規模網絡系統,具有可移植的良好特性;
(2)不同的時間片段特性:由于我們的模型是利用實時監控的原理可以用來監控網絡中每一個時間段內的狀態改變,記入下每一個狀態對應調用關系網絡,利用該網絡就可以分析所監控軟件的未來發展趨勢。
2.2.1 動態網絡分析方法簡介
系統模型的故障預測與定位整體按照以下流程:
(1)對軟件運行過程進行持續的監控;
(2)將監控得到的數據經過處理后生成相應的系統某一時間段內的方法調用關系圖;
(3)對被監控軟件進行基本功能塊的劃分,根據劃分結果生成相應的特征網絡與入口函數;
(4)對軟件的動態運行行為進行持續監控,生成相應的時間片段Δti內系統的調用關系網絡Gi;
(5)根據動態網絡結構演化公式G’i+1=f(Gi,Δti+1)來預測軟件下一時間段內的狀態G’i+1;
(6)根據動態網絡結構測量公式d=g(G’i+1,Gi+1)來對軟件Δti+1內得到的監控狀態Gi+1同預測狀態G’i+1的差異進行測量;
如果測量公式得到的差異值超過了我們設定的閾值,則認為被監控軟件在Δti+1在當前功能塊發生了異常。
2.2.2 調用關系網絡的矩陣表示形式
調用關系網絡的數據結構可以有鄰接矩陣和加權矩陣兩種形式。
鄰接矩陣:為了能夠準確地檢測到矩陣元素的變化,本文在鄰接矩陣的基礎上做了一些限定,定義矩陣中的每一個位置(a,b)代表確定的含義,這樣避免出現同構圖的鄰接矩陣相似的情況。
加權矩陣:增加了加權矩陣的分析,主要了是為了圖形效果的需要,并加入了隨機噪聲的影響,使得兩幅圖像的對比度更加明顯。在加權圖中的噪聲波動的影響較去重圖要強很多,通過對比分析,我們可以更加深入地研究調用關系生成網絡的故障與異常發生機制。
2.2.3 模型建立
大規模復雜網絡對應了軟件系統的不斷衍變周期,用戶不斷對軟件提出新的指令,使得軟件系統對此作出反應,每一次反應都會產生一個新的狀態,軟件狀態隨運行時間的增加也變得更加復雜,為了對軟件狀態加以記錄,并加以分析,我們首先為模型中對應的動態調用網絡結構演變過程定義為一個映射函數:

該函數的意義就是根據軟件運行所產生的數據,把這些數據劃分成為一個個最小的時間切片,測量這個時間切片內對應的特征網絡的狀態,由此可見:

式中:
Gk——為對應功能模塊的特征網絡時間切片。
由于我們所用的函數公式都是統一的,所以不必擔心時間切片的一致性,因此可以推算出下一時刻的動態網絡的時間切片,由此可以使用特征網絡Gk作為同一個功能塊內的預測動態時間切片G’i+1,并且由于時間切片Gk是在系統的動態運行監控過程中生成的,保證了Gk的合理性。前一個值與后一個值只要網絡調用不同就會發生變化,研究這個變化其實就是分析復雜網絡的動態特性,進而達到對軟件系統故障與異常的監控與定位。
大規模軟件故障預測與定位系統的研究框架如圖1所示:

圖1 研究框架圖
大規模軟件系統研究框架系統一共分為5個子模塊:監控模塊:對軟件行為進行持續監控,得到軟件運行時的方法執行信息,以dat文件的格式存儲;
數據處理模塊:對監控數據進行處理,通過重構trace來獲得軟件運行時的方法調用序列,生成K核分解之后的調用關系網絡;
故障注入模塊:給被監控系統注入威布爾分布的概率故障;
故障分析模塊:按照預測模型動態分析方法進行故障的分析工作;
顯示模塊:進行調用關系網絡與故障分析結果的可視化。
3.2.1 數據庫表設計
根據之前的數據,所獲得的實驗數據格式如圖2所示:

圖2 實驗數據格式
其中每個字段的意義如表1所示:

表1 實驗數據格式說明
所獲得數據按照格式存入指定的目錄中,對數據的進一步處理在下一節中介紹。
3.2.2 數據處理模塊介紹
數據處理模塊的主要功能為:首先建立并初始化數據庫;其次將監控數據按照格式進行解析后并存入數據庫中;最后以trace為單位,通過trace重構獲得方法調用序列。
在之前提到的網絡動態系統分析中,首先要獲得網絡的數據也就是trace信息,在數據庫部分我們已經對trace有了一個大致的認識,在這里對trace做一個比較細致的介紹,比如數據格式里的traceId、eoi、ess等字段,為了能夠得到本文需要的方法調用關系,首先要進行基于trace信息的數據分析,重構運行時的trace路徑。
下面給出一些本文中用到的術語定義:
方法(operation):為了實現特定服務而定義在組件中的一些函數。
執行(execution):運行時方法的一次執行過程。
路徑(trace):每一次請求系統提供服務,都會執行一系列嵌套的方法,本文把這一系列的執行過程稱之為“路徑”。
在監控的過程中,對于執行服務請求的線程附加一個特有的traceId,同時將其加入到同一個trace的所有的數據記錄之中。
通過把讀入的調用關系網絡對應矩陣轉化為其對應的節點矩陣,輸出其對應的二范數,然后把每次試驗中的所有數據都做此處理,呈現出總體變化圖像,首先是第一條正常情況下的曲線;再輸出第二條異常情況下的曲線,二者加以對比。
分別從動態和靜態分析理論來顯示和分析對應的調用關系網絡,并顯示其數據庫對應的trace文本信息。通過觀察生成的軟件調用關系網絡來分析并預測其間發生的異常與故障,進而實現模型的監控功能。此處將添加兩個動態圖,分別為加權圖、和去重圖。而注入加權的目的主要是為了突出去重圖的優良特性。
本文提出了一種基于動態網絡分析理論的大規模軟件故障預測模型并建立了相應的可視化界面,此模型可以實現大規模軟件故障的預測,設計故障注入實驗對模型進行了驗證,取得了良好的效果,證明了此模型的有效性。
由于java的矩陣處理能力較MATLAB相比較弱,所以在本界面模塊中采用了混合編程,但java本身和matlab的接口并不及C或C++和matlab的多,因此效率有待提高。以后可以根據實際需要,在C或C++平臺上開發程序。
利用2范數做動態分析時,盡管取得了比較滿意的精度,但在一些特殊trace內部調用關系網絡的結構性改變存在著誤報的風險,盡管對異常情況進行實際返回值與返回類型檢查可以避免誤報,但是整個檢測系統的開銷時間將增加,會導致靈敏性下降。在后續的開發中可以利用其它的矩陣分析理論解決這個問題。
[1]劉克,單志廣,王戟,等.“可信軟件基礎研究”重大研究計劃綜述[J].中國科學基金,2008,22(3):145-151.
[2]趙廣元.MATLAB與控制系統仿真實踐[M].北京:北京航空航天大學出版社,2009.
[3]范立鋒,喬世權,程文彬,等.JSP程序設計[M].北京:人民郵電出版社,2009.
[4]李建剛,秦興橋,鄭雨貝,等.JSP網絡編程技術與實踐[M].北京:清華大學出版社,2008.
[5]張新曼.精通JSP[M].北京:人民郵電出版社,2007.
[6]詹靜,張煥國.可信平臺模塊自動化測試研究[J].計算機研究與發展,2009,46(11):1839-1846.
[7]Haohua Zhang,Hai Zhao,Wei Cai,et al.Using the K-core decomposition to analyze the static structure of large-scale software systems[J].Supercomput,2009,10(3):127-140.
[8]Ignacio Alvarez-Hamelin,Luca Dall’Asta,Alain Barrat,et al.K-core decomposition:a tool for the visualization of large scale networks[J].ACM Computing Surveys,2006,11(2):789-796.