CN1645330A - 用于应用程序分布式管理的启用网格的虚拟机的方法和系统 - Google Patents
用于应用程序分布式管理的启用网格的虚拟机的方法和系统 Download PDFInfo
- Publication number
- CN1645330A CN1645330A CNA2005100043845A CN200510004384A CN1645330A CN 1645330 A CN1645330 A CN 1645330A CN A2005100043845 A CNA2005100043845 A CN A2005100043845A CN 200510004384 A CN200510004384 A CN 200510004384A CN 1645330 A CN1645330 A CN 1645330A
- Authority
- CN
- China
- Prior art keywords
- virtual machine
- gjvm
- node
- virtual
- trooping
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
- G06F9/5088—Techniques for rebalancing the load in a distributed system involving task migration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5072—Grid computing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5022—Workload threshold
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Storage Device Security (AREA)
- Hardware Redundancy (AREA)
Abstract
一种方法、设备、计算机程序产品以及数据处理系统给虚拟机的操作提供了嵌入的功能,用于与计算网络中的其他虚拟机进行交互操作。多个虚拟机在数据处理系统内的一个或多个设备上运行;多个虚拟机中的每一个虚拟机都包括以类似于网格的方式与虚拟机群集中的其他虚拟机进行交互操作和关联的功能。虚拟机群集中的每一个虚拟机都可以作为虚拟机群集内的节点来操作。虚拟机共享信息,以便虚拟机可以添加到虚拟机群集中,或者以便当多个虚拟机继续运行时虚拟机可以从虚拟机群集中删除。可以在虚拟机群集内执行负载平衡操作,线程和对象可以在虚拟机群集内移动。
Description
技术领域
本发明涉及改善的数据处理系统,具体来说,涉及用于进行多计算机数据传输的方法和设备以及程序执行。
背景技术
与因特网相关的和与Web相关的技术广泛采用使得在物理上由成千上万个单位和企业以及成千上万的个人支持的互相连接的计算机的全球网络得到迅猛的发展。近来,企业进行了许多努力,以将许多计算机的计算容量组织到网格中,网格是许多计算机的逻辑组织,用于提供计算容量和数据存储容量的集体共享,同时维护对单个计算机的本地自治控制。
许多企业在Global Grid ForumTM(这由GGF,Inc.,支持)内进行合作,以为网格计算开发社区驱动的标准。The Globus ProjectTM是一项由政府机构、公司和大学支持的努力,以开发与网格相关的技术,开发成功了,开放式网格服务体系结构(OGSA),这是用于将网格概念包括在基于Web服务内的面向服务的框架内的网格概念。TheGlobus Toolkit是开放式网格服务体系结构的一种实现方式,它为开发启用网格的应用程序提供了软件编程工具,而JavaCommunityGrid(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显示了连接包含gJVM201-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 ID
Byte[]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和336的gJVM节点300。此外,gJVM节点370包含对象组372,而gJVM节点380包含对象组362。
如上所述,只要对象组至少具有一个对象,它就继续存在,即使最初与对象组关联的线程被终止。图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方法来进行。在mark-and-sweep方法中,当应用程序试图分配对象,但是存储器利用使对象分配操作难以进行或不可能完成时,由应用程序显式地或者自动地调用垃圾回收。虚拟机穿过所有对象,将它们标记起来,然后,扫描所有线程和统计数据(全局数据),以再次标记所有可以遍历到的所有对象。虚拟机暂停所有线程,然后遍查每一个线程的堆栈帧的数据结构,从而它标记可由任何线程引用的所有对象,可能是一个应用程序一个应用程序地进行。然后,销毁或删除没有被标记为可引用的所有对象,从而释放存储器,以便让虚拟机分配对象。
大多数对象通常是只能由一个线程访问的对象。利用本发明的虚拟机群集,可以远程地引用对象;当远程地引用对象时,它被同样地标记起来。在一个实施例中,gJVM节点可以具有一个单独的守护线程,该线程以低优先级运行并定期遍历系统,以执行远程垃圾回收处理。每一个对象都可以具有远程垃圾回收位,该位将由远程垃圾回收守护在mark-and-sweep方法中使用。如果被远程引用的对象不再在其中建立了该对象的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内的所选择的位置(步骤1609),并在必要时(例如,如果线程与对象组一起迁移)将接收到的对象组与线程关联(步骤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在启动时被指定为主节点,虽然它可以在稍后的时间点将其作为主节点的状态委派给逻辑gJVM2310内的另一个节点。在此示例中,节点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之类的介质,和诸如数字和模拟通信链路之类的传输类型的介质。
方法一般来说是产生所希望的结果的步骤的首尾一致的序列。这些步骤要求对物理量进行物理操作。通常,尽管不一定,这些量呈现能够存储、转移、合成、比较以及以其他方式进行操作的电的或磁性信号的形式。有时,主要是由于通用的原因,将这些信号称为位、值、参数、项目、元素、对象、符号、字符、术语、数字等等是很方便的。然而,应该注意,所有这些术语和类似的术语都与相应的物理量关联,只是应用于这些量的方便的标记。
本发明的描述只作说明,而不是详尽的说明或只限于所说明的实施例。那些精通本技术的普通人员将认识到,可以进行许多修改。所选择的实施例只是为了最好地说明本发明的原理以及其实际应用,并使精通本技术的其他人理解本发明,以便实现带有各种修改的各种实施例,只要可以适合于其他预期的用途。
Claims (24)
1.一种操作数据处理系统内的虚拟机的方法,该方法包括下列计算机实现的步骤:
在数据处理系统内的一个或多个设备上运行多个虚拟机,其中,多个虚拟机中的每一个虚拟机都包括与虚拟机群集中的其他虚拟机进行交互操作的功能;以及
关联虚拟机群集中的多个虚拟机,其中,虚拟机群集中的每一个虚拟机都可以作为虚拟机群集内的节点来操作。
2.根据权利要求1所述的方法,进一步包括:
共享有关虚拟机群集内的多个虚拟机的信息,以便虚拟机可以添加到虚拟机群集中,或者以便当多个虚拟机继续运行时虚拟机可以从虚拟机群集中删除。
3.根据权利要求1所述的方法,进一步包括:
在虚拟机群集中的虚拟机之间共享表示计算机资源使用率的负载值;以及
跨虚拟机群集执行负载平衡操作。
4.根据权利要求3所述的方法,进一步包括:
判断第一虚拟机上的CPU负载使用率是否超过阈值;以及
在负载平衡操作过程中将线程从第一虚拟机移到第二虚拟机。
5.根据权利要求3所述的方法,进一步包括:
判断第一虚拟机上的存储器负载使用率是否超过阈值;以及
在负载平衡操作过程中将具有一个或多个对象的对象集从第一虚拟机移到第二虚拟机。
6.根据权利要求1所述的方法,进一步包括:
将线程从虚拟机群集中的第一虚拟机移到虚拟机群集中的第二虚拟机。
7.根据权利要求1所述的方法,进一步包括:
将具有一个或多个对象的对象集从虚拟机群集中的第一虚拟机移到虚拟机群集中的第二虚拟机。
8.根据权利要求1所述的方法,进一步包括:
运行虚拟机群集内的多线程应用程序;以及
在不同的虚拟机上分派多线程应用程序的线程,以便横跨多个虚拟机执行多线程应用程序。
9.计算机可读的介质中的在数据处理系统内用于操作虚拟机的计算机程序产品,该计算机程序产品包括:
用于在数据处理系统内的一个或多个设备上运行多个虚拟机中的一个虚拟机的装置,其中,多个虚拟机中的每一个虚拟机都包括与虚拟机群集中的其他虚拟机进行交互操作的功能;以及
用于将一个虚拟机与虚拟机群集中的多个虚拟机相关联的装置,其中,虚拟机群集中的每一个虚拟机都可以作为虚拟机群集内的节点来操作。
10.根据权利要求9所述的计算机程序产品,进一步包括:
用于共享有关虚拟机群集内的多个虚拟机的信息,以便虚拟机可以添加到虚拟机群集中,或者以便当多个虚拟机继续运行时虚拟机可以从虚拟机群集中删除的装置。
11.根据权利要求9所述的计算机程序产品,进一步包括:
用于在虚拟机群集中的虚拟机之间共享表示计算机资源使用率的负载值的装置;以及
用于跨虚拟机群集执行负载平衡操作的装置。
12.根据权利要求11所述的计算机程序产品,进一步包括:
用于判断第一虚拟机上的CPU负载使用率是否超过阈值的装置;以及
用于在负载平衡操作过程中将线程从第一虚拟机移到第二虚拟机的装置。
13.根据权利要求11所述的计算机程序产品,进一步包括:
用于判断第一虚拟机上的存储器负载使用率是否超过阈值的装置;以及
用于在负载平衡操作过程中将具有一个或多个对象的对象集从第一虚拟机移到第二虚拟机的装置。
14.根据权利要求9所述的计算机程序产品,进一步包括:
用于将线程从虚拟机群集中的第一虚拟机移到虚拟机群集中的第二虚拟机的装置。
15.根据权利要求9所述的计算机程序产品,进一步包括:
用于将具有一个或多个对象的对象集从虚拟机群集中的第一虚拟机移到虚拟机群集中的第二虚拟机的装置。
16.根据权利要求9所述的计算机程序产品,进一步包括:
用于运行虚拟机群集内的多线程应用程序的装置;以及
用于在不同的虚拟机上分派多线程应用程序的线程,以便横跨多个虚拟机执行多线程应用程序的装置。
17.在数据处理系统内用于操作虚拟机的设备,该设备包括:
用于在数据处理系统内的一个或多个设备上运行多个虚拟机中的一个虚拟机的装置,其中,多个虚拟机中的每一个虚拟机都包括与虚拟机群集中的其他虚拟机进行交互操作的功能;以及
用于将一个虚拟机与虚拟机群集中的多个虚拟机相关联的装置,其中,虚拟机群集中的每一个虚拟机都可以作为虚拟机群集内的节点来操作。
18.根据权利要求17所述的设备,进一步包括:
用于共享有关虚拟机群集内的多个虚拟机的信息,以便虚拟机可以添加到虚拟机群集中,或者以便当多个虚拟机继续运行时虚拟机可以从虚拟机群集中删除的装置。
19.根据权利要求17所述的设备,进一步包括:
用于在虚拟机群集中的虚拟机之间共享表示计算机资源使用率的负载值的装置;以及
用于跨虚拟机群集执行负载平衡操作的装置。
20.根据权利要求19所述的设备,进一步包括:
用于判断第一虚拟机上的CPU负载使用率是否超过阈值的装置;以及
用于在负载平衡操作过程中将线程从第一虚拟机移到第二虚拟机的装置。
21.根据权利要求19所述的设备,进一步包括:
用于判断第一虚拟机上的存储器负载使用率是否超过阈值的装置;以及
用于在负载平衡操作过程中将具有一个或多个对象的对象集从第一虚拟机移到第二虚拟机的装置。
22.根据权利要求17所述的设备,进一步包括:
用于将线程从虚拟机群集中的第一虚拟机移到虚拟机群集中的第二虚拟机的装置。
23.根据权利要求17所述的设备,进一步包括:
用于将具有一个或多个对象的对象集从虚拟机群集中的第一虚拟机移到虚拟机群集中的第二虚拟机的装置。
24.根据权利要求17所述的设备,进一步包括:
用于运行虚拟机群集内的多线程应用程序的装置;以及
用于在不同的虚拟机上分派多线程应用程序的线程,以便横跨多个虚拟机执行多线程应用程序的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/762,000 | 2004-01-21 | ||
US10/762,000 US20050160424A1 (en) | 2004-01-21 | 2004-01-21 | Method and system for grid-enabled virtual machines with distributed management of applications |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1645330A true CN1645330A (zh) | 2005-07-27 |
CN100418057C CN100418057C (zh) | 2008-09-10 |
Family
ID=34750300
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100043845A Expired - Fee Related CN100418057C (zh) | 2004-01-21 | 2005-01-20 | 用于应用程序分布式管理的启用网格的虚拟机的方法和系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20050160424A1 (zh) |
EP (1) | EP1577770A3 (zh) |
CN (1) | CN100418057C (zh) |
TW (1) | TWI336863B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100389392C (zh) * | 2006-05-29 | 2008-05-21 | 杭州华三通信技术有限公司 | 一种集群系统中实现负载均衡的方法、系统和存储控制器 |
CN1976350B (zh) * | 2005-10-27 | 2010-04-21 | 国际商业机器公司 | 用于分布式计算系统的方法和装置 |
CN102667723A (zh) * | 2009-10-30 | 2012-09-12 | 思科技术公司 | 根据物理资源的可用性来均衡服务器负荷 |
CN103399796A (zh) * | 2006-12-12 | 2013-11-20 | Lsi公司 | 利用存储负载信息来平衡集群虚拟机 |
CN103514102A (zh) * | 2013-10-25 | 2014-01-15 | 中国联合网络通信集团有限公司 | 一种Java虚拟机实现内存垃圾回收的方法及装置 |
CN104580113A (zh) * | 2013-10-25 | 2015-04-29 | 腾讯科技(深圳)有限公司 | 一种处理外部请求的方法及装置 |
CN107203413A (zh) * | 2017-05-27 | 2017-09-26 | 北京思特奇信息技术股份有限公司 | 一种资源数据调度系统及方法 |
Families Citing this family (59)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8413155B2 (en) | 2004-03-13 | 2013-04-02 | Adaptive Computing Enterprises, Inc. | System and method for a self-optimizing reservation in time of compute resources |
US7487239B2 (en) * | 2004-03-25 | 2009-02-03 | International Business Machines Corporation | Composite resource models |
US7784054B2 (en) * | 2004-04-14 | 2010-08-24 | Wm Software Inc. | Systems and methods for CPU throttling utilizing processes |
US20070266388A1 (en) | 2004-06-18 | 2007-11-15 | Cluster Resources, Inc. | System and method for providing advanced reservations in a compute environment |
US9329905B2 (en) * | 2004-10-15 | 2016-05-03 | Emc Corporation | Method and apparatus for configuring, monitoring and/or managing resource groups including a virtual machine |
WO2006053093A2 (en) | 2004-11-08 | 2006-05-18 | Cluster Resources, Inc. | System and method of providing system jobs within a compute environment |
US7458066B2 (en) | 2005-02-28 | 2008-11-25 | Hewlett-Packard Development Company, L.P. | Computer system and method for transferring executables between partitions |
WO2006107531A2 (en) | 2005-03-16 | 2006-10-12 | Cluster Resources, Inc. | Simple integration of an on-demand compute environment |
US9231886B2 (en) | 2005-03-16 | 2016-01-05 | Adaptive Computing Enterprises, Inc. | Simple integration of an on-demand compute environment |
US7607129B2 (en) * | 2005-04-07 | 2009-10-20 | International Business Machines Corporation | Method and apparatus for using virtual machine technology for managing parallel communicating applications |
CA2603577A1 (en) | 2005-04-07 | 2006-10-12 | Cluster Resources, Inc. | On-demand access to compute resources |
US8484213B2 (en) * | 2005-08-31 | 2013-07-09 | International Business Machines Corporation | Heterogenous high availability cluster manager |
US20070198554A1 (en) * | 2006-02-10 | 2007-08-23 | Sun Microsystems, Inc. | Apparatus for business service oriented management infrastructure |
US8627402B2 (en) | 2006-09-19 | 2014-01-07 | The Invention Science Fund I, Llc | Evaluation systems and methods for coordinating software agents |
US20080071793A1 (en) * | 2006-09-19 | 2008-03-20 | Searete Llc, A Limited Liability Corporation Of The State Of Delaware | Using network access port linkages for data structure update decisions |
US20080098309A1 (en) * | 2006-10-24 | 2008-04-24 | Microsoft Corporation | Managing virtual machines and hosts by property |
US8336046B2 (en) * | 2006-12-29 | 2012-12-18 | Intel Corporation | Dynamic VM cloning on request from application based on mapping of virtual hardware configuration to the identified physical hardware resources |
US9003410B2 (en) | 2007-01-30 | 2015-04-07 | Hewlett-Packard Development Company, L.P. | Abstracting a multithreaded processor core to a single threaded processor core |
US8646052B2 (en) * | 2008-03-31 | 2014-02-04 | Intel Corporation | Method and apparatus for providing a secure display window inside the primary display |
US9286080B2 (en) | 2008-07-02 | 2016-03-15 | Hewlett-Packard Development Company, L.P. | Memory management for hypervisor loading |
US20100031252A1 (en) * | 2008-07-29 | 2010-02-04 | Compuware Corporation | Method And System For Monitoring The Performance Of An Application And At Least One Storage Device For Storing Code Which Performs The Method |
US20100042723A1 (en) * | 2008-08-12 | 2010-02-18 | Srikanth Sundarrajan | Method and system for managing load in a network |
US8843742B2 (en) | 2008-08-26 | 2014-09-23 | Hewlett-Packard Company | Hypervisor security using SMM |
KR101489466B1 (ko) | 2008-12-17 | 2015-02-03 | 삼성전자 주식회사 | 프로세스 마이그레이션을 관리하는 장치 및 방법 |
US8392916B2 (en) * | 2008-12-31 | 2013-03-05 | International Business Machines Corporation | Multiple layers of virtualization in a computing system |
US9817695B2 (en) * | 2009-04-01 | 2017-11-14 | Vmware, Inc. | Method and system for migrating processes between virtual machines |
US20110004878A1 (en) * | 2009-06-30 | 2011-01-06 | Hubert Divoux | Methods and systems for selecting a desktop execution location |
US8738832B1 (en) | 2009-06-30 | 2014-05-27 | International Business Machines Corporation | Microgrid apparatus with central area containing plural processors communicating via respective wireless connection point or bi-directional bus with module in docking bays defined by radial arms |
US7962425B1 (en) * | 2009-07-06 | 2011-06-14 | International Business Machines Corporation | Method and system for responding to an alert |
US8713182B2 (en) * | 2009-08-03 | 2014-04-29 | Oracle International Corporation | Selection of a suitable node to host a virtual machine in an environment containing a large number of nodes |
US9154362B1 (en) | 2009-08-14 | 2015-10-06 | International Business Machines Corporation | Macro grid governance and communication |
US11720290B2 (en) | 2009-10-30 | 2023-08-08 | Iii Holdings 2, Llc | Memcached server functionality in a cluster of data processing nodes |
US8664911B1 (en) * | 2009-10-30 | 2014-03-04 | International Business Machines Corporation | Micro grid bridge structures |
US8180999B1 (en) | 2010-02-03 | 2012-05-15 | International Business Machines Corporation | Vertically tiered horizontally expandable micro grid system with bridge docking bay contoured by radial arms extending from central hub for coupling processor or power hubs |
US8035337B1 (en) | 2010-02-03 | 2011-10-11 | International Business Machines Corporation | Micro grid sensor and actuator apparatus |
US8412810B1 (en) * | 2010-07-02 | 2013-04-02 | Adobe Systems Incorporated | Provisioning and managing a cluster deployed on a cloud |
TWI425421B (zh) * | 2010-07-07 | 2014-02-01 | Univ Shu Te | Load Balancing Design Method of Virtual Machine in Cloud Computing Environment |
US8726274B2 (en) * | 2010-09-10 | 2014-05-13 | International Business Machines Corporation | Registration and initialization of cluster-aware virtual input/output server nodes |
US8495630B2 (en) * | 2010-11-03 | 2013-07-23 | International Business Machines Corporation | Transferring objects between virtual machines |
US9237087B1 (en) * | 2011-03-16 | 2016-01-12 | Google Inc. | Virtual machine name resolution |
US8813072B1 (en) | 2011-03-18 | 2014-08-19 | DirectPacket Research Inc. | Inverse virtual machine |
US8769531B2 (en) * | 2011-05-25 | 2014-07-01 | International Business Machines Corporation | Optimizing the configuration of virtual machine instances in a networked computing environment |
US8832690B1 (en) | 2011-06-21 | 2014-09-09 | Google Inc. | Multi-threaded virtual machine processing on a web page |
US9361162B1 (en) * | 2011-08-26 | 2016-06-07 | Amazon Technologies, Inc. | Executing threads of an application across multiple computing devices in a distributed virtual machine environment |
US9250969B2 (en) | 2011-08-30 | 2016-02-02 | At&T Intellectual Property I, L.P. | Tagging a copy of memory of a virtual machine with information for fetching of relevant portions of the memory |
US9304811B2 (en) | 2012-06-29 | 2016-04-05 | Intel Corporation | Methods and systems to identify and migrate threads among system nodes based on system performance metrics |
US20140012704A1 (en) | 2012-07-05 | 2014-01-09 | Google Inc. | Selecting a preferred payment instrument based on a merchant category |
US9239727B1 (en) | 2012-10-17 | 2016-01-19 | Amazon Technologies, Inc. | Configurable virtual machines |
GB2507779A (en) * | 2012-11-09 | 2014-05-14 | Ibm | Terminating a virtual machine in response to user inactivity in a cloud computing environment |
KR20140080058A (ko) * | 2012-12-20 | 2014-06-30 | 삼성전자주식회사 | 멀티코어를 위한 로드 밸런싱 방법 및 휴대 단말 |
US10311014B2 (en) * | 2012-12-28 | 2019-06-04 | Iii Holdings 2, Llc | System, method and computer readable medium for offloaded computation of distributed application protocols within a cluster of data processing nodes |
US9092767B1 (en) | 2013-03-04 | 2015-07-28 | Google Inc. | Selecting a preferred payment instrument |
US20140373009A1 (en) * | 2013-06-13 | 2014-12-18 | Microsoft Corporation | Thread operation across virtualization contexts |
US9811364B2 (en) | 2013-06-13 | 2017-11-07 | Microsoft Technology Licensing, Llc | Thread operation across virtualization contexts |
US9858572B2 (en) | 2014-02-06 | 2018-01-02 | Google Llc | Dynamic alteration of track data |
CN104572295B (zh) * | 2014-12-12 | 2016-06-01 | 北京应用物理与计算数学研究所 | 匹配于高性能计算机体系结构的结构网格数据管理方法 |
US10789223B2 (en) * | 2016-03-24 | 2020-09-29 | Microsoft Technology Licensing, Llc | Hybrid garbage collection in a distributed storage system |
US11693832B2 (en) * | 2018-03-15 | 2023-07-04 | Vmware, Inc. | Flattening of hierarchical data into a relational schema in a computing system |
CN109379443B (zh) * | 2018-12-18 | 2022-02-15 | 央视国际网络无锡有限公司 | 一种面向物联网的分布式消息队列的实现方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4975836A (en) * | 1984-12-19 | 1990-12-04 | Hitachi, Ltd. | Virtual computer system |
US6385643B1 (en) * | 1998-11-05 | 2002-05-07 | Bea Systems, Inc. | Clustered enterprise Java™ having a message passing kernel in a distributed processing system |
US6732139B1 (en) * | 1999-08-16 | 2004-05-04 | International Business Machines Corporation | Method to distribute programs using remote java objects |
US6618737B2 (en) * | 2000-03-09 | 2003-09-09 | International Business Machines Corporation | Speculative caching of individual fields in a distributed object system |
ES2249450T3 (es) * | 2000-07-05 | 2006-04-01 | ERNST & YOUNG LLP | Metodo y aparato para proporcionar servicios informaticos. |
US7213246B1 (en) * | 2002-03-28 | 2007-05-01 | Veritas Operating Corporation | Failing over a virtual machine |
US7043522B2 (en) * | 2002-05-30 | 2006-05-09 | Microsoft Corporation | Unbounded computing space |
US7401259B2 (en) * | 2003-06-19 | 2008-07-15 | Sun Microsystems, Inc. | System and method for scenario generation in a distributed system |
US7203944B1 (en) * | 2003-07-09 | 2007-04-10 | Veritas Operating Corporation | Migrating virtual machines among computer systems to balance load caused by virtual machines |
-
2004
- 2004-01-21 US US10/762,000 patent/US20050160424A1/en not_active Abandoned
- 2004-11-03 EP EP04105464A patent/EP1577770A3/en not_active Withdrawn
-
2005
- 2005-01-17 TW TW094101284A patent/TWI336863B/zh not_active IP Right Cessation
- 2005-01-20 CN CNB2005100043845A patent/CN100418057C/zh not_active Expired - Fee Related
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1976350B (zh) * | 2005-10-27 | 2010-04-21 | 国际商业机器公司 | 用于分布式计算系统的方法和装置 |
CN100389392C (zh) * | 2006-05-29 | 2008-05-21 | 杭州华三通信技术有限公司 | 一种集群系统中实现负载均衡的方法、系统和存储控制器 |
CN103399796A (zh) * | 2006-12-12 | 2013-11-20 | Lsi公司 | 利用存储负载信息来平衡集群虚拟机 |
CN102667723A (zh) * | 2009-10-30 | 2012-09-12 | 思科技术公司 | 根据物理资源的可用性来均衡服务器负荷 |
US9122537B2 (en) | 2009-10-30 | 2015-09-01 | Cisco Technology, Inc. | Balancing server load according to availability of physical resources based on the detection of out-of-sequence packets |
CN102667723B (zh) * | 2009-10-30 | 2015-09-02 | 思科技术公司 | 根据物理资源的可用性来均衡服务器负荷 |
CN103514102A (zh) * | 2013-10-25 | 2014-01-15 | 中国联合网络通信集团有限公司 | 一种Java虚拟机实现内存垃圾回收的方法及装置 |
CN104580113A (zh) * | 2013-10-25 | 2015-04-29 | 腾讯科技(深圳)有限公司 | 一种处理外部请求的方法及装置 |
CN103514102B (zh) * | 2013-10-25 | 2016-09-21 | 中国联合网络通信集团有限公司 | 一种Java虚拟机实现内存垃圾回收的方法及装置 |
CN104580113B (zh) * | 2013-10-25 | 2018-09-04 | 腾讯科技(深圳)有限公司 | 一种处理外部请求的方法及装置 |
CN107203413A (zh) * | 2017-05-27 | 2017-09-26 | 北京思特奇信息技术股份有限公司 | 一种资源数据调度系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
TW200540711A (en) | 2005-12-16 |
EP1577770A2 (en) | 2005-09-21 |
TWI336863B (en) | 2011-02-01 |
EP1577770A3 (en) | 2007-10-17 |
CN100418057C (zh) | 2008-09-10 |
US20050160424A1 (en) | 2005-07-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1645330A (zh) | 用于应用程序分布式管理的启用网格的虚拟机的方法和系统 | |
CN1906580A (zh) | 对于具有可移动对象的启用网格的虚拟机的方法和系统 | |
CN1311380C (zh) | 有助于从网络的移动设备中选择本地注册表主机的方法和系统 | |
CN1249601C (zh) | 用于远程web服务克隆和实例化的系统和方法 | |
CN1291313C (zh) | 操作系统的自动安装和配置的系统和方法 | |
EP3910473B1 (en) | Flexible computing | |
CN1577322A (zh) | 管理数据处理系统中的应用文件的方法和装置 | |
EP1492001A2 (en) | Software image creation in a distributed build environment | |
US20060277307A1 (en) | Method for allocating shared computing infrastructure for application server-based deployments | |
CN101079902A (zh) | 海量数据分级存储方法 | |
US10664278B2 (en) | Method and apparatus for hardware acceleration in heterogeneous distributed computing | |
CN101039330A (zh) | 在移动应用程序环境中使用的产品 | |
US20040068553A1 (en) | Dynamically selecting a Web service container for hosting remotely instantiated Web services | |
CN1902588A (zh) | 在次最佳网格环境中维持应用工作 | |
CN113645300A (zh) | 一种基于Kubernetes集群的节点智能调度方法和系统 | |
CN1298503A (zh) | 分布式系统中的动态查找服务 | |
CN1591339A (zh) | 提供共享Web模块的系统和方法 | |
CN1650255A (zh) | 移动应用环境 | |
CN1306407C (zh) | 为动态提供而自主地自学习资源选择的方法和系统 | |
CN101075190A (zh) | 资源管理平台中的数据引擎 | |
US11797497B2 (en) | Bundle creation and distribution | |
US20240143565A1 (en) | Observability loop | |
MXPA06007915A (en) | Method and system for a grid-enabled virtual machine with movableobjects |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080910 Termination date: 20160120 |
|
EXPY | Termination of patent right or utility model |