郭盡朝 阿娜 高子琴
當前交通行業在開發、實施各種業務類應用程序時,往往有以下兩大痛點。一是,程序的性能質量無法評估和考核。當前的現狀是,使用方通常能夠輕易確認功能需求是否已實現,但難以確認為實現這些功能,其后臺的代碼質量、結構質量是否合理,是否造成了其他方面的影響。從而使程序上線之后,因性能質量不佳,為使用者帶來的風險和經濟損失。二是程序所需的系統資源無法精確評估。程序投入真實運營之前,無法較為精確的評估程序所需要的各種系統資源的數量,從而使企業在部署這些程序時,要么資源過多造成了較大的設備浪費,要么資源不足,影響上線之后的系統性能。本研究通過一種程序優化檢測方法及系統,對企業研發的應用程序進行質量評估,從而確保應用程序開發的質量和運營效果。
(一)研究對象
本次研究對象為交通行業,所選取的樣本為神朔鐵路所有已經上線的業務系統。
(二)研究特點
當前交通行業的各種業務系統其業務源端都是關系數據庫,在數據庫端借助數據庫的性能視圖,可以了解和掌握各種業務軟件訪問數據庫的代碼特征和程序所對應的數據結構特征,這些特征表現為數據庫運行期間的各種性能統計信息,并從這些統計數據中導出獲得性能量度,在緊急情況下,訪問這些量度在與當前的情況做比較,通過查看這些過去的事件統計信息以給當前的問題帶來啟發,由于數據庫管理員必須自始至終都密切關注可能會對他們所管理的各個系統的可用性或者性能有負面影響的潛在性能問題,因此不斷采集相關統計數據對于性能分析變得很重要。
1. 借助數據庫性能視圖
本研究的基本方法是借助對關系數據庫性能視圖中數據的定期采集,通過分析、比對實現程序性能質量的評估。本研究正是借助這些保存在數據庫內存性能視圖中的原始運行數據,通工加工分析,實現業務程序性能質量的評估的。
2.以結果為導向
本研究是以結果為導向的性能評估方法。我們認為軟件的性能質量評估的結果毫無疑問應當與最終結果,即用戶體驗相一致或相接近,因此,本研究中衡量性能質量的各個指標,反映的是以用戶體驗相對應的各個維度。
我們通過兩套數據采集和處理方式,實現對程序質量從基本面到具體問題點的追溯分析。
(一)第一套方案:周期性數據采集+三層數據加工方法
1.周期性數據采集
分為三個采樣頻率。周期性地采集數據庫性能視圖內的信息,如Oracle數據庫的各種V$開頭的性能視圖,Sqlserver則多為dm_開頭的性能視圖,DB2多為sysibmadmin下的表或視圖。這些信息包括且不限于數據庫狀態、數據庫結構、性能指標計數器、等待事件、SQL執行統計、SQL執行計劃等;通過周期性的收集整理數據庫性能視圖,從而對關系數據庫端的應用程序質量、數據結構質量和配置質量進行分析。
2.三層次數據加工
將獲取到的大量目標數據庫的原始運行數據進行時間切片、特征箍選等一系列數據加工,采樣到的原始數據最多會進行三輪的箍選和加工,從而為軟件前端的功能顯示準備好直觀明確的呈現內容。
具體的采集和加工邏輯如下圖:
(二)第二套方案:觸發式采集+算法庫數據處理
因擾企業的應用類問題有一個主要的特點是,問題的原因往往只在問題剛剛引發時能夠追蹤到痕跡,很多應用類問題事后是無法被重現和追溯的。因此,我們采用一套獨創的觸發式邏輯,以確保能在問題剛剛發生(或剛剛出現征兆時)追蹤并保留下問題的根源數據。具體如下:
在第一種周期性采樣中,每分鐘會收集數據庫的狀態、性能計數器等信息,因為當系統出現異常時,首先會體現到這些狀態和性能計數器上,這樣當監測系統在發現收集到的指標有異常時,首先確定是何種指標異常,然后再根據事先設置好的程序邏輯,立刻針對性的采集與這種異常相關的程序運行信息。這里提到的“事先設置好的程序邏輯”,在于我們在本研究中專門為多種已知的、不同問題,分別準備一套不同的程序處理邏輯,我們將所有這些不同程序處理邏輯的集合,稱之為算法庫,以應對不同問題的不同處理方法。
簡單來說,整個觸發式采集+算法庫處理邏輯大概分為三個步驟:
步驟1:借助第一種方法周期性采集中的短周期采集,如每分鐘一次掃描數據庫性能視圖中的各項性能計數器和狀態信息。
步驟2:如果在短周期性采集中,一旦發現某一數據庫的性能計數器或數據庫狀態信息異常,則觸發針對這類異常問題信息的收集和處理。
步驟3:這類異常問題具體的數據收集方式和數據處理方法將根據事先存放在軟件算法庫中的邏輯進行。
步驟4:算法庫的作用不光是數據采集與處理,還包括針對具體問題的數據個性化展示,不同的問題以不同可視化方式進行呈現。
根據以上兩套研究方案,我們對神朔鐵路各個業務系統進行程序質量評估以及具體問題的詳細分析,以下是本次研究得到的信息: