專利名稱:對(duì)分布式應(yīng)用程序的監(jiān)測(cè)的制作方法
對(duì)分布式應(yīng)用程序的監(jiān)測(cè)背景當(dāng)軟件應(yīng)用程序跨各種物理組件分布時(shí)會(huì)難以監(jiān)測(cè)它們。此外,各個(gè)組件可能不可被操作,不同的組件可以處于不同的企業(yè)操作團(tuán)隊(duì)的管轄下。應(yīng)用程序也可以包括多種技術(shù)。雖然分布式應(yīng)用程序可以是異質(zhì)的,但是,對(duì)于分布式應(yīng)用程序的監(jiān)測(cè)系統(tǒng)常常是技術(shù)專用的(例如,某一系統(tǒng)可以監(jiān)測(cè)Java應(yīng)用程序組件,但不可監(jiān)測(cè).NET應(yīng)用程序組件)。 另外,監(jiān)測(cè)系統(tǒng)可能對(duì)正在被監(jiān)測(cè)的分布式應(yīng)用程序的性能產(chǎn)生負(fù)面影響。即,為了監(jiān)測(cè)分布式應(yīng)用程序上的每一事務(wù),監(jiān)測(cè)系統(tǒng)可能會(huì)引入重大的處理和存儲(chǔ)器開銷,干擾操作或顯著地影響分布式應(yīng)用程序的性能。這樣的性能影響在實(shí)時(shí)、幾乎實(shí)時(shí)、或任務(wù)關(guān)鍵的分布式應(yīng)用程序中可能是有問題的。
發(fā)明內(nèi)容
本公開描述了對(duì)于分布式應(yīng)用程序的監(jiān)測(cè)系統(tǒng)。對(duì)各種硬件和軟件分布式應(yīng)用程序組件(如數(shù)據(jù)庫、服務(wù)器以及web服務(wù))進(jìn)行監(jiān)視得到支持。對(duì)諸如.NET、Java、Wind0WS 通信基礎(chǔ)(WCF)、因特網(wǎng)信息服務(wù)(IIS)、基于Windows的技術(shù)、以及基于UNIX的技術(shù)之類的多種技術(shù)進(jìn)行監(jiān)視也得到支持。監(jiān)測(cè)系統(tǒng)包括技術(shù)不可知的攔截器管理器以及能夠攔截由分布式應(yīng)用程序的組件所發(fā)送的和接收到的消息的一個(gè)或多個(gè)技術(shù)專用的攔截器。技術(shù)專用的攔截器中的每一個(gè)都是特定技術(shù)所專用的,并被附加到與特定技術(shù)相關(guān)聯(lián)的分布式應(yīng)用程序組件(例如,.NET攔截器被附加到包括.NET應(yīng)用程序或服務(wù)的分布式應(yīng)用程序組件)。技術(shù)專用的攔截器可以被配置成跟蹤對(duì)特定函數(shù)的調(diào)用,沿著分布式應(yīng)用程序的特定執(zhí)行路徑跟蹤活動(dòng),或跟蹤分布式應(yīng)用程序中發(fā)生的事件(例如,軟件異?;驁?bào)告的錯(cuò)誤)。技術(shù)專用的攔截器基于攔截的消息來生成工作項(xiàng),并將工作項(xiàng)發(fā)送到技術(shù)不可知的攔截器管理器。技術(shù)不可知的攔截器管理器可以調(diào)度接收到的工作項(xiàng)供執(zhí)行。例如,技術(shù)不可知的攔截器管理器可以將分布式應(yīng)用程序的已發(fā)現(xiàn)的依賴關(guān)系存儲(chǔ)在存儲(chǔ)位置,將活動(dòng)信息存儲(chǔ)在該存儲(chǔ)位置,并將事件的發(fā)生報(bào)告給諸如IT管理員或管理應(yīng)用程序之類的客戶端。 技術(shù)不可知的攔截器管理器也可以包括節(jié)制功能,如工作項(xiàng)排隊(duì)、依賴關(guān)系緩存、后臺(tái)線程化以及垃圾回收,以減輕監(jiān)測(cè)系統(tǒng)的性能影響。提供本發(fā)明內(nèi)容是為了以精簡(jiǎn)的形式介紹將在以下具體實(shí)施方式
中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標(biāo)識(shí)出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于限定所要求保護(hù)的主題的范圍。
圖1是監(jiān)測(cè)分布式應(yīng)用程序的系統(tǒng)的特定實(shí)施例的框圖;圖2是監(jiān)測(cè)分布式應(yīng)用程序的系統(tǒng)的另一特定實(shí)施例的框圖;圖3是可以和監(jiān)測(cè)分布式應(yīng)用程序的系統(tǒng)一起使用的身份監(jiān)測(cè)器的特定實(shí)施例的框圖4是示出了監(jiān)測(cè)分布式應(yīng)用程序的消息攔截的框圖;圖5是監(jiān)測(cè)分布式應(yīng)用程序的方法的特定實(shí)施例的流程圖;圖6是監(jiān)測(cè)分布式應(yīng)用程序的方法的另一特定實(shí)施例的流程圖;圖7是監(jiān)測(cè)分布式應(yīng)用程序的方法的特定實(shí)施例的流程圖;圖8是監(jiān)測(cè)分布式應(yīng)用程序的方法的另一特定實(shí)施例的流程圖;圖9是監(jiān)測(cè)分布式應(yīng)用程序的方法的另一特定實(shí)施例的流程圖;圖10是在技術(shù)不可知的攔截器管理器上有選擇地調(diào)度工作項(xiàng)的方法的特定實(shí)施例的流程圖;圖11是示出了分布式計(jì)算環(huán)境的特定實(shí)施例的一般示意圖;以及圖12是一種計(jì)算環(huán)境的框圖,包括可以支持如圖1-11所示的計(jì)算機(jī)實(shí)現(xiàn)的方法、 計(jì)算機(jī)程序產(chǎn)品以及系統(tǒng)組件的實(shí)施例的計(jì)算設(shè)備。
具體實(shí)施例方式在一特定實(shí)施例中,公開了包括標(biāo)識(shí)分布式應(yīng)用程序的多個(gè)組件以及標(biāo)識(shí)與多個(gè)組件中的特定組件相關(guān)聯(lián)的特定技術(shù)的方法。該方法還包括基于所標(biāo)識(shí)的特定技術(shù)來將技術(shù)專用的攔截器附加到該特定組件,使用附加的技術(shù)專用的攔截器來攔截由該特定組件所發(fā)送的或接收到的消息。該方法還包括基于攔截的消息,生成至少一個(gè)潛在的工作項(xiàng),并基于該至少一個(gè)潛在的工作項(xiàng)對(duì)分布式應(yīng)用程序的性能的預(yù)測(cè)影響,來確定是否要調(diào)度該至少一個(gè)潛在工作項(xiàng)以便執(zhí)行。在一特定實(shí)施例中,該至少一個(gè)潛在工作項(xiàng)是響應(yīng)于確定特定指令或指令集要求處理而生成的可執(zhí)行的工作項(xiàng)。在另一特定實(shí)施例中,公開了包括多個(gè)技術(shù)專用的攔截器的系統(tǒng),包括第一技術(shù)專用的攔截器和第二技術(shù)專用的攔截器以及技術(shù)不可知的攔截器管理器。第一技術(shù)專用的攔截器與第一技術(shù)相關(guān)聯(lián),第二技術(shù)專用的攔截器與不同于第一技術(shù)的第二技術(shù)相關(guān)聯(lián)。 第一技術(shù)專用的攔截器被配置成跟蹤與第一技術(shù)相關(guān)聯(lián)的第一分布式應(yīng)用程序組件的操作,包括攔截由第一分布式應(yīng)用程序組件所發(fā)送的消息以及接收到的消息。第一技術(shù)專用的攔截器還被配置成基于所跟蹤的第一分布式應(yīng)用程序組件的操作來生成工作項(xiàng),并將工作項(xiàng)發(fā)送到技術(shù)不可知的攔截器管理器。第二技術(shù)專用的攔截器被配置成跟蹤與第二技術(shù)相關(guān)聯(lián)的第二分布式應(yīng)用程序組件的操作,包括攔截由第二分布式應(yīng)用程序組件所發(fā)送的消息以及接收到的消息。第二技術(shù)專用的攔截器還被配置成基于所跟蹤的第二分布式應(yīng)用程序組件的操作來生成工作項(xiàng),并將工作項(xiàng)發(fā)送到技術(shù)不可知的攔截器管理器。技術(shù)不可知的攔截器管理器包括多個(gè)工作項(xiàng)管理器,包括與第一技術(shù)專用的攔截器相關(guān)聯(lián)的第一工作項(xiàng)管理器,以及與第二技術(shù)專用的攔截器相關(guān)聯(lián)的第二工作項(xiàng)管理器。每一工作項(xiàng)管理器都與特定技術(shù)專用的攔截器相關(guān)聯(lián),并被配置成從特定技術(shù)專用的攔截器接收工作項(xiàng)并將接收到的工作項(xiàng)排隊(duì)在工作項(xiàng)隊(duì)列中。每一工作項(xiàng)管理器還被配置成將由特定技術(shù)專用的攔截器跟蹤的特定工作項(xiàng)對(duì)分布式應(yīng)用程序組件的性能的影響與可以接受的性能影響閾值進(jìn)行比較。每一工作項(xiàng)管理器還被配置成當(dāng)影響小于可以接受的性能影響閾值時(shí),調(diào)度特定工作項(xiàng)以便執(zhí)行,而當(dāng)影響大于可以接受的性能影響閾值時(shí),丟棄特定工作項(xiàng),而不調(diào)度特定工作項(xiàng)來執(zhí)行。在另一特定實(shí)施例中,公開了計(jì)算機(jī)可讀介質(zhì)。該計(jì)算機(jī)可讀介質(zhì)包括當(dāng)由計(jì)算
6機(jī)執(zhí)行時(shí)導(dǎo)致計(jì)算機(jī)在技術(shù)不可知的攔截器管理器上從被附加到分布式應(yīng)用程序的第一組件的第一技術(shù)專用的攔截器接收第一工作項(xiàng)的指令。第一技術(shù)專用的攔截器是第一技術(shù)專用的,并且,第一組件與第一技術(shù)相關(guān)聯(lián)。該計(jì)算機(jī)可讀介質(zhì)還包括當(dāng)由計(jì)算機(jī)執(zhí)行時(shí)導(dǎo)致計(jì)算機(jī)在技術(shù)不可知的攔截器管理器上從被附加到分布式應(yīng)用程序的第二組件的第二技術(shù)專用的攔截器接收第二工作項(xiàng)的指令。第二技術(shù)專用的攔截器是第二技術(shù)專用的。第二組件與第二技術(shù)相關(guān)聯(lián),并且,第二技術(shù)不同于第一技術(shù)。該計(jì)算機(jī)可讀介質(zhì)還包括當(dāng)由計(jì)算機(jī)執(zhí)行時(shí)導(dǎo)致計(jì)算機(jī)基于第一工作項(xiàng)對(duì)分布式應(yīng)用程序的第一影響并基于第二工作項(xiàng)對(duì)分布式應(yīng)用程序的第二影響,來確定是否要調(diào)度第一工作項(xiàng)和第二工作項(xiàng)以便執(zhí)行的指令。圖1是監(jiān)測(cè)分布式應(yīng)用程序102的系統(tǒng)100的特定實(shí)施例的框圖。分布式應(yīng)用程序102包括諸如第一計(jì)算設(shè)備104上的Windows通信基礎(chǔ)(WCF)組件110和第二計(jì)算設(shè)備106上的.NET組件120之類的組件。第一計(jì)算設(shè)備104和第二計(jì)算設(shè)備106是分布式的(例如,使用單獨(dú)的硬件操作或彼此相距較遠(yuǎn))。分布式應(yīng)用程序102還包括附加到組件的技術(shù)專用的攔截器,如附加到WCF組件110的WCF攔截器112和附加到.NET組件120 的.NET攔截器122。分布式應(yīng)用程序102的組件能夠發(fā)送和接收消息,而附加到組件的技術(shù)專用的攔截器能夠攔截消息。技術(shù)專用的攔截器也可以能夠基于攔截的消息生成工作項(xiàng),并將所生成的工作項(xiàng)發(fā)送到技術(shù)不可知的攔截器管理器130。分布式應(yīng)用程序102的每一組件都可以被配置成將消息發(fā)送到分布式應(yīng)用程序 102的其他組件,并從分布式應(yīng)用程序102的其他組件接收消息。例如,WCF組件110和.NET 組件120可以被配置成向彼此發(fā)送消息并從彼此接收消息。在一特定實(shí)施例中,消息是可擴(kuò)展標(biāo)記語言(XML)消息。每一技術(shù)專用的攔截器都可以被配置成跟蹤對(duì)技術(shù)專用的攔截器被附加到的組件上的特定函數(shù)的調(diào)用。例如,WCF攔截器112可以被配置成跟蹤對(duì)WCF組件110上的特定函數(shù)的調(diào)用。在一特定實(shí)施例中,特定函數(shù)包括處于分布式應(yīng)用程序102的不同的組件上的源操作和目標(biāo)操作。例如,特定函數(shù)可以具有WCF組件110上的源操作以及.NET組件 120上的目標(biāo)操作。然后,WCF攔截器112可以通過攔截指出對(duì)特定函數(shù)的調(diào)用的消息來發(fā)現(xiàn)WCF組件110上的源操作和.NET組件120上的目標(biāo)操作之間的依賴關(guān)系。每一技術(shù)專用的攔截器也可以被配置成監(jiān)測(cè)分布式應(yīng)用程序102的包括技術(shù)專用的攔截器被附加到的組件的特定執(zhí)行路徑上的活動(dòng)。例如,WCF攔截器112可以攔截WCF 組件110和.NET組件120之間的消息,并確定攔截的消息表示沿著包括WCF組件110的特定執(zhí)行路徑的活動(dòng)。每一技術(shù)專用的攔截器也可以被配置成跟蹤在分布式應(yīng)用程序102上發(fā)生的特定事件(例如,軟件異?;驁?bào)告的錯(cuò)誤)。在一特定實(shí)施例中,特定事件是在特定時(shí)間內(nèi)跟蹤的。例如,WCF攔截器112可以跟蹤一分鐘內(nèi)在WCF組件110上發(fā)生的軟件異常的數(shù)量, 以便計(jì)算WCF組件110上的每分鐘異常率。可另選地,可以連續(xù)地跟蹤特定事件。例如, WCF攔截器112可以攔截WCF組件110和.NET組件120之間的攔截,并根據(jù)攔截的消息來確定在WCF組件110或者.NET組件120上發(fā)生了軟件異常(例如,事件)。每一技術(shù)專用的攔截器都可以被配置成基于在技術(shù)專用的攔截器上攔截的消息生成工作項(xiàng),并將所生成的工作項(xiàng)發(fā)送到技術(shù)不可知的攔截器攔截器130。例如,WCF攔截器112可以生成包括存儲(chǔ)WCF組件110上的源操作和.NET組件120上的目標(biāo)操作之間的已發(fā)現(xiàn)的依賴關(guān)系的指令的工作項(xiàng),并將該工作項(xiàng)發(fā)送到技術(shù)不可知的攔截器管理器130。 作為另一個(gè)示例,WCF攔截器112可以生成包括存儲(chǔ)涉及包括WCF組件110的特定執(zhí)行路徑的活動(dòng)信息的指令的工作項(xiàng),并將該工作項(xiàng)發(fā)送到技術(shù)不可知的攔截器管理器130。作為再一個(gè)示例,WCF攔截器112可以生成包括報(bào)告WCF組件110上或者.NET組件120上的軟件異常的發(fā)生的指令的工作項(xiàng),并將該工作項(xiàng)發(fā)送到技術(shù)不可知的攔截器管理器130。. NET攔截器122可以類似地生成工作項(xiàng)??闪磉x地,WCF攔截器112可以生成包括所有三個(gè)任務(wù)的指令的單一工作項(xiàng)。應(yīng)該注意,多個(gè)攔截器也可以被附加到單個(gè)組件。例如,當(dāng)web服務(wù)器包括.NET 技術(shù)和WCF技術(shù)兩者時(shí),諸如圖1的.NET攔截器122之類的.NET攔截器和諸如圖1的WCF 攔截器112之類的WCF攔截器兩者都可以被附加到分布式應(yīng)用程序102的web服務(wù)器。技術(shù)不可知的攔截器管理器130可以位于分布式應(yīng)用程序102的web服務(wù)中或位于分布式應(yīng)用程序102的管理應(yīng)用程序中。技術(shù)不可知的攔截器管理器130可包括多個(gè)工作項(xiàng)管理器,其中,多個(gè)工作項(xiàng)管理器中的每一個(gè)都被配置成從特定技術(shù)專用的攔截器接收工作項(xiàng)。例如,在圖1中所示出的實(shí)施例中,技術(shù)不可知的攔截器管理器包括被配置成從 WCF攔截器112接收工作項(xiàng)的WCF工作項(xiàng)管理器140,以及被配置成從.NET攔截器122接收工作項(xiàng)的.NET工作項(xiàng)管理器150。工作項(xiàng)管理器中的每一個(gè)也都可以被配置成將工作項(xiàng)存儲(chǔ)在工作項(xiàng)隊(duì)列中。例如,WCF工作項(xiàng)管理器142可以將工作項(xiàng)存儲(chǔ)在WCF工作項(xiàng)隊(duì)列 142中,而.NET工作項(xiàng)管理器可以將工作項(xiàng)存儲(chǔ)在.NET工作項(xiàng)隊(duì)列152中。在一特定實(shí)施例中,工作項(xiàng)按照工作項(xiàng)由技術(shù)不可知的攔截器管理器130接收的順序被存儲(chǔ)在工作項(xiàng)隊(duì)列中。例如,當(dāng)從WCF攔截器112接收到的第一工作項(xiàng)在從WCF攔截器接收到的第二工作項(xiàng)之前被技術(shù)不可知的攔截器管理器130接收到時(shí),第一工作項(xiàng)可以被存儲(chǔ)在WCF工作項(xiàng)隊(duì)列142中,排在第二工作項(xiàng)之前。工作項(xiàng)管理器中的每一個(gè)還被配置成當(dāng)工作項(xiàng)隊(duì)列已滿時(shí)丟棄接收到的工作項(xiàng)。例如,當(dāng)WCF工作項(xiàng)管理器140確定WCF工作項(xiàng)隊(duì)列142已滿時(shí)(例如,當(dāng)WCF工作項(xiàng)隊(duì)列142的大小等于WCF工作項(xiàng)管理器140已知的最大工作項(xiàng)隊(duì)列大小變量時(shí)),WCF工作項(xiàng)管理器140可以丟棄接收到的工作項(xiàng)。工作項(xiàng)管理器中的每一個(gè)都可包括被配置成調(diào)度排隊(duì)的工作項(xiàng)以便執(zhí)行的工作項(xiàng)調(diào)度邏輯。例如,WCF工作項(xiàng)管理器140可包括WCF工作項(xiàng)調(diào)度邏輯144,而.NET工作項(xiàng)管理器150可包括.NET工作項(xiàng)調(diào)度邏輯154。在一特定實(shí)施例中,WCF工作項(xiàng)調(diào)度邏輯144 或.NET工作項(xiàng)調(diào)度邏輯IM可以基于所預(yù)測(cè)的特定工作項(xiàng)對(duì)分布式應(yīng)用程序102的性能的影響來確定是否要調(diào)度該特定工作項(xiàng)以便執(zhí)行。例如,當(dāng)所預(yù)測(cè)的特定工作項(xiàng)的影響低于可以接受的性能影響閾值時(shí)(例如,的可以接受的處理器使用率影響、1秒的可以接受的消息延遲影響、或三個(gè)可執(zhí)行操作的可以接受的執(zhí)行隊(duì)列長度影響),WCF工作項(xiàng)調(diào)度邏輯144可以調(diào)度特定工作項(xiàng)以便執(zhí)行?;蛘撸琖CF工作項(xiàng)調(diào)度邏輯144可以基于所預(yù)測(cè)的特定工作項(xiàng)對(duì)WCF組件110的影響來確定是否要調(diào)度特定工作項(xiàng)以便執(zhí)行。在一特定實(shí)施例中,技術(shù)專用的攔截器被配置成向工作項(xiàng)管理器請(qǐng)求空工作項(xiàng), 通過將信息和執(zhí)行指令存儲(chǔ)在空工作項(xiàng)中來生成工作項(xiàng)??梢岳斫?,在這樣的實(shí)施例中, 工作項(xiàng)管理器可以通過拒絕對(duì)空工作項(xiàng)的請(qǐng)求來降低在特定分布式應(yīng)用程序組件上監(jiān)測(cè)的性能影響。例如,在發(fā)現(xiàn).NET組件120的依賴關(guān)系時(shí),.NET攔截器122可以向.NET工作項(xiàng)管理器150請(qǐng)求空工作項(xiàng)。如果.NET工作項(xiàng)管理器150允許請(qǐng)求并將空工作項(xiàng)發(fā)送到.NET攔截器122,則.NET攔截器122可以通過將發(fā)現(xiàn)的依賴關(guān)系存儲(chǔ)在空工作項(xiàng)中來生成工作項(xiàng),并將所生成的工作項(xiàng)發(fā)送到.NET工作項(xiàng)管理器150。在一特定實(shí)施例中,工作項(xiàng)具有有效期,如果在有效期內(nèi)它們沒有被調(diào)度來執(zhí)行,則將它們從工作項(xiàng)隊(duì)列中丟棄。例如,如果由.NET攔截器122所生成的工作項(xiàng)沒有在由.NET工作項(xiàng)管理器150生成的10秒的空工作項(xiàng)內(nèi)被調(diào)度,則可以它將過期并可以被丟棄。在一特定實(shí)施例中,諸如工作項(xiàng)管理器140和工作項(xiàng)管理器150之類的工作項(xiàng)管理器可以根據(jù)下列示例性C#類模板和接口來實(shí)現(xiàn)
public class WorkItemManager<T> where T : class, IWorkItem, new ()
public T RequestWorkItem();
public void QueueWorkItem(T workltem);
public void ReturnWorkItem(T workltem);
public interface IWorkItem
void Initialize (); void SetupO ; void DoProcess(); void Cleanup ();
}在操作中,技術(shù)專用的攔截器可以被附加到分布式應(yīng)用程序102的組件。例如, WCF攔截器112可以被附加到WCF組件110,而.NET攔截器122可以被附加到.NET組件 120。每一技術(shù)專用的攔截器可以被配置成在分布式應(yīng)用程序102中跟蹤函數(shù)調(diào)用、跟蹤活動(dòng)信息、跟蹤性能事件或其任何組合。例如,WCF攔截器112可以被配置成跟蹤對(duì)WCF組件 110上的特定WCF函數(shù)的調(diào)用,跟蹤分布式應(yīng)用程序102的包括WCF組件110的特定執(zhí)行路徑上的活動(dòng)信息,以及跟蹤在WCF組件110上發(fā)生的軟件異常。類似地,.NET攔截器122 可以被配置成跟蹤對(duì).NET組件120上的特定.NET函數(shù)的調(diào)用,跟蹤涉及分布式應(yīng)用程序 102的包括.NET組件120的特定執(zhí)行路徑的活動(dòng)信息,以及跟蹤在.NET組件120上發(fā)生的軟件異常。在操作過程中,技術(shù)專用的攔截器可以攔截分布式應(yīng)用程序102的各種組件之間的一個(gè)或多個(gè)消息,并可以基于一個(gè)或多個(gè)攔截的消息來生成工作項(xiàng)。技術(shù)專用的攔截器也可以將所生成的工作項(xiàng)發(fā)送到技術(shù)不可知的攔截器管理器130。例如,WCF攔截器112可以攔截由WCF組件110發(fā)送到.NET組件120的消息,基于攔截的消息,來生成工作項(xiàng),并將工作項(xiàng)發(fā)送到技術(shù)不可知的攔截器管理器130。在一特定實(shí)施例中,攔截的消息表示W(wǎng)CF組件110上的源操作和.NET組件120上的目標(biāo)操作之間的依賴關(guān)系,工作項(xiàng)包括存儲(chǔ)依賴關(guān)系的指令。在另一特定實(shí)施例中,攔截的消息包括涉及WCF攔截器112被配置成跟蹤的分布式應(yīng)用程序102的執(zhí)行路徑的活動(dòng)信息,而工作項(xiàng)包括存儲(chǔ)活動(dòng)信息的指令。在另一特定實(shí)施例中,攔截的消息指出在WCF組件110上或者.NET組件120上發(fā)生了軟件異常,而工作項(xiàng)包括報(bào)告軟件異常的發(fā)生的指令。當(dāng)技術(shù)不可知的攔截器管理器130從技術(shù)專用的攔截器接收到工作項(xiàng)時(shí),工作項(xiàng)管理器(例如,WCF工作項(xiàng)管理器140或.NET工作項(xiàng)管理器150)可以將接收到的工作項(xiàng)添加到項(xiàng)隊(duì)列中(例如,WCF工作項(xiàng)隊(duì)列142或.NET工作項(xiàng)隊(duì)列152)。對(duì)于WCF工作項(xiàng)隊(duì)列142中的每一個(gè)潛在的工作項(xiàng),WCF工作項(xiàng)調(diào)度邏輯144可以基于所預(yù)測(cè)的潛在工作項(xiàng)對(duì)分布式應(yīng)用程序102的性能的影響來確定是否要調(diào)度潛在工作項(xiàng)以便執(zhí)行。當(dāng)所預(yù)測(cè)的潛在工作項(xiàng)的影響低于可以接受的性能影響閾值時(shí),WCF工作項(xiàng)調(diào)度邏輯144可以調(diào)度潛在工作項(xiàng)以便執(zhí)行。例如,當(dāng)所預(yù)測(cè)的潛在工作項(xiàng)對(duì)分布式應(yīng)用程序102上的消息延遲的影響小于1秒時(shí),可以調(diào)度潛在工作項(xiàng)。當(dāng)特定工作項(xiàng)的潛在影響高于可以接受的性能影響閾值時(shí),WCF工作項(xiàng)調(diào)度邏輯144可以從WCF工作項(xiàng)隊(duì)列142 中丟棄潛在工作項(xiàng)。例如,當(dāng)所預(yù)測(cè)的潛在工作項(xiàng)對(duì)分布式應(yīng)用程序102上的消息延遲的影響超過1秒時(shí),可以丟棄潛在工作項(xiàng)。類似地,對(duì)于.NET工作項(xiàng)隊(duì)列152中的每一個(gè)潛在工作項(xiàng),.NET工作項(xiàng)調(diào)度邏輯可以基于所預(yù)測(cè)的潛在工作項(xiàng)對(duì)分布式應(yīng)用程序102的性能的影響,來可選擇性地調(diào)度潛在工作項(xiàng)??梢岳斫?,可以使用圖1的系統(tǒng)100來監(jiān)測(cè)跨各種組件分布的并且包括各種技術(shù)的分布式應(yīng)用程序。還可以理解,圖1的系統(tǒng)100包括節(jié)制功能(例如,拒絕對(duì)空工作項(xiàng)的請(qǐng)求、限制工作項(xiàng)隊(duì)列的大小、丟棄具有所預(yù)測(cè)的的對(duì)性能的高度影響的工作項(xiàng)、并在有效期之后讓工作項(xiàng)自動(dòng)過期),以減輕這樣的監(jiān)測(cè)對(duì)分布式應(yīng)用程序的總體性能影響。因此, 可以理解,圖1的系統(tǒng)100可以根據(jù)需求犧牲對(duì)于性能的監(jiān)測(cè)準(zhǔn)確性,以使得實(shí)時(shí)的、幾乎實(shí)時(shí)、或任務(wù)關(guān)鍵的分布式應(yīng)用程序的操作不被圖1的系統(tǒng)100干擾。圖2是監(jiān)測(cè)分布式應(yīng)用程序201的系統(tǒng)200的另一特定實(shí)施例的框圖。分布式應(yīng)用程序201包括多個(gè)技術(shù)專用的攔截器,如附加到.NET組件205的.NET攔截器202,附加到WCF組件206的WCF攔截器203,以及附加到Java組件207的Java攔截器204。每一技術(shù)專用的攔截器可以被配置成將工作項(xiàng)發(fā)送到技術(shù)不可知的攔截器管理器230。在一說明性實(shí)施例中,.NET攔截器202包括圖1的.NET攔截器122,WCF攔截器203包括圖1的WCF 攔截器112,技術(shù)不可知的攔截器管理器230包括圖1的技術(shù)不可知的攔截器管理器130。由技術(shù)專用的攔截器所生成的并發(fā)送到技術(shù)不可知的攔截器管理器230的工作項(xiàng)可包括存儲(chǔ)分布式應(yīng)用程序201的已發(fā)現(xiàn)的依賴關(guān)系、存儲(chǔ)涉及分布式應(yīng)用程序201的特定執(zhí)行路徑的活動(dòng)信息、報(bào)告在分布式應(yīng)用程序201上發(fā)生了事件、或其任何組合的指令。技術(shù)不可知的攔截器管理器230可包括多個(gè)工作項(xiàng)管理器,如工作項(xiàng)管理器對(duì)0,其中, 每一工作項(xiàng)管理器都被配置成將從特定技術(shù)專用的攔截器接收到的工作項(xiàng)存儲(chǔ)在諸如工作項(xiàng)隊(duì)列242之類的工作項(xiàng)隊(duì)列中。例如,工作項(xiàng)管理器240可以是.NET工作項(xiàng)管理器, 并將從.NET攔截器202接收到的工作項(xiàng)存儲(chǔ)在工作項(xiàng)隊(duì)列242中。作為另一個(gè)示例,工作項(xiàng)管理器240可以是WCF工作項(xiàng)管理器,并將從WCF攔截器203接收到的工作項(xiàng)存儲(chǔ)在工作項(xiàng)隊(duì)列242中。作為另一個(gè)示例,工作項(xiàng)管理器240可以是Java工作項(xiàng)管理器,并將從 Java攔截器204接收到的工作項(xiàng)存儲(chǔ)在工作項(xiàng)隊(duì)列M2中。工作項(xiàng)管理器240也可以包括工作項(xiàng)調(diào)度邏輯對(duì)4,其被配置成調(diào)度工作項(xiàng)隊(duì)列 242中的工作項(xiàng)一般執(zhí)行,并且一旦工作項(xiàng)被調(diào)度以便執(zhí)行就從工作項(xiàng)隊(duì)列M2中刪除工作項(xiàng)。在一特定實(shí)施例中,工作項(xiàng)調(diào)度邏輯244可以基于所預(yù)測(cè)的特定工作項(xiàng)對(duì)分布式應(yīng)用程序201的性能的影響來確定是否要調(diào)度特定工作項(xiàng)以便執(zhí)行。例如,當(dāng)所預(yù)測(cè)的特定工作項(xiàng)的影響低于可以接受的性能影響閾值時(shí),工作項(xiàng)調(diào)度邏輯244可以調(diào)度特定工作項(xiàng)以便執(zhí)行。工作項(xiàng)調(diào)度邏輯244可以訪問線程池220,其中,線程池220包括一個(gè)或多個(gè)前臺(tái)線程222和一個(gè)或多個(gè)后臺(tái)線程224。當(dāng)工作項(xiàng)調(diào)度邏輯244可以訪問線程池220時(shí),工作項(xiàng)調(diào)度邏輯244可以調(diào)度工作項(xiàng)以便在線程池220的前臺(tái)線程222中的一個(gè)或后臺(tái)線程 2M中的一個(gè)中執(zhí)行。工作項(xiàng)調(diào)度邏輯244也可以被配置成限制同時(shí)執(zhí)行的工作項(xiàng)的數(shù)量, 并限制線程池220的同時(shí)執(zhí)行的線程的數(shù)量。技術(shù)不可知的攔截器管理器230上的依賴關(guān)系管理器272可以被配置成執(zhí)行包括存儲(chǔ)已發(fā)現(xiàn)的依賴關(guān)系的指令的工作項(xiàng)。在一特定實(shí)施例中,依賴關(guān)系管理器272將已發(fā)現(xiàn)的依賴關(guān)系暫時(shí)地收集在依賴關(guān)系緩存282中,并成批地存儲(chǔ)收集的依賴關(guān)系。例如,依賴關(guān)系管理器272可以將已發(fā)現(xiàn)的依賴關(guān)系收集在依賴關(guān)系緩存觀2中,每當(dāng)依賴關(guān)系緩存觀2的大小到達(dá)固定的批量大小(例如,20)時(shí),存儲(chǔ)來自依賴關(guān)系緩存觀2的收集的已發(fā)現(xiàn)的依賴關(guān)系。可另選地,依賴關(guān)系管理器272可以將已發(fā)現(xiàn)的依賴關(guān)系收集在依賴關(guān)系緩存觀2中,并在固定時(shí)間間隔(例如,120秒)存儲(chǔ)來自依賴關(guān)系緩存觀2的收集的已發(fā)現(xiàn)的依賴關(guān)系。如果由依賴關(guān)系緩存282收集的依賴關(guān)系在有效期內(nèi)沒有被存儲(chǔ),則它們會(huì)過期。依賴關(guān)系管理器272可以通過將一批已發(fā)現(xiàn)的依賴關(guān)系發(fā)送到負(fù)責(zé)將項(xiàng)存儲(chǔ)在一個(gè)或多個(gè)存儲(chǔ)位置的存儲(chǔ)服務(wù)290來存儲(chǔ)該批已發(fā)現(xiàn)的依賴關(guān)系。例如,存儲(chǔ)服務(wù)290 可以將已發(fā)現(xiàn)的依賴關(guān)系可以存儲(chǔ)在數(shù)據(jù)庫或某種其他數(shù)據(jù)存儲(chǔ)中。在一特定實(shí)施例中, 存儲(chǔ)服務(wù)290可以響應(yīng)于確定特定依賴關(guān)系先前沒有被存儲(chǔ)而存儲(chǔ)該特定依賴關(guān)系。依賴關(guān)系管理器272也可以被配置成在分布式應(yīng)用程序201的每一個(gè)各個(gè)技術(shù)專用的攔截器中打開或關(guān)閉依賴關(guān)系發(fā)現(xiàn)。例如,依賴關(guān)系管理器272可以在.NET攔截器202、WCF攔截器 203以及Java攔截器204中的每一個(gè)中打開或關(guān)閉依賴關(guān)系發(fā)現(xiàn)。技術(shù)不可知的攔截器管理器230上的活動(dòng)管理器270可以被配置成執(zhí)行包括存儲(chǔ)涉及分布式應(yīng)用程序201的特定執(zhí)行路徑的活動(dòng)信息的指令的工作項(xiàng)。在一特定實(shí)施例中,活動(dòng)管理器270將這樣的工作項(xiàng)排隊(duì)在活動(dòng)隊(duì)列280中,并當(dāng)活動(dòng)隊(duì)列280滿時(shí)丟棄接收到的這樣的工作項(xiàng)?;顒?dòng)管理器270可以通過將活動(dòng)信息從活動(dòng)隊(duì)列觀0中傳輸?shù)酱鎯?chǔ)服務(wù)290來存儲(chǔ)活動(dòng)信息。在一特定實(shí)施例中,活動(dòng)管理器270被配置成在特定技術(shù)專用的攔截器上初始化活動(dòng)信息收集。例如,當(dāng)Java組件207通過Java數(shù)據(jù)庫連接(JDBC)與數(shù)據(jù)庫連接時(shí),活動(dòng)管理器270可以通過指示Java攔截器204跟蹤Java組件207上的包括JDBC調(diào)用的所有消息來跟蹤數(shù)據(jù)庫操作。應(yīng)該注意,雖然圖2中所示出的特定實(shí)施例只示出了一個(gè)存儲(chǔ)服務(wù)(即,存儲(chǔ)服務(wù)四0),可由技術(shù)不可知的攔截器管理器230訪問多個(gè)存儲(chǔ)服務(wù)。例如,依賴關(guān)系管理器272可以使用第一存儲(chǔ)服務(wù)來存儲(chǔ)已發(fā)現(xiàn)的依賴關(guān)系,而活動(dòng)管理器270可以使用第二存儲(chǔ)服務(wù)來存儲(chǔ)活動(dòng)信息。第一存儲(chǔ)服務(wù)和第二存儲(chǔ)服務(wù)可以將數(shù)據(jù)存儲(chǔ)到相同的存儲(chǔ)位置或不同的存儲(chǔ)位置。技術(shù)不可知的攔截器管理器230上的身份監(jiān)測(cè)器260可包括對(duì)于分布式應(yīng)用程序 201的每一個(gè)組件的身份監(jiān)測(cè)器。例如,身份監(jiān)測(cè)器260可包括對(duì)于分布式應(yīng)用程序201 的web服務(wù)的端點(diǎn)監(jiān)測(cè)器。在一特定實(shí)施例中,對(duì)于特定組件的身份監(jiān)測(cè)器存儲(chǔ)涉及由附加到特定組件的技術(shù)專用的攔截器檢測(cè)到的事件(例如,軟件異?;蝈e(cuò)誤)的數(shù)據(jù)。每一個(gè)身份監(jiān)測(cè)器都可以具有一個(gè)或多個(gè)客戶端,而每一個(gè)身份監(jiān)測(cè)器都可以執(zhí)行包括通過將特定事件的發(fā)生報(bào)告到一個(gè)或多個(gè)客戶端來報(bào)告特定事件的發(fā)生的指令的工作項(xiàng)。例如, 當(dāng).NET攔截器202生成包括報(bào)告.NET組件205上的錯(cuò)誤的指令的工作項(xiàng),對(duì)于.NET組件 205的身份監(jiān)測(cè)器可以通過向.NET組件205的身份監(jiān)測(cè)器的客戶端報(bào)告錯(cuò)誤來執(zhí)行工作項(xiàng)。每一個(gè)身份監(jiān)測(cè)器都可以將事件數(shù)據(jù)存儲(chǔ)在監(jiān)測(cè)樹中,該監(jiān)測(cè)樹包括分配的監(jiān)測(cè)器,如組件監(jiān)測(cè)器、端點(diǎn)監(jiān)測(cè)器、活動(dòng)監(jiān)測(cè)器、業(yè)務(wù)角度監(jiān)測(cè)器、操作調(diào)用監(jiān)測(cè)器、儀器監(jiān)測(cè)器或其任何組合。此處參考圖3進(jìn)一步描述了監(jiān)測(cè)樹。技術(shù)不可知的攔截器管理器230也可以包括垃圾回收器觀4。垃圾回收器觀4可以被配置成以固定時(shí)間間隔運(yùn)行,并解除分配在固定時(shí)間間隔內(nèi)沒有被使用的監(jiān)測(cè)器。在一特定實(shí)施例中,技術(shù)不可知的攔截器管理器230包括一個(gè)或多個(gè)配置設(shè)置 212。可以通過配置文件210來設(shè)置配置設(shè)置212。配置文件210可以被以任何格式(例如,XML)存儲(chǔ),并可包括對(duì)于依賴關(guān)系管理器272、活動(dòng)管理器270、工作項(xiàng)管理器MO以及垃圾回收器觀4的設(shè)置。例如,配置文件210可以按照XML存儲(chǔ),并包括下列示例性XML片
段
CinterceptorManagerConfiguration> <dependencyManager
s torageClient=·’ DependencyS torageClient" submitBatchSize="2" submitFrequency="20" cacheExpiration="60"/> CworkItemManager
maxWorkItemQueueSize="40000" maxWorkItemThreads="2" requestedWorkItemExpiration="20"/> <activityManager storageClient="ActivityStorageClient"/> <garbageCollector
frequency="60"/> </interceptorManagerConfiguration>
12
在一特定實(shí)施例中,可以根據(jù)下列示例性C#接口來實(shí)現(xiàn)技術(shù)專用的攔截器public interface IlnterceptorService
bool ProcessDependencyDiscovery(bool turnOn), bool ProcessActivityMonitoring(bool turnOn); Guid SetupInstrument(
stringaddress,stringaction,stringbpXPath,stringbpNamespacestringcounterNamestring counterConfig, int instrumentlnterval); Guid SetupOperationCalllnstrument( string sourceAddress,
string sourceAction, string targetAddress, string targetAction, string bpXPath, string bpNamespace, string counterName, string counterConfig, int instrumentlnterval); Guid SetupActivityInstrument( string address, string action, string bpXPath, string bpNamespace, string counterName, string counterConfig, int instrumentlnterval); InstrumentData [ ] GetInstruments (Guici [] ids) /
public enum InstrumentDataState
InstrumentNotFound,
InstrumentDataValidf
IntrumentProcessingErrorpublic class InstrumentData {
public InstrumentDataState State { get; } public double Value { get; }
public InstrumentValueState ValueState { get; } public DateTime WindowStart { get; } public DateTime WindowEnd { get; }
public enum InstrumentValueState
NotSet,
WindowSet,
Set,
SetWithOverflow
}可以理解,當(dāng)如上文那樣實(shí)現(xiàn)技術(shù)特定攔截器時(shí),可以通過調(diào)用方法 ftOcessD印endencyDiscoveryO (進(jìn)程依賴關(guān)系發(fā)現(xiàn))來打開或關(guān)閉技術(shù)專用的攔截器上的依賴關(guān)系發(fā)現(xiàn),并通過方法ftOcessActivityMonitoringO (進(jìn)程活動(dòng)檢測(cè))來打開或關(guān)閉活動(dòng)監(jiān)測(cè)。此外,還可以通過方法ktupInstrument ()(設(shè)置工具)來設(shè)置事件跟蹤,可以通過方法ktupOperationCalIInstrument ()(設(shè)置操作調(diào)用工具)來設(shè)置函數(shù)調(diào)用跟蹤, 并可以通過方法^^叩々(^&^7111計(jì)1~1111161^()(設(shè)置活動(dòng)工具)來設(shè)置活動(dòng)跟蹤。在一特定實(shí)施例中,技術(shù)不可知的攔截器管理器230可以位于分布式應(yīng)用程序 201外部的代理208中。在這樣的實(shí)施例中,分布式應(yīng)用程序上的諸如技術(shù)專用的攔截器 202-204之類的技術(shù)專用的攔截器可以被配置成通過外部代理208來跟蹤函數(shù)調(diào)用、跟蹤活動(dòng)信息以及跟蹤事件。在操作中,可以通過配置文件210來配置技術(shù)不可知的攔截器管理器230。技術(shù)不可知的攔截器管理器230可以標(biāo)識(shí)分布式應(yīng)用程序201的組件,如.NET組件205、WCF組件 206以及Java組件207。技術(shù)不可知的攔截器管理器230還可以標(biāo)識(shí)與組件中的一個(gè)或多個(gè)相關(guān)聯(lián)的特定技術(shù),并將技術(shù)專用的攔截器附加到一個(gè)或多個(gè)組件。例如,技術(shù)不可知的攔截器管理器230可以將.NET攔截器202附加到.NET組件205,將WCF攔截器203附加到 WCF組件206,并將Java攔截器204附加到Java攔截器207。技術(shù)不可知的攔截器管理器 230可以配置技術(shù)專用的攔截器以發(fā)現(xiàn)依賴關(guān)系、跟蹤活動(dòng)信息以及跟蹤分布式應(yīng)用程序201中的事件。例如,依賴關(guān)系管理器272可以在.NET攔截器202處打開依賴關(guān)系發(fā)現(xiàn), 并配置.NET攔截器202以跟蹤對(duì).NET組件205上的特定.NET函數(shù)的調(diào)用。作為另一個(gè)示例,活動(dòng)管理器270可以指示Java組件204以跟蹤Java組件207和數(shù)據(jù)庫之間的JDBC 調(diào)用。作為再一個(gè)示例,技術(shù)不可知的攔截器管理器230可以配置WCF攔截器203,以報(bào)告 WCF組件206上的軟件異常的每一次發(fā)生。技術(shù)專用的攔截器可以攔截分布式應(yīng)用程序201的各種組件之間的一個(gè)或多個(gè)消息,并可以基于一個(gè)或多個(gè)攔截的消息來生成一個(gè)或多個(gè)工作項(xiàng)。例如,.NET攔截器202 可以攔截涉及對(duì)特定.NET函數(shù)的調(diào)用的消息,并發(fā)現(xiàn)WCF組件206上的源操作和.NET組件205上的目標(biāo)操作之間的依賴關(guān)系。.NET攔截器202可以將相關(guān)的依賴關(guān)系工作項(xiàng)發(fā)送到技術(shù)不可知的攔截器管理器230。作為另一個(gè)示例,Java攔截器204可以檢測(cè)到Java 組件207已經(jīng)進(jìn)行了 JDBC調(diào)用,并將相關(guān)的活動(dòng)工作項(xiàng)發(fā)送到技術(shù)不可知的攔截器管理器 230。作為再一個(gè)示例,WCF攔截器203可以檢測(cè)到軟件異常在WCF組件206上的發(fā)生,并將相關(guān)的事件工作項(xiàng)發(fā)送到技術(shù)不可知的攔截器管理器230。當(dāng)技術(shù)不可知的攔截器管理器230從.NET攔截器202接收到依賴關(guān)系工作項(xiàng)時(shí),.NET工作項(xiàng)管理器(例如,當(dāng)工作項(xiàng)管理器240是.NET工作項(xiàng)管理器時(shí)的工作項(xiàng)管理器M0)可以將依賴關(guān)系工作項(xiàng)添加到工作項(xiàng)隊(duì)列中(例如,當(dāng)工作項(xiàng)管理器240是.NET工作項(xiàng)管理器時(shí)的工作項(xiàng)隊(duì)列M2)。工作項(xiàng)管理器上的工作項(xiàng)調(diào)度邏輯(例如,當(dāng)工作項(xiàng)管理器240是.NET工作項(xiàng)管理器時(shí)的工作項(xiàng)調(diào)度邏輯M4)可以基于所預(yù)測(cè)的依賴關(guān)系工作項(xiàng)對(duì)分布式應(yīng)用程序201的性能的影響來確定是否要調(diào)度依賴關(guān)系工作項(xiàng)以便執(zhí)行。當(dāng)所預(yù)測(cè)的依賴關(guān)系工作項(xiàng)的影響低于可以接受的性能影響閾值時(shí),工作項(xiàng)調(diào)度邏輯2M可以調(diào)度依賴關(guān)系工作項(xiàng)供在線程池220的前臺(tái)線程222或后臺(tái)線程224中的一個(gè)中執(zhí)行。依賴關(guān)系管理器272可以通過將WCF組件206上的源操作和.NET組件205上的目標(biāo)操作之間的已發(fā)現(xiàn)的依賴關(guān)系添加到依賴關(guān)系緩存觀2中來執(zhí)行依賴關(guān)系工作項(xiàng)。在將已發(fā)現(xiàn)的依賴關(guān)系添加到依賴關(guān)系緩存觀2中之后,依賴關(guān)系管理器272可以通過存儲(chǔ)服務(wù)290存儲(chǔ)已發(fā)現(xiàn)的依賴關(guān)系。可另選地,當(dāng)所預(yù)測(cè)的依賴關(guān)系工作項(xiàng)的影響超出可以接受的性能影響閾值時(shí),可以丟棄依賴關(guān)系工作項(xiàng)。當(dāng)技術(shù)不可知的攔截器管理器230從Java攔截器204接收到活動(dòng)工作項(xiàng)時(shí),Java 工作項(xiàng)管理器(例如,當(dāng)工作項(xiàng)管理器240是Java工作項(xiàng)管理器時(shí)的工作項(xiàng)管理器M0) 可以將活動(dòng)工作項(xiàng)添加到工作項(xiàng)隊(duì)列中(例如,當(dāng)工作項(xiàng)管理器240是Java工作項(xiàng)管理器時(shí)的工作項(xiàng)隊(duì)列M2)。工作項(xiàng)管理器上的工作項(xiàng)調(diào)度邏輯(例如,當(dāng)工作項(xiàng)管理器240是 Java工作項(xiàng)管理器時(shí)的工作項(xiàng)調(diào)度邏輯M4)可以基于所預(yù)測(cè)的活動(dòng)工作項(xiàng)對(duì)分布式應(yīng)用程序201的性能的影響來確定是否要調(diào)度活動(dòng)工作項(xiàng)以便執(zhí)行。當(dāng)所預(yù)測(cè)的活動(dòng)工作項(xiàng)的影響低于可以接受的性能影響閾值時(shí),工作項(xiàng)調(diào)度邏輯244可以調(diào)度活動(dòng)工作項(xiàng)以便在線程池220的前臺(tái)線程222或后臺(tái)線程224中的一個(gè)中執(zhí)行?;顒?dòng)管理器270可以通過將由 Java組件207作出的JDBC調(diào)用添加到活動(dòng)隊(duì)列觀0中來執(zhí)行活動(dòng)工作項(xiàng)。在將JDBC調(diào)用添加到活動(dòng)隊(duì)列觀0中之后,活動(dòng)管理器270可以通過存儲(chǔ)服務(wù)290來存儲(chǔ)JDBC調(diào)用??闪磉x地,當(dāng)所預(yù)測(cè)的活動(dòng)工作項(xiàng)的影響超出可以接受的性能影響閾值時(shí),可以丟棄活動(dòng)工作項(xiàng)。當(dāng)技術(shù)不可知的攔截器管理器230從WCF攔截器203接收到事件工作項(xiàng)時(shí),WCF工作項(xiàng)管理器(例如,當(dāng)工作項(xiàng)管理器240是WCF工作項(xiàng)管理器時(shí)的工作項(xiàng)管理器M0)可以將事件工作項(xiàng)添加到工作項(xiàng)隊(duì)列中(例如,當(dāng)工作項(xiàng)管理器240是WCF工作項(xiàng)管理器時(shí)的工作項(xiàng)隊(duì)列M2)。工作項(xiàng)管理器上的工作項(xiàng)調(diào)度邏輯(例如,當(dāng)工作項(xiàng)管理器240是WCF 工作項(xiàng)管理器時(shí)的工作項(xiàng)調(diào)度邏輯M4)可以基于所預(yù)測(cè)的事件工作項(xiàng)對(duì)分布式應(yīng)用程序 201的性能的影響來確定是否要調(diào)度事件工作項(xiàng)以便執(zhí)行。當(dāng)所預(yù)測(cè)的事件工作項(xiàng)的影響低于可以接受的性能影響閾值時(shí),工作項(xiàng)調(diào)度邏輯244可以調(diào)度事件工作項(xiàng)以便在線程池 220的前臺(tái)線程222或后臺(tái)線程224中的一個(gè)中執(zhí)行。然后,WCF組件206的身份監(jiān)測(cè)器 (例如,身份監(jiān)測(cè)器260中的一個(gè))可以通過將軟件異常報(bào)告到WCF組件206的身份監(jiān)測(cè)器的一個(gè)或多個(gè)客戶端來執(zhí)行事件工作項(xiàng)。可另選地,當(dāng)所預(yù)測(cè)的事件工作項(xiàng)的影響超出可以接受的性能影響閾值時(shí),可以丟棄該事件工作項(xiàng)??梢岳斫猓瑘D2的系統(tǒng)200包括節(jié)制功能以減輕監(jiān)測(cè)分布式應(yīng)用程序201的總體性能影響。例如,依賴關(guān)系管理器272可以通過將已發(fā)現(xiàn)的依賴關(guān)系緩存在依賴關(guān)系緩存觀2中并成批地存儲(chǔ)已發(fā)現(xiàn)的依賴關(guān)系來減少依賴關(guān)系存儲(chǔ)操作的數(shù)量,每一個(gè)依賴關(guān)系存儲(chǔ)操作都可能是耗時(shí)的。活動(dòng)管理器270可以通過將活動(dòng)信息排隊(duì)在活動(dòng)隊(duì)列觀0中并當(dāng)分布式應(yīng)用程序201相對(duì)空閑時(shí)(例如,在夜里或在周末)存儲(chǔ)排隊(duì)的活動(dòng)信息來降低活動(dòng)存儲(chǔ)操作的影響。垃圾回收器284可以通過解除分配不再處于使用中的監(jiān)測(cè)器來減少圖2的系統(tǒng)200的存儲(chǔ)器占用空間。工作項(xiàng)調(diào)度邏輯244可以限制同時(shí)執(zhí)行的工作項(xiàng)的數(shù)量。工作項(xiàng)調(diào)度邏輯244也可以調(diào)度工作項(xiàng)以便在線程池220中優(yōu)先級(jí)比分布式應(yīng)用程序 201的其他線程低的后臺(tái)線程中執(zhí)行。即,后臺(tái)線程將不會(huì)中斷其他執(zhí)行的線程以執(zhí)行調(diào)度的工作項(xiàng)。圖3是可以和諸如圖1的系統(tǒng)100或圖2的系統(tǒng)200之類的監(jiān)測(cè)分布式應(yīng)用程序的系統(tǒng)一起使用的身份監(jiān)測(cè)器320的特定實(shí)施例的框圖300。身份監(jiān)測(cè)器320可以是包括諸如組件監(jiān)測(cè)器330之類的一個(gè)或多個(gè)組件監(jiān)測(cè)器322的監(jiān)測(cè)樹的根。監(jiān)測(cè)樹也可以包括業(yè)務(wù)角度監(jiān)測(cè)器340、操作調(diào)用目標(biāo)端點(diǎn)監(jiān)測(cè)器370、計(jì)數(shù)器監(jiān)測(cè)器350以及儀器監(jiān)測(cè)器360 的一個(gè)或多個(gè)實(shí)例。在一說明性實(shí)施例中,身份監(jiān)測(cè)器320是圖2的身份監(jiān)測(cè)器沈0中的一個(gè)。身份監(jiān)測(cè)器320可以與分布式應(yīng)用程序的特定組件相關(guān)聯(lián)。例如,身份監(jiān)測(cè)器320 可以與圖1的組件110或120或圖2的組件205、206或207中的一個(gè)相關(guān)聯(lián)。身份監(jiān)測(cè)器320可包括身份監(jiān)測(cè)器320與其相關(guān)聯(lián)的組件的地址321。地址321可以是因特網(wǎng)協(xié)議 (IP)地址或任何其他地址。例如,身份監(jiān)測(cè)器320可包括圖1的.NET組件120的IP地址。 身份監(jiān)測(cè)器320也可以包括諸如組件監(jiān)測(cè)器330之類的一個(gè)或多個(gè)組件監(jiān)測(cè)器322。組件監(jiān)測(cè)器330可包括一個(gè)或多個(gè)活動(dòng)業(yè)務(wù)角度監(jiān)測(cè)器331,以及諸如業(yè)務(wù)角度監(jiān)測(cè)器340之類的一個(gè)或多個(gè)業(yè)務(wù)角度監(jiān)測(cè)器332。組件監(jiān)測(cè)器330也可以包括諸如操作調(diào)用目標(biāo)端點(diǎn)監(jiān)測(cè)器370之類的一個(gè)或多個(gè)操作調(diào)用監(jiān)測(cè)器333。諸如業(yè)務(wù)角度監(jiān)測(cè)器340之類的每一業(yè)務(wù)角度監(jiān)測(cè)器,都可以為特定業(yè)務(wù)角度 (即,特定消息源)存儲(chǔ)計(jì)數(shù)器和儀器數(shù)據(jù)。例如,業(yè)務(wù)角度監(jiān)測(cè)器340可以存儲(chǔ)將通過跟蹤從圖1的WCF組件110發(fā)送到圖1的.NET組件120的消息而生成的計(jì)數(shù)器和儀器數(shù)據(jù)。 當(dāng)消息是XML消息時(shí),業(yè)務(wù)角度監(jiān)測(cè)器340可包括可對(duì)消息執(zhí)行以標(biāo)識(shí)特定消息源的XML 路徑語言(XPATH)操作341。業(yè)務(wù)角度監(jiān)測(cè)器340也可以包括與特定消息源相關(guān)聯(lián)的名稱空間342。業(yè)務(wù)角度監(jiān)測(cè)器340也可以包括諸如計(jì)數(shù)器監(jiān)測(cè)器350之類的一個(gè)或多個(gè)計(jì)數(shù)器監(jiān)測(cè)器343。計(jì)數(shù)器監(jiān)測(cè)器350可以跟蹤特定事件在分布式應(yīng)用程序上的發(fā)生。計(jì)數(shù)器監(jiān)測(cè)器 350可包括跟蹤特定事件的計(jì)數(shù)器名稱351和與該計(jì)數(shù)器相關(guān)聯(lián)的配置352。例如,計(jì)數(shù)器監(jiān)測(cè)器350可以跟蹤在圖2的.NET組件205上發(fā)生的并由圖2的WCF組件206所引起的異常,并包括名稱351 "WCF — . NET異常計(jì)數(shù)器”。計(jì)數(shù)器監(jiān)測(cè)器350也可以包括諸如儀器監(jiān)測(cè)器360之類的一個(gè)或多個(gè)儀器監(jiān)測(cè)器353。諸如儀器監(jiān)測(cè)器360之類的每一儀器監(jiān)測(cè)器可以被配置成在特定時(shí)間點(diǎn)存儲(chǔ)特定計(jì)數(shù)器的值。例如,儀器監(jiān)測(cè)器360可以被配置成在特定時(shí)間點(diǎn)存儲(chǔ)“WCF — . NET異常計(jì)數(shù)器”的值。在一特定實(shí)施例中,儀器監(jiān)測(cè)器360包括特定計(jì)數(shù)器的當(dāng)前值361、特定計(jì)數(shù)器的當(dāng)前值狀態(tài)362、以及與該特定計(jì)數(shù)器相關(guān)聯(lián)的當(dāng)前窗口 363。儀器監(jiān)測(cè)器360也可以包括以前的值364、以前的值狀態(tài)365、以及前一窗口 366。當(dāng)前值狀態(tài)362和以前的值狀態(tài)365可包括指出特定計(jì)數(shù)器沒有被初始化的狀態(tài)、指出特定計(jì)數(shù)器被初始化但是沒有被讀取的狀態(tài)、指出特定計(jì)數(shù)器包含有效值的狀態(tài)、或指出特定計(jì)數(shù)器由于溢出包含不精確的值的狀態(tài)。在一特定實(shí)施例中,每當(dāng)特定計(jì)數(shù)器的值改變時(shí),即分配新的儀器監(jiān)測(cè)器。操作調(diào)用目標(biāo)端點(diǎn)監(jiān)測(cè)器370可以被配置成存儲(chǔ)涉及特定操作調(diào)用(例如,函數(shù)調(diào)用)的數(shù)據(jù)。在一特定實(shí)施例中,操作調(diào)用是分布式應(yīng)用程序的組件內(nèi)部的。例如,操作調(diào)用可以是圖1的.NET組件120上的內(nèi)部函數(shù)調(diào)用。可另選地,操作調(diào)用可以是分布式應(yīng)用程序的兩個(gè)組件之間的操作調(diào)用。例如,操作調(diào)用可以是具有圖1的WCF組件110上的源操作和圖1的.NET組件120上的目標(biāo)操作的函數(shù)調(diào)用。在一特定實(shí)施例中,操作調(diào)用目標(biāo)端點(diǎn)監(jiān)測(cè)器370是從對(duì)應(yīng)于端點(diǎn)監(jiān)測(cè)器320的軟件類繼承的軟件類的對(duì)象,以使得每一操作調(diào)用目標(biāo)端點(diǎn)監(jiān)測(cè)器包括諸如端點(diǎn)地址321和一個(gè)或多個(gè)操作監(jiān)測(cè)器322之類的端點(diǎn)監(jiān)測(cè)器320的特征。應(yīng)該注意,圖3所示出的特定監(jiān)測(cè)樹是WCF技術(shù)專用的。監(jiān)測(cè)樹可包括對(duì)于不同的技術(shù)的監(jiān)測(cè)器的不同的層次結(jié)構(gòu)??梢岳斫猓瑘D3的監(jiān)測(cè)樹可以被用來組織來自由技術(shù)專用的攔截器所生成的工作項(xiàng)的數(shù)據(jù),加速了對(duì)這樣的數(shù)據(jù)的檢索。例如,可以按照操作、按照業(yè)務(wù)角度、或按照計(jì)數(shù)器來組織來自特定攔截的消息的數(shù)據(jù)。當(dāng)攔截的消息指出操作調(diào)用時(shí),也可以按照操作調(diào)用來組織數(shù)據(jù)。圖4是示出了監(jiān)測(cè)分布式應(yīng)用程序(例如,圖1的分布式應(yīng)用程序102或圖2的分布式應(yīng)用程序201)的消息攔截的框圖400。在圖4中所示出的特定實(shí)施例中,攔截.NET 組件410和Java組件440之間的消息。在被附加到.NET組件410的.NET攔截器420上以及在被附加到Java組件440的Java攔截器430上攔截消息。在一說明性實(shí)施例中,.NET 組件410包括圖1的.NET組件110或圖2的.NET組件205,而Java組件440包括圖2的 Java 組件 207。 可以將.NET攔截器420附加到.NET組件410,以使得.NET組件410上的所有傳入和傳出的消息經(jīng)過.NET攔截器420。例如,可以將.NET攔截器420附加到.NET組件410 的.NET網(wǎng)絡(luò)接口 412。. NET組件410上的傳入和傳出的消息可以是XML消息,或者也可以是任何其他消息格式。
18
類似地,可以將Java攔截器430附加到Java組件440,以使得Java組件440上的所有傳入和傳出的消息經(jīng)過Java攔截器430。例如,可以將Java攔截器430附加到Java 組件440的Java網(wǎng)絡(luò)接口 442。Java組件440上的傳入和傳出的消息可以是XML消息,或者也可以是任何其他消息格式。在操作中,.NET組件410可以將消息460發(fā)送到Java組件440。消息460可以在.NET網(wǎng)絡(luò)接口 412處離開.NET組件410,并可以被附加到.NET網(wǎng)絡(luò)接口 412的.NET攔截器420攔截。在攔截消息460時(shí),.NET攔截器420可以檢查消息460,以試圖發(fā)現(xiàn).NET 組件410的依賴關(guān)系、跟蹤包括.NET組件410的特定執(zhí)行路徑中的活動(dòng)信息、或跟蹤特定事件在.NET組件410上的發(fā)生。在檢查攔截的消息460之后,.NET攔截器420可以將攔截的消息460發(fā)送到Java組件440。在到達(dá)Java組件440之前,可以再次攔截消息460,此時(shí)由Java攔截器430攔截。 Java攔截器430可以對(duì)攔截的消息460執(zhí)行類似的操作,如上文參考.NET攔截器420所描述的。例如,Java攔截器430也可以檢查消息460,以試圖發(fā)現(xiàn)Java組件440的依賴關(guān)系、 跟蹤包括Java組件440的特定執(zhí)行路徑中的活動(dòng)信息、或跟蹤特定事件在Java組件440 上的發(fā)生。應(yīng)該注意,在任何一個(gè)方向發(fā)送的消息都可以被攔截和檢查。例如,從Java組件 440發(fā)送到.NET組件410的第二消息470也可以被攔截和檢查,以發(fā)現(xiàn)依賴關(guān)系、跟蹤活動(dòng)信息、以及跟蹤事件發(fā)生。還應(yīng)注意,雖然圖4中所示出的特定實(shí)施例示出了被附加到兩個(gè)組件的攔截器,但是,甚至在兩個(gè)組件之間的消息路徑中只存在一個(gè)攔截器的情況下,也可以在兩個(gè)組件之間發(fā)現(xiàn)依賴關(guān)系。例如,當(dāng)Java攔截器430不存在時(shí),.NET組件410和 Java組件440之間的依賴關(guān)系仍然可以被.NET攔截器420發(fā)現(xiàn)。類似地,當(dāng)Java攔截器 430不存在時(shí),.NET組件410和Java組件440之間的依賴關(guān)系仍然可以被Java攔截器430 發(fā)現(xiàn)。可以理解,如圖4所示,消息攔截可以被用來監(jiān)測(cè)分布式應(yīng)用程序中與不同的技術(shù)(例如,· NET和Java)相關(guān)聯(lián)的組件。圖5是監(jiān)測(cè)分布式應(yīng)用程序的方法500的特定實(shí)施例的流程圖。在一說明性實(shí)施例中,方法500可以由圖1的系統(tǒng)100或圖2的系統(tǒng)200來執(zhí)行。方法500包括在502標(biāo)識(shí)分布式應(yīng)用程序的多個(gè)組件。例如,在圖1中,技術(shù)不可知的攔截器管理器130可以標(biāo)識(shí) WCF組件110和.NET組件120。方法500還包括在504標(biāo)識(shí)與多個(gè)組件中的特定組件相關(guān)聯(lián)的特定技術(shù)。例如,在圖1中,技術(shù)不可知的攔截器管理器130可以標(biāo)識(shí)WCF組件110與 WCF技術(shù)相關(guān)聯(lián)。方法500還包括在506基于所標(biāo)識(shí)的特定技術(shù)來將技術(shù)專用的攔截器附加到特定組件,使用附加的技術(shù)專用的攔截器來攔截由特定組件所發(fā)送的或接收到的消息。例如,在圖1中,技術(shù)不可知的攔截器管理器130可以將WCF攔截器112附加到WCF組件110,而WCF 攔截器112可以攔截由WCF組件110所發(fā)送的或接收到的消息。方法500還包括在508基于攔截的消息來生成至少一個(gè)潛在工作項(xiàng)。例如,在圖1中,WCF攔截器112可以基于攔截的消息來生成至少一個(gè)潛在工作項(xiàng)。方法500還包括在510確定是否要調(diào)度至少一個(gè)潛在工作項(xiàng)?;谒A(yù)測(cè)的至少一個(gè)潛在工作項(xiàng)對(duì)分布式應(yīng)用程序的性能的影響,作出此判斷。例如,在圖1中,WCF工作項(xiàng)調(diào)度邏輯144可以基于所預(yù)測(cè)的至少一個(gè)潛在工作項(xiàng)對(duì)分布式應(yīng)用程序102的性能的影響來確定是否要調(diào)度至少一個(gè)潛在工作項(xiàng)以便執(zhí)行??梢岳斫?,可以使用圖5的方法500來監(jiān)測(cè)跨各種組件分布的并且包括各種技術(shù)的分布式應(yīng)用程序。還可以理解,圖5的方法500可以通過不調(diào)度對(duì)分布式應(yīng)用程序的性能具有所預(yù)測(cè)的高度影響的工作項(xiàng),來降低這樣的監(jiān)測(cè)的總體性能影響。例如,圖5的方法 500可以通過限制排隊(duì)的工作項(xiàng)的數(shù)量來降低這樣的監(jiān)測(cè)的總體性能影響。因此,可以理解,圖5的方法500可以根據(jù)需求犧牲對(duì)于性能的監(jiān)測(cè)準(zhǔn)確性,以使得實(shí)時(shí)的、幾乎實(shí)時(shí)、或任務(wù)關(guān)鍵的分布式應(yīng)用程序的操作不被干擾。圖6是監(jiān)測(cè)分布式應(yīng)用程序的方法600的另一特定實(shí)施例的流程圖。在一說明性實(shí)施例中,方法600可以由圖1的系統(tǒng)100或圖2的系統(tǒng)200來執(zhí)行。方法600包括在602 標(biāo)識(shí)分布式應(yīng)用程序的多個(gè)組件。例如,在圖1中,技術(shù)不可知的攔截器管理器130可以標(biāo)識(shí)WCF組件110和.NET組件120。方法600還包括在604標(biāo)識(shí)與多個(gè)組件中的特定組件相關(guān)聯(lián)的特定技術(shù)。例如,在圖1中,技術(shù)不可知的攔截器管理器130可以標(biāo)識(shí)WCF組件110 與WCF技術(shù)相關(guān)聯(lián)。方法600還包括在606基于所標(biāo)識(shí)的特定技術(shù)來將技術(shù)專用的攔截器附加到特定組件,使用附加的技術(shù)專用的攔截器來攔截由特定組件所發(fā)送的或接收到的消息。例如,在圖1中,技術(shù)不可知的攔截器管理器130可以將WCF攔截器112附加到WCF組件110,而WCF 攔截器112可以攔截由WCF組件110所發(fā)送的或接收到的消息。方法600還包括在608基于攔截的消息來生成至少一個(gè)潛在工作項(xiàng)。例如,在圖1中,WCF攔截器112可以基于攔截的消息來生成至少一個(gè)潛在工作項(xiàng),并將該至少一個(gè)潛在工作項(xiàng)發(fā)送到技術(shù)專用的攔截器管理器,其中,該至少一個(gè)潛在工作項(xiàng)被插入WCF工作項(xiàng)隊(duì)列142中。方法600還包括在610計(jì)算所預(yù)測(cè)的至少一個(gè)潛在工作項(xiàng)對(duì)分布式應(yīng)用程序的性能的影響。預(yù)測(cè)的影響可以是對(duì)處理器使用率的影響、對(duì)消息延遲的影響、或?qū)?zhí)行隊(duì)列長度的影響。例如,在圖1中,工作項(xiàng)調(diào)度邏輯144可以計(jì)算所預(yù)測(cè)的至少一個(gè)潛在工作項(xiàng)的影響,其中,預(yù)測(cè)的影響是對(duì)分布式應(yīng)用程序102上的處理器使用率的影響、對(duì)分布式應(yīng)用程序102上的消息延遲的影響或?qū)Ψ植际綉?yīng)用程序102的執(zhí)行隊(duì)列長度的影響。方法600 還包括在612確定所預(yù)測(cè)的影響是否小于可以接受的性能影響閾值。例如,在圖1中,工作項(xiàng)調(diào)度邏輯144可以確定所預(yù)測(cè)的至少一個(gè)潛在工作項(xiàng)的性能影響是否小于可以接受的性能影響閾值。當(dāng)確定所預(yù)測(cè)的影響小于可以接受的性能影響閾值時(shí),該方法包括在614調(diào)度至少一個(gè)潛在工作項(xiàng)以便執(zhí)行,并執(zhí)行至少一個(gè)潛在工作項(xiàng)。例如,當(dāng)確定所預(yù)測(cè)的影響小于可以接受的性能影響閾值時(shí),WCF工作項(xiàng)調(diào)度邏輯144可以調(diào)度至少一個(gè)潛在工作項(xiàng)以便執(zhí)行,并可以執(zhí)行該至少一個(gè)潛在工作項(xiàng)。當(dāng)確定所預(yù)測(cè)的影響不小于可以接受的性能影響閾值時(shí),該方法包括在616丟棄該至少一個(gè)潛在工作項(xiàng)。例如,當(dāng)確定所預(yù)測(cè)的影響不小于可以接受的性能影響閾值時(shí),WCF工作項(xiàng)調(diào)度邏輯144可以通過從工作項(xiàng)隊(duì)列142中刪除該至少一個(gè)潛在工作項(xiàng)來丟棄它,而不調(diào)度該至少一個(gè)潛在工作項(xiàng)以便執(zhí)行??闪磉x地, 在圖1中,WCF工作項(xiàng)調(diào)度邏輯144可以允許至少一個(gè)潛在工作項(xiàng)保留在WCF工作項(xiàng)隊(duì)列 142中,其中,至少一個(gè)潛在工作項(xiàng)將自動(dòng)地過期??梢岳斫猓瑘D6的方法600可以被用來基于所預(yù)測(cè)的至少一個(gè)潛在工作項(xiàng)對(duì)分布
20式應(yīng)用程序的性能的影響來有選擇地調(diào)度至少一個(gè)潛在工作項(xiàng)以便執(zhí)行。還可以理解,可以從工作項(xiàng)隊(duì)列中刪除具有預(yù)測(cè)的高度性能影響的工作項(xiàng),為隨后接收到的工作項(xiàng)釋放工作項(xiàng)隊(duì)列中空間。圖7是監(jiān)測(cè)分布式應(yīng)用程序的方法700的另一特定實(shí)施例的流程圖。在一說明性實(shí)施例中,方法700可以由圖1的系統(tǒng)100或圖2的系統(tǒng)200來執(zhí)行。方法700包括在702 標(biāo)識(shí)分布式應(yīng)用程序的多個(gè)組件。例如,在圖2中,技術(shù)不可知的攔截器管理器230可以標(biāo)識(shí).NET組件205、WCF組件206、Java組件207或其任何組合。方法700還包括在704標(biāo)識(shí)與多個(gè)組件中的特定組件相關(guān)聯(lián)的特定技術(shù)。例如,在圖2中,技術(shù)不可知的攔截器管理器 230可以標(biāo)識(shí)WCF組件206與WCF技術(shù)相關(guān)聯(lián)。方法700還包括在706基于所標(biāo)識(shí)的特定技術(shù)來將技術(shù)專用的攔截器附加到特定組件,使用附加的技術(shù)專用的攔截器來攔截由特定組件所發(fā)送的或接收到的消息。例如,在圖2中,技術(shù)不可知的攔截器管理器230可以將WCF攔截器203附加到WCF組件206,而WCF 攔截器203可以攔截由WCF組件206所發(fā)送的或接收到的消息。方法700還包括在708基于攔截的消息來生成至少一個(gè)潛在工作項(xiàng)。例如,WCF攔截器203可以基于攔截的消息來生成至少一個(gè)潛在工作項(xiàng)。方法700還包括在710確定是否要調(diào)度至少一個(gè)潛在工作項(xiàng)以便執(zhí)行?;谒A(yù)測(cè)的至少一個(gè)潛在工作項(xiàng)對(duì)分布式應(yīng)用程序的性能的影響,來作出此判斷。例如,在圖2中,WCF工作項(xiàng)調(diào)度邏輯244可以基于所預(yù)測(cè)的至少一個(gè)潛在工作項(xiàng)對(duì)分布式應(yīng)用程序201的性能的影響來確定是否要調(diào)度至少一個(gè)潛在工作項(xiàng)以便執(zhí)行。方法700還包括在712計(jì)算涉及分布式應(yīng)用程序的至少一個(gè)度量,如所生成的異常的數(shù)量或報(bào)告的錯(cuò)誤的數(shù)量。例如,在圖2中,技術(shù)不可知的攔截器管理器230可以從 WCF攔截器203接收指出WCF組件206上的異常的工作項(xiàng),并對(duì)接收到的這樣的工作項(xiàng)的數(shù)量計(jì)數(shù)。在一特定實(shí)施例中,異??梢杂蓤D3的身份監(jiān)測(cè)器320之類的身份監(jiān)測(cè)器來計(jì)數(shù)。 方法700還包括在714檢測(cè)分布式應(yīng)用程序的故障情況。例如,可以檢測(cè)圖2的分布式應(yīng)用程序201的故障情況。方法700還包括在716基于至少一個(gè)度量將特定組件標(biāo)識(shí)為故障情況的潛在原因。例如,在圖2中,可以基于WCF組件206上的異常的數(shù)量將WCF組件206 標(biāo)識(shí)為分布式應(yīng)用程序201的故障情況的潛在原因??梢岳斫猓瑘D7的方法700可以被用來監(jiān)測(cè)分布式應(yīng)用程序的組件,并基于當(dāng)監(jiān)測(cè)特定組件時(shí)所生成的度量來將特定組件標(biāo)識(shí)為分布式應(yīng)用程序上的故障的潛在原因。如此,圖7的方法700可以縮短診斷并對(duì)分布式應(yīng)用程序上的故障情況作出響應(yīng)所花的時(shí)間。 還可以理解,當(dāng)監(jiān)測(cè)分布式應(yīng)用程序的組件時(shí)計(jì)算出的度量(例如,異常或錯(cuò)誤的數(shù)量)可以被用來預(yù)測(cè)和防止未來的故障事件。例如,當(dāng)由特定組件所生成的異常的數(shù)量增大時(shí),可以向IT管理員通知異常增多,以使得IT管理員可以在特定組件發(fā)生故障之前解決該特定組件上的任何問題。圖8是監(jiān)測(cè)分布式應(yīng)用程序的方法800的另一特定實(shí)施例的流程圖。在一說明性實(shí)施例中,方法800可以由圖1的系統(tǒng)100或圖2的系統(tǒng)200來執(zhí)行。方法800包括在802 標(biāo)識(shí)分布式應(yīng)用程序的多個(gè)組件。例如,在圖2中,技術(shù)不可知的攔截器管理器230可以標(biāo)識(shí).NET組件205、WCF組件206、Java組件207,或其任何組合。方法800還包括在804標(biāo)識(shí)與多個(gè)組件中的特定組件相關(guān)聯(lián)的特定技術(shù)。例如,在圖2中,技術(shù)不可知的攔截器管理器230可以標(biāo)識(shí)WCF組件206與WCF技術(shù)相關(guān)聯(lián)。
方法800還包括在806基于所標(biāo)識(shí)的特定技術(shù)將技術(shù)專用的攔截器附加到特定組件。例如,在圖2中,技術(shù)不可知的攔截器管理器230可以將WCF攔截器203附加到WCF組件206。方法800包括兩個(gè)路徑包括808、810、812以及814的用于事件監(jiān)測(cè)的路徑;以及包括816、818、820、822以及824的用于活動(dòng)監(jiān)測(cè)的路徑。在用于事件監(jiān)測(cè)的路徑中,方法800包括在808分配計(jì)數(shù)器監(jiān)測(cè)器以跟蹤特定事件的發(fā)生。例如,在圖2中,可以分配計(jì)數(shù)器監(jiān)測(cè)器以跟蹤WCF組件206上的異常,其中,計(jì)數(shù)器監(jiān)測(cè)器位于WCF組件206的身份監(jiān)測(cè)器(例如,身份監(jiān)測(cè)器沈0中的一個(gè))的監(jiān)測(cè)樹上。在一特定實(shí)施例中,已分配的計(jì)數(shù)器監(jiān)測(cè)器包括圖3的計(jì)數(shù)器監(jiān)測(cè)器350。方法800還包括在810攔截涉及技術(shù)專用的攔截器上的特定事件的消息。例如,在圖2中,WCF攔截器 203可以攔截指出在WCF組件206上發(fā)生異常的消息。方法800還包括在812生成指出特定事件的發(fā)生的工作項(xiàng)。例如,在圖2中,WCF攔截器203可以生成指出在WCF組件206上發(fā)生異常的工作項(xiàng)。方法800還包括在814向計(jì)數(shù)器監(jiān)測(cè)器的一個(gè)或多個(gè)客戶端報(bào)告特定事件的發(fā)生。在一特定實(shí)施例中,當(dāng)一個(gè)或多個(gè)客戶端輪詢計(jì)數(shù)器監(jiān)測(cè)器時(shí),可以報(bào)告特定事件的發(fā)生。例如,在圖2中,可以將異常在WCF組件206上的發(fā)生向WCF組件206的身份監(jiān)測(cè)器的一個(gè)或多個(gè)客戶端(例如,身份監(jiān)測(cè)器沈0中的一個(gè))報(bào)告。在用于活動(dòng)監(jiān)測(cè)的路徑中,方法800包括在816分配活動(dòng)監(jiān)測(cè)器以跟蹤沿著特定執(zhí)行路徑的活動(dòng)。例如,在圖2中,可以分配活動(dòng)業(yè)務(wù)角度監(jiān)測(cè)器以跟蹤沿分布式應(yīng)用程序 201的包括WCF組件206的特定執(zhí)行路徑的活動(dòng),其中,活動(dòng)業(yè)務(wù)角度監(jiān)測(cè)器位于WCF組件 206的端點(diǎn)監(jiān)測(cè)器(例如,端點(diǎn)監(jiān)測(cè)器沈0中的一個(gè))的監(jiān)測(cè)樹中。在一特定實(shí)施例中,活動(dòng)業(yè)務(wù)角度監(jiān)測(cè)器包括圖3的業(yè)務(wù)角度監(jiān)測(cè)器340。方法800還包括在818攔截涉及技術(shù)專用的攔截器上的特定執(zhí)行路徑的消息。例如,在圖2中,WCF攔截器203可以攔截指出沿著分布式應(yīng)用程序201的特定執(zhí)行路徑的活動(dòng)的消息。方法800還包括在820生成包括涉及特定執(zhí)行路徑的活動(dòng)信息的工作項(xiàng)。例如,圖2的WCF攔截器203可以生成包括涉及特定執(zhí)行路徑的活動(dòng)信息的工作項(xiàng)。方法800還包括在822將活動(dòng)信息存儲(chǔ)在活動(dòng)隊(duì)列中, 并在擬4通過存儲(chǔ)服務(wù)將活動(dòng)信息從活動(dòng)隊(duì)列傳輸?shù)酱鎯?chǔ)位置。例如,在圖2中,活動(dòng)管理器270可以將活動(dòng)信息存儲(chǔ)在活動(dòng)隊(duì)列觀0中,并可以隨后通過存儲(chǔ)服務(wù)290將活動(dòng)信息從活動(dòng)隊(duì)列280傳輸?shù)酱鎯?chǔ)位置。可以理解,圖8的方法800可以被用來監(jiān)測(cè)可能在分布式應(yīng)用程序中發(fā)生的諸如異常和錯(cuò)誤之類的事件。還可以理解,圖8的方法800也可以被用來沿著分布式應(yīng)用程序的特定執(zhí)行路徑跟蹤活動(dòng)。例如,圖8的方法800可以被IT管理員用來跟蹤沿著分布式應(yīng)用程序的執(zhí)行路徑錯(cuò)誤地或低效執(zhí)行的活動(dòng)。圖9是監(jiān)測(cè)分布式應(yīng)用程序的方法900的另一特定實(shí)施例的流程圖。在一說明性實(shí)施例中,方法900可以由圖1的系統(tǒng)100或圖2的系統(tǒng)200來執(zhí)行。方法900包括在902 標(biāo)識(shí)分布式應(yīng)用程序的多個(gè)組件。例如,在圖2中,技術(shù)不可知的攔截器管理器230可以標(biāo)識(shí).NET組件205、WCF組件206、Java組件207或其任何組合。方法900還包括在904標(biāo)識(shí)與多個(gè)組件中的特定組件相關(guān)聯(lián)的特定技術(shù)。例如,在圖2中,技術(shù)不可知的攔截器管理器 230可以標(biāo)識(shí)WCF組件206與WCF技術(shù)相關(guān)聯(lián)。方法900還包括在906基于所標(biāo)識(shí)的特定技術(shù)將技術(shù)專用的攔截器附加到特定組件。例如,在圖2中,技術(shù)不可知的攔截器管理器230可以將WCF攔截器203附加到WCF組件206。方法900還包括在908分配操作調(diào)用監(jiān)測(cè)器以跟蹤對(duì)特定組件上的特定函數(shù)的調(diào)用。例如,可以分配操作調(diào)用監(jiān)測(cè)器以跟蹤對(duì)WCF組件206的特定函數(shù)的調(diào)用,其中,操作調(diào)用監(jiān)測(cè)器位于WCF組件206的端點(diǎn)監(jiān)測(cè)器的監(jiān)測(cè)樹上(例如,端點(diǎn)監(jiān)測(cè)器沈0中的一個(gè))。 在一特定實(shí)施例中,所分配的操作調(diào)用監(jiān)測(cè)器可包括圖3的操作調(diào)用目標(biāo)端點(diǎn)監(jiān)測(cè)器370。方法900包括在910攔截由涉及特定函數(shù)的特定組件所發(fā)送的和接收到的消息。 例如,在圖2中,WCF攔截器203可以攔截由WCF組件206所發(fā)送的和接收到的消息,其中, 攔截的消息與特定函數(shù)相關(guān)聯(lián)。方法900還包括在912標(biāo)識(shí)特定函數(shù)的源操作和特定函數(shù)的目標(biāo)操作之間的依賴關(guān)系。例如,在圖2中,WCF攔截器203可以標(biāo)識(shí)特定函數(shù)的源操作和特定函數(shù)的目標(biāo)操作之間的依賴關(guān)系。在一特定實(shí)施例中,源操作和目標(biāo)操作位于分布式應(yīng)用程序201的不同的組件上(例如,源操作位于WCF組件206上,而目標(biāo)操作位于.NET 組件205上)。方法900還包括在916將依賴關(guān)系緩存在依賴關(guān)系緩存中。例如,在圖2中,依賴關(guān)系管理器272可以將依賴關(guān)系緩存在依賴關(guān)系緩存觀2中。方法900還包括在918確定依賴關(guān)系先前是否已經(jīng)被存儲(chǔ)。例如,圖2的依賴關(guān)系管理器272可以確定依賴關(guān)系先前是否已經(jīng)被存儲(chǔ)。當(dāng)依賴關(guān)系先前沒有被存儲(chǔ)時(shí),方法900包括在920通過存儲(chǔ)服務(wù)將依賴關(guān)系傳輸?shù)酱鎯?chǔ)位置。例如,在圖2中,依賴關(guān)系管理器272可以通過存儲(chǔ)服務(wù)290將依賴關(guān)系從依賴關(guān)系緩存282傳輸?shù)酱鎯?chǔ)位置。當(dāng)依賴關(guān)系先前已經(jīng)被存儲(chǔ)時(shí),方法900包括在922 不存儲(chǔ)依賴關(guān)系。例如,在圖2中,依賴關(guān)系管理器272可以從依賴關(guān)系緩存觀2中刪除依賴關(guān)系而不存儲(chǔ)依賴關(guān)系??梢岳斫猓梢允褂脠D9的方法900來發(fā)現(xiàn)分布式應(yīng)用程序中的各種源操作和目標(biāo)操作之間的依賴關(guān)系,包括組件之間的依賴關(guān)系。還可以理解,圖9的方法900可以通過只存儲(chǔ)先前沒有被存儲(chǔ)的已發(fā)現(xiàn)的依賴關(guān)系來降低這樣的依賴關(guān)系發(fā)現(xiàn)的性能影響。圖10是在技術(shù)不可知的攔截器管理器上有選擇地調(diào)度工作項(xiàng)的方法1000的特定實(shí)施例的流程圖。在一說明性實(shí)施例中,方法1000可以由圖1的技術(shù)不可知的攔截器管理器130或圖2的技術(shù)不可知的攔截器管理器230來執(zhí)行。方法100包括在1002在技術(shù)不可知的攔截器管理器處從被附加到分布式應(yīng)用程序的第一組件的第一技術(shù)專用的攔截器接收第一工作項(xiàng)。第一技術(shù)專用的攔截器是第一技術(shù)專用的,并且,第一組件與第一技術(shù)相關(guān)聯(lián)。例如,在圖1中,技術(shù)不可知的攔截器管理器130可以從被附加到分布式應(yīng)用程序102 中的WCF組件110的WCF攔截器112接收第一工作項(xiàng)。方法1000還包括在1004在技術(shù)不可知的攔截器管理器處從被附加到分布式應(yīng)用程序的第二組件的第二技術(shù)專用的攔截器接收第二工作項(xiàng)。第二技術(shù)攔截器是第二技術(shù)所專用的,第二組件與第二技術(shù)相關(guān)聯(lián),而第二技術(shù)不同于第一技術(shù)。例如,在圖1中,技術(shù)不可知的攔截器管理器130可以從被附加到分布式應(yīng)用程序102中的.NET組件120的.NET 攔截器122接收第二工作項(xiàng)。方法1000還包括在1006確定是否要調(diào)度第一工作項(xiàng)和第二工作項(xiàng)以便執(zhí)行?;诘谝还ぷ黜?xiàng)對(duì)分布式應(yīng)用程序的第一影響,并基于第二工作項(xiàng)對(duì)分布式應(yīng)用程序的預(yù)測(cè)的影響,來作出此判斷。例如,在圖1中,WCF工作項(xiàng)調(diào)度邏輯144可以基于第一工作項(xiàng)對(duì)分布式應(yīng)用程序102的第一影響來確定是否要調(diào)度第一工作項(xiàng),而.NET工作項(xiàng)調(diào)度邏輯IM可以基于第二工作項(xiàng)對(duì)分布式應(yīng)用程序102的第二影響來確定是否要調(diào)度第二工作項(xiàng)??梢岳斫?,圖10的方法1000可以被技術(shù)不可知的攔截器管理器(例如,圖1的技術(shù)不可知的攔截器管理器130或圖2的技術(shù)不可知的攔截器管理器230)用來基于所預(yù)測(cè)的工作項(xiàng)的影響,有選擇地調(diào)度工作項(xiàng)以便執(zhí)行。如此,可以攔截,圖10的方法1000可以被技術(shù)不可知的攔截器管理器用來避免干擾實(shí)時(shí)、幾乎實(shí)時(shí)、或關(guān)鍵分布式應(yīng)用程序的常規(guī)執(zhí)行。技術(shù)不可知的攔截器管理器可以不調(diào)度對(duì)實(shí)時(shí)、幾乎實(shí)時(shí)、或關(guān)鍵分布式應(yīng)用程序具有預(yù)測(cè)的高度影響的工作項(xiàng)。圖11是示出了分布式計(jì)算環(huán)境1100的特定實(shí)施例的一般圖。分布式計(jì)算環(huán)境 1100可包括分布式應(yīng)用程序1110,應(yīng)用程序1110包括一個(gè)或多個(gè)被監(jiān)測(cè)的應(yīng)用程序組件, 如被監(jiān)測(cè)的Web客戶端1111、被監(jiān)測(cè)的web服務(wù)器1112、被監(jiān)測(cè)的應(yīng)用程序服務(wù)器1113, 以及被監(jiān)測(cè)的數(shù)據(jù)庫服務(wù)器1114。分布式計(jì)算環(huán)境1100也可以包括可通信地耦合到分布式應(yīng)用程序1110的組件的管理服務(wù)器1120,以及根管理服務(wù)器1130、操作數(shù)據(jù)庫服務(wù)器 1140、以及數(shù)據(jù)倉庫服務(wù)器1150。在一特定實(shí)施例中,分布式計(jì)算環(huán)境1100還包括被配置成為分布式應(yīng)用程序1110生成監(jiān)測(cè)報(bào)告的報(bào)告服務(wù)器1160。在一說明性實(shí)施例中分布式應(yīng)用程序1110可包括圖1的分布式應(yīng)用程序102或圖2的分布式應(yīng)用程序201。管理服務(wù)器1120包括技術(shù)不可知的攔截器管理器,如圖1的技術(shù)不可知的攔截器管理器130或圖2的技術(shù)不可知的攔截器管理器230。管理服務(wù)器1120也可以與根管理服務(wù)器1130進(jìn)行通信。管理服務(wù)器1120可以存儲(chǔ)并從操作數(shù)據(jù)庫服務(wù)器1140和數(shù)據(jù)倉庫服務(wù)器1150檢索諸如依賴關(guān)系數(shù)據(jù)和活動(dòng)數(shù)據(jù)之類的信息。在一特定實(shí)施例中,管理服務(wù)器1120被配置成通過報(bào)告服務(wù)器1160來生成包括發(fā)現(xiàn)數(shù)據(jù)和依賴關(guān)系數(shù)據(jù)的監(jiān)測(cè)報(bào)告。在操作中,被監(jiān)測(cè)的Web客戶端1111、被監(jiān)測(cè)的web服務(wù)器1112、被監(jiān)測(cè)的應(yīng)用程序服務(wù)器1113,以及被監(jiān)測(cè)的數(shù)據(jù)庫服務(wù)器1114可以由一個(gè)或多個(gè)附加的技術(shù)專用的攔截器進(jìn)行監(jiān)測(cè)。技術(shù)特定攔截器也可以生成工作項(xiàng),并將工作項(xiàng)發(fā)送到管理服務(wù)器1120上的技術(shù)不可知的攔截器管理器。然后,管理服務(wù)器1120上的技術(shù)不可知的攔截器管理器可以基于所預(yù)測(cè)的對(duì)分布式應(yīng)用程序1110的影響,或基于所預(yù)測(cè)的對(duì)特定分布式應(yīng)用程序組件(例如,組件1111-1114中的一個(gè))的影響,有選擇地調(diào)度接收到的工作項(xiàng)以便執(zhí)行。可以理解,管理服務(wù)器1120可以監(jiān)測(cè)不同類型的分布式應(yīng)用程序組件(例如,Web 客戶端、web服務(wù)器、應(yīng)用程序服務(wù)器以及數(shù)據(jù)庫服務(wù)器)上的函數(shù)調(diào)用、活動(dòng)以及事件。圖12示出了根據(jù)本公開的計(jì)算環(huán)境1200的框圖,包括可以支持計(jì)算機(jī)實(shí)現(xiàn)的方法、計(jì)算機(jī)程序產(chǎn)品,以及系統(tǒng)組件的實(shí)施例的計(jì)算設(shè)備1210。計(jì)算設(shè)備1210通常包括至少一個(gè)處理器1220和系統(tǒng)存儲(chǔ)器1230。取決于計(jì)算設(shè)備的確切配置和類型,系統(tǒng)存儲(chǔ)器1230可以是易失性的(如隨機(jī)存取存儲(chǔ)器或“RAM”)、非易失性的(如只讀存儲(chǔ)器或“ROM”、閃存,以及甚至在不提供電源的情況下也能保留存儲(chǔ)的數(shù)據(jù)的類似的存儲(chǔ)器設(shè)備),或兩個(gè)的某種組合。系統(tǒng)存儲(chǔ)器1230通常包括操作系統(tǒng)1232、 一個(gè)或多個(gè)應(yīng)用程序平臺(tái)1234、一個(gè)或多個(gè)應(yīng)用程序1236,并可包括程序數(shù)據(jù)1238。例如, 系統(tǒng)存儲(chǔ)器1230可包括分布式應(yīng)用程序的一個(gè)或多個(gè)組件,如圖1的WCF組件110、圖2的 WCF組件206、圖1的.NET組件120、圖2的.NET組件205,或圖2的Java組件207。當(dāng)計(jì)算設(shè)備1210包括組件時(shí),計(jì)算設(shè)備1210也可以包括被附加到組件的一個(gè)或多個(gè)技術(shù)專用的攔截器。例如,計(jì)算設(shè)備1210可包括圖1的WCF攔截器112、圖2的WCF攔截器203、圖1的.NET攔截器122、圖2的.NET攔截器202,圖2的Java攔截器204。作為另一個(gè)示例, 系統(tǒng)存儲(chǔ)器1230可包括圖1的技術(shù)不可知的攔截器管理器130或圖2的技術(shù)不可知的攔截器管理器230。在一特定實(shí)施例中,分布式應(yīng)用程序(例如,圖1的分布式應(yīng)用程序102或圖2的分布式應(yīng)用程序201)可包括多個(gè)計(jì)算設(shè)備(例如,計(jì)算設(shè)備1210),而每一這樣的計(jì)算設(shè)備都可包括分布式應(yīng)用程序的一個(gè)或多個(gè)組件。計(jì)算設(shè)備1210還可具有附加特征或功能。例如,計(jì)算設(shè)備1210還可包括可移動(dòng)和/或不可移動(dòng)附加數(shù)據(jù)存儲(chǔ)設(shè)備,諸如磁盤、光盤、磁帶和標(biāo)準(zhǔn)大小的或微型閃存卡。在圖12中通過可移動(dòng)存儲(chǔ)1240和不可移動(dòng)存儲(chǔ)1250示出了這樣的附加存儲(chǔ)。計(jì)算機(jī)存儲(chǔ)介質(zhì)可包括以用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序組件或其他數(shù)據(jù)的信息的任何方法和/或技術(shù)實(shí)現(xiàn)的易失性和/或非易失性存儲(chǔ)器、可移動(dòng)和/或不可移動(dòng)介質(zhì)。系統(tǒng)存儲(chǔ)器1230、可移動(dòng)存儲(chǔ)1240和不可移動(dòng)存儲(chǔ)1250都是計(jì)算機(jī)存儲(chǔ)介質(zhì)的示例。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但不限于,RAM、R0M、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、閃存或其它存儲(chǔ)器技術(shù)、緊致盤(CD)、數(shù)字多功能盤(DVD)或其它光存儲(chǔ)、磁帶盒、磁帶、磁盤存儲(chǔ)或其它磁性存儲(chǔ)設(shè)備、或可用于存儲(chǔ)所希望的信息且可以由計(jì)算設(shè)備1210訪問的任何其它介質(zhì)。任何這樣的計(jì)算機(jī)存儲(chǔ)介質(zhì)都可以是計(jì)算設(shè)備1210的一部分。計(jì)算設(shè)備1210也可包括輸入設(shè)備1沈0,如鍵盤、鼠標(biāo)、筆、語音輸入設(shè)備、觸摸輸入設(shè)備等等。也可包括輸出設(shè)備1270, 如顯示器、揚(yáng)聲器、打印機(jī)等等。計(jì)算設(shè)備1210還包含一個(gè)或多個(gè)通信連接1觀0,它們?cè)试S計(jì)算設(shè)備1210通過有線或無線網(wǎng)絡(luò)與諸如一個(gè)或多個(gè)客戶端計(jì)算系統(tǒng)或其他服務(wù)器之類的其他計(jì)算設(shè)備1290 進(jìn)行通信。例如,一個(gè)或多個(gè)通信連接1280可包括圖5的網(wǎng)絡(luò)接口 512或討2。一個(gè)或多個(gè)通信連接1280是通信介質(zhì)的一個(gè)示例。作為示例而非限制,通信介質(zhì)可包括有線介質(zhì), 如有線網(wǎng)絡(luò)或直接線連接,以及諸如聲學(xué)、射頻(RF)、紅外線及其他無線介質(zhì)之類的無線介質(zhì)。然而,可以理解,并非所有圖12所示或以其他方式在先前的附圖中描述的組件或設(shè)備都必須支持此處所描述的實(shí)施例。這里所描述的實(shí)施例的說明旨在提供對(duì)各實(shí)施例的結(jié)構(gòu)的一般理解。說明不旨在作為利用這里所描述的結(jié)構(gòu)或方法的裝置和系統(tǒng)的所有元件和特征的完整描述。許多其他實(shí)施例對(duì)本領(lǐng)域的技術(shù)人員在審閱本發(fā)明后是顯而易見的。也可以利用其他實(shí)施例,并從本發(fā)明派生出其他實(shí)施例,以便可以在不偏離本發(fā)明的范圍的情況下作出結(jié)構(gòu)和邏輯上的替換和改變。相應(yīng)地,本發(fā)明和附圖應(yīng)被視為說明性的,而不是限制性的。本領(lǐng)域技術(shù)人員將進(jìn)一步理解,結(jié)合這里所說明的實(shí)施例所描述的各種說明性邏輯塊、配置、模塊、電路、以及算法步驟,可以作為電子硬件、計(jì)算機(jī)軟件或兩者的組合來實(shí)現(xiàn)。為清楚地示出硬件或軟件的此互換性,上文已經(jīng)一般地在功能方面描述了各種說明性組件、塊、配置、模塊、電路,以及步驟。此類功能集是被實(shí)現(xiàn)為硬件還是軟件取決于具體應(yīng)用和強(qiáng)加于整體系統(tǒng)的設(shè)計(jì)約束。技術(shù)人員可針對(duì)每種特定應(yīng)用以不同方式來實(shí)現(xiàn)所描述的功能集,但此類設(shè)計(jì)決策不應(yīng)被解釋為致使脫離本公開的范圍。結(jié)合此處所公開的各實(shí)施例所描述的方法的各個(gè)步驟可直接用硬件、由處理器執(zhí)行的軟件模塊、或兩者的組合來實(shí)現(xiàn)。軟件模塊可駐留在諸如隨機(jī)存取存儲(chǔ)器(RAM)、閃存、 只讀存儲(chǔ)器(ROM)、寄存器、硬盤、可移動(dòng)盤、⑶-ROM、或本領(lǐng)域內(nèi)已知的任何其他形式的存儲(chǔ)介質(zhì)等計(jì)算機(jī)可讀介質(zhì)中。示例性存儲(chǔ)介質(zhì)耦合到處理器以使得該處理器能從/向該存儲(chǔ)介質(zhì)讀取/寫入信息。在替換方案中,存儲(chǔ)介質(zhì)可以集成到處理器中,或者處理器和存儲(chǔ)介質(zhì)可以作為分立的元件駐留在計(jì)算機(jī)系統(tǒng)中。雖然這里顯示和描述了具體的實(shí)施例,但是,應(yīng)該了解,被設(shè)計(jì)為實(shí)現(xiàn)相同或類似的目的的任何隨后的安排都可以代替所示出的具體實(shí)施例。本說明書計(jì)劃涵蓋各種實(shí)施例的任何隨后的修改或變化。提交本發(fā)明的摘要的同時(shí)要明白,將不用它來解釋或限制權(quán)利要求的范圍或含義。此外,在前面的具體實(shí)施方式
中,出于將本公開連成一個(gè)整體的目的,各種特征可以組合到一起,或在一個(gè)實(shí)施例中進(jìn)行描述。本發(fā)明不應(yīng)被解釋為反映帶權(quán)利要求的實(shí)施例需要比每一個(gè)權(quán)利要求中明確地記載的特征更多的特點(diǎn)的意圖。相反,如下面的權(quán)利要求所反映的,本發(fā)明的主題可以涉及少于所公開的實(shí)施例中的任一個(gè)的所有特征。提供上文對(duì)所公開的實(shí)施例的描述,以使本領(lǐng)域技術(shù)人員能作出或使用所公開的實(shí)施例。對(duì)這些實(shí)施例的各種修改對(duì)于本領(lǐng)域技術(shù)人員將是顯而易見的,并且本文中定義的普適原理可被應(yīng)用于其他實(shí)施例而不會(huì)脫離本公開的范圍。因此,本發(fā)明并不旨在限于此處所示出的各實(shí)施例,而是按照與所附權(quán)利要求書所定義的原理和新穎特征相一致的盡可能最寬的范圍。
2權(quán)利要求
1.一種監(jiān)測(cè)方法,包括標(biāo)識(shí)(502)分布式應(yīng)用程序(102)的多個(gè)組件(110,120);標(biāo)識(shí)(504)與所述多個(gè)組件(110,120)中的特定組件(110)相關(guān)聯(lián)的特定技術(shù);基于所述所標(biāo)識(shí)的特定技術(shù),將技術(shù)專用的攔截器(112)附加(506)到所述特定組件 (110),并使用所述附加的技術(shù)專用的攔截器(112),攔截由所述特定組件(110)所發(fā)送的或接收到的消息;基于所攔截的消息,生成(508)至少一個(gè)潛在的工作項(xiàng);以及基于所預(yù)測(cè)的所述至少一個(gè)潛在的工作項(xiàng)對(duì)所述分布式應(yīng)用程序(10 的性能的影響,來確定(510)是否要調(diào)度所述至少一個(gè)潛在工作項(xiàng)以便執(zhí)行。
2.如權(quán)利要求1所述的方法,其特征在于,當(dāng)所預(yù)測(cè)的所述至少一個(gè)潛在工作項(xiàng)的影響低于可以接受的性能影響閾值時(shí),調(diào)度所述至少一個(gè)潛在工作項(xiàng)以便執(zhí)行,并且,其中, 當(dāng)所預(yù)測(cè)的所述至少一個(gè)潛在工作項(xiàng)的影響超出所述可以接受的性能影響閾值時(shí),不調(diào)度所述至少一個(gè)潛在工作項(xiàng)來執(zhí)行。
3.如權(quán)利要求1所述的方法,其特征在于,所預(yù)測(cè)的所述至少一個(gè)潛在工作項(xiàng)的影響指示對(duì)所述分布式應(yīng)用程序上的處理器使用率、所述分布式應(yīng)用程序上的消息延遲、所述分布式應(yīng)用程序上的執(zhí)行隊(duì)列長度或其任何組合的影響。
4.如權(quán)利要求1所述的方法,其特征在于,當(dāng)所述至少一個(gè)潛在工作項(xiàng)在工作項(xiàng)有效期內(nèi)未被調(diào)度時(shí)所述至少一個(gè)潛在工作項(xiàng)過期。
5.如權(quán)利要求1所述的方法,其特征在于,還包括執(zhí)行所述分布式應(yīng)用程序上的所述至少一個(gè)潛在工作項(xiàng),其中,所述至少一個(gè)潛在工作項(xiàng)包括存儲(chǔ)涉及所述分布式應(yīng)用程序的已發(fā)現(xiàn)的依賴關(guān)系信息的指令、存儲(chǔ)涉及所述分布式應(yīng)用程序的已監(jiān)測(cè)的活動(dòng)信息的指令、報(bào)告涉及所述分布式應(yīng)用程序的性能計(jì)數(shù)器信息的指令或其任何組合。
6.如權(quán)利要求5所述的方法,其特征在于,還包括基于所述攔截的消息,分配操作調(diào)用監(jiān)測(cè)器以跟蹤對(duì)特定組件上的特定函數(shù)的調(diào)用。
7.如權(quán)利要求6所述的方法,其特征在于,所述特定函數(shù)具有源操作和目標(biāo)操作,其中,所述至少一個(gè)潛在工作項(xiàng)指示所述源操作和所述目標(biāo)操作之間的依賴關(guān)系,并且,其中,執(zhí)行所述至少一個(gè)潛在工作項(xiàng)包括將所述依賴關(guān)系存儲(chǔ)在依賴關(guān)系緩存中。
8.如權(quán)利要求7所述的方法,其特征在于,還包括響應(yīng)于確定所述依賴關(guān)系先前沒有被存儲(chǔ),通過存儲(chǔ)服務(wù)將所述依賴關(guān)系從所述依賴關(guān)系緩存?zhèn)鬏數(shù)酱鎯?chǔ)位置。
9.如權(quán)利要求5所述的方法,其特征在于,還包括分配活動(dòng)監(jiān)測(cè)器以跟蹤所述特定組件上的特定執(zhí)行路徑的活動(dòng),其中,所述至少一個(gè)潛在工作項(xiàng)包括涉及所述特定執(zhí)行路徑的活動(dòng)信息,并且,其中,執(zhí)行所述至少一個(gè)潛在的工作項(xiàng)包括將所述活動(dòng)信息存儲(chǔ)在活動(dòng)隊(duì)列中。
10.如權(quán)利要求9所述的方法,其特征在于,還包括通過存儲(chǔ)服務(wù)將所述活動(dòng)信息從所述活動(dòng)隊(duì)列傳輸?shù)酱鎯?chǔ)位置。
11.如權(quán)利要求5所述的方法,其特征在于,還包括基于所述攔截的消息,分配計(jì)數(shù)器監(jiān)測(cè)器以跟蹤特定事件的發(fā)生,其中,所述至少一個(gè)潛在工作項(xiàng)指示所述特定事件的至少一次發(fā)生,并且,其中,執(zhí)行所述至少一個(gè)潛在工作項(xiàng)包括將向所述計(jì)數(shù)器監(jiān)測(cè)器的一個(gè)或多個(gè)客戶端報(bào)告所述特定事件的至少一次發(fā)生。
12.如權(quán)利要求1所述的方法,其特征在于,還包括計(jì)算涉及所述分布式應(yīng)用程序的至少一個(gè)度量,其中,所述至少一個(gè)度量包括生成的異常的數(shù)量、報(bào)告的錯(cuò)誤的數(shù)量、或其任何組合; 檢測(cè)所述分布式應(yīng)用程序的故障情況;以及基于所述至少一個(gè)度量,將所述特定組件標(biāo)識(shí)為所述故障情況的潛在原因。
13.一種監(jiān)測(cè)系統(tǒng),包括包括與第一技術(shù)相關(guān)聯(lián)的第一技術(shù)專用的攔截器(20 和與不同于所述第一技術(shù)的第二技術(shù)相關(guān)聯(lián)的第二技術(shù)專用的攔截器O03)的多個(gè)技術(shù)專用的攔截器;以及,技術(shù)不可知的攔截器管理器O30);其中,所述第一技術(shù)專用的攔截器(20 被配置成跟蹤與所述第一技術(shù)相關(guān)聯(lián)的第一分布式應(yīng)用程序組件O05)的操作,包括攔截由所述第一分布式應(yīng)用程序組件(20 所發(fā)送的和接收到的消息;基于所跟蹤的所述第一分布式應(yīng)用程序組件O05)的操作,生成工作項(xiàng);以及基于所跟蹤的所述第一分布式應(yīng)用程序組件O05)的操作,將所述工作項(xiàng)發(fā)送到所述技術(shù)不可知的攔截器管理器O30);其中,所述第二技術(shù)專用的攔截器(20 被配置成跟蹤與所述第二技術(shù)相關(guān)聯(lián)的第二分布式應(yīng)用程序組件O06)的操作,包括攔截由所述第二分布式應(yīng)用程序組件(206)所發(fā)送的和接收到的消息;基于所跟蹤的所述第二分布式應(yīng)用程序組件O06)的操作,生成工作項(xiàng);以及基于所跟蹤的所述第二分布式應(yīng)用程序組件O06)的操作,將所述工作項(xiàng)發(fā)送到所述技術(shù)不可知的攔截器管理器O30);以及其中,所述技術(shù)不可知的攔截器管理器(230)包括多個(gè)工作項(xiàng)管理器040),包括與所述第一技術(shù)專用的攔截器(20 相關(guān)聯(lián)的第一工作項(xiàng)管理器,以及與所述第二技術(shù)專用的攔截器(20 相關(guān)聯(lián)的第二工作項(xiàng)管理器;其中,每一工作項(xiàng)管理器(MO)都與特定技術(shù)專用的攔截器相關(guān)聯(lián),并被配置成 接收來自所述特定技術(shù)專用的攔截器的工作項(xiàng); 將所述接收到的工作項(xiàng)排隊(duì)在工作項(xiàng)隊(duì)列(M2)中;將由所述特定技術(shù)專用的攔截器跟蹤的特定工作項(xiàng)對(duì)分布式應(yīng)用程序組件的性能的影響與可以接受的性能影響閾值進(jìn)行比較;當(dāng)所述影響小于所述可以接受的性能影響閾值時(shí),調(diào)度所述特定工作項(xiàng)以便執(zhí)行;以及當(dāng)所述影響大于所述可以接受的性能影響閾值時(shí),丟棄所述特定工作項(xiàng),而不調(diào)度所述特定工作項(xiàng)來執(zhí)行。
14.如權(quán)利要求13所述的系統(tǒng),其特征在于,每一技術(shù)專用的攔截器還被配置成向其相關(guān)聯(lián)的工作項(xiàng)管理器請(qǐng)求空的工作項(xiàng),通過將信息存儲(chǔ)在所述空工作項(xiàng)中生成工作項(xiàng), 并將所生成的工作項(xiàng)發(fā)送到所述技術(shù)不可知的攔截器管理器。
15.如權(quán)利要求13所述的系統(tǒng),其特征在于,所述工作項(xiàng)管理器中的每一個(gè)還被配置成限制同時(shí)執(zhí)行的工作項(xiàng)的數(shù)量;限制所述工作項(xiàng)隊(duì)列的大??; 當(dāng)所述工作項(xiàng)隊(duì)列滿時(shí)拒絕接收到的工作項(xiàng);調(diào)度特定工作項(xiàng)以便在線程池的前臺(tái)線程中或在所述線程池的后臺(tái)線程中執(zhí)行;以及限制所述線程池的同時(shí)執(zhí)行的線程的數(shù)量。
全文摘要
公開了用于監(jiān)測(cè)分布式應(yīng)用程序的方法、系統(tǒng),以及計(jì)算機(jī)可讀介質(zhì)。一種特定方法標(biāo)識(shí)分布式應(yīng)用程序的多個(gè)組件。該方法還標(biāo)識(shí)與特定組件相關(guān)聯(lián)的特定技術(shù)并基于所標(biāo)識(shí)的特定技術(shù)來將技術(shù)專用的攔截器附加到特定組件。該方法包括使用技術(shù)專用的攔截器來攔截由特定組件所發(fā)送的或接收到的消息?;谒鶖r截的消息,生成至少一個(gè)潛在的工作項(xiàng)。該方法包括基于所預(yù)測(cè)的至少一個(gè)潛在的工作項(xiàng)對(duì)分布式應(yīng)用程序的性能的影響,來確定是否要調(diào)度該至少一個(gè)潛在工作項(xiàng)以便執(zhí)行。
文檔編號(hào)G06F17/00GK102369523SQ201080014022
公開日2012年3月7日 申請(qǐng)日期2010年3月19日 優(yōu)先權(quán)日2009年3月24日
發(fā)明者A·A·科埃略, A·J·薩格維, A·K·加內(nèi)桑, D·M·瑪哈簡(jiǎn), I·G·萊特卡, R·蘇達(dá)卡爾, V·S·K·庫拉帕蒂 申請(qǐng)人:微軟公司