專利名稱:對于具有可移動對象的啟用網格的虛擬機的方法和系統的制作方法
技術領域:
本發明涉及改進的數據處理系統,具體來說,涉及用于進行多計算機數據傳輸以及程序執行的方法和設備。
背景技術:
與因特網相關的和與Web相關的技術廣泛采用使得在物理上由成千上萬個單位和企業以及成千上萬的個人支持的互相連接的計算機組成的全球網絡得到迅猛的發展。近來,企業進行了許多努力,以將許多計算機的計算容量組織到網格中,網格是許多計算機的邏輯組織,用于提供計算容量和數據倉庫容量的集體共享,同時維護對單個計算機的本地自治控制。
例如,許多企業在由GGF,Inc.,支持的Global Grid ForumTM內進行合作,以為網格計算開發團體驅動的標準。Globus ProjectTM是一項由政府機構、公司和大學支持的項目,以開發與網格相關的技術,開發成功了開放式網格服務體系結構(OGSA),這是用于將網格概念包括在基于Web服務內的面向服務的框架內的倡議。GlobusToolkit是開放式網格服務體系結構的一種實現方式,它為開發啟用網格的應用程序提供了軟件編程工具,而JavaCommunity Grid(CoG)Kit是Globus Toolkit的組成部分,它通過Java框架提供了對網格服務的訪問。
雖然JavaCoG Kit在訪問網格服務時支持Java應用程序,但是,JavaCoG Kit不將網格的計算特征包括到Java虛擬機(JVM)中。因此,應該有一種將網格的計算特征包括在虛擬機內的方法、系統、設備和/或計算機程序產品。特別是應該在虛擬機內執行對象管理,以便虛擬機可以在動態地變化的網格計算環境內實現。
發明內容
一種方法、設備、計算機程序產品以及數據處理系統給虛擬機的操作提供了嵌入的功能,用于與計算網絡中的其他虛擬機進行交互操作。多個虛擬機在數據處理系統內的一個或多個設備上運行;多個虛擬機中的每一個虛擬機都包括以類似于網格的方式與虛擬機群集中的其他虛擬機進行交互操作和關聯的功能。虛擬機群集中的每一個虛擬機充當虛擬機群集內的節點。虛擬機對其與對象組相關聯的對象進行管理,每一個虛擬機都可以管理多個對象組。虛擬機共享信息,以便對象組可以在虛擬機群集中的虛擬機之間移動,從而允許虛擬機群集充當一個邏輯虛擬機。符合典型的應用程序模型的單個應用程序映像可以以這樣的方式在啟用網格的虛擬機群集內執行,以便允許應用程序的執行橫跨多個啟用網格的虛擬機的實例,從而可使應用程序的執行橫跨多個設備。
在所附的權利要求中闡述了本發明的新穎的特征。本發明本身,進一步的目標和優點,通過參考下面的詳細描述并參考附圖,將得到最好的理解,其中圖1A描述了數據處理系統的典型的網絡,其中每一個數據處理系統都可以實現本發明;圖1B描述了可以在其中可以實現本發明的數據處理系統內使用的典型的計算機體系結構;圖2描述了一個方框圖,該方框圖顯示了根據本發明的實施例的分布式數據處理系統中的虛擬機群集;圖3A描述了一個方框圖,該方框圖顯示了可以用來作為根據本發明的實施例的可群集化虛擬機來增強虛擬機的組件和/或信息;圖3B-3D描述了一組方框圖,該組方框圖顯示了對象組在群集化虛擬機之間的轉移;圖4描述了一個流程圖,該流程圖顯示了初始化主要gJVM節點的過程;
圖5A描述了一個流程圖,該流程圖顯示了在主要gJVM中向正在被初始化的非主要gJVM分配唯一gJVM標識符的過程;圖5B描述了一個流程圖,該流程圖顯示了在主要gJVM中向正在被初始化的非主要gJVM分配唯一gJVM標識符的另一個過程;圖6描述了一個流程圖,該流程圖顯示了在主要gJVM中向非主要gJVM分配唯一對象組標識符的過程;圖7描述了一個流程圖,該流程圖顯示了在主要gJVM中向非主要gJVM提供有關gJVM群集的信息的過程;圖8描述了一個流程圖,該流程圖顯示了在主要gJVM中改變非主要gJVM的運行狀態的過程;圖9描述了一個流程圖,該流程圖顯示了在主要gJVM中改變對象組的遷移狀態的過程;圖10描述了一個流程圖,該流程圖顯示了初始化非主要gJVM節點的過程;圖11描述了一個流程圖,該流程圖顯示了在群集化虛擬機上構建線程的過程;圖12描述了一個流程圖,該流程圖顯示了在群集化虛擬機上破壞線程的過程;圖13描述了一個流程圖,該流程圖顯示了在群集化虛擬機上構建對象的過程;圖14描述了一個流程圖,該流程圖顯示了在群集化虛擬機上處理對對象的訪問的過程;圖15描述了一個流程圖,該流程圖顯示了在本地群集化虛擬機上將對象組遷移到遠程群集化虛擬機的過程;圖16描述了一個流程圖,該流程圖顯示了在本地群集化虛擬機上從遠程群集化虛擬機接受對象組的遷移的過程;圖17描述了一個流程圖,該流程圖顯示了在本地群集化虛擬機上將線程遷移到遠程群集化虛擬機的過程;
圖18描述了一個流程圖,該流程圖顯示了在本地群集化虛擬機上從遠程群集化虛擬機接受線程的遷移的過程;圖19描述了一個流程圖,該流程圖顯示了在本地群集化虛擬機上對群集化虛擬機執行關閉操作的過程;圖20描述了一個流程圖,該流程圖顯示了在本地群集化虛擬機上從遠程群集化虛擬機收集負載或性能信息的過程;圖21描述了一個流程圖,該流程圖顯示了在本地群集化虛擬機上響應來自群集化虛擬機的對本地群集化虛擬機的當前負載或性能信息的請求的過程;圖22描述了一個流程圖,該流程圖顯示了本地群集化虛擬機上的根據負載或性能信息確定將線程和/或對象組從本地群集化虛擬機遷移到遠程群集化虛擬機的過程;以及圖23描述了一個方框圖,該方框圖顯示了通過多個設備橫跨單一邏輯虛擬機中的多個啟用網格的虛擬機的單個應用程序映像的執行。
具體實施例方式
一般而言,可以包括或涉及本發明的設備包括各式各樣的數據處理技術。因此,作為背景,在比較詳細地描述本發明之前,先描述分布式數據處理系統內的硬件和軟件組件的典型的組織。
現在參考附圖,圖1A描述了數據處理系統的典型的網絡,其中每一個數據處理系統都可以實現本發明的一部分。分布式數據處理系統100包含網絡101,這是可以用來在分布式數據處理系統100內的連接在一起的各個設備和計算機之間提供通信鏈路的媒介。網絡101可以包括諸如線路或光纖電纜之類的永久連接,或通過電話或無線通信建立的臨時連接。在所描述的示例中,服務器102和服務器103與存儲單元104一起連接到網絡101。此外,客戶端105-107也連接到網絡101。客戶端105-107和服務器102-103可以由諸如大型機、個人計算機、個人數字助理(PDA)等等各種各樣的計算設備來代表。分布式數據處理系統100可以包括更多的未顯示的服務器、客戶端,路由器,其他設備和對等體系結構。
在所描述的示例中,分布式數據處理系統100可以包括因特網,網絡101表示全世界的網絡和網關的集合,它們使用諸如輕型目錄訪問協議(LDAP)、傳輸控制協議/因特網協議(TCP/IP)、超文本傳輸協議(HTTP)、無線應用程序協議(WAP)等等協議彼此進行通信。當然,分布式數據處理系統100還可以包括許多不同類型的網絡,例如,內部網、局域網(LAN)或廣域網(WAN)。例如,服務器102直接支持客戶端109和網絡110,其中包括無線通信鏈路。支持網絡的電話111通過無線鏈路112連接到網絡110,PDA 113通過無線鏈路114連接到網絡110。電話111和PDA 113也可以使用諸如BluetoothTM無線技術之類的適當的技術跨無線鏈路115直接在其本身之間進行數據傳輸,以創建所謂的個人區域網絡(PAN)或個人專門網絡。同樣,PDA 113也可以通過無線通信鏈路116向PDA107傳輸數據。本發明可以在各種各樣的硬件平臺上實現。圖1A作為異構計算環境的示例,而不是對本發明作出體系結構的限制。
現在參考圖1B,該圖描述了諸如圖1A所示的其中可以實現本發明的數據處理系統的典型的計算機體系結構。數據處理系統120包含連接到內部系統總線123的一個或多個中央處理單元(CPU)122,總線123將隨機存取存儲器(RAM)124、只讀存儲器126,以及輸入/輸出適配器128(該適配器128支持諸如打印機130、磁盤單元132或諸如音頻輸出系統等等未顯示的其他設備)互相連接在一起。系統總線123還連接用于訪問通信鏈路136的通信適配器134。用戶接口適配器148連接諸如鍵盤140和鼠標142之類的各種用戶設備或諸如觸摸屏、筆尖、麥克風之類的未顯示的其他設備。顯示適配器144將系統總線123連接到顯示設備146。
那些本領域普通技術人員將認識到,圖1B中的硬件可以隨系統實現方式不同而不同。例如,系統可以具有諸如基于IntelPentium處理器之類的一個或多個處理器,數字信號處理器(DSP),以及一種或多種易失性和非易失性存儲器。除了圖1B中所描述的硬件之外,還可以使用其他外圍設備加以補充或來代替它們。所描述的示例不對本發明的體系結構作出限制。
除了能夠在各種各樣的硬件平臺上實現外,本發明還可以以各種各樣的軟件環境來實現。可以使用典型的操作系統來控制每一個數據處理系統內的程序執行。例如,一個設備可以運行Unix操作系統,而另一個設備可以包含簡單的Java運行時環境。典型的計算機平臺可以包括瀏覽器,這是著名的用于訪問各種各樣格式和語言的超文本文檔的軟件應用程序,如圖形文件、字處理文件、可擴展標記語言(XML)、超文本標記語言(HTML)、手持設備標記語言(HDML)、無線標記語言(WML),以及各種其他格式和類型的文件。
虛擬機群集/網格如上文參考圖1A和圖1B所述的,本發明可以在各種各樣的硬件和軟件平臺上實現。具體來說,如參考其余的圖所描述的,本發明旨在提供一種改進的虛擬機,該虛擬機包括改進的虛擬機內的網格的計算特征,以便改進的虛擬機可以以類似于網格的方式與類似的改進的虛擬機進行交互。雖然下面的附圖被描述為包括Java技術,以便本發明可以作為改進的Java虛擬機(JVM)來實現,但是,本發明也可以結合其他類型的虛擬機的技術來實現。
現在參考圖2,該圖中的方框圖描述了根據本發明的實施例的分布式數據處理系統中的虛擬機群集/網格。網絡200連接一組虛擬機201-205;網絡200類似于圖1中的網絡101,虛擬機201-205可以在各種各樣的設備上得到支持,如圖1所示的任何設備上。
下面介紹一下術語,群集是兩個或更多交互的實體的集合。虛擬機的群集可以稱為虛擬機群集、虛擬機網格或邏輯虛擬機。包含用于在群集/網格中操作的功能的單個虛擬機可以稱為可群集化虛擬機或啟用網格的虛擬機。包括在群集/網格內的單個虛擬機可以稱為群集化虛擬機或嵌入網格的虛擬機。
如上所述,本發明可以在使用Java虛擬機的Java環境內實現,Java虛擬機已經被增強以包括用于實現本發明的實施例的功能。或者,本發明可以在對Java類庫的擴展內實現。如此,上文所提供的術語可以在Java上下文內使用。在下文中,啟用網格的JVM或嵌入網格的JVM被稱為gJVM。圖2顯示了連接包含gJVM 201-205的gJVM群集的網絡200。
單一群集化虛擬機或單一嵌入網格的虛擬機可以稱為給定虛擬機群集、給定虛擬機網格或給定邏輯虛擬機內的節點。在圖2所示的示例中,一組虛擬機以類似于網格的方式作為單個虛擬機內的多個節點而進行交互。本發明支持虛擬機群集中的多個節點,分布式數據處理系統可以支持一個以上的虛擬機群集/網格。此外,給定設備可以支持一個以上可群集化/啟用網格的虛擬機或一個以上群集化/嵌入網格的虛擬機。換句話說,給定設備可以支持第一群集化/嵌入網格的虛擬機和第二群集化/嵌入網格的虛擬機,其中,兩個群集化/嵌入網格的虛擬機包括在兩個不同的和獨立的虛擬機群集/網格中;兩個群集化/嵌入網格的虛擬機和兩個虛擬機群集/網格將唯一地可識別和可訪問。
依據在給定虛擬機群集/網格內執行的進程的類型,為方便起見,將給定虛擬機群集/網格內交互的節點稱為本地節點或遠程節點,以便在節點之間進行區別。例如,從給定gJVM的角度來看,給定gJVM可以稱為本地節點,本地gJVM或本地gJVM節點;從給定gJVM的角度來看,與本地節點進行交互的不同的gJVM,不論是在同一臺設備上還是在另一臺設備上執行,都可以稱為遠程節點、遠程gJVM、遠程gJVM節點。
本發明旨在透明地允許應用程序在一組機器或設備上運行,其中每一臺機器或設備都至少支持一個群集化虛擬機節點。例如,多線程Java應用程序可以在多個gJVM上運行,應用程序將不知道也不必知道其線程被發往哪些機器。虛擬機群集動態地在可用的群集化虛擬機組上管理和分布應用程序的線程。
每一個虛擬機群集都具有單個主要節點。在圖2中,gJVM節點201是主要gJVM節點,而gJVM節點202-205是非主要gJVM節點。主要節點可以具有為群集內的非主要節點執行的某些職責。例如,主要節點可以具有定義應用程序環境和應用程序的上下文的一組對象,例如,針對文件訪問的,以及虛擬機群集的類加載(類路徑)。
主要節點和非主要節點可以以稍微不同的方式啟動,從而向將充當主要節點或充當非主要節點的給定可群集化虛擬機提供指示。例如,Java環境中的可群集化虛擬機可以以下列示范性實例化命令來啟動Java[-main-clusterName][mainClass]“java”命令可以實例化可群集化虛擬機,即,啟動可群集化虛擬機的給定副本的執行。“-main”參數表示,gJVM的特定實例將充當由“-clusterName”參數標識的gJVM群集內的主要gJVM節點;當gJVM的特定實例將充當非主要gJVM節點時,實例化命令將不包括“-main”參數。“mainClass”參數指定要由gJVM運行的主程序。如此,包括主要節點和非主要節點的軟件模塊可以是彼此的副本,從而使軟件基本上類似,即,主要節點和非主要節點可以是所謂的對等或克隆,盡管主要節點和非主要節點可以因為主要節點的實例化進程與非主要節點的實例化進程稍有不同而表現出不同的行為。
由于主要節點和非主要節點可以只是可群集化虛擬機的獨立實例,其中,主要節點和非主要節點只根據兩種不同的操作模式來進行運行,例如,通過以不同的方式初始化,主要節點可以將其職責委派或轉交給非主要節點,以便可以在系統啟動之后將主要節點關閉后進行維護或達到其他目的。
啟用網格的虛擬機現在參考圖3A,該圖中的方框圖顯示了可以用來增強作為根據本發明的實施例的可群集化/啟用網格的虛擬機的虛擬機的組件和/或信息。圖3A描述了表示諸如圖2中的任何節點201-205之類的單個可群集化虛擬機的gJVM節點300。雖然沒有顯示,gJVM節點300包括用于以類似于典型的JVM的方式執行各種任務的其他組件和信息;換句話說,gJVM節點300可以被視為已經被增強以包括本發明的功能的典型的JVM。雖然顯示的gJVM節點300包含了多種類型的表,但是,那些本領域普通技術人員將理解,可以由給定可群集化虛擬機節點對不同類型的信息和不同信息格式來進行管理,以實現本發明的功能。
P2P通信單元302可使每一個gJVM以對等方式與任何其他gJVM進行通信,特別是向另一個gJVM傳遞gJVM的性能信息。例如,gJVM可以將其CPU負載因子、其存儲器因子,以及其通信隊列負載因子傳遞到其他gJVM,以便虛擬機群集可以以分布式方式平衡其總負載。唯一gJVM ID 304是一個數據值,該數據值表示已經指派給由gJVM組名稱306標識的給定gJVM群集內特定gJVM的唯一虛擬機標識符。應用程序環境/上下文參數308定義了各種值和信息,這些值和信息在gJVM 300的壽命內可能需要,用于從其運行時環境中獲取附加信息并用于與其運行時環境進行交互。例如,每一個gJVM都可能必須知道其中配置了主要gJVM的主要gJVM IP地址和端口值310,以便與主要gJVM進行通信。
每一個群集化虛擬機都有運行狀態,例如,已停止、正在啟動、已經啟動,以及正在停止。當在虛擬機群集內正在實例化新節點時,即,添加到已經在虛擬機群集內的多個虛擬機時,有關其存在的信息被傳播到整個虛擬機群集;當虛擬機群集內的特定節點正在被停止時,即,從虛擬機群集內多個虛擬機的其余部分刪除時,(這可以在不停止整個虛擬機群集的情況下發生),有關特定節點被停止的信息被傳播到整個虛擬機群集。在圖3A所示的示例中,假設每一個gJVM節點都維護了gJVM群集內的gJVM節點的列表的本地副本(這顯示為gJVM注冊表312);gJVM節點300可以接收有關其他節點的狀態的更新的信息,然后該信息將反映在gJVM注冊表312內。如此,gJVM注冊表312提供對gJVM節點300已知的gJVM的注冊表。gJVM注冊表312包含每一個已知的gJVM的特征值的列表,如其唯一gJVM ID 314、其IP地址和端口316,以及其運行狀態318。gJVM群集內的每一個gJVM都可以在彼此之間傳遞各種工作負荷或計算資源利用參數,以便它們可以確定向哪里分派線程。
在gJVM啟動之后,它可以接受來自其gJVM群集的線程工作;當它停止時,它將其線程和關聯的對象移動到另一個gJVM。與典型的虛擬機不同的是,本發明提供了可群集化虛擬機,其中,對象可在gJVM節點之間移動,從而當可群集化虛擬機的實例正在被停止時可使線程以及其關聯的對象移動。
在典型的采用現有技術的系統中,遠程對象是通過IP地址、TCP/IP端口號、以及對象標識符引用的組合來進行編址的;遠程方法調用(RMI)引用或通用對象請求代理體系結構(CORBA)引用還包含相對較大的其他信息。與其中存根類可以在典型的RMI或CORBA實現方式中使用的典型的虛擬機不同的是,本發明提供了對象引用,以便對對象的訪問在gJVM運行時環境內透明地進行管理而無需存根類,關于這一點,下面將詳細描述。
為支持本發明內的可移動對象,對象與對象組關聯,即,在邏輯上包含在對象組內。只要對象存在,其與特定對象組的關聯確保了對象組將繼續存在。換句話說,只要對象組至少具有一個對象,它就繼續存在。當一個對象組中的所有對象都已經被回收時,那么,該對象組也將被回收。
對象組可以在群集化虛擬機之間移動。可訪問的對象組只在單個群集化虛擬機上存在;當對象組處于在群集化虛擬機之間的遷移狀態時,對該對象組的訪問可以得到限制。因此,每一個群集化虛擬機都具有有關對象組在虛擬機群集內的位置的信息。
在圖3A所示的示例中,對象組注冊表320包含對gJVM 300已知的對象組ID的列表及其他關聯的信息,以在gJVM 300的gJVM群集內定位那些對象組,從而將每一個已知的對象組與對gJVM 300已知的gJVM關聯。例如,特定對象組由對象組ID 322表示;在其上面給對象組指派了對象組ID 322的gJVM節點由gJVM ID 324標識,指派給對象組ID 322的對象組的遷移狀態由遷移狀態值326標識,狀態值326可以是一組恒定值中的某一個值,其中每一個值都表示不同的可能的遷移狀態。
為了提供透明的訪問并提供對象在虛擬機群集內的可動性,內部虛擬機的到對象的句柄,即對象引用,包含緊湊的信息項集,該信息項集提供了對象的定位和訪問,但沒有指定對象的位置。例如,可以使用下列Java結構來指定Java環境中的對象句柄Struct ObjectHandle{Int objectGroupID;//Unique object group IDByte[]objectID;//Unique object ID of the object}上文所提供的示例中指定的ObjectHandle允許在gJVM群集內執行的應用程序訪問gJVM群集內的任何地方的對應的對象。通過知道一組對象的唯一對象組標識符,任何gJVM節點都可以定位gJVM群集內的標識的對象組;例如,如果對象組在一個表中或在將對象組標識符與gJVM標識符關聯的其他類型的數據倉庫中進行管理,那么,可以確定在其上面駐留了對象的gJVM節點。通過使用有關對gJVM節點進行編址或訪問的方式的其他信息,可以使用唯一gJVM標識符與在其上面駐留了對象的gJVM節點進行通信;例如,如果gJVM標識符在一個表中或將gJVM標識符與IP地址和端口號關聯的其他類型的數據倉庫中進行管理,例如,如gJVM注冊表312所示,那么,可以以某種方式訪問相應的gJVM節點上的相應的對象組。雖然給定gJVM節點可以由IP地址和端口號進行標識,但是此信息不直接包含在對象引用內,從而可使對象透明地在gJVM節點之間移動。通過知道要被訪問的對象的唯一對象標識符,那么,可以以某種方式訪問相應的gJVM節點上的對象組內的相應的對象。
有關對象組的位置的信息可以由gJVM群集的所有gJVM節點都可以訪問的JVM單個對象提供,以查詢對象組標識符和托管對象組的gJVM節點之間的關聯。在圖3A所示的示例中,gJVM節點300包含由對象組注冊表320提供的本地信息;例如,gJVM節點300可以從另一個gJVM節點(例如,主要gJVM節點)檢索或接收對對象組注冊表320的更新,從而可使gJVM節點300執行快速而有效的本地查詢。
對象和它們的對象組是根據需要在本地gJVM節點的堆陣內創建的。可以本地引用對象,直到對象引用被傳遞到線程范圍之外,此時,可以作為遠程對象透明地訪問對象,從而可使其他線程潛在地在其他機器上運行,以對其進行訪問。在一個實施例中,優選情況下,在gJVM節點的線程本地堆陣中創建對象組;或者,對象組可以在群集化虛擬機內的其他類型的堆陣內創建。當構建線程時,給每一個新線程都提供了新線程本地堆陣;線程可以根據需要獲取更多的線程本地堆陣。線程本地堆陣提供了高性能,因為對大多數對象的大多數訪問都是在特定線程本地進行的;可以輕松地將對象回收;不需要堆陣鎖定就可以滿足對象分配。線程本地堆陣通常是作為特定線程可以對其進行訪問的可配置大小的對象來實現的。為滿足典型的小對象分配,線程本地堆陣在一端分離,以釋放所需空間。如果線程本地堆陣不足夠大,以滿足分配,則丟棄線程本地堆陣的其余部分,并由全新的線程本地堆陣替代。較大的對象分配可以繞過線程本地堆陣機制,并可以直接從虛擬機內的較大的堆陣來進行滿足。圖3A描述了gJVM節點300內的單個線程328;線程328與兩個線程本地堆陣330和332關聯,從而顯示了一個線程可以與多個線程本地堆陣具有一對多的關聯。顯示的線程本地堆陣330包含對象組334和對象組336,它們包含在圖中沒有顯示的對象;顯示的線程本地堆陣332包含對象組338,其本身包含對象340-342。
用于管理線程的信息存儲在對象內,此對象也存儲在對象組內。同樣,線程的堆棧幀是作為對象來管理的。圖3A描述了線程管理對象344和用于管理這樣的信息的堆棧幀對象346。如此,與線程相關的實例數據存儲在對象組內。如果線程從一個gJVM節點移到另一個gJVM節點,則實例數據作為移動對象組的過程的一部分來移動。線程代碼本身不必存儲在對象組中;如果代碼在存儲器內不存在,則在需要時從類文件中提供。
當建立新線程時也創建新對象組;將在對象組和新建立的線程(它具有唯一的線程標識符)之間創建關聯。線程標識符在整個群集中是唯一的;每一個群集化虛擬機都具有唯一的虛擬機標識符,從而可使唯一線程標識符優選情況下基于唯一虛擬機標識符和線程標識符(它在給定虛擬機內是唯一的)的組合。
可以根據需要將更多的對象組添加到線程中。在圖3A所示的示例中,本地對象組管理表350包含在gJVM節點300內管理的對象組列表,即,存儲在gJVM節點300內的對象組,與其他關聯的信息一起,管理gJVM節點300內的那些對象組。例如,特定對象組由表中的行表示,表包含對象組ID 352,指向包含特定對象組的線程本地堆陣的指針354,以及與對象組關聯的線程標識符356;如果在群集化虛擬機內的其他類型的堆陣內創建對象組,那么,不同的信息將在本地對象組管理表350內進行管理。
如上所述,只要對象組至少具有一個對象,它就繼續存在;即使負責創建對象的線程被終止,對象也可以被仍需要其存在的另一個線程引用,從而需要對象位于其中的對象組繼續存在。或者,也可以在gJVM節點內維護主全局對象組360。當線程結束時,包含在其關聯的對象組(或關聯的對象組)中的并且仍可從其他線程引用的所有其余的對象,例如,對象362-368被移到主全局對象組中。甚至在始發線程結束的情況下,主全局對象組也將包含在gJVM群集內全局引用的所有對象,從而可以對較少的對象組進行管理。
在虛擬機群集/網格內的對象組移動現在參考圖3B-3D,一組方框圖顯示了根據本發明的實施例的對象組在群集化虛擬機之間的轉移。圖3B-3D描述了在一段時間內虛擬機群集內的一組gJVM節點;圖3B描述了一個比圖3C中描述的時間點(該時間點比圖3D中描述的時間點較早)較早的時間點。圖3B以類似于圖3A的方式顯示了包含對象組334、336和338的gJVM節點300。此外,gJVM節點370包含對象組372,而gJVM節點380包含對象組382。
如上所述,只要對象組至少具有一個對象,它就繼續存在,即使最初與對象組關聯的線程被終止。圖3C描述了與圖3B相同的gJVM節點和相同對象組。然而,圖3C與圖3B不同的是,對象組338已經從gJVM節點300轉移到gJVM節點380;例如,可以響應與對象組338關聯的線程(如圖3A所示的線程328)終止而進行轉移。
還是如上所述,只要對象組至少具有一個對象,它就繼續存在,即使建立了對象組的群集化虛擬機已經被停止或終止。圖3D描述了與圖3C中的某些相同的gJVM節點和對象組的稍晚的時間點。然而,圖3D與圖3C不同的是,對象組334和336已經從gJVM節點300轉移到gJVM節點370。例如,可以響應支持對象組334和336的gJVM節點300的終止而進行轉移;當給定gJVM關閉時,給定gJVM上的堆陣和/或對象組可以轉移到另一個機器中,整個虛擬機群集中的gJVM節點中的信息將用對象組的位置進行更新。
還可以在虛擬機群集內進行垃圾回收。在典型的Java虛擬機中,垃圾回收是用標記-清除(mark-and-sweep)方法來進行。在標記-清除方法中,當應用程序試圖分配對象,但是存儲器利用使對象分配操作難以進行或不可能完成時,由應用程序顯式地或者自動地調用垃圾回收。虛擬機穿過所有對象,將它們標記起來,然后,掃描所有線程和統計數據(全局數據),以再次標記所有可以遍歷到的所有對象。虛擬機暫停所有線程,然后遍查每一個線程的堆棧幀的數據結構,從而它標記可由任何線程引用的所有對象,可能是一個應用程序一個應用程序地進行。然后,破壞或刪除沒有被標記為可引用的所有對象,從而釋放存儲器,以便讓虛擬機分配對象。
大多數對象通常是只能由一個線程訪問的對象。利用本發明的虛擬機群集,可以遠程地引用對象;當遠程地引用對象時,它被同樣地標記起來。在一個實施例中,gJVM節點可以具有一個單獨的守護線程,該線程以低優先級運行并定期遍歷系統,以執行遠程垃圾回收處理。每一個對象都可以具有遠程垃圾回收位,該位將由遠程垃圾回收守護程序在標記-清除方法中使用。如果被遠程引用的對象不再在其中建立了該對象的gJVM節點內引用,那么,遠程垃圾回收守護線程則努力判斷遠程對象引用是否仍需要對象的存在。守護線程可以向其他gJVM節點發送請求消息以查詢可以準備在本地gJVM內釋放的特定對象是否仍被遠程gJVM引用;這些請求可以為多個對象成批發出,以便可以有效地檢查引用組。如果沒有遠程gJVM節點報告特定對象仍在被遠程引用,那么,本地gJVM節點上的遠程垃圾回收守護線程可以啟動對象刪除;例如,遠程垃圾回收守護線程可以刪除關于對象正在/曾經被遠程引用的任何指示,從而可使對象隨后在普通/本地垃圾回收過程中被刪除。
主要啟用網格的虛擬機的初始化現在參考圖4,該圖中的流程圖顯示了根據本發明的實施例的初始化主要gJVM的過程。過程從通過使用上文所描述的實例化命令初始化主群集化虛擬機節點(步驟402)開始。將gJVM群集名稱以這樣的方式進行注冊,以便使應用程序可以查詢可用的gJVM群集,并防止與其他gJVM群集發生名稱沖突(步驟404)。主要gJVM節點獲取將被新啟動的gJVM群集使用的任何環境參數或上下文參數(步驟406),并以這樣的方式存儲信息,以便對gJVM群集中的所有節點都可用。初始化主要gJVM節點內的對象組注冊表的主副本(步驟408),此后,將主副本作為副本傳播到諸如圖3A所示的對象組注冊表320之類的非主要gJVM節點。還初始化主要gJVM節點內的gJVM注冊表的主副本(步驟410),此后,也將主副本作為副本傳播到諸如圖3A所示的gJVM注冊表312之類的非主要gJVM節點,從而結束該過程。
為啟用網格的虛擬機節點分配或注冊唯一ID現在參考圖5A,該圖中的流程圖顯示了在主要gJVM中向正在被初始化的非主要gJVM分配唯一gJVM標識符的過程。過程開始時,主要gJVM從非主要gJVM接收有關唯一gJVM標識符的請求(步驟502)。主要gJVM產生唯一gJVM標識符(步驟504),并將新產生的gJVM標識符添加到gJVM注冊表(步驟506)。主要gJVM將gJVM注冊表中的非主要gJVM的運行狀態設置為正在啟動狀態值(步驟508),然后,主要gJVM通過發送包含新產生的唯一gJVM標識符的消息來響應發出請求的非主要gJVM(步驟510)。然后,主要gJVM將包含更新的gJVM注冊表的消息廣播到所有非主要gJVM節點(步驟512),從而結束該過程。
現在參考圖5B,該圖中的流程圖顯示了在主要gJVM中向正在被初始化的非主要gJVM分配唯一gJVM標識符的另一個過程。過程開始時,主要gJVM從非主要gJVM接收注冊唯一gJVM標識符的請求(步驟522)。與其中非主要gJVM節點依靠主要gJVM節點分配唯一gJVM標識符的圖5A不同的是,圖5B顯示了其中非主要gJVM節點分配其自己的唯一gJVM標識符然后向主要gJVM節點注冊其標識符的示范性系統。非主要gJVM節點可以通過執行用于這樣的用途的算法來產生其自己的保證是唯一的標識符。例如,許多設備在制造時包括可讀、不可改變的序列號,有時稱為全局唯一標識符;由于分布式gJVM群集內的每一個gJVM節點都在設備上運行,因此,gJVM節點可以使用一種算法以創建唯一gJVM標識符,其中,算法接受設備的全局唯一標識符作為輸入。
然后,主要gJVM將新gJVM標識符添加到或注冊到gJVM注冊表中(步驟524)。主要gJVM將gJVM注冊表中的非主要gJVM的運行狀態設置為正在啟動狀態值(步驟526),然后,主要gJVM通過發送包含表示注冊是否成功的狀態值的響應消息來響應發出請求的非主要gJVM(步驟528)。然后,主要gJVM將包含更新的gJVM注冊表的消息廣播到所有非主要gJVM節點(步驟530),從而結束該過程。
將對象組ID分配到非主要啟用網格的虛擬機節點現在參考圖6,該圖中的流程圖顯示了在主要gJVM中向非主要gJVM分配唯一對象組標識符的過程。過程開始時,主要gJVM從非主要gJVM接收有關唯一對象組標識符的請求(步驟602)。主要gJVM產生唯一對象組標識符(步驟604),并將新產生的對象組標識符添加到對象組注冊表中(步驟606)。主要gJVM將對象組注冊表中的對象組的遷移狀態設置為正在啟動狀態值(步驟608),然后,主要gJVM通過發送包含新產生的唯一對象組標識符的消息來響應發出請求的非主要gJVM(步驟610)。然后,主要gJVM將包含更新的對象組注冊表的消息廣播到所有非主要gJVM節點(步驟612),從而結束該過程。
或者,與其中非主要gJVM節點依靠主要gJVM節點分配唯一對象組標識符的圖6相對比,可以使用另一個過程,其中,非主要gJVM節點分配其自己的唯一對象組標識符,然后向主要gJVM節點注冊此新產生的對象組標識符。非主要gJVM節點可以通過執行用于這樣的用途的算法來產生其自己的保證是唯一的對象組標識符,例如,以類似于上文參考圖5B所描述的方式。
向非主要啟用網格的虛擬機節點提供群集特定的信息現在參考圖7,該圖中的流程圖顯示了在主要gJVM中向非主要gJVM提供有關gJVM群集的信息的過程。過程開始時,主要gJVM從非主要gJVM接收有關群集特定的信息的請求,如當前gJVM注冊表、當前對象組注冊表或群集的環境/上下文參數(步驟702)。主要gJVM通過發送包含被請求的信息的消息來響應發出請求的非主要gJVM(步驟704),從而結束該過程。如此,非主要gJVM節點能夠從主要gJVM節點獲取信息,假設本發明的實施例具有這樣的gJVM群集,其中,主要gJVM節點代表非主要gJVM節點管理群集特定的信息。
改變非主要啟用網格的虛擬機節點的運行狀態現在參考圖8,該圖中的流程圖顯示了在主要gJVM中改變非主要gJVM的運行狀態的過程。過程開始時,主要gJVM從非主要gJVM接收改變其運行狀態的請求(步驟802)。主要gJVM用請求的運行狀態更新gJVM注冊表(步驟804),并用確認消息響應發出請求的非主要gJVM(步驟806)。然后,主要gJVM將包含更新的gJVM注冊表的消息廣播到所有非主要gJVM節點(步驟808),從而結束該過程。
通過非主要啟用網格的虛擬機節點改變對象組遷移狀態現在參考圖9,該圖中的流程圖顯示了在主要gJVM中改變對象組的遷移狀態的過程。過程開始時,主要gJVM從非主要gJVM接收改變對象組的遷移狀態的請求(步驟902)。主要gJVM用請求的遷移狀態更新對象組注冊表(步驟904),并用確認消息響應發出請求的非主要gJVM(步驟906)。然后,主要gJVM將包含更新的對象組注冊表的消息廣播到所有非主要gJVM節點(步驟908),從而結束該過程。
非主要啟用網格的虛擬機節點的初始化現在參考圖10,該圖中的流程圖顯示了根據本發明的實施例的初始化非主要gJVM節點的過程。過程從例如通過使用上文所描述的實例化命令初始化非主群集化虛擬機節點(步驟1002)開始。例如從實例化命令獲取gJVM群集名稱(步驟1004),例如使用gJVM群集名稱執行查詢操作(步驟1006),以從全局可用的數據庫獲取網絡參數,以啟動與標識的gJVM群集的主要gJVM節點的通信(步驟1008)。
非主要gJVM節點從主要gJVM節點請求并接收唯一gJVM標識符(步驟1010),如圖5A或圖5B所示。非主要gJVM節點獲取任何群集范圍內的信息,如由gJVM群集使用的環境參數或上下文參數(步驟1012),如圖7所示。非主要gJVM節點還從主要gJVM節點請求并接收gJVM注冊表(步驟1014)和對象組注冊表(步驟1016),如圖7所示。雖然顯示的步驟1010-1016是以同步方式實現的,但是,也可以以各種各樣的方式異步地執行這些步驟。由于非主要gJVM節點已經完成其初始化,非主要gJVM節點向主要gJVM節點發送改變其運行狀態的請求從表示它處于正在啟動狀態的值改變為表示它處于正在運行狀態的值(步驟1018)。假設請求被成功地執行,非主要gJVM節點從主要gJVM節點接收確認(步驟1020),從而結束該過程。
圖10顯示了非主要gJVM節點上的初始化過程,而圖5A-9顯示了主要gJVM節點根據非主要gJVM節點的請求執行任務,以集中地作為整體代表gJVM群集管理信息的過程。其余的圖描述了非主要gJVM節點管理gJVM群集內的對象組和線程的過程;換句話說,其余的圖從非主要gJVM節點的角度顯示了過程。然而,應該注意,對于對象組和線程的管理,主要gJVM節點執行類似的過程;在其中的圖顯示了向主要gJVM節點傳輸信息或從中接收信息的過程中的步驟的實例中,應該理解,主要gJVM節點將執行類似的步驟,只是主要gJVM節點可以將信息直接放到群集特定的表或數據庫中,如gJVM注冊表或對象組注冊表,而不必與其本身(即,主要gJVM節點)協調步驟。
啟用網格的虛擬機節點中的線程構建現在參考圖11,該圖中的流程圖顯示了在群集化虛擬機上構建線程的過程。過程開始時,本地gJVM在群集化虛擬機的控制下通過正在執行的應用程序執行的相應的API調用接收構建線程的請求(步驟1102),雖然本地gJVM也可以在控制虛擬機上的應用程序的執行的同時主動地執行類似的過程。本地gJVM節點(在某些情況下可以被假定為非主要gJVM)向主要gJVM發送請求,以索取唯一對象組標識符,然后接收它(步驟1104)。本地gJVM構建線程(步驟1106),這可能需要創建各種線程管理對象并更新各種線程管理表。產生唯一線程標識符,并指派給新建立的線程(步驟1108)。然后,本地gJVM分配線程本地堆陣(步驟1110),在線程本地堆陣內創建或劃分對象組(步驟1112),依據實現方式,該過程優選情況下存儲線程相關的對象。通過更新相應的管理表,將新創建的對象組標識符與新構建的線程關聯(步驟1114)。
然后,本地gJVM向主要gJVM發送改變對象組的遷移狀態的請求從表示正在啟動狀態的值(這是在請求新對象組標識符時由主要gJVM設置的)改變為表示穩定狀態的值(步驟1116)。然后,本地gJVM從主要gJVM接收遷移狀態改變確認(步驟1118)。然后,本地gJVM將線程構建的響應(可能包含線程標識符及其他與線程相關的信息)返回到發出請求的應用程序(步驟1120),從而結束該過程。
啟用網格的虛擬機節點中的線程破壞現在參考圖12,該圖中的流程圖顯示了在群集化虛擬機上破壞線程的過程。過程開始時,本地gJVM在群集化虛擬機的控制下通過正在執行的應用程序執行的相應的API調用接收破壞線程的請求(步驟1202),雖然當本地gJVM決定,例如由于各種終止條件而主動地破壞線程時也可以執行類似的過程。
假設與正在終止的線程關聯的對象組具有對其本身內的對象的外部/遠程/外來引用,那么,對象組需要保留,即使最初是創建對象組的原因的線程現在正在被終止或破壞。因此,本地gJVM以相應的方式將正在終止的線程的線程標識符與每一個關聯的對象組分離(步驟1204),這可以包括更新各種線程管理表和對象組管理表(步驟1206)。在必要時,依據本地gJVM中的存儲器分配方法,對象組可能需要從線程本地堆陣移到本地gJVM內的普通堆陣(步驟1208)。常常可能會有這樣的情況終止線程將會導致其幾乎所有的對象被回收;在另一個實施例中,由于遠程可引用而保留的對象可以移到主全局對象組中。
然后,例如通過破壞用于控制線程的線程相關的管理對象來破壞線程(步驟1210)。然后,將線程破壞操作的響應返回到發出請求的應用程序(步驟1212),從而結束該過程。
啟用網格的虛擬機節點中的對象分配現在參考圖13,該圖中的流程圖顯示了在群集化虛擬機上構建對象的過程。過程開始時,本地gJVM節點在群集化虛擬機的控制下通過正在執行的應用程序執行的相應的API調用接收構建對象的請求(步驟1302),雖然當本地gJVM判斷主動地創建線程時也可以執行類似的過程。確定發出請求的線程的線程標識符(步驟1304),檢索與發出請求的線程關聯的對象組的對象組信息(步驟1306)。然后,本地gJVM分配發出請求的線程的某一個對象組中的對象(步驟1308),并產生新分配的對象的對象標識符并指派給對象(步驟1310)。創建新創建的對象的對象引用/句柄(步驟1312),這可能包含對象組標識符和對象標識符,具體取決于實現對象引用的方式。然后,將對象引用/句柄返回到發出請求的線程(步驟1314),從而結束該過程。
啟用網格的虛擬機節點中的對象引用現在參考圖14,該圖中的流程圖顯示了在群集化虛擬機上處理對對象的訪問的過程。過程從本地gJVM通過對象句柄截取訪問或引用對象的嘗試開始(步驟1402)。本地gJVM從對象句柄檢索對象組標識符(步驟1404),并例如,通過查詢對象組管理表來判斷標識對象組是本地管理的還是遠程管理的(步驟1406)。如果對象是本地存儲的,那么本地gJVM獲取指向相應的線程本地堆陣的指針(步驟1408),并使用對象標識符訪問線程本地堆陣中的對象(步驟1410)。
如果對象是遠程存儲的,那么,本地gJVM獲取對象所在的對象組的遠程gJVM節點的標識符(步驟1412)。從例如gJVM注冊表的本地副本檢索遠程gJVM的IP地址和端口ID。然后,本地gJVM將對象訪問請求發送到遠程gJVM(步驟1416),從而結束該過程。
對象組從啟用網格的虛擬機節點的遷移現在參考圖15,該圖中的流程圖顯示了在本地群集化虛擬機上將對象組遷移到遠程群集化虛擬機的過程。過程開始時,本地gJVM節點準備將對象組從本地gJVM節點遷移到遠程gJVM節點(步驟1502),這可能需要將請求消息發送到遠程gJVM以遷移對象組。此準備遷移對象組的操作可能由于各種條件的結果而發生,關于這一點,下面將進一步地詳細描述。例如,如參考圖19所描述的,在停止gJVM節點之前,gJVM節點內的任何對象組都將遷移到具有gJVM群集的其他gJVM節點。
本地gJVM向主要gJVM發送將遷移對象組的遷移狀態從穩定改變為正在遷移的請求(步驟1504),在此之后,本地gJVM從主要gJVM接收遷移狀態改變確認(步驟1506)。然后,本地gJVM平化或序列化遷移對象組中的每一個對象(步驟1508),并以某種方式將平化或序列化的對象從本地gJVM推向遠程gJVM,以便對象仍與對象組關聯(步驟1510),在此之后,本地gJVM從遠程gJVM接收確認(步驟1512)。然后,本地gJVM破壞剛剛移動的對象組的本地gJVM內的對象組和/或堆陣(步驟1514),同時還清除或更新本地對象組表中的對象組項以及本地gJVM節點內的需要清除或更新的任何其他表或數據庫項(步驟1516),因為對象組現在位于不同的gJVM節點內,從而結束該過程。
對象組向啟用網格的虛擬機的遷移現在參考圖16,該圖中的流程圖顯示了在本地群集化虛擬機上從遠程群集化虛擬機接受對象組的遷移的過程。圖16所示的過程應該被視為圖15所示的過程的補充;圖15中的本地gJVM和遠程gJVM是圖16中的遠程gJVM和本地gJVM,分別顛倒了它們的角色。
過程開始時,本地gJVM接收將對象組從遠程gJVM遷移到本地gJVM的請求(步驟1602),在此之后,本地gJVM分配線程本地堆陣或其他相應的類型的堆陣(步驟1604),并從遠程gJVM接收對象組中的平化或序列化的對象(步驟1606)。本地gJVM將對象讀取或膨脹到本地gJVM內的所選擇的位置(步驟1608),并在必要時(例如,如果線程與對象組一起遷移)將接收到的對象組與線程關聯(步驟1610)。然后,本地gJVM執行用于管理新接收到的對象組的相應的管理任務,如在本地對象組表中創建對象組項(步驟1612)。然后,本地gJVM向主要gJVM發送將遷移對象組的遷移狀態從正在遷移改變為穩定的請求(步驟1614),在此之后,本地gJVM從主要gJVM接收遷移狀態改變確認(步驟1616)。然后,本地gJVM向遠程gJVM發送確認消息,表示對象組遷移完成(步驟1618),從而結束該過程。
線程從啟用網格的虛擬機中遷移現在參考圖17,該圖中的流程圖顯示了在本地群集化虛擬機上將線程遷移到遠程群集化虛擬機的過程。過程開始時,本地gJVM節點準備將線程從本地gJVM節點遷移到遠程gJVM節點(步驟1702),這可能需要將請求消息發送到遠程gJVM以遷移線程。此準備遷移線程的操作可能由于各種條件的結果而發生,關于這一點,下面將進一步地詳細描述。本地gJVM將線程管理信息從本地gJVM推向遠程gJVM(步驟1704);線程管理信息可以包括本地gJVM節點內的本地線程管理表中的信息,在此之后,本地gJVM從遠程gJVM接收確認(步驟1706)。然后,本地gJVM根據需要更新本地線程管理表,以反映線程已經移到不同gJVM節點的事實(步驟1708),從而結束該過程。
線程向啟用網格的虛擬機中遷移現在參考圖18,該圖中的流程圖顯示了在本地群集化虛擬機上從遠程群集化虛擬機接受線程的遷移的過程。圖18所示的過程應該被視為圖17所示的過程的補充;圖17中的本地gJVM和遠程gJVM是圖18中的遠程gJVM和本地gJVM,分別顛倒了它們的角色。
過程開始時,本地gJVM接收將線程從遠程gJVM遷移到本地gJVM的請求(步驟1802),在此之后,本地gJVM從遠程gJVM接收線程的線程管理信息(步驟1804)。然后,本地gJVM執行用于管理新接收到的線程的相應的管理任務,如更新本地線程管理表(步驟1806)。然后,本地gJVM向遠程gJVM發送確認消息,表示線程遷移完成(步驟1808),從而結束該過程。
關閉啟用網格的虛擬機現在參考圖19,該圖中的流程圖顯示了在本地群集化虛擬機上對群集化虛擬機執行關閉操作的過程。過程從判斷本地gJVM需要執行關閉操作開始(步驟1902)。關閉操作可以是由于種種原因在本地gJVM節點內判斷自我終止的結果;或者,關閉gJVM節點的判斷可以由主要gJVM節點、由管理實用程序、由管理命令或由某些其他機制來控制。本地gJVM節點向主要gJVM節點發送改變本地gJVM節點的運行狀態的請求從表示運行狀態的值改變為表示停止狀態的值(步驟1904),在此之后,本地gJVM節點從主要gJVM接收確認消息(步驟1906)。然后,本地gJVM開始將其所有線程遷移到其他gJVM節點(步驟1908),同時,還將其所有對象組遷移到其他gJVM節點(步驟1910)。如下面所詳細討論的,gJVM節點可以根據有關gJVM群集內的其他gJVM節點性能特征的信息執行遷移操作。然后,本地gJVM節點向主要gJVM節點發送改變本地gJVM節點的運行狀態的請求從表示正在停止狀態的值改變為表示已經停止狀態的值(步驟1912),在此之后,本地gJVM節點從主要gJVM接收確認消息(步驟1914),從而結束該過程。
如上所述,主要節點可以將其職責委派或轉交給非主要節點,以便可以在系統啟動之后將主要節點關閉后進行維護或達到其他目的。如果主要節點開始關閉過程,則主要節點可能通過請求/響應機制選擇非主要節點以充當新委派主要節點。如此,主要節點執行更多的在主要節點處于停止狀態期間沒有由非主要節點執行的操作。在委派操作之后,新委派的主要節點可以將其作為虛擬機群集的主要節點的新身份廣播到虛擬機群集內的其他非主要節點,這將相應地更新它們的信息數據結構。
啟用網格的虛擬機執行的性能信息收集現在參考圖20,該圖中的流程圖顯示了在本地群集化虛擬機上從遠程群集化虛擬機收集負載或性能信息的過程。圖20所示的過程以迭代的方式對所有已知的遠程gJVM節點執行操作。因此,過程開始時,本地gJVM節點從gJVM注冊表的本地副本獲取有關迭代循環內還沒有處理的下一個遠程gJVM節點的信息(步驟2002)。然后,本地gJVM向標識的遠程gJVM節點發送要求其負載信息的請求消息(步驟2004),在此之后,本地gJVM接收包含遠程gJVM節點的負載信息的響應消息(步驟2006);信息可以使用下面參考圖22描述的過程存儲在本地表或數據庫內,以便以后進行分析。然后,本地gJVM節點檢查在本地gJVM注冊表內是否存在未處理的gJVM節點(步驟2008)。如果存在,那么過程返回步驟2002,以處理另一個遠程gJVM節點;如果沒有未處理的遠程gJVM節點,那么過程結束。
啟用網格的虛擬機執行的性能信息收集現在參考圖21,該圖中的流程圖顯示了在本地群集化虛擬機上響應來自群集化虛擬機的對本地群集化虛擬機的當前負載或性能信息的請求的過程。圖21所示的過程應該被視為圖20所示的過程的補充;圖20中的本地gJVM和遠程gJVM是圖21中的遠程gJVM和本地gJVM,分別顛倒了它們的角色。過程開始時,本地gJVM接收本地gJVM和/或本地設備上的負載信息的請求消息(步驟2102)。例如,負載信息可以包括表示CPU使用率、存儲器使用率的值,本地gJVM節點在其上面運行的數據處理設備的其他硬件、軟件或計算資源使用率信息,gJVM內或由gJVM控制的資源的計算資源使用率信息,及其他信息。然后,本地gJVM發送包含請求的負載信息的響應消息(步驟2104),從而結束該過程。
啟用網格的虛擬機節點之間的負載平衡操作現在參考圖22,該圖中的流程圖顯示了本地群集化虛擬機上的根據負載或性能信息確定將線程和/或對象組從本地群集化虛擬機遷移到遠程群集化虛擬機的過程。過程開始時,本地gJVM節點判斷是否開始負載平衡操作(步驟2202);如果適當,本地gJVM節點獲取或檢查其自己的負載信息(步驟2204)。本地gJVM還使用上文參考圖20和圖21所描述的過程從gJVM群集內的其他gJVM節點獲取負載信息(步驟2206),雖然只有在已經作出啟動負載平衡操作的判斷之后才可以從其他gJVM節點收集負載信息。
負載平衡操作可以這樣執行,以便確保由執行群集內的各種應用程序所引起的工作負荷在整個gJVM群集中進行分布。負載平衡操作可以是由于在本地gJVM節點內根據由gJVM群集內的所有gJVM節點所使用的算法判斷啟動負載平衡操作而進行的;或者,執行負載平衡操作的判斷可以由主要gJVM節點、由管理實用程序、由管理命令或由某些其他機制來控制。例如,本地gJVM節點可以在它已經構建線程并準備分派線程之后執行負載平衡操作;或者,為節省計算資源,可以定期執行負載平衡操作,例如,在每隔十個新建立的線程之后。
然后,本地gJVM節點開始評估其負載信息以檢查本地gJVM節點上的某些資源是否已經超過可配置的閾值,例如,如群集特定的上下文參數所指出的。在圖22所示的示例中,執行兩次評估;所執行的評估的數量可以取決于負載平衡算法、可用的負載信息或某些其他因素。
就本地gJVM節點的CPU負載值是否超過CPU負載閾值作出判斷(步驟2208);如果沒有,那么過程轉到步驟2214。如果本地gJVM節點的CPU負載值超過可配置的CPU負載閾值,那么,本地gJVM節點就通過分析以前從遠程gJVM節點收集的相對于可配置的負載閾值的負載信息,選擇具有可用的CPU資源的遠程gJVM節點(步驟2210)。然后,本地gJVM節點使用上文參考圖17和圖18所描述的過程開始遷移操作,以將線程從本地gJVM節點移動到一個或多個所選擇的遠程gJVM節點(步驟2212)。
然后,就本地gJVM節點的存儲器負載值是否超過存儲器負載閾值作出判斷(步驟2214);如果沒有,那么,過程就結束。如果本地gJVM節點的存儲器負載值超過可配置的存儲器負載閾值,那么,本地gJVM節點就通過分析以前從遠程gJVM節點收集的相對于可配置的負載閾值的負載信息,選擇具有可用存儲器資源的遠程gJVM節點(步驟2216)。然后,本地gJVM節點使用上文參考圖15和圖16所描述的過程開始遷移操作,以將對象組從本地gJVM節點移動到一個或多個所選擇的遠程gJVM節點(步驟2218),從而結束該過程。
邏輯虛擬機上的多線程應用程序現在參考圖23,該圖中的方框圖描述了通過多個設備橫跨單一邏輯虛擬機中的多個啟用網格的虛擬機的單個應用程序映像的執行。機器2302-2306支持邏輯虛擬機2308和邏輯虛擬機2310。
邏輯虛擬機2308只包括由主要gJVM節點2312所代表的單個節點,該節點可以通過指定“GRID_B”為邏輯虛擬機2308的群集名稱的命令行接口來進行調用。邏輯虛擬機2308在單個設備(即,機器2306)上得到支持。
相反,邏輯虛擬機2310包括由多個設備(即,機器2302-2306)支持的多個gJVM節點2314-2320;機器2302正巧同時支持兩個gJVM節點2314和2320。虛擬機2314-2320作為單個邏輯虛擬機而進行交互操作。在此示例中,虛擬機2314-2320是使用Java技術來實現的;因此,虛擬機2314-2320可以被描述為Java虛擬機。由于虛擬機2314-2320作為邏輯虛擬機嵌入了以類似于網格的方式進行交互操作的功能,虛擬機2314-2320可以被描述為啟用網格的Java虛擬機(gJVM),其中每一個gJVM都是邏輯gJVM 2310內的節點。
每一個gJVM節點2314-2320都可以通過指定“GRID_A”為邏輯gJVM 2310的群集名稱的命令行接口來進行調用。節點2316-2320是非主要節點;gJVM 2314在啟動時被指定為主要節點,雖然它可以在稍后的時間點將其作為主要節點的狀態委派給邏輯gJVM 2310內的另一個節點。在此示例中,節點2314-2320是同一個gJVM應用程序的特有的實例。通過使用上文所描述的方法,gJVM節點2316-2320注冊到由主要gJVM節點2314進行管理的節點的群集/網格中;對對象的遠程引用和gJVM節點之間的協調是通過gJVM節點能夠建立的gJVM-gJVM(對等)通信鏈路提供的。
利用本發明,多個gJVM節點作為邏輯gJVM進行交互操作,以便在一個gJVM節點上啟動的應用程序隨后可以以橫跨多個gJVM節點的方式執行。在圖23中的示例中,包括主線程2322的應用程序已經在gJVM節點2318上啟動,其其中一個輔助線程2324也在gJVM節點2318上執行。此外,同一個應用程序的輔助線程2326-2332也在邏輯gJVM 2310內的gJVM節點2314和2316上執行。
本發明允許節點2314-2320共享在邏輯gJVM 2310上執行的Java應用程序2334的工作負荷,而不需要Java應用程序2334偏離標準Java應用程序模型;換句話說,Java應用程序2334不需要任何專有的功能,而gJVM節點2314-2320不需要專有的應用程序代理來跨多個JVM代表Java應用程序2334來進行操作。利用本發明,gJVM節點2314嵌入了以類似于網格的方式進行交互操作的功能,以執行Java應用程序。
對象組2336-2346在整個邏輯gJVM 2310中進行分布。任何給定應用程序線程都可以引用多個對象組中存在的對象,不管相同應用程序內的應用程序線程或另一個線程是否建立或分配了那些對象組。因此,給定線程可以引用本地對象組中的對象或遠程對象組中的對象,不管對象組是否與本地gJVM節點或遠程gJVM節點上的給定線程或另一個線程關聯。事實上,對象組可以不與任何現有的線程關聯,或者對象可以包含在本地gJVM節點或遠程gJVM節點上的所謂的全局對象組內。在圖23所示的示例中,顯示的線程2330引用了本地gJVM節點2314內的對象組2336和2346中的對象,同時也引用了遠程gJVM節點2316內的對象組2338中的對象。
參考上文提供的對本發明的詳細描述,本發明的優點是顯而易見的。在虛擬機上執行的應用程序可以在多個虛擬機上以類似于網格的方式運行,從而可使計算資源作為類似于實用程序的服務提供,以便進行補償。當數據處理系統和設備關閉時,那些系統和設備上的可群集化虛擬機可以停止;那些系統和設備上的線程和對象可以遷移到其他系統和設備,同時虛擬機群集允許任何應用程序繼續運行,雖然在不同的系統和設備集上。
值得注意的是,盡管是在完全運轉的數據處理系統的上下文中描述本發明的,那些本領域普通技術人員將認識到,本發明的進程能夠以存儲了指令的計算機可讀的介質的形式和各種各樣的形式進行分發,不管實際用于進行分發的承載信號的介質的特定類型是什么。計算機可讀的介質的示例包括諸如EPROM、ROM、磁帶、紙張、軟盤、硬盤驅動器、RAM和CD-ROM之類的介質,和諸如數字和模擬通信鏈路之類的傳輸類型的介質。
方法一般來說是產生所希望的結果的步驟的首尾一致的序列。這些步驟要求對物理量進行物理操作。通常,盡管不一定,這些量呈現能夠存儲、轉移、合成、比較以及以其他方式進行操作的電的或磁性信號的形式。有時,主要是由于通用的原因,將這些信號稱為位、值、參數、項目、元素、對象、符號、字符、術語、數字等等是很方便的。然而,應該注意,所有這些術語和類似的術語都與相應的物理量關聯,只是應用于這些量的方便的標記。
本發明的描述只作說明,而不是詳盡的說明或只限于所說明的實施例。那些本領域普通技術人員將認識到,可以進行許多修改。所選擇的實施例只是為了最好地說明本發明的原理以及其實際應用,并使精通本技術的其他人理解本發明,以便實現帶有各種修改的各種實施例,只要可以適合于其他預期的用途。
權利要求
1.一種操作數據處理系統內的虛擬機的方法,該方法包括下列計算機實現的步驟將對象存儲在由所述虛擬機進行管理的存儲器中,所述虛擬機在數據處理系統內的設備上運行;將對象與對象組內的多個對象關聯;將對象組與所述虛擬機關聯,其中,所述虛擬機包括與虛擬機群集中的其他虛擬機進行交互操作的功能,其中,虛擬機群集中的每一個虛擬機充當虛擬機群集內的節點;對虛擬機群集的每一個虛擬機內的多個對象組進行管理;以及允許對象組從所述虛擬機移動到虛擬機群集中的不同的虛擬機。
2.根據權利要求1所述的方法,進一步包括將對象組與所述虛擬機解除關聯;將對象組移動到虛擬機群集中的不同的虛擬機中;以及響應將對象組移動到不同的虛擬機,將對象組與所述不同的虛擬機關聯。
3.根據權利要求1所述的方法,進一步包括與虛擬機群集中的每一個虛擬機共享關于多個對象組的位置的信息。
4.根據權利要求1所述的方法,進一步包括將對象組和不同的對象組與由所述虛擬機進行管理的線程關聯。
5.根據權利要求4所述的方法,進一步包括將對象組和不同的對象組存儲在與線程關聯的線程本地堆陣中。
6.根據權利要求4所述的方法,進一步包括將對象組存儲在與線程關聯的第一線程本地堆陣中;以及將不同的對象組存儲在與線程關聯的第二線程本地堆陣中。
7.根據權利要求4所述的方法,進一步包括將對象組與線程解除關聯;終止線程;以及響應終止線程,在對象組和由所述虛擬機進行管理的線程之間沒有關聯的情況下,對對象組進行管理。
8.根據權利要求1所述的方法,進一步包括為對象創建獨立于對象的位置的對象句柄。
9.根據權利要求8所述的方法,進一步包括為對象生成對象句柄;將對象與之關聯的對象組的組標識符存儲在對象句柄中,其中,組標識符在虛擬機群集內是唯一的;以及將對象的對象標識符存儲在對象句柄中,其中,對象標識符在對象與之關聯的對象組內是唯一的。
10.根據權利要求1所述的方法,進一步包括為對象創建獨立于對象的位置并且獨立于對象與之關聯的對象組的位置的對象引用。
11.根據權利要求1所述的方法,進一步包括當對象位于所述虛擬機中時,為對象創建第一對象引用;將對象與之關聯的對象組移動到不同的虛擬機中;以及當對象位于不同的虛擬機中時,為對象創建第二對象引用,其中,第一對象引用和第二對象引用相同。
12.計算機可讀的介質中的供在數據處理系統中使用的用于操作虛擬機的計算機程序產品,該計算機程序產品包括用于將對象存儲在由所述虛擬機進行管理的存儲器中的裝置,所述虛擬機在數據處理系統內的設備上運行;用于將對象與對象組內的多個對象關聯的裝置;用于將對象組與所述虛擬機關聯的裝置,其中,所述虛擬機包括與虛擬機群集中的其他虛擬機進行交互操作的功能,其中,虛擬機群集中的每一個虛擬機充當虛擬機群集內的節點;用于對虛擬機群集的每一個虛擬機內的多個對象組進行管理的裝置;以及用于允許對象組從所述虛擬機移動到虛擬機群集中的不同的虛擬機的裝置。
13.根據權利要求12所述的計算機程序產品,進一步包括用于將對象組與所述虛擬機解除關聯的裝置;用于將對象組移動到虛擬機群集中的不同的虛擬機中的裝置;以及用于響應將對象組移動到不同的虛擬機,將對象組與所述不同的虛擬機關聯的裝置。
14.根據權利要求12所述的計算機程序產品,進一步包括用于與虛擬機群集中的每一個虛擬機共享關于多個對象組的位置的信息的裝置。
15.根據權利要求12所述的計算機程序產品,進一步包括用于將對象組和不同的對象組與由所述虛擬機進行管理的線程關聯的裝置。
16.根據權利要求15所述的計算機程序產品,進一步包括用于將對象組和不同的對象組存儲在與線程關聯的線程本地堆陣中的裝置。
17.根據權利要求15所述的計算機程序產品,進一步包括用于將對象組存儲在與線程關聯的第一線程本地堆陣中的裝置;以及用于將不同的對象組存儲在與線程關聯的第二線程本地堆陣中的裝置。
18.根據權利要求15所述的計算機程序產品,進一步包括用于將對象組與線程解除關聯的裝置;用于終止線程的裝置;以及用于響應終止線程,在對象組和由所述虛擬機進行管理的線程之間沒有關聯的情況下,對對象組進行管理的裝置。
19.根據權利要求12所述的計算機程序產品,進一步包括用于為對象創建獨立于對象的位置的對象句柄的裝置。
20.根據權利要求19所述的計算機程序產品,進一步包括用于為對象生成對象句柄的裝置;用于將對象與之關聯的對象組的組標識符存儲在對象句柄中的裝置,其中,組標識符在虛擬機群集內是唯一的;以及用于將對象的對象標識符存儲在對象句柄中的裝置,其中,對象標識符在對象與之關聯的對象組內是唯一的。
21.根據權利要求12所述的計算機程序產品,進一步包括用于為對象創建獨立于對象的位置并且獨立于對象與之關聯的對象組的位置的對象引用的裝置。
22.根據權利要求12所述的計算機程序產品,進一步包括用于當對象位于所述虛擬機中時,為對象創建第一對象引用的裝置;用于將對象與之關聯的對象組移動到不同的虛擬機中的裝置;以及用于當對象位于不同的虛擬機中時,為對象創建第二對象引用的裝置,其中,第一對象引用和第二對象引用相同。
23.數據處理系統中的用于操作虛擬機的設備,該設備包括用于將對象存儲在由所述虛擬機進行管理的存儲器中的裝置,所述虛擬機在數據處理系統內的設備上運行;用于將對象與對象組內的多個對象關聯的裝置;用于將對象組與所述虛擬機關聯的裝置,其中,虛擬機包括與虛擬機群集中的其他虛擬機進行交互操作的功能,其中,虛擬機群集中的每一個虛擬機充當虛擬機群集內的節點;用于對虛擬機群集的每一個虛擬機內的多個對象組進行管理的裝置;以及用于允許對象組從所述虛擬機移動到虛擬機群集中的不同的虛擬機的裝置。
24.根據權利要求23所述的設備,進一步包括用于將對象組與所述虛擬機解除關聯的裝置;用于將對象組移動到虛擬機群集中的不同的虛擬機中的裝置;以及用于響應將對象組移動到不同的虛擬機,將對象組與所述不同的虛擬機關聯的裝置。
25.根據權利要求23所述的設備,進一步包括用于與虛擬機群集中的每一個虛擬機共享關于多個對象組的位置的信息的裝置。
26.根據權利要求23所述的設備,進一步包括用于將對象組和不同的對象組與由所述虛擬機進行管理的線程關聯的裝置。
27.根據權利要求26所述的設備,進一步包括用于將對象組和不同的對象組存儲在與線程關聯的線程本地堆陣中的裝置。
28.根據權利要求26所述的設備,進一步包括用于將對象組存儲在與線程關聯的第一線程本地堆陣中的裝置;以及用于將不同的對象組存儲在與線程關聯的第二線程本地堆陣中的裝置。
29.根據權利要求26所述的設備,進一步包括用于將對象組與線程解除關聯的裝置;用于終止線程的裝置;以及用于響應終止線程,在對象組和由所述虛擬機進行管理的線程之間沒有關聯的情況下,對對象組進行管理的裝置。
30.根據權利要求23所述的設備,進一步包括用于為對象創建獨立于對象的位置的對象句柄的裝置。
31.根據權利要求30所述的設備,進一步包括用于為對象生成對象句柄的裝置;用于將對象與之關聯的對象組的組標識符存儲在對象句柄中的裝置,其中,組標識符在虛擬機群集內是唯一的;以及用于將對象的對象標識符存儲在對象句柄中的裝置,其中,對象標識符在對象與之關聯的對象組內是唯一的。
32.根據權利要求23所述的設備,進一步包括用于為對象創建獨立于對象的位置并且獨立于對象與之關聯的對象組的位置的對象引用的裝置。
33.根據權利要求23所述的設備,進一步包括用于當對象位于所述虛擬機中時,為對象創建第一對象引用的裝置;用于將對象與之關聯的對象組移動到不同的虛擬機中的裝置;以及用于當對象位于不同的虛擬機中時,為對象創建第二對象引用的裝置,其中,第一對象引用和第二對象引用相同。
全文摘要
一種方法、設備、計算機程序產品以及數據處理系統給虛擬機的操作提供了嵌入的功能,用于與計算網絡中的其他虛擬機進行交互操作。多個虛擬機在數據處理系統內的一個或多個設備上運行;多個虛擬機中的每一個虛擬機都包括以類似于網格的方式與虛擬機群集中的其他虛擬機進行交互操作和關聯的功能。虛擬機群集中的每一個虛擬機充當虛擬機群集內的節點。虛擬機對與對象組相關聯的其對象進行管理,每一個虛擬機管理多個對象組。虛擬機共享信息,以便對象組可以在虛擬機群集中的虛擬機之間移動,從而允許虛擬機群集充當一個邏輯虛擬機。
文檔編號G06F9/46GK1906580SQ200480040746
公開日2007年1月31日 申請日期2004年10月26日 優先權日2004年1月21日
發明者斯科特·J·布魯薩爾德, 劉英(音譯), 埃德瓦爾多·N·斯普林 申請人:國際商業機器公司