王艷超,姚江毅,李雄偉
(陸軍工程大學(xué)石家莊校區(qū),河北 石家莊 050003)
軟件老化是在一個長時間持續(xù)運行的軟件中出現(xiàn)的系統(tǒng)資源泄漏、數(shù)據(jù)腐爛等,使?fàn)顟B(tài)退化最終導(dǎo)致軟件崩潰的現(xiàn)象,其根本原因是軟件中存在老化相關(guān)的缺陷(Aging-Related bugs)[1]。在二十世紀(jì)六十年代,研究人員就發(fā)現(xiàn)軍用軟件系統(tǒng)在運行過程中出現(xiàn)故障率增加、性能持續(xù)下降的現(xiàn)象。隨著軟件復(fù)雜度提高和應(yīng)用范圍的擴展,研究人員在越來越多的軟件中發(fā)現(xiàn)老化現(xiàn)象。軟件老化會造成系統(tǒng)可靠性降低,在一些關(guān)鍵系統(tǒng)中甚至?xí)斐删薮笕藛T傷亡[2]。
為了緩解軟件老化的影響,Huang等人[3]提出軟件再生技術(shù),即有計劃地暫停正在運行的軟件,清理內(nèi)部狀態(tài),使軟件恢復(fù)到較為健康的狀態(tài)。軟件再生是一種預(yù)反應(yīng)式的主動抗衰技術(shù),再生期間系統(tǒng)不能提供服務(wù),一定程度上降低系統(tǒng)的可用性。因此在軟件再生技術(shù)被提出以來,眾多研究人員致力于設(shè)計優(yōu)化再生策略,降低再生成本,最大化軟件服務(wù)可用性。
在軟件老化研究中主要通過老化參數(shù)的變化來識別軟件老化狀態(tài)。根據(jù)老化參數(shù)類型可以將軟件老化劃分為資源消耗型老化和性能退化型老化。
資源消耗型老化是指由于系統(tǒng)內(nèi)部錯誤使得內(nèi)存、線程、文件鎖等系統(tǒng)資源被逐漸消耗,可用資源逐漸減少的老化現(xiàn)象。Garg等人[4]指出內(nèi)存泄漏會使軟件出現(xiàn)性能下降、掛起或崩潰的老化現(xiàn)象,之后大多數(shù)關(guān)于軟件系統(tǒng)老化預(yù)測的研究都將內(nèi)存資源等作為老化模型的輸入進(jìn)行老化分析。徐萍[5]通過跟蹤系統(tǒng)的運行狀況,對系統(tǒng)內(nèi)存、進(jìn)程和CPU占用情況進(jìn)行采樣分析。Cassidy等人[6]發(fā)現(xiàn)數(shù)據(jù)庫管理系統(tǒng)中的共享內(nèi)存池鎖資源的爭用會嚴(yán)重導(dǎo)致系統(tǒng)性能下降。Dony等人[7]利用套接字描述符資源研究Java中的異常處理。負(fù)載的強度也會影響系統(tǒng)資源的消耗趨勢,Matias等人[8]設(shè)計加速老化試驗證明負(fù)載對系統(tǒng)資源消耗的影響。
性能退化是軟件老化最直觀的表現(xiàn),包括響應(yīng)時間變長、吞吐量和處理速度下降等,是軟件系統(tǒng)狀態(tài)退化的綜合反映。Levitin等人[9]根據(jù)系統(tǒng)處理速度的變化,結(jié)合系統(tǒng)工作量、可用內(nèi)存構(gòu)建了基于事件轉(zhuǎn)移的老化狀態(tài)模型。Zhao等人[10]以響應(yīng)時間作為老化指標(biāo)檢測Apache HTTP 服務(wù)器老化趨勢。不同的軟件響應(yīng)時間不同,不能單純以響應(yīng)時間的長短定義軟件性能的好壞,需要根據(jù)軟件特點及用戶的感受來劃分響應(yīng)時間的退化標(biāo)準(zhǔn)。
在安全關(guān)鍵軟件系統(tǒng)存在由運算精度不足引起的老化,不屬于上述兩種類型。其主要原因是系統(tǒng)缺陷以及系統(tǒng)運算精度導(dǎo)致的數(shù)值錯誤的積累,目前還沒有相應(yīng)的老化參數(shù)來檢測這種軟件老化,只有其表現(xiàn)出來才會被發(fā)現(xiàn),如美軍愛國者導(dǎo)彈防御系統(tǒng)的數(shù)值誤差導(dǎo)致導(dǎo)彈偏離目標(biāo)[11]。
軟件老化預(yù)測就是在收集軟件老化相關(guān)參數(shù)數(shù)據(jù)的基礎(chǔ)上,運用數(shù)據(jù)挖掘提取數(shù)據(jù)特征,預(yù)測軟件老化趨勢,為制定合適的再生策略提供支持。老化預(yù)測的研究方法主要有時序分析法、機器學(xué)習(xí)等方法。
時序分析法是建立時序模型分析預(yù)測老化數(shù)據(jù)的變化趨勢。常見的時序模型有多元線性回歸、回歸平滑、自回歸模型等。Li等人[12]通過收集到的Web服務(wù)器的響應(yīng)時間、可用內(nèi)存、消耗的交換空間等參數(shù)數(shù)據(jù)構(gòu)建了ARMA/ARX模型來預(yù)測Web服務(wù)器系統(tǒng)在人工負(fù)載下的資源消耗趨勢。Grottke等人[13]收集了在Linux系統(tǒng)環(huán)境下運行的Apache Web服務(wù)器在可控負(fù)載下資源使用情況,考慮數(shù)據(jù)的季節(jié)性,使用AR模型預(yù)測服務(wù)器資源消耗情況。Magalhaes和Silva[14]針對動態(tài)性強和不確定性的工作負(fù)載對Web服務(wù)器系統(tǒng)資源的影響,采用ARIMA和Holt-Winters模型估計應(yīng)用程序和系統(tǒng)的老化相關(guān)參數(shù),可以較好地模擬數(shù)據(jù)變化趨勢及季節(jié)性特征。Araujo[15]分別使用線性模型、二次線性模型、指數(shù)增長模型和S曲線趨勢模型預(yù)測Eucalyptus云計算框架下的內(nèi)存消耗趨勢,通過比較四種模型預(yù)測結(jié)果偏差和均方差評估模型的預(yù)測效果,其中二次趨勢模型預(yù)測結(jié)果更準(zhǔn)確。
機器學(xué)習(xí)是一種復(fù)雜的數(shù)學(xué)分析方法,采用人工智能算法提取、擬合數(shù)據(jù)中的非線性特征,預(yù)測老化趨勢。Andrzejak等人[16]將機器學(xué)習(xí)算法(決策樹、貝葉斯方法和支持向量機)用于主動檢測系統(tǒng)老化,該方法對引起老化的瞬態(tài)故障敏感性較強。Alonso等人[17]提出基于機器學(xué)習(xí)M5P算法對軟件老化進(jìn)行預(yù)測,該方法可以根據(jù)不同的系統(tǒng)參數(shù)自動構(gòu)建預(yù)測模型,較好地適應(yīng)各種復(fù)雜的老化場景。Zhao等人[18]和Jia等人[19]利用BP神經(jīng)網(wǎng)絡(luò)搭建軟件老化評估模型,利用BP神經(jīng)網(wǎng)絡(luò)的非線性映射和柔性網(wǎng)絡(luò)結(jié)構(gòu),識別由于多種系統(tǒng)資源相互作用導(dǎo)致的軟件老化的綜合效應(yīng)。BP神經(jīng)網(wǎng)絡(luò)存在收斂速度慢和容易陷入局部極值的缺陷,在文獻(xiàn)[20-22]分別利用人工蜂群算法、自適應(yīng)遺傳退火算法和粒子群退火算法對BP神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化,提高了預(yù)測的準(zhǔn)確度。隨著深度神經(jīng)網(wǎng)絡(luò)模型的成熟,部分研究人員嘗試?yán)蒙疃壬窠?jīng)網(wǎng)絡(luò)來解決上述問題,黨等人[23]使用LSTM模型預(yù)測Web軟件系統(tǒng)的實時剩余壽命,取得一些成功。
同時,由于軟件老化參數(shù)數(shù)據(jù)中既有線性特征,也有非線性特征,時序分析法可以很好地擬合線性特征,機器學(xué)習(xí)方法可以較好地擬合非線性特征,將兩種方法結(jié)合起來可以提高老化預(yù)測的準(zhǔn)確性。Yan[24]使用ARIMA模型表示系統(tǒng)資源消耗的線性趨勢,同時使用BP人工神經(jīng)網(wǎng)絡(luò)來擬合趨勢中隱藏的非線性特征和殘差線性特征來構(gòu)建混合模型,預(yù)測系統(tǒng)資源消 耗趨勢。試驗表明,混合模型的預(yù)測結(jié)果要好于其他兩種模型單獨的預(yù)測結(jié)果。Liu等人[25]提出混合老化預(yù)測模型CSSAP,該模型集成了ARIMA模型和循環(huán)神經(jīng)網(wǎng)絡(luò)中的長短時記憶(Long Short-Term Memory,LSTM)模型,能夠很好地擬合計算資源使用數(shù)據(jù)時間序列的線性模式和挖掘非線性關(guān)系。
時序分析法算法簡單,處理序列速度快,針對較穩(wěn)定序列和有規(guī)律(如具有季節(jié)性、周期性)的序列預(yù)測精度高,但對于目前大多數(shù)結(jié)構(gòu)復(fù)雜和邏輯復(fù)雜的軟件系統(tǒng)的老化參數(shù)序列其預(yù)測效果不理想;機器學(xué)習(xí)的方法可以識別多種因素綜合導(dǎo)致的老化特征,BP人工神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)的預(yù)測精度都很高,但BP網(wǎng)絡(luò)存在收斂速度慢、易陷入局部極值的問題,循環(huán)神經(jīng)網(wǎng)絡(luò)也存在梯度不穩(wěn)、占用內(nèi)存大等問題。綜合運用時序分析法和機器學(xué)習(xí)方法結(jié)合了兩者的優(yōu)點,在預(yù)測精度上較單一的方法都有所提升。
軟件再生策略研究的目的是通過合適的再生計劃,降低再生成本,最大化軟件可用性。目前,再生策略研究方法主要有基于模型分析的方法、基于閾值的方法等。
模型分析的方法是將軟件狀態(tài)和行為抽象為符合時間分布的數(shù)學(xué)狀態(tài)概率模型來研究最優(yōu)的再生策略[26]。常見的分析模型有馬爾可夫鏈及其擴展模型、隨機Petri網(wǎng)模型等。
(1)馬爾可夫鏈及其擴展模型。
馬爾可夫鏈?zhǔn)且粋€離散隨機過程,隨機系統(tǒng)在每一時刻上的狀態(tài)僅取決于前一時刻的狀態(tài)。文獻(xiàn)[3]將系統(tǒng)劃分為包含魯棒狀態(tài)、易于失效狀態(tài)、再生狀態(tài)和失效狀態(tài)的4種再生概率狀態(tài)轉(zhuǎn)移模型(見圖1)。
圖1 軟件再生概率轉(zhuǎn)移狀態(tài)模型
在此基礎(chǔ)上利用連續(xù)時間馬爾可夫鏈(CTMC)對軟件老化過程進(jìn)行建模,通過狀態(tài)轉(zhuǎn)移概率矩陣預(yù)估再生停機成本。Xie等人[27]對可用狀態(tài)進(jìn)一步擴展,將系統(tǒng)劃分為7個狀態(tài),利用半馬爾可夫模型對系統(tǒng)狀態(tài)進(jìn)行建模,實現(xiàn)了服務(wù)級和全系統(tǒng)級的兩級再生策略,結(jié)合了服務(wù)級再生的時間優(yōu)勢和系統(tǒng)級再生的效果優(yōu)勢,進(jìn)一步提高了再生效益。Chang等人[28]構(gòu)建了半馬爾可夫模型,推導(dǎo)在云計算虛擬機監(jiān)控器和虛擬機老化再生過程中的程序的服務(wù)可用性和任務(wù)完成的時間,通過實驗得到再生效益最大的最佳再生間隔。文獻(xiàn)[29]利用馬爾可夫模型對嵌入式集群系統(tǒng)及各節(jié)點系統(tǒng)老化進(jìn)行整體建模分析,獲得集群系統(tǒng)的可用性、平均故障時間、停機成本等。
(2)Petri網(wǎng)模型。
Petri網(wǎng)模型在描述系統(tǒng)并行性、分布性和不確定性等方面有較好的優(yōu)勢[30]。Garg等人[31]使用馬爾可夫隨機再生Petri網(wǎng)模型對C/S類型系統(tǒng)行為建模求解系統(tǒng)穩(wěn)態(tài)條件,評估最佳的再生時間間隔。Wang等人[32]針對非指數(shù)分布,在馬爾可夫再生過程(MRGP)基礎(chǔ)上提出確定性和隨機Petri網(wǎng)(Deterministic and Stochastic Petri Net,DSPN)模型對具有多個節(jié)點的周期性負(fù)載的集群系統(tǒng)進(jìn)行老化建模研究,針對不同工作負(fù)載設(shè)計了標(biāo)準(zhǔn)再生、延遲再生和混合再生三種基于時間的再生策略。標(biāo)準(zhǔn)再生即每隔固定的時間段T后啟動再生程序,延遲再生是負(fù)載高峰期到達(dá)再生時刻時等待負(fù)載降低后啟動再生,而混合再生遇到負(fù)載高峰時比較立即再生和延遲再生對性能的影響決定再生的執(zhí)行。Zheng等人[33]提出一種復(fù)合隨機Petri獎勵網(wǎng)建模一個經(jīng)歷非周期的再生和檢查點恢復(fù)的軟件系統(tǒng),通過分析合適的再生觸發(fā)時間范圍,獲得使系統(tǒng)穩(wěn)態(tài)可用性最大的再生計劃。
基于分析模型的方法是對軟件系統(tǒng)的抽象,可以很容易的跨系統(tǒng)移植。由于把軟件運行過程進(jìn)行了簡化假設(shè),抽象為不同的狀態(tài)過程,存在狀態(tài)空間爆炸的問題,同時分析模型的方法只能提供漸進(jìn)解或穩(wěn)態(tài)解,在具體系統(tǒng)中效果并不精確。
基于閾值的再生策略是針對一些老化參數(shù)設(shè)定閾值,當(dāng)監(jiān)測到的參數(shù)值超過設(shè)定的閾值時,系統(tǒng)即觸發(fā)再生程序。如圖2所示,在T1、T2監(jiān)測到系統(tǒng)性能下降到閾值Gth以下,系統(tǒng)觸發(fā)再生,使軟件性能恢復(fù)到初始狀態(tài)。
圖2 基于閾值的再生策略示意圖
在基于閾值的方法中,閾值的選擇需要豐富的經(jīng)驗知識以及了解所研究系統(tǒng)引起老化的指標(biāo)有哪些,既要有效預(yù)防失效,又能避免無效的再生。Alonso等人[34]研究網(wǎng)格服務(wù)系統(tǒng)老化再生時,采用虛擬中間件技術(shù)結(jié)合基于閾值的方法尋找最優(yōu)再生機制。Meng等人[35]在J2EE應(yīng)用服務(wù)器軟件再生策略研究中,采用閾值的方法實現(xiàn)組件級、JVM級和系統(tǒng)級三級再生?;陂撝档姆椒ㄐ枰O(jiān)測系統(tǒng)參數(shù),頻繁的監(jiān)測會增加系統(tǒng)的負(fù)擔(dān),過大的監(jiān)測間隔可能在兩次監(jiān)測之間發(fā)生故障或失效(圖2中T3監(jiān)測點)。為了彌補這種缺陷,文獻(xiàn)[17]提出使用預(yù)測老化的方法來優(yōu)化監(jiān)測間隔。在多軟件系統(tǒng)中,不同的軟件之間針對同一老化參數(shù)的大小和趨勢是不同的,不能設(shè)置一個閾值來激活所有軟件的再生,Sukhwani等人[36]提出為每個軟件的老化參數(shù)設(shè)置不同的再生閾值。
目前,部分研究人員將基于分析模型和閾值的方法結(jié)合起來,增強預(yù)測方法在具體軟件系統(tǒng)中的靈活性。Ghobadi和Rashidi[37]將系統(tǒng)老化劃分成4個等級,利用馬爾可夫鏈構(gòu)建分級老化再生模型,由可用內(nèi)存閾值來觸發(fā)再生,同時引入執(zhí)行再生時間、實時系統(tǒng)服務(wù)量和再生操作數(shù)量為參數(shù)的成本函數(shù)來量化再生成本。Levitin等人[9,38-40]基于事件轉(zhuǎn)移的方法評估實時任務(wù)系統(tǒng)的性能以及執(zhí)行實時任務(wù)的成功完成率,該方法與建模方法不同的是其不受故障時間和狀態(tài)轉(zhuǎn)換時間分布類型的限制,通過檢測系統(tǒng)性能參數(shù),利用再生決策算法決定再生的執(zhí)行。并運用分級再生、周期檢查點等技術(shù)進(jìn)一步優(yōu)化再生成本。
基于模型分析的方法不針對某一特定軟件系統(tǒng),遷移性好、節(jié)約研究時間,但只能求得系統(tǒng)可靠性的穩(wěn)態(tài)解或漸進(jìn)解,運用到某一具體軟件系統(tǒng)時,再生效果并不理想,同時還存在狀態(tài)空間爆炸問題;基于閾值的再生方法針對具體系統(tǒng),需要統(tǒng)計分析大量系統(tǒng)運行數(shù)據(jù),考慮系統(tǒng)運行具體特征,能夠處理實時故障行為,再生策略實施效果好,但方法遷移性差。
再生實施技術(shù)是觸發(fā)再生后,以什么技術(shù)實施再生實現(xiàn)改善系統(tǒng)性能狀態(tài)的目標(biāo)。軟件再生實施技術(shù)主要有重啟、檢查點恢復(fù)和系統(tǒng)遷移等。
重啟即停止正在運行的系統(tǒng)、軟件、進(jìn)程或服務(wù),清理內(nèi)部狀態(tài)、釋放占用的系統(tǒng)資源,然后重新啟動系統(tǒng)、軟件、進(jìn)程或服務(wù),使系統(tǒng)性能恢復(fù)到一個較高的水平。根據(jù)重啟的粒度從大到小有操作系統(tǒng)重啟、虛擬機重啟、應(yīng)用軟件重啟、進(jìn)程重啟、服務(wù)重啟。粗粒度重啟中包含著細(xì)粒度重啟,隨著粒度的減小,重啟時間成本和再生效果降低。在一些軟件系統(tǒng)中,通過結(jié)合不同粒度的分級再生可以優(yōu)化再生策略,但是在細(xì)粒度老化分析難度較大的軟件中,可能會產(chǎn)生比較大的時間開銷。
檢查點技術(shù)是周期或非周期地將內(nèi)存中數(shù)據(jù)保存到輔助存儲器中,系統(tǒng)執(zhí)行再生后將最近一次保存的副本恢復(fù)到內(nèi)存中,可以節(jié)省再生后重復(fù)執(zhí)行的時間[41],常見的檢查點技術(shù)包括增量檢查、審計跟蹤和備份恢復(fù)技術(shù)[42]。增量檢查只將修改過的內(nèi)存頁面保存到檢查點文件;審計跟蹤技術(shù)記錄了系統(tǒng)的一系列操作,能夠恢復(fù)到系統(tǒng)崩潰前的正確狀態(tài),也能取消事務(wù);備份恢復(fù)技術(shù)保留一個包含當(dāng)前值和一個包含以前值的備份版本,當(dāng)系統(tǒng)崩潰時,使用備份版本恢復(fù)到崩潰前的正確狀態(tài)。
系統(tǒng)遷移是在虛擬化系統(tǒng)中,當(dāng)正在處理業(yè)務(wù)的虛擬機發(fā)生故障時,使用同一主機上的備用虛擬機或?qū)溆锰摂M機遷移到另一臺主機上繼續(xù)提供服務(wù)的技術(shù)。在云計算快速發(fā)展過程中,虛擬化技術(shù)發(fā)揮了重要作用,相關(guān)軟件老化再生研究也越來越多。在虛擬機監(jiān)視器和虛擬機老化再生研究中,普遍運用了系統(tǒng)遷移再生技術(shù)。在文獻(xiàn)[43-44]中運用了故障轉(zhuǎn)換和系統(tǒng)遷移(包括實時虛擬機動態(tài)遷移技術(shù))來緩解系統(tǒng)老化影響。
隨著軟件開發(fā)應(yīng)用和數(shù)據(jù)挖掘理論的發(fā)展,軟件老化與再生研究不斷豐富。該文主要從軟件老化分類、軟件老化預(yù)測、軟件再生策略研究和實施再生技術(shù)四個方面對軟件老化和再生研究進(jìn)行了分析梳理,未來,相關(guān)研究將呈現(xiàn)出一些新趨勢:①隨著軟件復(fù)雜度的提高,各種老化因素之間的影響更加復(fù)雜,在軟件運行過程中內(nèi)存消耗與軟件性能不一定是正相關(guān)。因此在今后的研究中需要考慮多種老化參數(shù)的綜合作用,確保老化數(shù)據(jù)特征的完整性;②軟件老化數(shù)據(jù)中含有線性和非線性特征,越來越多的研究人員采用時序分析法與機器學(xué)習(xí)相結(jié)合的方法來提高預(yù)測精度。目前深度學(xué)習(xí)算法已經(jīng)非常成熟,特征提取能力要優(yōu)于BP算法,可以將深度學(xué)習(xí)算法應(yīng)用于軟件老化預(yù)測;③隨著軟件老化狀態(tài)預(yù)測精度的提高,在再生策略研究中更多地運用多粒度分級再生,但忽略了不同粒度之間、同級粒度之間再生效益相互影響關(guān)系的研究,未來可以在這一方面加強研究,進(jìn)一步提高整體再生效益。
該文對軟件老化與再生研究進(jìn)行了梳理,并就未來研究提出幾點粗淺的建議,希望能夠起到拋磚引玉的作用,并為本領(lǐng)域研究提供一些啟示。