專利名稱:使用歷史度量程序性地確定請求分派的執(zhí)行模式的制作方法
技術(shù)領(lǐng)域:
本公開涉及中間件 領(lǐng)域,并且更具體地,涉及利用歷史度量程序性地(programmatically)確定請求分派的執(zhí)行模式。
背景技術(shù):
當(dāng)應(yīng)用服務(wù)器處理諸如Web應(yīng)用(例如,JAVA Servlet或JAVASERVER PAGE)的可執(zhí)行代碼時,Web應(yīng)用中可能存在一個或多個請求分派。這些請求分派通常由指定要執(zhí)行資源的includeO函數(shù)調(diào)用表示,諸如另一個servlet或JAVA SERVER PAGE (JSP)0指定的資源可被以異步或同步這兩種模式之一執(zhí)行。同步執(zhí)行通常導(dǎo)致可執(zhí)行代碼阻塞(例如,掛起),直到指定的資源執(zhí)行完成,這在許多情況下不能令人滿意。另外,資源可以包括附加請求分派,它們可能執(zhí)行其它資源,導(dǎo)致頻繁給Web應(yīng)用引入顯著等待時間的執(zhí)行鏈。從而,作為這種等待時間的結(jié)果,可能產(chǎn)生若干不利,這可以包括無響應(yīng)的應(yīng)用和/或過大的服務(wù)器負載。一種克服這些不利的解決方案是針對指定的資源采用異步執(zhí)行模式。然而,異步執(zhí)行引入開銷,例如建立新線程、在輸出中放置標(biāo)記、以及取代用于服務(wù)器或客戶端側(cè)聚集的標(biāo)記。在許多情況下,這種開銷會增加顯著減小異步執(zhí)行提供的性能增益的等待時間。例如,資源的同步執(zhí)行可能導(dǎo)致IOms的等待時間,而由于異步執(zhí)行引入的開銷(例如,線程設(shè)置代價),異步執(zhí)行相同資源可能導(dǎo)致20ms的等待時間。另外,在動態(tài)服務(wù)器環(huán)境中,由于資源可獲得性的改變,同步和異步資源執(zhí)行可以具有變化的結(jié)果。由于Web應(yīng)用通常部署在這些環(huán)境中,所以Web應(yīng)用的性能有波動。為了解決這些問題,Web開發(fā)者經(jīng)常進行哪種執(zhí)行模式會產(chǎn)生最佳性能結(jié)果的有根據(jù)的猜測。這些猜測經(jīng)常不會得到最優(yōu)應(yīng)用性能。從而,許多執(zhí)行Web應(yīng)用的服務(wù)器環(huán)境可能有不充分的資源使用和減少的放大器能力的問題,這無疑加重了信息技術(shù)(IT)基礎(chǔ)設(shè)施的負擔(dān)。
發(fā)明內(nèi)容
本公開的一個實施例包括一種用于分派請求的方法。在該方法中,可以識別在執(zhí)行時在第一可執(zhí)行代碼內(nèi)要執(zhí)行的請求分派。該請求分派可與唯一識別值相關(guān)聯(lián)。請求分派的唯一識別值可以標(biāo)識要執(zhí)行的第二可執(zhí)行代碼。第一和第二可執(zhí)行代碼可以駐留在Web容器的部件內(nèi)。該Web容器可以利用允許資源包括的任意各種技術(shù)。例如,Web容器可與運行時環(huán)境(例如,J2EE運行時環(huán)境)相關(guān)聯(lián)。在執(zhí)行第二可執(zhí)行代碼之前,可以確定第二可執(zhí)行代碼的執(zhí)行模式。該確定可以涉及評估性能度量和閾值中的至少一個。所述閾值可以是用戶建立的值和程序性建立的值中的至少一個。執(zhí)行模式可以是異步執(zhí)行模式或同步執(zhí)行模式。響應(yīng)于確定執(zhí)行模式,可以基于使用確定的執(zhí)行模式來執(zhí)行請求分派。同步執(zhí)行模式可以導(dǎo)致第一可執(zhí)行代碼在第二可執(zhí)行代碼的執(zhí)行開始之前執(zhí)行和完成。異步執(zhí)行模式可以導(dǎo)致同時執(zhí)行第一和第二可執(zhí)行代碼。公開的另一個實施例可以包括一種用于分派請求的系統(tǒng)。該系統(tǒng)可以包括能夠識別和執(zhí)行與第一可執(zhí)行代碼相關(guān)聯(lián)的請求分派的分派引擎。分派引擎可以是運行時環(huán)境內(nèi)的傳輸通道鏈的部件。該傳輸通道鏈可以與開放系統(tǒng)互連(OSI)層模型的傳輸層相關(guān)聯(lián)。該運行時環(huán)境可以是支持資源包括的任意環(huán)境。例如在一個實施例中,運行時環(huán)境可以是JAVA 2 ENTERPRISE EDITION(J2EE)運行時環(huán)境。該系統(tǒng)還可以包括與第一可執(zhí)行代碼相關(guān)聯(lián)的請求分派。請求分派可以與唯一識別值相關(guān)聯(lián)。該唯一識別值可以標(biāo)識要執(zhí)行的唯一資源。請求分派可以觸發(fā)唯一資源的執(zhí)行。唯一資源可以包括第二可執(zhí)行代碼。該系統(tǒng)還可以包括與請求分派相關(guān)聯(lián)的至少一個性能度量??梢栽谡埱蠓峙蓤?zhí)行過程中自動收集性能度量。該性能度量可被用于修改請求分派的執(zhí)行行為??梢源嬖谂渲脼榻⑴c請求分派相關(guān)聯(lián)的閾值、執(zhí)行模式和事件處理器中的至少一個的規(guī)則集。該閾值可以是用戶建立的設(shè)置或自動確定的值。執(zhí)行模式可以是同步執(zhí)行模式或異步執(zhí)行模式。同步執(zhí)行模式可以導(dǎo)致第一可執(zhí)行代碼與第二可執(zhí)行代碼順序執(zhí)行,而直到第一可執(zhí)行代碼完成其執(zhí)行,不允許第二可執(zhí)行代碼執(zhí)行。異步執(zhí)行模式可以導(dǎo)致同時運行第一和第二可執(zhí)行代碼。
現(xiàn)在參考附圖僅以示例的方式描述本發(fā)明的優(yōu)選實施例,附圖中圖I是例示了根據(jù)此處公開的發(fā)明布置的實施例的利用歷史度量程序性地確定請求分派的執(zhí)行模式的方法的流程圖;圖2是例示了根據(jù)此處公開的發(fā)明布置的實施例的利用歷史度量程序性地確定請求分派的執(zhí)行模式的可執(zhí)行代碼段和通信模型的框圖;圖3是例示了根據(jù)此處公開的發(fā)明布置的實施例的利用歷史度量程序性地確定請求分派的執(zhí)行模式的系統(tǒng)的框圖;圖4是例示了根據(jù)此處公開的發(fā)明布置的實施例的利用歷史度量程序性地確定請求分派的執(zhí)行模式的界面集合的框圖。
具體實施例方式本公開提供了在運行時利用歷史度量程序性地確定請求分派執(zhí)行模式的解決方案。即,請求分派器可以在以同步模式和異步模式處理請求分派(例如,includeO )之間自動且智能地切換。每個請求分派可與諸如進程ID或統(tǒng)一資源標(biāo)識符(URI)的唯一識別值、歷史度量和規(guī)則集相關(guān)聯(lián)。隨著請求分派的每次執(zhí)行,可以收集歷史度量。度量可以包括但不限于執(zhí)行持續(xù)時間和/或執(zhí)行頻率、處理器負載、存儲器使用、網(wǎng)絡(luò)輸入/輸出、相關(guān)請求分派數(shù)目等。利用歷史度量,可以構(gòu)建用于確定執(zhí)行請求分派的后續(xù)執(zhí)行的模式的規(guī)貝1J。例如,當(dāng)請求分派的同步執(zhí)行持續(xù)時間(例如,100ms)超過了用戶指定的持續(xù)時間(例如,50ms)時,可以按異步模式執(zhí)行請求分派的后續(xù)執(zhí)行。與請求分派相關(guān)聯(lián)的規(guī)則可以是用于確定適當(dāng)執(zhí)行模式的一個或多個任意復(fù)雜規(guī)則。從而,可以進一步改進Web應(yīng)用的運行時優(yōu)化。如本領(lǐng)域技術(shù)人員理解的,本發(fā)明可具體實現(xiàn)為系統(tǒng)、方法或計算機程序產(chǎn)品。因此,本發(fā)明可以具體實現(xiàn)為以下形式,即可以是完全的硬件、也可以是完全的軟件(包括固件、駐留軟件、微代碼等),還可以是硬件和軟件結(jié)合的形式,本文中一般都稱為“電路”、“模塊”或“系統(tǒng)”。此外,本發(fā)明還可以采取在一個或多個其上包括計算機可用程序代碼的任何有形表示介質(zhì)中體現(xiàn)的計算機程序產(chǎn)品的形式??梢圆捎靡粋€或多個計算機可用或計算機可讀的介質(zhì)的任意組合。計算機可用或計算機可讀介質(zhì)可以是例如但不限于,電、磁、光、電磁、紅外、或半導(dǎo)體的系統(tǒng)、裝置或器件。計算機可讀介質(zhì)的更具體的例子(非窮舉的列表)包括以下具有一個或多個導(dǎo)線的電連接、便攜式計算機盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊盤只讀存儲器(CDROM)、光存儲器件或磁存儲器件。計算機可讀介質(zhì)可以是非暫時存儲介質(zhì),其中數(shù)據(jù)被以數(shù)字編碼形式保存。計算機可讀介質(zhì)可以是能夠保持信息的物理的、有形存儲介質(zhì),所述信息可被計算裝置提取,以便獲得存儲在存儲介質(zhì)上的數(shù)據(jù)內(nèi)容??梢砸砸环N或多種編程語言的任意組合來編寫用于執(zhí)行本發(fā)明的操作的計算機程序代碼,所述編程語言包括面向?qū)ο蟮木幊陶Z言一諸如Java、Smalltalk、C++等,還包括常規(guī)的過程式編程語言一諸如“C”編程語言或類似的編程語言。程序代碼可以完全地 在用戶計算機上執(zhí)行,部分地在用戶計算機上執(zhí)行,作為一個獨立的軟件包執(zhí)行,部分在用戶計算機上部分在遠程計算機上執(zhí)行,或者完全在遠程計算機或服務(wù)器上執(zhí)行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網(wǎng)絡(luò)——包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)——連接到用戶計算機,或者,可以連接到外部計算機(例如,利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。下面將參照根據(jù)本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機程序產(chǎn)品的流程圖例示和/或框圖來描述本發(fā)明。應(yīng)當(dāng)理解,流程圖例示和/或框圖的每個塊以及流程圖例示和/或框圖中塊的組合,都可以由計算機程序指令實現(xiàn)。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機器,使得這些指令通過計算機的處理器或其它可編程數(shù)據(jù)處理裝置執(zhí)行,產(chǎn)生了實現(xiàn)流程圖和/或框圖中的一個或多個塊中規(guī)定的功能/動作的裝置。也可以把這些計算機程序指令存儲在能使得計算機或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計算機可讀介質(zhì)中,這樣,存儲在計算機可讀介質(zhì)中的指令就產(chǎn)生出一個包括實現(xiàn)流程圖和/或框圖中的一個或多個塊中規(guī)定的功能/動作的指令裝置的制造
品O也可以把計算機程序指令加載到計算機或其它可編程數(shù)據(jù)處理裝置上,使得在計算機或其它可編程裝置上執(zhí)行一系列操作步驟,以產(chǎn)生計算機實現(xiàn)處理,從而使得在計算機或其它可編程裝置上執(zhí)行的指令能夠提供實現(xiàn)流程圖和/或框圖中的一個或多個塊中規(guī)定的功能/動作的處理。圖I是例示了根據(jù)此處公開的發(fā)明布置的實施例的利用歷史度量程序性地確定請求分派的執(zhí)行模式的方法100的流程圖。在方法100中,可以按照機器確定的方式自動執(zhí)行與在應(yīng)用服務(wù)器(例如,JAVA 2ENTERPRISE EDITION應(yīng)用服務(wù)器)中執(zhí)行的識別出的可執(zhí)行代碼(例如,JAVA servlet)相關(guān)聯(lián)的請求分派。利用歷史度量,可以在運行時執(zhí)行請求分派確定,以便識別執(zhí)行模式異步或同步??蓤?zhí)行代碼可以是Web應(yīng)用的一個或多個部件,包括但不限于 servlet、JAVAserver page, JAVA bean、JAVA class (類)、portlet 等。例如,可執(zhí)行代碼可以是提供動態(tài)web內(nèi)容的JAVA web應(yīng)用。
方法100可以在任意數(shù)目的適合系統(tǒng)(例如,系統(tǒng)300)的環(huán)境中執(zhí)行。在本公開中,出于表述清楚和方便起見,提供了基于JAVA實現(xiàn)的例子。本公開的范圍不限于此,并且可以使用任意各種技術(shù)(包括非JAVA的技術(shù))實現(xiàn)此處詳述的發(fā)明布置,只要這些實現(xiàn)技術(shù)支持資源包括。例如,在一個實施例中,如此處詳述的,當(dāng)使用歷史度量確定請求分派的執(zhí)行模式時,可以利用.NET技術(shù)。如此處使用的,請求分派可以包括允許執(zhí)行開發(fā)者指定的資源的程序命令。在一個實施例中(例如,基于JAVA的實施例),請求分派可以是JAVA應(yīng)用程序接口(API)方法,例如includeO和forward O。請求分派可被使用一個或多個標(biāo)識機制唯一標(biāo)識,包括但不限于,進程ID、自動/手動代碼注釋、加標(biāo)簽、統(tǒng)一資源定位符(URL)標(biāo)識、唯一路徑標(biāo)識、唯一查詢串等。每個請求分派可與一個或多個歷史度量和允許基于應(yīng)用服務(wù)器性能的優(yōu)化請求分派的執(zhí)行模式設(shè)置相關(guān)聯(lián)。在步驟105,初始化Web容器內(nèi)的可執(zhí)行代碼??蓤?zhí)行代碼可以是在Web容器內(nèi)執(zhí) 行的Web應(yīng)用。Web容器可以是在JAVA 2ENTERPRISE EDITION(J2EE)應(yīng)用服務(wù)器(例如,JAVA VIRTUAL MACHINE (JVM))內(nèi)執(zhí)行的一個或多個構(gòu)造??梢愿鶕?jù)實現(xiàn)選擇和執(zhí)行方法100的目標(biāo)實現(xiàn)環(huán)境來利用其它服務(wù)器(例如,.NET服務(wù)器),而不是J2EE應(yīng)用服務(wù)器。在步驟110,識別與初始化的可執(zhí)行代碼相關(guān)聯(lián)的請求分派。識別出的分派可與要執(zhí)行的一個或多個資源相關(guān)聯(lián)。資源可以是一個或多個可執(zhí)行代碼對象,例如servlet、一個或多個JAVA SERVER PAGE (JSP) Web頁面等。在步驟115,如果存在用于識別出的分派的度量,方法可以繼續(xù)到步驟120,否則進行到步驟155。與識別出的分派相關(guān)聯(lián)的度量可以是一個或多個歷史度量。度量可以包括但不限于,執(zhí)行持續(xù)時間和/或執(zhí)行頻率、復(fù)雜度、處理器負載、存儲器使用、網(wǎng)絡(luò)輸入/輸出、相關(guān)識別出分派的數(shù)目等。例如,度量可以包括識別出的分派在確定的時間段上的平均執(zhí)行持續(xù)時間。另外,可以追蹤識別出的分派的每個執(zhí)行模式的度量,從而允許最優(yōu)決策形成功能。即,可以執(zhí)行對異步執(zhí)行模式和同步執(zhí)行模式的度量的評估,以便建立Web應(yīng)用的默認設(shè)置。在步驟120,如果識別出的分派的歷史度量超出了以前建立的閾值,該方法可以繼續(xù)到步驟125,否則進行到步驟140。例如,該閾值可以是諸如執(zhí)行持續(xù)時間的定時值。在一個實施例中,歷史執(zhí)行時間和閾值可被數(shù)字地比較,以便確定以哪個模式執(zhí)行識別出的分派。在缺少閾值的情況下,可以使用“最佳猜測”方法執(zhí)行識別出的分派。例如,通過分析類似的分派,可以程序性地得出允許智能執(zhí)行識別出的分派的閾值。在步驟125,向事件處理器注冊分派事件。在步驟130,以可以包括非阻塞代碼執(zhí)行的異步模式執(zhí)行識別出的分派。即,Web應(yīng)用可以繼續(xù)與識別出的分派同時執(zhí)行。在步驟135,可以收集識別出的分派的度量??梢岳靡粋€或多個度量收集部件來收集度量,諸如性能監(jiān)視代理。性能監(jiān)視代理可以包括但不限于負載監(jiān)視器、可執(zhí)行代碼優(yōu)化工具等。在步驟140,可以按同步模式執(zhí)行識別出的分派。在步驟147,可以為識別出的分派收集度量。在步驟145,可以為識別出的分派收集度量數(shù)據(jù)。在一個實施例中,度量數(shù)據(jù)可以包括識別出的度量的阻塞持續(xù)時間。在步驟150,如果完成了識別出的分派執(zhí)行,該方法可以繼續(xù)到步驟157,否則該方法可以返回步驟140。在步驟155,使用默認設(shè)置執(zhí)行識別出的度量,并且可以收集與該分派相關(guān)聯(lián)的度量。在步驟157,可以基于歷史度量可選擇地修改閾值。例如,修改可以包括隨時間增大/減小閾值。即,可以隨著收集歷史度量不斷改進運行時性能。在步驟160,如果可獲得與可執(zhí)行代碼相關(guān)聯(lián)的更多分派用于處理,方法可以返回步驟110,否則繼續(xù)到步驟165。在步驟165,可以終止對可執(zhí)行代碼的執(zhí)行。應(yīng)當(dāng)理解,方法100的公開步驟不應(yīng)被解釋為以任意方式限制本發(fā)明。方法100可被連續(xù)并且實時執(zhí)行,允許隨著應(yīng)用服務(wù)器資源可獲得性波動而動態(tài)優(yōu)化每個可執(zhí)行代碼。然而,為了避免對分派的可能降低性能的過度優(yōu)化,可以通過方法100可選擇地靜態(tài)地確定每個請求。在一個實施例中,可以按允許最小化計算資源的間隔執(zhí)行方法100。圖2是例示了根據(jù)此處公開的發(fā)明布置的實施例的利用歷史度量程序性地確定請求分派的執(zhí)行模式的可執(zhí)行代碼段210和通信模型230的框圖。在一個情況下,可執(zhí)行代碼段210可以是JAVA源代碼文件。此處可以使用基于其它(非JAVA)技術(shù)的其它類型的代碼段210,此處使用基于JAVA的例子,以便表達被解釋為與任意特定實現(xiàn)語言無關(guān)的概念。在可執(zhí)行代碼段210中,請求分派應(yīng)用程序接口(API)212可以允許基于一個或多個條 件(其包括但不限于,可用資源、性能歷史等),自動以優(yōu)化方式執(zhí)行請求分派。在一個實施例中,API 212可以是封裝已有請求分派器的包裝類。在另一個實施例中,API 212可以是對傳統(tǒng)請求分派器的“插入式(drop-in)”替換。S卩,已有的可執(zhí)行代碼可以保持不被修改,同時獲得API 212的性能益處。在一個實施例中,請求分派器244可以是允許請求分派的透明、動態(tài)模式執(zhí)行的傳輸通道鏈240的一個部件。利用API 212,應(yīng)用開發(fā)者可以允許基于可獲得的計算資源在運行時以最佳執(zhí)行模式處理請求分派214。在一個實施例中,API 212可以是IBM WEBSPHERE Web容器平臺的部件。例如,應(yīng)用開發(fā)者可以通過一個或多個導(dǎo)入指令(例如,“import com. ibm.Websphere, ffebcontainer. RequestDispatch”)訪問請求分派功能。請求分派214可以包括一個或多個參數(shù),以便允許定制執(zhí)行。在一個實施例中,自變量(例如,auto,500ms)可以允許應(yīng)用開發(fā)者控制請求分派行為的一部分。另外,API 212可以允許本地管理和監(jiān)視請求分派的功能,從而允許開發(fā)者保持對執(zhí)行代碼和運行時環(huán)境的控制。在一個實施例中,請求分派器244可以駐留在開放系統(tǒng)互連模型230的傳輸層232內(nèi)。分派器244可以透明地接收和分派HTTP 246請求給適當(dāng)?shù)腤eb容器242。從而,分派器244可以獨立于部署的應(yīng)用和應(yīng)用限制發(fā)揮功能。此處給出的附圖僅用于說明目的,并且不應(yīng)被解釋為以任何方式限制本發(fā)明。在一個實施例中,API 212可以對應(yīng)用開發(fā)者透明,從而請求分派語法可以與傳統(tǒng)語法相同。另外,API 212可以是給Web應(yīng)用自動提供功能的基本包的部件。即,應(yīng)用開發(fā)者不需要手動導(dǎo)入API 212的功能。圖3是例示了根據(jù)此處公開的發(fā)明布置的實施例的利用歷史度量程序性地確定請求分派的執(zhí)行模式的系統(tǒng)300的框圖。在系統(tǒng)300中,請求分派器340可以允許按自動確定的模式執(zhí)行與servlet 324相關(guān)聯(lián)的分派326。程序性確定的模式可以是同步執(zhí)行模式和異步執(zhí)行模式。在一個實施例中,自動確定的執(zhí)行模式可以傳統(tǒng)方式執(zhí)行。即,不需要分派行為的改變和/或開銷而使得分派器340能夠發(fā)揮功能。在一個實施例中,引擎342可以自動確定對于請求分派326的后續(xù)執(zhí)行的執(zhí)行模式。從而,響應(yīng)于服務(wù)器320的資源可用性,分派326的每個實例可以按同步或異步模式執(zhí)行。如此處使用的,每個servlet 324可通過請求分派326與一個或多個可執(zhí)行資源相關(guān)聯(lián)。Servlet 324 可以在 JAVA 2 ENTERPRISE EDITION(J2EE)應(yīng)用服務(wù)器 320 (或在其它構(gòu)想的實施例中,其它類型的服務(wù)器)的Web容器323內(nèi)執(zhí)行。Web容器323可以是動態(tài)運行時環(huán)境,例如JAVA VIRTUAL MACHINE運行時環(huán)境。例如,servlet324可以是Web應(yīng)用,其可以在瀏覽器界面312內(nèi)向進行請求的客戶端310呈現(xiàn)基于Web的內(nèi)容(例如,Web頁面)。每個請求分派326可與唯一識別值相關(guān)聯(lián),例如,進程ID或唯一關(guān)鍵字和/或資源標(biāo)識符(例如,統(tǒng)一資源定位符)。在一個實施例中,唯一關(guān)鍵字可以是自動產(chǎn)生的值(例如,由分派引擎342)或手動確定的值。在一個例子中,唯一識別值可被存儲為可被在編譯時提取的注釋(或甚至源代碼注釋)。Servlet 324可以接收請求380,請求380可以觸發(fā)請求分派326的執(zhí)行。當(dāng)運行時環(huán)境323遇到請求分派326時,可以分析分派326,以基于用戶指定的資源標(biāo)識符確定要執(zhí)行哪個資源。在一個實施例中,分派器340可以與另一個運行時環(huán)境(例如,在不同Web容器內(nèi)執(zhí)行的servlet)協(xié)商指定資源的執(zhí)行。請求分派器340可以基于一個或多個規(guī)則346和/或設(shè)置,唯一地識別和執(zhí)行分派326。即,分派器340可配置為適應(yīng)服務(wù)器320的資源可獲得性(例如,服務(wù)器負載)。請 求分派器340可以包括分派引擎342、度量引擎343、性能監(jiān)視器344、規(guī)則346和界面352。在一個實施例中,分派器340可以是Web容器323的可插入擴展。設(shè)置348可以是用戶建立的設(shè)置或自動確定的設(shè)置。例如,可以基于servlet 324的性能動態(tài)確定用于分派的默認超時值。分派引擎342可以處理分派326,并且使用歷史度量350程序性地確定適合的執(zhí)行模式。引擎342可以負責(zé)識別和/或執(zhí)行與分派326相關(guān)聯(lián)的本地和遠程資源。在遠程地執(zhí)行資源處理的情況下,引擎342可以將請求轉(zhuǎn)發(fā)給可以執(zhí)行處理的遠程處理器。在本地地執(zhí)行資源處理的情況下,引擎342可以管理請求分派326。度量引擎343可以收集與servlet 324和/或分派326相關(guān)聯(lián)的歷史度量。例如,可以在允許獲得高級別度量的servlet 324級別收集度量。在一個例子中,度量引擎343 可以實時地或近似實時地收集度量。例如,引擎343可配置為在最后Y秒追蹤最后X個分派326,其中X和Y是用戶可配置的。另外,度量引擎343可用于監(jiān)視Web容器323的實時性能,所述實時性能可以通過界面352給出。歷史度量350可以包括資源信息,例如等待時間、執(zhí)行模式和存儲器使用。歷史度量350可與每個分派326執(zhí)行相關(guān)聯(lián)。在一個實施例中,可以計算每個模式(例如,異步和同步)的度量,使得能夠評估每個模式的總度量。以這種方式,引擎343可以在執(zhí)行前為分派326計算適合的執(zhí)行模式。在另一個實施例中,與分派326相關(guān)聯(lián)的度量350可被聚集在一起,并且針對規(guī)則集360中的閾值(例如,規(guī)則360)進行評估。例如,可以將與異步執(zhí)行相關(guān)聯(lián)的存儲器代價與存儲器配額值(例如,閾值)進行比較,以便確定異步執(zhí)行的開銷是否是最優(yōu)選擇。在另一個例子中,可以將用于設(shè)置/無效異步環(huán)境的時間開銷與以前建立的閾值比較,以便確定應(yīng)當(dāng)使用哪個模式(異步或同步)。規(guī)則集346可以包括用于確定分派326的執(zhí)行模式的一個或多個任意復(fù)雜規(guī)則。規(guī)則集346可以是用戶建立的和/或可以啟發(fā)式確定的。在一個實施例中,多個度量可被一起評估,以便確定執(zhí)行模式。規(guī)則集346可以包括,但不限于,閾值、執(zhí)行模式以及與請求分派相關(guān)聯(lián)的事件處理器等。例如,閾值可以是用戶建立的設(shè)置或自動確定的值。規(guī)則集346還可以指定將要使用的聚集類型(例如,服務(wù)器側(cè)相對于客戶端側(cè)),其可用于準備請求382。當(dāng)分派326的執(zhí)行完成時,請求328可被產(chǎn)生并且通過網(wǎng)絡(luò)370傳遞給客戶端310。此處給出的附圖僅用于說明目的,并且不被解釋為以任意方式限制本發(fā)明。系統(tǒng)300可以是分布式 計算環(huán)境、網(wǎng)絡(luò)計算環(huán)境、面向服務(wù)的體系結(jié)構(gòu)(SOA)等的一個或多個部件。在一個實施例中,系統(tǒng)300可以是IBM WEBSPHERE APPLICATION SERVER的一個或多個部件。在另一個實施例中,系統(tǒng)300可以包括.NET框架(或允許出于此處描述的目的包括資源的任意其它框架)的一個或多個部件。圖4是例示了根據(jù)此處公開的發(fā)明布置的實施例的利用歷史度量程序性地確定請求分派的執(zhí)行模式的一組界面410、430的框圖。可以在系統(tǒng)300的環(huán)境中給出界面410、430。在界面410中,可以在部分412中呈現(xiàn)與在Web容器內(nèi)執(zhí)行的一個或多個Web應(yīng)用相關(guān)聯(lián)的請求分派。Web應(yīng)用可以是一個或多個可執(zhí)行代碼實體,例如JAVA servlet、JAVASERVER PAGE(JSP)等。在界面440中,可以呈現(xiàn)與請求分派412相關(guān)聯(lián)的度量。在一個實施例中,對請求分派和度量442的呈現(xiàn)可以實時發(fā)生,使得能夠容易地獲得執(zhí)行快照。界面410可以允許管理一個或多個正在執(zhí)行的請求分派和相關(guān)請求分派。界面410可以包括部分412、420和交互界面元素422、430、432。在界面410中,可以在部分412中呈現(xiàn)與請求分派414相關(guān)聯(lián)的信息。請求分派信息可以包括,但不限于,進程ID、執(zhí)行持續(xù)時間、執(zhí)行模式等。例如,部分412可以呈現(xiàn)與Servlet A相關(guān)聯(lián)的每個請求分派和相關(guān)分派。在一個實施例中,管理員可以選擇性地管理多組請求分派。界面410可以呈現(xiàn)附加信息,例如有效規(guī)則、性能度量等。與選擇的請求分派414相關(guān)聯(lián)的信息可被呈現(xiàn)在部分420內(nèi)。例如,與界面元素430交互可以呈現(xiàn)與請求分派相關(guān)聯(lián)的信息。在一個例子中,部分420可以允許修改諸如超時值、執(zhí)行模式等的請求分派值。即,當(dāng)自動優(yōu)化證明不成功時,可以實現(xiàn)對請求分派的實時手動優(yōu)化。在一個實施例中,界面410可以允許線程管理能力。例如,界面元素432可以允許終止選擇的請求分派。與界面元素422的交互可以呈現(xiàn)檢查界面440。界面440可以包括部分442,其可以呈現(xiàn)與選擇的請求分派414相關(guān)聯(lián)的度量。部分442可以包括歷史度量,例如處理器使用、執(zhí)行持續(xù)時間和存儲器使用。例如,部分442可以使用收集的歷史度量呈現(xiàn)請求分派的平均資源負載。在一個實施例中,可以按多個粒度級別呈現(xiàn)歷史度量。例如,可以基于天、星期、月等的遞增呈現(xiàn)歷史度量。此處給出的附圖僅用于說明目的,并且不應(yīng)被解釋為以任意形式限制本發(fā)明。在一個實施例中,界面410、440可以是JAVA 2ENTERPRISE EDITION優(yōu)化工具的一個或多個畫面。在另一個實施例中,界面410、440可以是集成開發(fā)環(huán)境(IDE)的部件。界面410、440可以是圖形用戶界面(GUI)、語音用戶界面(VUI)、多模式界面等。與界面410、440相關(guān)聯(lián)的界面元素可以包括,但不限于,交互式按鈕、下拉菜單、單選元素等。此處使用的術(shù)語僅是出于描述特定實施例的目的,并且不旨在限制本發(fā)明。如此處使用的,單數(shù)形式“一個”(“a”、“an ”和“the”)旨在也包括復(fù)數(shù)形式,除非上下文清楚地指出。還應(yīng)當(dāng)理解,當(dāng)在本說明書中使用時,術(shù)語“包括”(“comprise”和/或“comprising”)指出所述特征、整體、步驟、操作、元件和/或部件的存在,但是不排除一個或多個其它特征、整體、步驟、操作、元件、部件和/或它們的組的存在或添加。
下面權(quán)利要求書中所有裝置或步驟加功能元件的對應(yīng)結(jié)構(gòu)、材料、動作和等同物旨在包括用于結(jié)合特別提出的其它元件執(zhí)行該功能的任意結(jié)構(gòu)、材料或動作。已經(jīng)出于說明和描述的目的給出了本發(fā)明的描述,但是其不旨在是窮舉的或?qū)⒈景l(fā)明局限在公開的形式。本領(lǐng)域普通技術(shù)人員將明了許多修改和變型,而不脫離本發(fā)明的范圍。選擇和描述實施例,以便最好地解釋本發(fā)明的原理和實際應(yīng)用,并且使得本領(lǐng)域普通技術(shù)人員能夠理解本發(fā)明的適合于構(gòu)想的特定使用的具有各種修改的各種實施例。圖I至4的流程圖和框圖示出了根據(jù)本發(fā)明的各個實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系結(jié)構(gòu)、功能和操作。就此而言,流程圖或框圖中的每個塊可以表示代碼的模塊、段或部分,其可以包括用于實現(xiàn)指定的邏輯功能(多個)的一個或多個可執(zhí)行指令。還應(yīng)當(dāng)注意,在某些替換實現(xiàn)中,塊中標(biāo)明的功能可以不按圖中標(biāo)明的順序發(fā)生。例如,取決于涉及的功能,連續(xù)示出的兩個塊實際上可以大體并發(fā)地執(zhí)行,或這些塊有時可被以相反順序執(zhí)行。還應(yīng)當(dāng)注意,框圖和/或流程圖例示的每個塊以及框圖和/或流程圖例示的塊的組合可被以執(zhí)行特定功能或動作的基于專用硬件的系統(tǒng)或?qū)S糜布陀嬎銠C 指令的組合實現(xiàn)。
權(quán)利要求
1.一種用于分派請求的方法,包括 在運行時識別在第一可執(zhí)行代碼內(nèi)要執(zhí)行的請求分派,其中所述請求分派與識別值相關(guān)聯(lián),其中所述請求分派的識別值標(biāo)識要執(zhí)行的第二可執(zhí)行代碼; 在執(zhí)行所述第二可執(zhí)行代碼之前,確定執(zhí)行所述第二可執(zhí)行代碼的執(zhí)行模式,其中確定動作包括評估性能度量和閾值中的至少一個,其中所述閾值是用戶建立的值和程序性建立的值中的至少一個,其中所述執(zhí)行模式是異步執(zhí)行模式或同步執(zhí)行模式;以及 響應(yīng)于對執(zhí)行模式的確定,基于所述執(zhí)行模式執(zhí)行請求分派,其中同步執(zhí)行模式使得所述第一可執(zhí)行代碼停止并使得所述第二可執(zhí)行代碼啟動和完成,此后停止的第一可執(zhí)行代碼繼續(xù)執(zhí)行,并且其中異步執(zhí)行模式使得所述第一和第二可執(zhí)行代碼同時執(zhí)行。
2.如權(quán)利要求I所述的方法,其中,所述第一和第二可執(zhí)行代碼駐留在Web容器的部件內(nèi),其中所述Web容器與運行時環(huán)境相關(guān)聯(lián)。
3.如權(quán)利要求I所述的方法,其中,與所述請求分派相關(guān)聯(lián)的唯一識別值是自動產(chǎn)生的唯一識別值、統(tǒng)一資源標(biāo)識符(URI)、唯一路徑值和唯一查詢串中的至少一個。
4.如權(quán)利要求I所述的方法,其中,用于所述第一和第二可執(zhí)行代碼的執(zhí)行模式能夠在后續(xù)執(zhí)行過程中被動態(tài)調(diào)整,其中所述第一和第二可執(zhí)行代碼是JAVA servlet, JAVASERVER PAGE (JSP)、JAVABEAN和JAVA使能門戶組件中的至少一個。
5.如權(quán)利要求I所述的方法,所述對執(zhí)行模式的確定還包括 使用請求分派的歷史數(shù)據(jù)和它們的執(zhí)行時間來建立性能度量。
6.如權(quán)利要求I所述的方法,所述對執(zhí)行模式的確定還包括 當(dāng)所述性能度量未超出閾值時,同步執(zhí)行請求分派;以及 當(dāng)所述性能度量超出閾值時,異步執(zhí)行請求分派。
7.如權(quán)利要求I所述的方法,所述對請求分派的執(zhí)行還包括 響應(yīng)于請求分派的執(zhí)行性能,將與請求分派相關(guān)聯(lián)的模式設(shè)置從第一執(zhí)行模式切換到第二執(zhí)行模式,其中所述模式設(shè)置指示執(zhí)行所述請求分派的模式,其中所述模式是異步執(zhí)行模式和同步執(zhí)行模式中的至少一個,其中切換動作使得以第二執(zhí)行模式執(zhí)行請求分派的后續(xù)執(zhí)行。
8.如權(quán)利要求I所述的方法,其中,所述性能度量是與請求分派的歷史執(zhí)行相關(guān)聯(lián)的定時信息中的至少一個。
9.如權(quán)利要求I所述的方法,還包括 在請求分派的執(zhí)行過程中程序性地收集與請求分派器相關(guān)聯(lián)的至少一個性能度量,其中所述性能度量是資源分配值。
10.如權(quán)利要求I所述的方法,還包括 透明地封裝已有的分派API的功能,其中所述已有的分派API以同步執(zhí)行模式執(zhí)行請求分派,其中封裝允許異步或同步執(zhí)行請求分派。
11.一種用于分派請求的系統(tǒng),包括 分派引擎,該分派引擎能夠識別和執(zhí)行與第一可執(zhí)行代碼相關(guān)聯(lián)的請求分派,其中所述分派引擎是運行時環(huán)境內(nèi)的傳輸通道鏈的部件,其中所述傳輸通道鏈與開放系統(tǒng)互連(OSI)層模型的傳輸層相關(guān)聯(lián); 與所述第一可執(zhí)行代碼相關(guān)聯(lián)的請求分派,其中所述請求分派與唯一識別值相關(guān)聯(lián),其中所述唯一識別值標(biāo)識要執(zhí)行的唯一資源,其中請求分派觸發(fā)對所述唯一資源的執(zhí)行,其中所述唯一資源是第 二可執(zhí)行代碼; 與所述請求分派相關(guān)聯(lián)的性能度量,其中在請求分派執(zhí)行過程中自動收集所述性能度量,其中所述性能度量用于修改請求分派的執(zhí)行行為;以及 規(guī)則集,配置為建立與請求分派相關(guān)聯(lián)的閾值、執(zhí)行模式和事件處理器中的至少一個,其中所述閾值是用戶建立的設(shè)置或自動確定的值中的至少一個,其中執(zhí)行模式是同步執(zhí)行模式和異步執(zhí)行模式中的至少一個,其中同步執(zhí)行模式使得所述第一可執(zhí)行代碼停止并使得所述第二可執(zhí)行代碼啟動和完成,此后停止的第一可執(zhí)行代碼繼續(xù)執(zhí)行,并且其中異步執(zhí)行模式使得所述第一和第二可執(zhí)行代碼同時執(zhí)行。
12.如權(quán)利要求11所述的系統(tǒng),其中,與所述請求分派相關(guān)聯(lián)的唯一識別值是自動產(chǎn)生的唯一識別值、統(tǒng)一資源標(biāo)識符(URI)、唯一路徑值和唯一查詢串中的至少一個。
13.如權(quán)利要求11所述的系統(tǒng),還包括 性能監(jiān)視器,配置為識別唯一請求分派并且監(jiān)視識別出的請求分派的性能,其中實時執(zhí)行所述識別和監(jiān)視。
14.如權(quán)利要求11所述的系統(tǒng),還包括 允許用戶定制所述系統(tǒng)的用戶界面,其中定制是用戶建立的閾值、用戶建立的性能度量和用戶建立的執(zhí)行模式中的至少一個。
15.如權(quán)利要求11所述的系統(tǒng),其中,所述分派引擎能夠響應(yīng)于至少一個性能度量修改所述閾值。
16.一種計算機程序產(chǎn)品,包括計算機可讀存儲介質(zhì),所述計算機可讀存儲介質(zhì)具有包含在其內(nèi)的計算機可用程序代碼,所述計算機可用程序代碼包括 存儲在有形存儲介質(zhì)內(nèi)的計算機可用程序代碼,所述計算機可用程序代碼能操作為在運行時識別在第一可執(zhí)行代碼內(nèi)要執(zhí)行的請求分派,其中所述請求分派與唯一識別值相關(guān)聯(lián),其中所述請求分派的唯一識別值標(biāo)識要執(zhí)行的第二可執(zhí)行代碼; 存儲在有形存儲介質(zhì)內(nèi)的計算機可用程序代碼,所述計算機可用程序代碼能操作為在執(zhí)行所述第二可執(zhí)行代碼之前,確定執(zhí)行所述第二可執(zhí)行代碼的執(zhí)行模式,其中確定動作包括評估性能度量和閾值中的至少一個,其中所述閾值是用戶建立的值和程序性建立的值中的至少一個,其中所述執(zhí)行模式是異步執(zhí)行模式或同步執(zhí)行模式;以及 存儲在有形存儲介質(zhì)內(nèi)的計算機可用程序代碼,所述計算機可用程序代碼能操作為響應(yīng)于確定動作,基于所述執(zhí)行模式執(zhí)行請求分派,其中同步執(zhí)行模式使得所述第一可執(zhí)行代碼停止并使得所述第二可執(zhí)行代碼啟動和完成,此后停止的第一可執(zhí)行代碼繼續(xù)執(zhí)行,并且其中異步執(zhí)行模式使得所述第一和第二可執(zhí)行代碼同時執(zhí)行。
17.如權(quán)利要求16所述的計算機程序產(chǎn)品,其中,所述第一和第二可執(zhí)行代碼駐留在Web容器的部件內(nèi),其中所述Web容器與運行時環(huán)境相關(guān)聯(lián)。
18.如權(quán)利要求16所述的計算機程序產(chǎn)品,還包括 存儲在有形存儲介質(zhì)內(nèi)的計算機可用程序代碼,所述計算機可用程序代碼能操作為識別與所述請求分派相關(guān)聯(lián)的至少一個性能度量,其中所述性能度量是歷史度量,其中所述歷史度量是指示請求分派的歷史執(zhí)行的至少一個屬性的統(tǒng)計值。
19.如權(quán)利要求16所述的計算機程序產(chǎn)品,還包括存儲在有形存儲介質(zhì)內(nèi)的計算機可用程序代碼,所述計算機可用程序代碼能操作為響應(yīng)于請求分派的執(zhí)行性能,將與請求分派相關(guān)聯(lián)的模式設(shè)置從第一執(zhí)行模式切換到第二執(zhí)行模式,其中所述模式設(shè)置指示執(zhí)行所述請求分派的模式,其中所述模式是異步執(zhí)行模式和同步執(zhí)行模式中的至少一個,其中切換動作使得以第二執(zhí)行模式執(zhí)行請求分派的后續(xù)執(zhí)行。
20.如權(quán)利要求16所述的計算機程序產(chǎn)品,還包括 存儲在有形存儲介質(zhì)內(nèi)的計算機可用程序代碼,所述計算機可用程序代碼能操作為在請求分派的執(zhí)行過程中收集與請求分派器相關(guān)聯(lián)的至少一個性能度量,其中所述性能度量是資源分配值。
全文摘要
一種請求分派器可以在以同步模式和異步模式處理請求分派(例如,include())之間自動切換。每個分派可與諸如進程ID或統(tǒng)一資源標(biāo)識符(URI)的唯一識別值、歷史度量和規(guī)則集相關(guān)聯(lián)。隨著請求分派的每次執(zhí)行,可以收集歷史度量。度量可以包括,但不限于,執(zhí)行持續(xù)時間和/或執(zhí)行頻率、處理器負載、存儲器使用、網(wǎng)絡(luò)輸入/輸出、相關(guān)分派的數(shù)目等。使用歷史度量,可以構(gòu)造用于確定執(zhí)行分派的后續(xù)執(zhí)行的模式的規(guī)則。從而,可以進一步改進Web應(yīng)用的運行時優(yōu)化。
文檔編號G06F9/46GK102782652SQ201180011674
公開日2012年11月14日 申請日期2011年2月28日 優(yōu)先權(quán)日2010年3月1日
發(fā)明者C·J·霍華德, M·A·莫爾登豪爾, M·E·康希尼, S·J·肯納, S·R·佩特森 申請人:國際商業(yè)機器公司