專利名稱:使用遠程java對象分配程序的方法
技術領域:
本發(fā)明一般涉及計算機系統(tǒng)及具體地涉及一種用于管理計算機程序的執(zhí)行的系統(tǒng)和對系統(tǒng)的相應接口。此外,它涉及一種用于實施該系統(tǒng)及其相關接口的方法。
分布式處理涉及在多個計算機系統(tǒng)上完成計算機處理。在分布式處理中,每個系統(tǒng)完成一部分任務的處理。常規(guī)工作負荷管理系統(tǒng)對于分別處于一組合作的網(wǎng)絡節(jié)點之間的大型程序的分配是有利的。這些方法不論系統(tǒng)中現(xiàn)有其他程序的性能如何而用于使每個單個應用程序的性能優(yōu)化。此外,這些系統(tǒng)一般要求系統(tǒng)管理器的干預,用戶的輸入或?qū)τ嘘P程序性能和/或資源需求的預先了解,均勻系統(tǒng)度量和/或同機種平臺。因此,非常希望有一個能夠避免所有前述要求的負荷管理系統(tǒng)。此外,非常希望有一個靈活和可適應的系統(tǒng),用于分擔多機種網(wǎng)絡資源從而猶如計算機程序在單個工作站上單獨運行那樣地以分時方式執(zhí)行這些計算機程序。
現(xiàn)有將工作站加以群集的分布式處理方法依賴于與硬件或操作系統(tǒng)有關的與調(diào)試相關信息,例如交換的用戶數(shù)量,用戶隊列長度及頁面管理集合。因此也非常希望有一種分布式處理系統(tǒng),能夠以一種不可知論的態(tài)度動態(tài)地生成與不同平臺和操作系統(tǒng)的性能有關的統(tǒng)計數(shù)據(jù)。與此同時,也非常希望有能夠動態(tài)地參與群集中的附加的平臺和工作站。
當工作站網(wǎng)絡增大時,重要的是能夠利用網(wǎng)絡中到處都有的未利用的中央處理單元(CPU)資源。例如,Java通過在其自己的Java虛擬機(JVM)中運行代碼而有助于代碼的可移植性,該虛擬機對應用程序隱藏平臺細節(jié)。然而,當利用可移植代碼時,通常無法利用具體系統(tǒng)和平臺上的更有效的服務,因而在使用這類代碼時通常使性能變壞。例如,開發(fā)以供在任何地方運行的Java代碼可能無法利用一個具體平臺的獨一的硬件和/或軟件特征。因此非常希望有一種方法和系統(tǒng),用于允許在Java虛擬機中運行的對象獨一地識別其位置,而同時仍然在名稱和類型上與系統(tǒng)對象的其他分布式版本類似。也希望有一個工作單元,能夠利用平臺特征而仍然保持真正的系統(tǒng)不可知論。
進一步,其他現(xiàn)有方法要求系統(tǒng)編程員更新一個配置文件,分配軟件讀取該配置文件以便了解有關哪個工作站具有哪個具體硬件/軟件特征。此外,這些現(xiàn)有方法要求不同版本的系統(tǒng)應用程序,例如一個在操作系統(tǒng)A上運行的版本,另一個在版本B上運行的版本,另一個用于檢查硬件C是否可用的版本。因此,非常希望有一種方法和系統(tǒng),能夠完成分布式處理而不需要與具體工作站相關的具體配置信息。還非常希望有一種方法和系統(tǒng),能夠利用可用的具體配置信息。此外,也非常希望這一方法和系統(tǒng)能在任何平臺/版本/操作系統(tǒng)上運行應用程序的相同副本。
本發(fā)明旨在一種靈活的和可適應的系統(tǒng),用于分擔多機種網(wǎng)絡資源從而猶如計算機程序在單個工作站上單獨運行那樣地以有效的分時方式執(zhí)行這些計算機程序。本發(fā)明的方法和系統(tǒng)能夠分配任何Java負荷。本發(fā)明提供一種Java負荷管理器(JWLM),它是一種用于管理分布式多機種網(wǎng)絡節(jié)點以便滿足對分時和有效的服務的請求的需要的模型。在收到一個對服務和位置的請求后,JWLM將該請求分類為一個具體類型的服務和在邏輯隊列上進行工作的位置。路由隊列將該工作置于網(wǎng)絡中許多準備處理此類服務的可用節(jié)點中的一個之內(nèi)。選擇哪個節(jié)點放置該工作取決于所有感興趣的節(jié)點的統(tǒng)計數(shù)據(jù)、可用性和過去的性能。周期地改變該系統(tǒng)以便滿足對服務和/或保留的資源的需要。
本發(fā)明的JWLM能夠了解過程中程序的需要,從而不需要系統(tǒng)管理器的干預。此外,本發(fā)明的方法和系統(tǒng)不需要依賴于系統(tǒng)的具體量度,當然在選代實施例中也可能使用性能量度。
本發(fā)明還允許將對象分配并在分布式工作站上運行它們,猶如它們當初就在它們運行的機器上就地啟動一樣。對象通常是用于完成某些很具體的任務的小段程序碼。例如,可以將對象組合而成為一個復雜應用程序。每個對象是一個獨立代碼段,它可利用一個或多個與該對象通信的接口與其他對象組合。對象可以分配至不同計算機并使用一個或多個與對象的接口在網(wǎng)絡上彼此通信??梢酝ㄟ^工作站群集分配本發(fā)明的工作。所有送至不同工作站的工作具有相同類名。在一個具體工作站上,類路徑可能保持對象的不同實施。因此,在動態(tài)編譯期間,如一個平臺具有更有效的線程包或能夠利用更有效的存儲硬件設備,則可以使用更有效的特征來動態(tài)地編譯該工作單元。
在本發(fā)明中,工作單元在所有節(jié)點中都具有相同類名,當然它們的類路徑實施可能不同。此外,負荷管理軟件不必要了解一個具體工作站可能包括的具體特征。工作站的實施優(yōu)點是在動態(tài)編譯期間與工作單元聯(lián)編,允許工作站的分布式系統(tǒng)具有透明度。
下面參照附圖詳細地描述本發(fā)明的進一步特征和優(yōu)點以及本發(fā)明不同實施例的結構和操作。在附圖中,類似參考數(shù)字標示等同的或功能類似的元件。
現(xiàn)在參照附圖、通過例子描述本發(fā)明的優(yōu)選實施例,附圖中
圖1是用于闡述本發(fā)明的JWLM的部分的圖例;及圖2是一個實施例中本發(fā)明的流程圖。
此處以下名詞用于描述本發(fā)明。以下規(guī)定的名詞定義一般都對應于工業(yè)中所有名詞。
群集-一群計算機,協(xié)調(diào)工作,用作參加一個或多個任務的一個單元;分配-在一個系統(tǒng)的各節(jié)點之間共擔計算機程序的執(zhí)行;動態(tài)-在一個系統(tǒng)或應用程序的運行期間完成一個任務的能力;同機種-一群分享類似硬件和軟件配置的計算機;
多機種-一群或在硬件或在軟件配置上不同的計算機;節(jié)點-一個能夠執(zhí)行程序和在網(wǎng)絡上通信的計算機或處理器;資源-一個能對計算機程序執(zhí)行的完成作出貢獻的計算機或設備;線程-能夠或被安排在處理器上獨立地運行的計算機程序的一部分;負荷-準備執(zhí)行的程序數(shù)量的量度;工作站-一個能夠執(zhí)行程序和在網(wǎng)絡上通信的計算機;工作單元-表示一個客戶請求的邏輯實體。
在本發(fā)明的一個實施例中,Java負荷管理器(JWLM)劃分為兩個邏輯功能部分管理部分和執(zhí)行部分。這兩個邏輯功能部分合作以便在分布式環(huán)境中無縫地服務于請求。每個部分及其子部分將參照圖1在下面描述。圖1是用于描述根據(jù)本發(fā)明的一個實施例的JWLM各部分的圖100。在圖1中顯示本發(fā)明的系統(tǒng)的不同模塊以及不同模塊之間的信息流。應該知道,可以采用JVM以外的面向?qū)ο笃脚_來實施本發(fā)明。
管理部分如圖1中所示,從外部發(fā)出一個工作請求102,它被送至一個分類器104。分類器104發(fā)送此工作請求至合適的路由器106,后者然后將該工作請求102送至位于具體節(jié)點例如節(jié)點114、116的一個可用啟動器108a,…或,108z。當完成后,啟動器108a,…或,108z將可管理的對象和統(tǒng)計數(shù)據(jù)送回路由器以供后處理。策略管理器110向路由器模塊106a,…,106z查詢統(tǒng)計數(shù)據(jù)并在合適時候?qū)⒅噶钏椭料鄳?jié)點114、116處的節(jié)點管理器112、120。一個這類補救步驟可能包括由策略管理器110在一個可用節(jié)點114、116處啟動一個附加啟動器。選代地,策略管理器110可以增加附加路由器容量。
分類器在本發(fā)明的一個實施例中,分類器104負責接收對服務的工作請求及將任務賦予適合于此類工作的路由器106a,…,106z。分類器104保持一個可用路由器名單。如對于相同類型的工作有多于一個路由器可用,則分類器根據(jù)使用中的路由策略選擇一個。路由策略的一個例子包括一個在先來先服務的基礎上由啟動器108、118處的路由器106a,…,106z來調(diào)度工作。另一個例子可能包括啟動器108、118處的調(diào)度工作,其方式是在自路由器106接收工作時將優(yōu)先級給予最能響應的啟動器。為跟蹤它自己的性能,分類器104可能監(jiān)視其輸入隊列的長度以便避免成為系統(tǒng)瓶頸。策略管理器110還可以監(jiān)視分類器104以及其他部分并作出變動,包括增加分類器104的多線程級別。
在將分類器104實例化之前,策略管理器110自一個配置文件中讀取所有分類規(guī)范。配置文件中的信息特性包括工作類別,相關連的Java類名,路由器名稱和節(jié)點規(guī)范。還可以在運行期間動態(tài)地生成此信息。
分類器104通常允許個別地服務于相似類型的工作以便保證此類工作中的服務級別。對分類器104的接口包括以下功能并允許新工作與分布式系統(tǒng)中的現(xiàn)有負荷相關連。
newWork()-為一項新工作建立一個可管理對象并將它放置于合適的工作隊列即路由器中。
subWork()-某些對服務的請求可以劃分為數(shù)個較小半獨立服務。例如,一個對網(wǎng)頁的請求可能包括數(shù)個對其他個別網(wǎng)頁的請求。這些請求共享相同的工作單元。如在服務處理期間啟動器決定需要附加工作,則此接口由一個啟動器108a,…,108z,118a,…,118z調(diào)用。
工作單元是表示一個客戶請求的邏輯實體。客戶請求可能造成多個線程在不同過程例如數(shù)據(jù)庫組、事務監(jiān)視器或網(wǎng)絡過程中運行。多個線程都表示一個與客戶請求相關連的工作單元。因此,在本發(fā)明中,通過將多線程與一個工作單元關聯(lián)起來,本發(fā)明能夠追蹤一個客戶請求所啟動的所有資源。附加地,這類信息對于監(jiān)視器統(tǒng)計數(shù)據(jù)信息、事務上下文和安全流會是有用的。
工作路由器如所提到的,路由器106a,…,106z自分類器104接收工作。每個路由器106a,…,106z負責分配一個特定類型的工作。當與一個具體工作請求相關連的工作到達路由器106a,…,106z時,已經(jīng)收到一個對服務的請求的分類器104確定將要執(zhí)行的工作類。這種工作類的例子可能包括數(shù)據(jù)庫查詢,網(wǎng)絡請求或事務請求。分類器104也已經(jīng)確定該接收路由器是用于將此請求排隊以供執(zhí)行的合適位置。
本發(fā)明的路由器106a,…,106z允許多個虛擬機過程服務于輸入的工作。此外,路由器106a,…,106z不必位于同一平臺上。
在本發(fā)明的一個實施例中,路由器106a,…,106z保持數(shù)個隊列1)一個準備工作隊列,它包括一組已經(jīng)提交給路由器的工作;2)一個登記的啟動器隊列,它包括一組在路由器上登記的啟動器;3)一個調(diào)度工作隊列,它包括已經(jīng)派遣給啟動器而尚未返回的工作;4)啟動器工作隊列,它具有一組已經(jīng)與一個啟動器相關連并準備執(zhí)行的工作;5)執(zhí)行啟動器隊列,它包括一組當前正在執(zhí)行工作之中的啟動器;6)完成的工作隊列,它包括一組已經(jīng)完成但在等待后處理的工作;7)一個統(tǒng)計數(shù)據(jù)收集隊列,它包括一組已完成的準備從中提取統(tǒng)計數(shù)據(jù)的工作;及8)一個準備啟動器隊列,它具有一組等待派遣工作給它們的啟動器。這些相關連的路由器隊列允許在不同完成階段的工作流經(jīng)虛擬機的分布式系統(tǒng)而不產(chǎn)生任何瓶頸?,F(xiàn)在將在下面全面地描述每個隊列。
1)準備工作當分類器104賦予工作給路由器106a,…,106z時,分類器104將工作排在路由器的準備工作隊列中。路由器106a,…,106z跟蹤此隊列的長度并將它報告給策略管理器110。如此隊列長度在增長,則顯然沒有足夠的啟動器容量用于處理到達路由器106a,…,106z的工作數(shù)量;或存在某些原因以致路由器不能足夠快地派遣工作。此缺陷由策略管理器110注意到,并采取適當步驟收集必要資源以便減輕負擔。一個這類補救步驟可能包括由策略管理器110在可用的節(jié)點114、116處啟動一個附加啟動器。選代地,策略管理器110可以增加附加路由器的容量。
一旦路由器106a,…,106z派遣一個單元的工作至啟動器108a,…,108z,118a,…,118z后,在準備工作隊列中花費的時間和派遣的時間在與此工作相關連的對象中記錄下來。當此可管理的工作對象回至路由器106a,…,106z時,返回的時間也記錄下來,從而提供處理此工作請求所需全部時間。這些統(tǒng)計數(shù)據(jù)成為負責這些工作的路由器106a,…,106z以及啟動器108a,…,108z,118a,…,118z的統(tǒng)計數(shù)據(jù)的一部分。這些統(tǒng)計數(shù)據(jù)然后用于在工作站上以較大自由空間建立附加啟動器線程和/或過程。
2)登記啟動器在向路由器106a,…,106z登記工作之后,啟動器108a,…,108z,118a,…,118z的每個可用線程向路由器106a,…,106z標示它們準備接受工作。啟動器線程108a,…,108z,118a,…,118z然后在路由器106a,…,106z處按照由路由器排隊策略所確定的順序排隊。下面將要更詳細地描述實施的路由器排隊策略。此處啟動器線程108a,…,108z,118a,…,118z等待那些排隊等候處理的工作。
3)將工作派遣給啟動器每個路由器106a,…,106z優(yōu)化其啟動器隊列以使對下一個可用啟動器的選擇靠近隊列起點。當路由器106a,…,106z具有待處理的工作時,路由器106a,…,106z將此工作打包并將該打包的工作在準備得最好的啟動器處排隊。
4)在啟動器處將工作排隊在收到新工作已經(jīng)在其隊列中準備好的通知后,啟動器線程108a,…,108z,118a,…,118z開始處理輸入的工作。在一個實施例中,工作進至啟動器108a,…,108z,118a,…,118z,并帶有待執(zhí)行的局部Java類名稱以及傳送至執(zhí)行對象的參量。此類存在于啟動器的類路徑內(nèi)并由啟動器線程108a,…,108z,118a,…,118z實例化。在一個實施例中,路由器106a,…,106z可能傳送一個待分配的對象至啟動器線程108a,…,108z,118a,…,118z,該對象具有一個待執(zhí)行的方法或程序。啟動器線程108a,…,108z,118a,…,118z使用傳送的參量(如果有的話)來調(diào)用該方法或程序。
5)啟動器執(zhí)行工作單元一般而言,對象運行中生成的結果以及任何必要的通信由對象本身處理。哪個地方工作的相關連的類能夠執(zhí)行,該對象就能夠運行。其結果是,在工作分類中任何傾向都是隱式的。例如,如一個服務請求被分類為打印機工作,則顯然有一種最終在打印機上執(zhí)行的傾向。
6)完成時啟動器通知路由器當啟動器108a,…,108z,118a,…,118z處理的當今過程完成時,啟動器108a,…,108z,118a,…,118z與路由器106a,…,106z接觸??晒芾淼膶ο笤诼酚善魈幣抨犚怨┖筇幚?。作為此通信的一部分,啟動器108a,…,108z,118a,…,118z發(fā)送有關啟動器過程和啟動器線程108a,…,108z,118a,…,118z在其上運行的機器的性能信息。統(tǒng)計數(shù)據(jù)的收集可能對于硬件的操作系統(tǒng)是專用的。選代地,所用統(tǒng)計數(shù)據(jù)可能包括完成工作單元所需時間。這使JWLM平臺不可知。也可能包括例如有關頁面管理、CPU利用或I/O的統(tǒng)計數(shù)據(jù)。
附加地,啟動器線程108a,…,108z,118a,…,118z通知路由器它已經(jīng)完成對它賦予的任務。一般而言,此時啟動器108a,…,108z,118a,…,118z通知路由器它也準備自路由器106a,…,106z接受另一個任務。它通過將它自己在路由器的完成啟動器隊列中排隊并發(fā)送一個信號至路由器過程通知它完成的啟動器準備提供使用。
在一個實施例中,啟動器可能在通知路由器該啟動器準備作更多工作的步驟之外的步驟中標示它已經(jīng)完成任務。當判定一個完成的啟動器并不準備接受更多工作時,這樣將步驟分開是有用的。例如,啟動器108a,…,108z,118a,…,118z可能已經(jīng)自策略管理器110收到一個信號,即啟動器108a,…,108z,118a,…,118z安排為關機,或啟動器108a,…,108z,118a,…,118z在準備作更多工作之前可能具有某些后處理要完成。選代地,在另一個實施例中,為改進性能,可能合并這兩步以便減少啟動器108a,…,108z,118a,…,118z與路由器106a,…,106z之間的通信和同步的量。
7)路由器完成處理及收集統(tǒng)計數(shù)據(jù)由啟動器108a,…,108z,118a,…,118z送回的已經(jīng)完成的可管理的工作對象由路由器106a,…,106z處理。路由器106a,…,106z首先注意從調(diào)度到送回任務的接收的總響應時間而處理該完成的工作??傢憫獣r間可用于確定一個啟動器的性能及將啟動器性能分類。
在路由器106a,…,106z處注意到以上描述的與調(diào)度給啟動器108a,…,108z,118a,…,118z的工作相關的工作和其他啟動器性能。啟動器統(tǒng)計數(shù)據(jù)保存于一個由路由器106a,…,106z監(jiān)視的活動老化表內(nèi),同時可供策略管理器110使用。此表將以下信息老化來自每個啟動器108a,…,108z,118a,…,118z的平均響應時間以及路由器106a,…,106z專用信息,例如在相同期間內(nèi)的平均隊列長度。每次從啟動器108a,…,108z,118a,…,118z收到完成的工作時,即在路由器106a,…,106z處更新此表。
8)將啟動器劃分回至準備隊列中在路由器106a,…,106z處根據(jù)準備啟動器的過去性能將它們排隊。啟動器108a,…,108z,118a,…,118z在路由器的準備隊列內(nèi)排隊,以使性能最好的啟動器具有接受新任務的優(yōu)先級,因而靠近隊列起點。一般而言,熟悉技術的人所知道的計算機數(shù)據(jù)結構領域內(nèi)的任何排隊算法都可以用于在準備隊列內(nèi)將啟動器定位。
下面是與路由器的啟動器接口,用于允許新類型的工作由群集動態(tài)地服務,同時允許附加節(jié)點能夠在執(zhí)行工作中參加系統(tǒng)。
RegisterForWork()-促使一個啟動器向一個路由器登記由路由器提供的工作類型。當請求或完成分配的工作時,啟動器向路由器報告。由業(yè)務管理器設置啟動器類型。啟動器的類型可以包括數(shù)據(jù)庫,工資表或倉庫工作的JVM。
UnregisterForWork()-促使該啟動器不再與此路由器相關連。
ReadyForWork()-標示發(fā)出此調(diào)用的啟動器線程已準備好并等待處理一個來自此路由器的請求。雖然對于任何一個啟動器及其線程是集體地統(tǒng)計數(shù)據(jù)的,但啟動器的每個線程及工作分配卻是個別地對待的。
FinishedWork()-一個完成對一個工作請求的處理的啟動器現(xiàn)在向路由器標示此點。包括有關此請求的生命的有價值的信息的工作對象單元被送回至路由器。
執(zhí)行部件節(jié)點管理器在本發(fā)明的一個實施例中,能夠分享工作處理的每個節(jié)點114,116至少執(zhí)行一個節(jié)點管理器112,120。節(jié)點管理器112,120負責接收和處理在相應的節(jié)點114、116處開始和結束執(zhí)行啟動器108a,…,108z,118a,…,118z的請求。每個啟動器108a,…,108z,118a,…,118z在不同于節(jié)點管理器114、116的它自己的Java虛擬機126a,…,126z,128a,…,128z內(nèi)開始。啟動器108a,…,108z,118a,…,118z負責接收來自它已經(jīng)登記的路由器106a,…,106z的工作。節(jié)點管理器管理一個節(jié)點并在節(jié)點上將新虛擬機動態(tài)地增加或刪除以便執(zhí)行工作或一部分工作。
為了提供最大靈活性,節(jié)點114、116有能力廣播它們的可用性。這促使全局管理器122將它們增加到可用節(jié)點表中,使策略管理器110允許節(jié)點114、116具有由路由器106a,…,106z為它們安排的工作。
策略管理器110首先向節(jié)點管理器112、120標示一個開始啟動在系統(tǒng)中當今需要類型的啟動器的請求。節(jié)點管理器112、120開始啟動所需啟動器及啟動器108a,…,108z,118a,…,118z向規(guī)定的路由器106a,…,106z登記而進行響應。此能力允許工作站動態(tài)地使一個群集參加服務工作。
節(jié)點管理器的接口中的方法包括以下內(nèi)容。這些方法通過允許建立執(zhí)行給定工作的啟動器而便于動態(tài)地擴展和收縮節(jié)點。
CreateInitiator()-節(jié)點管理器接收啟動器向其報告的路由器的名稱及啟動器負責執(zhí)行的工作類型。
DestroyInitiator()-通知節(jié)點管理器以便將調(diào)用該方法中涉及的啟動器關閉。
Shutdown()-通知節(jié)點管理器以便在確認已經(jīng)拆除了該節(jié)點管理器所負責的啟動器之后將它自己關閉。
啟動器本發(fā)明包括一個或多個如108a,…,108z,118a,…,118z處所示的啟動器。這些啟動器的功能將參照數(shù)字識別符108a加以描述。然而應該理解,圖1中所示附加啟動器(…,108z,118a,…,118z)也能完成類似功能。此外,在以下描述中將參照圖中所示一個路由器106a。然而還應該知道,相同的描述同樣適用于本發(fā)明的其他路由器(…,106z)。
在實例化中,啟動器108a,…,108z,118a,…,118z向一個路由器106a,…,106z登記并且標示它們已經(jīng)準備接受工作進行處理。啟動器108a等待來自其路由器106a的工作并在接受后進行處理。路由器106a向啟動器108a發(fā)送將由啟動器108a實例化的對象類的名稱,送給此對象的任何參量及工作單元。啟動器108a將一個合適類型的對象實例化并等待此工作完成。當完成時,此工作單元連同其包裝一起送回至路由器106a,標示已經(jīng)完成該工作。該包裝可能包括來自啟動器108a的有關路由器106a可能跟蹤的性能的統(tǒng)計數(shù)據(jù)。在此處,啟動器108a準備接受更多工作并向路由器106a標示這一狀態(tài)。啟動器108a重復這個將自己排隊接受工作并完成工作的循環(huán),直至相關連的策略管理器110指示它去做其他事情。啟動器108a具有能力增加或減少數(shù)量。
允許在具有啟動器的節(jié)點上執(zhí)行工作的啟動器接口的方法包括以下內(nèi)容。
NewWork()-向準備啟動器提供一件新工作以及對執(zhí)行這類工作的類型和代碼的參考。命令啟動器記下JVM統(tǒng)計數(shù)據(jù)并在通知路由器已經(jīng)完成此工作后將它們送回至路由器。
AddInitiatorThread()-命令啟動器增加另一個啟動器線程至現(xiàn)有集合中。這遵循正常路徑Ready->Execute->Finish。
RemoveInitiatorThread()-命令啟動器停止執(zhí)行其當今執(zhí)行的線程中的一個并從存儲器中移走該啟動器。
SuspendInitiatorThread()-命令啟動器自可用于工作的當今線程組中移走一個線程但仍然保留該線程以備以后可能重新啟動。
WakeInitiatorThread()-命令啟動器重新啟動一個睡眠中的線程并送回它以備服務于處理工作。
圖2是本發(fā)明的一個實施例的流程圖。在步202,分類器接收一個工作請求。在步204,工作請求劃分為個別的任務,例如數(shù)據(jù)庫查詢,網(wǎng)絡處理和打印請求。在步206,每個任務分配至能夠處理特定任務的路由器的一個隊列中。在步208中,路由器確定下一個可用的準備執(zhí)行分配在它的隊列中的任務的啟動器。路由器可能通過查找其準備啟動器的隊列而確定啟動器。這些啟動器可能位于工作站群集中的不同節(jié)點內(nèi)。然后路由器分配工作給啟動器。
在步210,計算工作排隊與工作分配之間的時間間隔,并且如步212所示地,由策略管理器使用它以便在系統(tǒng)中增加或刪除資源。在步214,啟動器將一個執(zhí)行工作的對象實例化。雖然該對象使用由路由器傳送的通用類名實例化,但它可能具有對于啟動器位于其中的節(jié)點是專用的不同實施。本發(fā)明的這一特征允許利用系統(tǒng)專用資源。在步216,啟動器完成工作并向路由器報告。此時啟動器可以將它自己排列為一個準備的和可用的啟動器以供執(zhí)行下一個任務。附加地,啟動器向路由器報告包括硬件、操作系統(tǒng)和性能統(tǒng)計數(shù)據(jù)的系統(tǒng)專用信息。在218,這些統(tǒng)計數(shù)據(jù)用于確定最適合于最有效地處理一個專用任務的啟動器。所確定的信息然后用于分配隨后的任務至所確定的最合適的啟動器。
使用常數(shù)于對象位置確定在本發(fā)明中,不需要用于為運行分布式工作的工作站規(guī)定專用硬件/軟件特征的配置文件。在一個實施例中,本發(fā)明可能利用這類專用特征(如果它們存在的話)。如不存在這些特征,則本發(fā)明使用工作站上運行的實施代碼。此外,本發(fā)明允許一個應用程序的相同副本在任何平臺/版本/操作系統(tǒng)上運行。本發(fā)明包括在運行時間內(nèi)與工作單元一起動態(tài)地編譯的類路徑中的特定特征的邏輯。類路徑對工作站是獨一的,同時并不要求附加地設置此工作負荷分配。
本發(fā)明的JWLM可以實施于Java中及可以類似于一個Java虛擬機那樣地操作。然而應該理解,本發(fā)明也可利用其他已知編程語言和應用程序來實施。
雖然具體地結合本發(fā)明的優(yōu)選實施例顯示和說明了本發(fā)明,但熟悉技術的人應該理解,可在不背離本發(fā)明的實質(zhì)和范圍的情況下在形式和細節(jié)上在其中作出以上和其他改變。
權利要求
1.一種用于在分布式計算環(huán)境中服務于工作請求的工作負荷管理器,該工作負荷管理器包括一個位于一個或多個包括一群工作站的節(jié)點內(nèi)的管理模塊,該管理模塊響應于收到的工作請求,該工作請求要求傳輸?shù)谝恍盘栆员銌訄?zhí)行一個與該工作請求相關連的工作;一個位于一個或多個包括一群工作站的節(jié)點內(nèi)的執(zhí)行模塊,該執(zhí)行模塊響應于執(zhí)行該工作的信號,該執(zhí)行模塊傳輸一個第二信號至管理模塊以標示執(zhí)行工作的完成。
2.如權利要求1中所要求的工作負荷管理器,其中管理模塊包括一個分類器,響應于收到的要求分配與該工作請求相關連的工作的工作請求;一個或多個響應于分配一種類的工作的路由器,所述一個或多個路由器響應于由分類器分配的工作而傳輸?shù)谝恍盘栆员銌訄?zhí)行該工作。
3.如權利要求2中所要求的工作負荷管理器,其中管理模塊還包括一個策略管理器,響應于一個由分類器和所述一個或多個路由器處理的現(xiàn)有工作負荷而生成用于執(zhí)行現(xiàn)有工作負荷的分類器和所述一個或多個路由器的附加實例。
4.如權利要求3中所要求的工作負荷管理器,其中執(zhí)行模塊包括一個或多個啟動器,響應于執(zhí)行工作的第一信號,所述一個或多個啟動器傳輸?shù)诙盘栔了鲆粋€或多個路由器,以便標示執(zhí)行工作的完成。
5.如權利要求4中所要求的工作負荷管理器,其中所述管理模塊還包括一個或多個對象,由所述一個或多個啟動器實例化以便執(zhí)行該工作,所述對象具有相同名稱。
6.如權利要求5中所要求的工作負荷管理器,其中具有相同名稱的所述對象具有所述對象的不同實施。
7.如權利要求4中所要求的工作負荷管理器,其中所述一個或多個啟動器位于計算機網(wǎng)絡中的一個或多個節(jié)點內(nèi)。
8.如權利要求7中所要求的工作負荷管理器,其中所述一個或多個節(jié)點包括多機種節(jié)點。
9.如權利要求7中所要求的工作負荷管理器,其中執(zhí)行模塊生成與工作的執(zhí)行相關的統(tǒng)計數(shù)據(jù),該執(zhí)行模塊傳輸生成的統(tǒng)計數(shù)據(jù)至管理模塊。
10.如權利要求9中所要求的工作負荷管理器,其中所述統(tǒng)計數(shù)據(jù)包括與在所述一個或多個節(jié)點內(nèi)執(zhí)行的工作相關連的存儲器頁面管理信息。
11.如權利要求9中所要求的工作負荷管理器,其中所述統(tǒng)計數(shù)據(jù)包括所述一個或多個節(jié)點對中央處理單元(CPU)的利用。
12.如權利要求9中所要求的工作負荷管理器,其中所述統(tǒng)計數(shù)據(jù)包括所述一個或多個節(jié)點對輸入/輸出(I/O)的利用。
13.如權利要求9中所要求的工作負荷管理器,其中所述一個或多個路由器在所述一個或多個啟動器中的第一個啟動器上啟動工作,根據(jù)所述統(tǒng)計數(shù)據(jù)確定的所述第一個啟動器最適合于處理該工作。
14.如權利要求4中所要求的工作負荷管理器,其中該執(zhí)行模塊還包括一個或多個節(jié)點管理器,響應于來自第一信號的請求以便開始和結束所述一個或多個啟動器。
15.如權利要求2中所要求的工作負荷管理器,其中分類器分配工作給確定為能最好地處理該工作的所述一個或多個路由器。
16.如權利要求15中所要求的工作負荷管理器,其中分類器還將工作劃分為工作子組,并分配多個子組給確定為能最好地處理多個工作子組的所述一個或多個路由器。
17.如權利要求2中所要求的工作負荷管理器,其中所述一個或多個路由器還包括多個路由器隊列,用于允許將不同階段完成的工作進行排隊從而消除工作負荷管理器中的潛在瓶頸。
18.一種通過工作站群集提供有效的分布式處理的分配工作的方法,所述群集具有多個通過網(wǎng)絡互連的工作站,該方法包括接收一個工作請求;在工作站群集之間分配一個或多個與工作請求相關的任務;將一個或多個具有相同類名的對象實例化以便執(zhí)行所述一個或多個任務;及通知所述一個或多個任務的完成。
19.如權利要求18中所要求的通過工作站群集分配工作的方法,該實例化的步驟包括將一個或多個具有相同類名但不同實施的對象實例化以便執(zhí)行所述一個或多個任務。
20.如權利要求18中所要求的通過工作站群集分配工作的方法,該方法還包括收集與分配和執(zhí)行所述一個或多個任務的步驟相關的統(tǒng)計數(shù)據(jù)。
21.如權利要求20中所要求的通過工作站群集分配工作的方法,其中所述收集的統(tǒng)計數(shù)據(jù)包括與執(zhí)行所述一個或多個任務的節(jié)點有關的硬件相關信息。
22.如權利要求20中所要求的通過工作站群集分配工作的方法,其中所述收集的統(tǒng)計數(shù)據(jù)包括與執(zhí)行所述一個或多個任務的節(jié)點有關的操作系統(tǒng)相關信息。
23.如權利要求20中所要求的通過工作站群集分配工作的方法,其中所述收集的統(tǒng)計數(shù)據(jù)包括與執(zhí)行所述一個或多個任務的節(jié)點有關的性能統(tǒng)計數(shù)據(jù)。
24.如權利要求20中所要求的通過工作站群集分配工作的方法,該方法還包括根據(jù)所述收集的統(tǒng)計數(shù)據(jù)來在工作站群集中確定一個最適合于處理所述一個或多個任務的節(jié)點。
25.如權利要求24中所要求的通過工作站群集分配工作的方法,其中分配的步驟包括分配所述一個或多個任務給所述最適合于處理所述一個或多個任務的節(jié)點。
26.如權利要求18中所要求的通過工作站群集分配工作的方法,該方法還包括動態(tài)地增加一個新節(jié)點至工作站群集中。
27.如權利要求18中所要求的通過工作站群集分配工作的方法,該方法還包括從工作站群集中動態(tài)地移去一個舊節(jié)點。
28.如權利要求26中所要求的通過工作站群集分配工作的方法,該方法還包括自一個準備加入工作站群集的新節(jié)點中接收可用性的廣播,以及動態(tài)地增加的步驟包括動態(tài)地增加所述新節(jié)點至工作站群集中。
29.一種通過工作站群集提供有效的分布式處理的分配工作的方法,所述工作站群集具有多個通過網(wǎng)絡互連的工作站,該方法包括接收一個工作請求;將工作請求劃分為一個或多個任務;將所述一個或多個任務分配給一個或多個能夠處理所述一個或多個任務的路由器隊列;調(diào)度所述分配的一個或多個任務以供執(zhí)行;及確定與所述一個或多個路由器隊列相關連的性能統(tǒng)計數(shù)據(jù)。
30.如權利要求29中所要求的通過工作站群集分配工作的方法,該方法還包括計算所述分配的步驟與調(diào)度的步驟之間渡過的時間。
31.如權利要求29中所要求的通過工作站群集分配工作的方法,其中調(diào)度的步驟包括確定一個或多個最適合于執(zhí)行所述一個或多個任務的啟動器;及調(diào)度所述一個或多個任務給所述一個或多個最適合于執(zhí)行的啟動器。
32.如權利要求31中所要求的通過工作站群集分配工作的方法,其中該方法還包括根據(jù)所述一個或多個路由器隊列的性能統(tǒng)計數(shù)據(jù)來增加附加啟動器以便執(zhí)行所述一個或多個任務。
33.如權利要求31中所要求的通過工作站群集分配工作的方法,其中確定的步驟還包括從所述一個或多個啟動器中接收與所述一個或多個啟動器相關連的系統(tǒng)相關統(tǒng)計數(shù)據(jù),以便確定最適合于執(zhí)行所述一個或多個任務的所述一個或多個啟動器。
34.如權利要求31中所要求的通過工作站群集分配工作的方法,其中確定的步驟還包括計算所述一個或多個啟動器的性能統(tǒng)計數(shù)據(jù),以便確定最適合于執(zhí)行所述一個或多個任務的所述一個或多個啟動器。
35.如權利要求31中所要求的通過工作站群集分配工作的方法,其中該方法還包括在工作站群集上分配具有相同類名但不同實施的對象,所述一個或多個啟動器調(diào)用這些對象以便執(zhí)行所述一個或多個任務。
36.一種可由機器讀取的程序存儲設備,其中實際上埋嵌的一種可由機器執(zhí)行的指令程序用于完成通過工作站群集進行有效的分布式處理的分配工作的方法步驟,這些方法步驟包括接收一個工作請求;在工作站群集上分配與該工作請求相關的一個或多個任務;將一個或多個具有相同類名的對象實例化以便執(zhí)行一個或多個任務;收集與所述一個或多個任務的分配和執(zhí)行的步驟相關的統(tǒng)計數(shù)據(jù);通知所述一個或多個任務的完成。
37.如權利要求36中所要求的程序存儲設備,其中實例化的方法步驟包括將一個或多個具有相同類名但不同實施的對象實例化以便執(zhí)行一個或多個任務。
38.如權利要求36中所要求的程序存儲設備,該方法步驟還包括根據(jù)所述收集的統(tǒng)計數(shù)據(jù)來在工作站群集中確定一個最適合于處理所述一個或多個任務的節(jié)點。
全文摘要
一種用于管理分布式多機種網(wǎng)絡節(jié)點以便定時地和有效地滿足服務請求的要求的分布式Java虛擬機方法和系統(tǒng)。工作負荷管理器將收到的請求分類為特定類型的服務,將工作置于待執(zhí)行的邏輯隊列中。路由隊列將工作置于許多可用節(jié)點中的一個節(jié)點上。根據(jù)統(tǒng)計數(shù)據(jù)、可用性和過去性能將工作分配給各節(jié)點。周期性地改變系統(tǒng)以滿足對服務和/或保留資源的要求。本發(fā)明的JWLM不斷地了解程序的需要而不需要系統(tǒng)管理器的干預。
文檔編號G06F9/46GK1286426SQ00122678
公開日2001年3月7日 申請日期2000年8月15日 優(yōu)先權日1999年8月16日
發(fā)明者唐娜·N·第蘭博格, 馬克·弗朗西斯·哈爾博 申請人:國際商業(yè)機器公司