《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 設(shè)計應(yīng)用 > 基于AOP的性能監(jiān)測系統(tǒng)的研究與實現(xiàn)
NI-LabVIEW 2025
基于AOP的性能監(jiān)測系統(tǒng)的研究與實現(xiàn)
來源:微型機與應(yīng)用2012年第12期
唐雅璇,余金山
(華僑大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,福建 泉州362011)
摘要: 提出一種基于動態(tài)AOP的監(jiān)測器模型及其實現(xiàn),它能夠?qū)ΜF(xiàn)有的、已在運行的系統(tǒng)進行最靈活和能耗最小的代碼級性能分析。利用AOP動態(tài)織入機制,可在目標(biāo)系統(tǒng)運行過程中動態(tài)添加或刪除監(jiān)測器,從而提高監(jiān)測的靈活性。
Abstract:
Key words :

摘  要: 提出一種基于動態(tài)AOP的監(jiān)測器模型及其實現(xiàn),它能夠?qū)ΜF(xiàn)有的、已在運行的系統(tǒng)進行最靈活和能耗最小的代碼級性能分析。利用AOP動態(tài)織入機制,可在目標(biāo)系統(tǒng)運行過程中動態(tài)添加或刪除監(jiān)測器,從而提高監(jiān)測的靈活性。
關(guān)鍵詞: 性能監(jiān)測;AOP;IoC;織入機制

    隨著Internet的日益普及和電子商務(wù)的飛速發(fā)展,基于B/S的Web應(yīng)用系統(tǒng)大量出現(xiàn)。在這些Web應(yīng)用系統(tǒng)中,客戶端只提供人機交互的接口而未參與實際運算,而服務(wù)器端將承擔(dān)數(shù)據(jù)存儲及運算的全部工作,在面對海量客戶端數(shù)量的情況下,服務(wù)端的性能壓力問題就尤為突出。為了保證Web應(yīng)用系統(tǒng)的正常運行,以及系統(tǒng)在服務(wù)器端具有較高的性能來響應(yīng)大量用戶的并發(fā)訪問,進行合理的性能規(guī)劃和有效的性能監(jiān)測就顯得非常重要。性能監(jiān)測的主要意義[1]是:在系統(tǒng)運行階段,通過監(jiān)測系統(tǒng)的運行情況,發(fā)現(xiàn)錯誤并對故障進行定位,從而解決開發(fā)和測試階段中的錯誤。
    現(xiàn)有的監(jiān)測器存在以下不足[2-3]:監(jiān)測邏輯與業(yè)務(wù)邏輯緊密耦合,可擴展性、可復(fù)用性、可維護性差;監(jiān)測部件分散在目標(biāo)系統(tǒng)中,缺乏合理的組織;監(jiān)測代碼寫在業(yè)務(wù)代碼中,不易修改;監(jiān)測部件在開發(fā)階段手動插入,不適合動態(tài)添加或刪除。
    本文設(shè)計并實現(xiàn)了一款A(yù)OP監(jiān)測器,它圍繞目前.NET平臺下主流的Web開發(fā)框架——Asp.net MVC,除了利用AOP關(guān)注點分離原則,克服了現(xiàn)有監(jiān)測器的不足外,還針對MVC框架的特點,實現(xiàn)了注入切面,不僅實現(xiàn)了方法級別的監(jiān)測,同時還實現(xiàn)了針對Controller及Action級別的監(jiān)測,與其他方法[2]相比,該監(jiān)測方式更適合Web系統(tǒng)的使用。
1 性能監(jiān)測的作用及主要監(jiān)測對象
    性能監(jiān)測也可稱為構(gòu)件交互行為監(jiān)測[4],指對構(gòu)件在交互活動期間所進行的操作進行監(jiān)視記錄的過程。構(gòu)件交互行為[5]是指在分布式構(gòu)件軟件中,構(gòu)件以主體的身份在完成某項協(xié)作活動時,通過構(gòu)件的接口在運行環(huán)境中與其他構(gòu)件進行交互的活動。性能監(jiān)測主要包括:軟件實體間的交互行為監(jiān)測、行為信息的收集、為行為診斷、預(yù)測和可信評估等提供基礎(chǔ)數(shù)據(jù)。
    對于分布式構(gòu)件軟件的性能監(jiān)測,其各監(jiān)測類型所對應(yīng)的監(jiān)測對象[3]如表1所示。


    現(xiàn)有的監(jiān)測器大都面向操作系統(tǒng)級別,其監(jiān)測范圍及粒度均大于Web系統(tǒng)的監(jiān)測所需,從而導(dǎo)致所監(jiān)測的數(shù)據(jù)不能很好地用于對系統(tǒng)性能的提升分析上。由于Web系統(tǒng)屬于非連續(xù)性開放系統(tǒng),基于HTTP協(xié)議的基本“請求—響應(yīng)”特性,決定了其安全性及可用性均與系統(tǒng)的業(yè)務(wù)存在必然的聯(lián)系,傳統(tǒng)的監(jiān)測器不能根據(jù)一定的業(yè)務(wù)邏輯對所采集的數(shù)據(jù)進行篩選,而只能通過海量的原始數(shù)據(jù)結(jié)合業(yè)務(wù)進行判斷。這也是本課題未直接采用傳統(tǒng)性能監(jiān)測器而是進行構(gòu)件設(shè)計的一個主要原因。
2 基于AOP的性能監(jiān)測系統(tǒng)及其實現(xiàn)
2.1 系統(tǒng)結(jié)構(gòu)

    本文設(shè)計實現(xiàn)的AOP性能監(jiān)測系統(tǒng)結(jié)構(gòu)如圖1所示,它由3個部分構(gòu)成:目標(biāo)監(jiān)測系統(tǒng)、獨立監(jiān)測控制臺和性能監(jiān)測構(gòu)件包。其中可視化部分——獨立監(jiān)測控制臺是輔助實現(xiàn)動態(tài)織入的關(guān)鍵,也是連接目標(biāo)監(jiān)測系統(tǒng)和性能監(jiān)視構(gòu)件包的橋梁,它提供性能數(shù)據(jù)讀寫接口以實現(xiàn)標(biāo)準(zhǔn)化的性能數(shù)據(jù)采集,以及為目標(biāo)系統(tǒng)擴展IoC功能提供織入控制容器。性能監(jiān)測構(gòu)件包提供了基本標(biāo)準(zhǔn)接口,監(jiān)控器的類型和功能可以根據(jù)實際項目需要擴展新的監(jiān)測組件。

2.2 相關(guān)技術(shù)介紹
    本系統(tǒng)主要采用AOP 技術(shù)實現(xiàn)監(jiān)測代碼和業(yè)務(wù)代碼松散耦合,并可在目標(biāo)系統(tǒng)運行過程中動態(tài)添加或刪除監(jiān)測器。本系統(tǒng)主要采用的開發(fā)工具有Asp.net MVC、NInject.WEB.MVC、WMI。
    面向方面編程(AOP)是美國施樂公司帕洛阿爾托研究中心在20世紀90年代提出的一種編程思想。AOP技術(shù)作為一種新興的軟件開發(fā)方法,提供了不同關(guān)注點的分離實現(xiàn)機制,具有可擴展性、可復(fù)用性、易理解性、易維護性等特性。本監(jiān)測器利用AOP關(guān)注點分離原則,實現(xiàn)監(jiān)測代碼與業(yè)務(wù)代碼松散耦合,提高目標(biāo)系統(tǒng)的可擴展性、可復(fù)用性、易維護性;使用AOP的動態(tài)織入機制,允許動態(tài)添加、刪除監(jiān)測器,從而實現(xiàn)監(jiān)測的可控性與動態(tài)性。
    Asp.net MVC框架將模型、視圖、控制器引入開發(fā)模型,將Web系統(tǒng)跟蹤從頁面層次提升到了面向業(yè)務(wù)的層次。NInject是一個超輕量級的依賴注入框架,具備靈活、自由的織入機制,其擴展框架NInject.WEB.MVC是專門為Asp.net MVC設(shè)計的擴展包。除了一般IoC所具備的構(gòu)造函數(shù)、方法、屬性注入之外,還提供了針對Controller生命周期的注入及擴展的MvcInjectApplication類。WMI是Windows的核心管理技術(shù),本系統(tǒng)中多處需要提取操作系統(tǒng)及硬件信息,而在Windows操作系統(tǒng)環(huán)境下,WMI編程接口具有良好的可操作性,因此本系統(tǒng)的交互行為監(jiān)測組件主要使用該技術(shù)實現(xiàn)。
2.3 系統(tǒng)的實現(xiàn)
    本系統(tǒng)使用Visual Studio.Net2010開發(fā),使用Asp.net MVC2.0和NInject.Web.MVC技術(shù)實現(xiàn)。
    一般的Web系統(tǒng)由于頁面級別和類級別往往不能包含一個完整的業(yè)務(wù)功能,因此在實現(xiàn)對業(yè)務(wù)功能級別的性能監(jiān)測上存在著一定的復(fù)雜度。本系統(tǒng)圍繞Asp.net MVC框架而實現(xiàn),它改變Web Form框架依賴頁面的Web架構(gòu)模式,按照控制器和動作的方式將業(yè)務(wù)功能進行邏輯劃分,使得IoC注入方式增加了控制器注入、動作注入、控制器異常注入、動作異常注入等幾種方式,使得Web系統(tǒng)的性能監(jiān)測粒度范圍有了更實際的業(yè)務(wù)價值。圖2為Asp.net MVC的執(zhí)行流程。

 

 

    AOP技術(shù)中存在多種編譯時機和織入方式,由于本系統(tǒng)所設(shè)計的運行環(huán)境一般不能獲取被監(jiān)測系統(tǒng)的源代碼,也不能對其進行修改和重編譯。因此,采用運行時的動態(tài)織入技術(shù)實現(xiàn)監(jiān)測組件到被監(jiān)測系統(tǒng)指定連接點的織入。
    在.NET平臺下的多種IoC框架中,NInject框架最符合本系統(tǒng)的設(shè)計要求。它提供了對Asp.net MVC系統(tǒng)的良好基礎(chǔ)擴展,而且只提供運行時織入。本系統(tǒng)中,通過NInjectMvcApplication類對HttpApplication的替換,實現(xiàn)了由NInject的IoC容器替換原本W(wǎng)eb系統(tǒng)應(yīng)用程序的目的,從而使系統(tǒng)內(nèi)對象的創(chuàng)建全部受到NInject容器的控制。其替換過程示意圖如圖3所示。

    該替換過程首先將NInjectMvcApplication類注冊到公共運行庫(GAC),而后搜索目標(biāo)Web系統(tǒng)的全局配置文件并替換其HttpApplication,其關(guān)鍵代碼邏輯如下:
public void ReplaceIoContainer(string path)
{
    if(string.IsNullOrEmpty(path)) throw new FileNotFound-
Exception(path);
    var files = Directory.GetFiles(path);
    foreach(var file in files)
    {
        if(file.ToLower().Equals("global.asax"))
        {
            using(var sr=new StreamReader(file))
            {
                var data = sr.ReadToEnd();
                Regex reg=new Regex("inherits=\"(\\w+)
\"",RegexOptions.IgnoreCase | RegexOptions.Multiline);
                var mat = reg.Match(data);
                if(mat.Length==0) throw new InvalidOpera-
tionException();
                reg.Replace(data, typeof (NInjectMvcAppli-
cation).FullName);
                using (var sw=new FileStream(path,
FileMode.Open))
                {
                    var writeData = Encoding.UTF8.Get-
Bytes(data);
                    sw.Write(writeData,0,writeData.Length);
                }
            }
        }
    }
}
    替換IoC容器后可按配置將監(jiān)測組件按需進行織入,織入連接點為構(gòu)造函數(shù)、方法、屬性、控制器、動作等,以常量進行標(biāo)識,其關(guān)鍵代碼如下:
/// <summary>
/// 檢測器的插入位置(可以用或符號多重選擇)
/// </summary>
[Flags]
public enum MonitorPoint
{
    mpBeforeContructor,mpBeforeMehtod,mpBeforeProperty,
mpAfterContructor,
    mpAfterMethod,mpAfterProperty,mpBeforeController,
mpSurroundController,
    mpAfterController,mpBeforeAction,mpSurroundAction,
mpAfterAction,mpActionException
}

public interface IMonitorContainer
{
    /// 注入的位置
    MonitorPoint InjectPosition { get; set; }
    /// 所要注入的監(jiān)視器
    MonitorBase Monitor { get; set; }
    /// NInject注入引擎
    IKernel Component { get; set; }
}
    通過連接Ikernel和MonitorBase,容器將監(jiān)測組件織入到目標(biāo)系統(tǒng)指定位置。由于監(jiān)測組件存在多樣性,本系統(tǒng)為使監(jiān)測組件設(shè)計具有更好的擴展性,做了以下工作:
    (1)標(biāo)準(zhǔn)化織入目標(biāo)連接點方式:任何拓展的監(jiān)測組件,都必須支持IoC容器所提供的所有織入點的監(jiān)測工作;
    (2)預(yù)留監(jiān)測數(shù)據(jù)輸出接口:由于監(jiān)測組件的多樣性,其數(shù)據(jù)產(chǎn)生量也有不同的變化,因此預(yù)留了多個監(jiān)測數(shù)據(jù)輸出接口(例如文本中HTTP、數(shù)據(jù)庫、XML、電子郵件等)。
    圖4列出了監(jiān)測組件的可拓展接口。

    本文設(shè)計并實現(xiàn)了一款運行在作業(yè)環(huán)境下的代碼級的Web性能監(jiān)測分析工具。它采集實時數(shù)據(jù)進行分析;使用AOP技術(shù)實現(xiàn)了Web應(yīng)用系統(tǒng)的代碼級監(jiān)測分析,并且可自由控制監(jiān)測范圍;使用構(gòu)件技術(shù)實現(xiàn)了即插即用,減少了對現(xiàn)有系統(tǒng)的修改和結(jié)構(gòu)上的破壞,避免因性能監(jiān)測而引入新的BUG;通過控制臺自由配置變更監(jiān)測的范圍,靈活調(diào)整監(jiān)測的目標(biāo);利用Windows性能計數(shù)器顯示檢測和分析的結(jié)果。該工具對系統(tǒng)進行監(jiān)測分析時,不需要對作業(yè)系統(tǒng)進行任何重編譯的工作,盡量地降低性能監(jiān)測所帶來的額外損耗。下一步將對構(gòu)件包進行擴展,使其能夠應(yīng)用在更多的系統(tǒng)上,實現(xiàn)多個被測系統(tǒng)的聯(lián)合監(jiān)測。
參考文獻
[1] 朱幸輝,楊樹強.基于CORBA分布式對象監(jiān)測系統(tǒng)的研究與實現(xiàn)[J].計算機應(yīng)用研究,2005,22(10):39-41.
[2] 萬燦軍,李長云.基于動態(tài)AOP的構(gòu)件交互行為監(jiān)測器[J].計算機應(yīng)用,2011,31(2):572-576.
[3] 黃興華,胡飛.AOP技術(shù)在面向用戶的軟件組件測試中的應(yīng)用[J].計算機應(yīng)用與軟件,2009,26(8):125-127.
[4] 萬燦軍,李長云.動態(tài)演化環(huán)境中可信軟件行為監(jiān)控研究與進展[J].計算機應(yīng)用研究,2009,26(4):1201-1204.
[5] 萬燦軍,李長云,賀宗梅.分布式軟件的交互行為監(jiān)測機制的研究[J].計算機工程與應(yīng)用,2011,47(5):60-64.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 精品一区二区三区无卡乱码 | 久久国产中文字幕 | 四虎永久在线观看 | 日韩去日本高清在线 | 婷婷丁香啪啪 | 免费毛片网 | 污污网站观看 | 国产四虎| 欧美日韩 在线播放 | 99ri精品| 久久 精品 一区二区 | 日韩欧美视频在线播放 | 日本欧美成人 | a级毛片免费高清毛片视频 真正免费一级毛片在线播放 | 两性视频久久 | 99久久综合狠狠综合久久一区 | 第四色区 | 免费啪啪网址 | 色婷婷综合激情 | 国产免费一区二区三区最新 | 免费萌白酱国产一区二区三区 | 五月婷婷视频在线观看 | 久久天天躁狠狠躁夜夜爽蜜月 | 欧美一区二区三区高清视频 | 国产成人精品日本亚洲专一区 | 精品无人区乱码1区2区3区免费 | 国产午夜在线观看视频 | 国产午夜电影网 | 五月天婷婷网址 | 国产国产精品人在线视 | 国内偷自第一二三区 | 国内精品在线视频 | 日韩欧美在线播放视频 | 聊斋艳谭8陆判性水仙 | 成人理论电影在线观看 | 久久亚洲精品人成综合网 | 五月天丁香六月欧美综合 | 美女精品视频 | 成人精品在线 | 国产高清在线观看视频手机版 | 免费一级夫妻a |