CN107077358B - 用于在分布式计算环境中支持可执行代码的动态部署的系统和方法 - Google Patents
用于在分布式计算环境中支持可执行代码的动态部署的系统和方法 Download PDFInfo
- Publication number
- CN107077358B CN107077358B CN201580051606.0A CN201580051606A CN107077358B CN 107077358 B CN107077358 B CN 107077358B CN 201580051606 A CN201580051606 A CN 201580051606A CN 107077358 B CN107077358 B CN 107077358B
- Authority
- CN
- China
- Prior art keywords
- class
- node
- client
- definition
- new
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- 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
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
系统和方法在分布式计算环境中支持可执行代码的动态部署。分布式计算环境中的服务器节点可以从客户端接收类定义以执行,并且使用所述类定义生成类的实例并将其加载到存储器中,而无需重新启动或重新部署服务器节点。类定义可以定义否则对服务器节点不可用的新的或更新的类。使用唯一类身份来识别类,这使得能够确定类是新的还是更新的。类身份可以用于确定将类定义传输到服务器节点的需要,并且还用于确保实现了类的正确版本。在特定情况下,新的或更新的类定义实现lambda表达式。
Description
版权声明
本专利文档的公开内容的一部分包含受版权保护的素材。版权拥有者不反对任何人对专利文档或专利公开内容按照它在专利商标局的专利文件或记录中出现的那样进行传真复制,但是除此之外在任何情况下都保留所有版权。
技术领域
本发明一般而言涉及计算机系统,并且具体而言涉及分布式计算环境。
发明内容
本公开描述了可以在分布式计算环境中支持可执行代码的动态部署的系统和方法。客户端为一个或多个类或更新的类生成类定义。类定义被串行化并传输到分布式计算环境中的服务器。分布式计算环境中的服务器接收串行化的类定义、解串行化(deserialize)类定义、并且在服务器上生成一个或多个类或更新的类用于执行。类或更新的类可以表示lambda表达式。此外,类或更新的类被提供有唯一身份,以确保执行正确的类或类版本并且确保串行化和分发服务器上不可用的类定义。可执行代码的动态部署使得能够在服务器节点上执行代理,其中代理依赖于否则对服务器节点不可用的新类定义。
在实施例中,本公开描述了一种用于在分布式计算环境中支持 lambda表达式的方法。该方法包括经由服务器接收实现lambda表达式的类定义。客户端生成实现lambda表达式的所述类定义、将其串行化并将其发送到服务器。服务器基于接收到的类定义来定义lambda类。如果lambda表达式在客户端侧被更新,那么将表示更新的lambda表达式的新类定义发送到服务器。
当结合附图阅读时,根据以下各种实施例的描述,本发明的这些和其它目的和优点对于本领域技术人员将变得显而易见。
附图说明
图1图示根据本发明的实施例的分布式数据网格。
图2A图示根据本发明的实施例的支持可执行代码的动态部署的分布式计算环境。
图2B图示根据本发明的实施例的支持可执行代码的动态部署的方法。
图3A图示根据本发明的实施例的支持实现lambda表达式的可执行代码的动态部署的分布式计算环境。
图3B图示根据本发明的实施例的支持实现lambda表达式的可执行代码的动态部署的方法。
具体实施方式
本文描述的是在分布式计算环境中支持可执行代码的动态部署的系统和方法。分布式计算环境中的服务器节点可以从客户端接收类定义,以在不重新启动或重新部署服务器节点的情况下使用所述类定义来执行和生成类的实例并将该实例加载到存储器中。类定义可以实现否则对服务器节点不可用的新的或更新的类定义。利用唯一的类身份来识别类,这使得能够确定类是新的还是更新的。类身份可以用于确定将类定义传送到服务器节点的需要,并且还用于确保实现了类的正确版本。可执行代码的动态部署使得能够在服务器节点上执行代理,其中代理依赖于否则对服务器节点不可用的新类定义。
在特定实施例中,本公开描述可以在分布式计算环境中支持实现 lambda表达式的类定义的动态部署的系统和方法。分布式计算环境中的服务器可以从客户端接收一个或多个类定义,其中客户端生成所述一个或多个类定义以实现lambda表达式。然后,服务器可以基于接收到的类定义在服务器侧上定义lambda类。此外,当lambda表达式在客户端侧上被更新时,可以准备用于更新的lambda类的新类定义并将新类定义从客户端发送到服务器。
用于支持可执行代码的动态部署的系统和方法在下面关于图1描述的分布式数据网格中具有特定的用途,其中所述可执行代码的动态部署包括如本文所述和如图2A、2B、3A和3B中所图示的实现 lambda的类定义的动态部署的。用于支持包括实现lambda的类定义的动态部署的可执行代码的动态部署的系统和方法也可以应用于各种各样的替代分布式计算环境中。
在以下描述中,将在附图的图中通过示例的方式而非限制的方式图示本发明。对本公开中的各种实施例的引用不一定是引用相同的实施例,并且这样的引用意味着至少一个。虽然讨论了具体实现,但是应当理解的是,这只是为了说明性的目的而提供。相关领域的技术人员将认识到的是,在不脱离本发明的范围和精神的情况下,可以使用其它组件和配置。
此外,在某些情况下,将阐述许多具体细节以提供对本发明的详尽描述。但是,对于本领域技术人员将显而易见的是,可以在没有这些具体细节的情况下实践本发明。在其它情况下,没有详细描述众所周知的特征,以免模糊本发明。
借助于图示特定功能的性能及其关系的功能构建块描述本发明。为了方便描述,本文往往任意地定义这些功能构建块的边界。因此,示出为由相同元件执行的功能在替代实施例中可由不同元件执行。并且示出为在单独元件中执行的功能可以替代地合并到一个元件中。只要适当地执行特定功能及其关系,就可以定义替代边界。任何这样的替代边界因此在本发明的范围和精神之内。
贯穿附图和详细描述,使用了共同的附图标记指示相同的元件;因此,如果在其它地方描述元素,那么可以或可以不在特定于该图的详细描述中引用在图中使用的附图标记。三位数字标号中的第一个数字指示该元件首次出现的图系列。
分布式数据网格
分布式数据网格是其中计算机服务器的集合在一个或多个集群中一起工作以管理分布式或集群环境内的信息和相关操作(诸如,计算) 的系统。分布式数据网格可以用于管理跨服务器共享的应用对象和数据。分布式数据网格提供低响应时间、高吞吐量、可预测的可扩展性、连续可用性和信息可靠性。作为这些能力的结果,分布式数据网格非常适合在计算密集型、有状态的中间层应用中使用。在特定示例中,
分布式数据网格(诸如例如,Coherence数据网格)将信息存储在存储器中以实现更高的性能,并且在使该信息的拷贝跨若干服务器同步中采用冗余,从而在服务器故障的情况下确保系统的复原以及数据持续的可用性。
在以下描述中,描述具有分区的高速缓存的Coherence 数据网格。但是,本领域的普通技术人员将理解的是,在不脱离本发明的范围的情况下,例如在以上发明内容中描述的本发明可以应用于本领域已知的任何分布式数据网格。此外,虽然描述了 Coherence分布式数据网格的许多具体细节以提供对本发明的详尽描述,但是对于本领域技术人员来说将显而易见的是,可以在没有这些具体细节的分布式数据网格中实践本发明。因此,在一些实施例中,在不脱离本发明的范围的情况下,体现本发明的分布式数据网格的特定实现可以排除某些特征、和/或包括与下面描述的分布式数据网格不同的或经修改的特征。
图1图示存储数据并且向客户端150提供数据访问的分布式数据网格100的示例。“数据网格集群”或“分布式数据网格”是包括多个计算机服务器(例如,120a、120b、120c和120d)的系统,这些计算机服务器在一个或多个集群(例如,100a、100b、100c)中一起工作以在分布式或集群环境中存储和管理信息以及相关操作,诸如计算。虽然分布式数据网格100被图示为包括四个服务器120a、120b、 120c、120d,其中在集群100a中具有五个数据节点130a、130b、 130c、130d和130e,但是分布式数据网格100可以包括任何数量的集群以及在每一个集群中包括任何数量的服务器和/或节点。分布式数据网格可以在内存中存储信息以实现更高的性能,并且在使该信息的拷贝跨若干服务器同步中采用冗余,从而在服务器故障的情况下确保系统的复原以及数据持续的可用性。在实施例中,分布式数据网格 100实现例如在以上发明内容和下面的详细描述中所描述的本发明。
如图1所图示,分布式数据网格通过在一起工作的多个服务器 (例如,120a、120b、120c和120d)上分布数据来提供数据存储和管理能力。数据网格集群的每一个服务器可以是常规的计算机系统,诸如例如,具有一个到两个处理器插座和每处理器插座具有两个到四个CPU核的“商品x86”服务器硬件平台。每一个服务器(例如, 120a、120b、120c和120d)被配置有一个或多个CPU、网络接口卡 (NIC)和存储器,该存储器包括例如最小4GB的RAM,多至 64GB或更大的RAM。服务器120a被图示为具有CPU 122a、存储器124a和NIC 126a(这些元件在其它服务器120b、120c、120d中也存在但没有示出)。可选地,每一个服务器也可以提供有闪存——例如SSD 128a——以提供溢出存储容量。当提供时,SSD容量优选地是RAM的容量的十倍。数据网格集群100a中的服务器(例如 120a、120b、120c、120d)使用高带宽NIC(例如,PCI-X或PCIe) 连接到高性能网络交换机120(例如,千兆以太网或更好的以太网)。
集群100a优选地包含最少四个物理服务器以避免在故障期间数据丢失的可能性,但是典型的安装具有更多的服务器。每一个集群中存在的服务器越多,故障转移和故障恢复越高效,并且服务器故障对集群的影响减少。为了最小化服务器之间的通信时间,每一个数据网格集群被理想地限制于在服务器之间提供单跳通信的单个交换机102。因此,集群会受交换机102上的端口数量限制。因此,典型的集群将包括4个到96个之间的物理服务器。
在分布式数据网格100的大多数广域网(WAN)配置中,WAN 中的每一个数据中心具有独立但互连的数据网格集群(例如,100a、 100b和100c)。WAN可以例如包括比图1中所示的更多的集群。另外,通过使用互连但独立的集群(例如,100a、100b、100c)和/ 或在彼此远离的数据中心中的定位互连但独立的集群,分布式数据网格可以为客户端150保护数据和服务,以防止由自然灾害、火灾、洪水、长时间的电力瘫痪等引起的一个集群中的所有服务器的同时丢失。贯穿整个企业和跨地域维护的集群构成了企业数据的自动“备份存储”和高可用性服务。
一个或多个节点(例如,130a、130b、130c、130d和130e)在集群100a的每一个服务器(例如,120a、120b、120c、120d)上操作。在分布式数据网格中,节点可以是例如软件应用、虚拟机等,并且服务器可以包括节点在其上操作的操作系统、管理程序等(未示出)。在Coherence数据网格中,每一个节点是Java虚拟机(JVM)。取决于服务器上的CPU处理能力和可用的存储器,可以在每一个服务器上提供多个JVM/节点。JVM/节点可以按照分布式数据网格的需要进行添加、启动、停止和删除。运行 Coherence的JVM在启动时自动加入集群。加入集群的JVM/节点被称为集群成员或集群节点。
在Coherence数据网格中,集群成员使用Tangosol集群管理协议(TCMP)进行通信。TCMP是用于发现集群成员、管理集群、供给服务以及在集群成员之间传输数据的基于IP的协议。 TCMP协议提供所有消息的完全可靠的、有序的递送。由于底层 UDP/IP协议不提供可靠的或有序的递送,因此TCMP使用排队的、完全异步的、基于ACK和NACK的机制用于可靠的消息递送,利用唯一整体身份(unique integral identity)保证与在服务器上操作的JVM相关联的队列中的消息的排序。无论集群大小如何,TCMP 协议只需要每JVM/节点三个UDP/IP套接字(一个多播,两个单播) 和六个线程。
数据网格集群的功能基于由集群节点提供的服务。由集群节点提供的每一个服务都有特定的功能。在提供和消费集群服务方面,每一个集群节点可以参与多个集群服务(作为其成员)。一些集群服务由集群中的所有节点提供,而其它服务由集群中的仅一个或仅一些节点提供。每一个服务具有唯一识别数据网格集群内的服务的服务名称以及定义服务可以做什么的服务类型。可以存在由数据网格集群中的节点提供的每种服务类型(除了根集群服务之外)的若干命名实例。所有服务优选地在没有任何数据丢失的情况下提供故障转移和故障恢复。
由集群节点提供的每一个服务实例通常使用一个服务线程来提供服务的特定功能。例如,由节点提供的分布式高速缓存服务由节点的单个服务线程提供。当在JVM/节点中解析用于分布式高速缓存的模式定义时,用模式中指定的名称来实例化服务线程。这个服务线程管理使用模式定义创建的高速缓存中的数据。一些服务可选地支持可以被配置成向服务线程提供附加处理资源的工作者线程的线程池。服务线程与线程池中的工作者线程协作以提供服务的特定功能。
在Coherence数据网格中,集群服务(例如,136a、 136b、136c、136d、136e)跟踪集群中的成员资格和服务。每一个集群节点始终具有恰好一个这种类型的服务在运行。集群服务自动启动以使得集群节点能够加入集群。集群服务负责检测其它集群节点、检测集群节点的故障(死亡)、以及注册集群中其它服务的可用性。代理服务(例如,138c)允许来自在集群外部运行的客户端的连接(例如,使用TCP)。调用服务(例如,134d)允许应用代码调用代理以对集群中的任何节点、或节点的任何组、或跨整个集群执行操作。虽然每一个仅在一个节点上示出,但是调用服务和代理服务可以被配置在多至分布式数据网格的所有节点的任何数量的节点上。
在Coherence数据网格中,分布式高速缓存服务(例如, 132a、132b、132c、132d、132e)是提供分布式数据网格中的数据存储并且在读/写/存储高速缓存数据的集群的所有节点上可操作的服务,即使该节点是禁止存储的。分布式高速缓存服务允许集群节点在集群 100a上分布(分区)数据,使得高速缓存中的每条数据仅由一个集群节点主要管理(保持)。分布式高速缓存服务处置存储操作请求,诸如put、get等。分布式高速缓存服务管理在分布式模式定义中定义的并且在集群的节点当中分区的分布式高速缓存(例如,140a、 140b、140c、140d、140e)。
分区是分布式数据网格中受管理数据的基本单元,并且存储在分布式高速缓存(例如,140a、140b、140c、140d和140e)中。数据在逻辑上被划分成跨若干集群节点分布的主分区(例如,142a、142b、 142c、142d和142e),使得集群中恰好一个节点负责高速缓存中的每条数据。每一个高速缓存(例如,140a、140b、140c、140d和 140e)可以保持数个分区。每一个分区(例如,142a、142b、142c、 142d、142e)可以保持一个数据,或者它可以保持许多数据。当需要或期望时,可以将分区从一个节点的高速缓存迁移到另一节点的高速缓存。例如,当节点被添加到集群时,分区被迁移,使得它们分布在包括新添加的节点的可用节点当中。在非复制分布式数据网格中,每一个分区只有一个活动拷贝(主分区)。但是,通常还存在用于故障转移的每一个分区的一个或多个副本/备份拷贝(存储在不同的服务器上)。因为数据分散在分布在集群的服务器当中的分区中,因此管理和提供对数据的访问的责任在集群上自动进行负载平衡。
分布式高速缓存服务可以被配置,使得每条数据由一个或多个其它集群节点备份以支持没有任何数据丢失的故障转移。例如,如图1 所示,每一个分区存储在主分区(例如,深色阴影正方形142a、 142b、142c、142d和142e)和分区的一个或多个同步备份拷贝(例如,浅阴影正方形144a、144b、144c、144d和144e)中。每一个分区的备份拷贝存储在与主分区不同的服务器/节点上,该备份拷贝与该主分区同步。节点上的分布式高速缓存服务的故障转移涉及将分区的备份拷贝提升为主分区。当服务器/节点发生故障时,所有剩余的集群节点确定它们为故障节点上的主分区保持了哪些备份分区。然后,集群节点将备份分区提升为主分区,无论它们被保持在哪个集群节点上(然后新的备份分区被创建)。
分布式高速缓存是数据对象的集合。每一个数据对象/数据可以是例如数据库表的行的等同物。每一个数据与识别该数据的唯一键相关联。每一个分区(例如,142a、142b、142c、142d、142e)可以保持一个数据,或者它可以保持许多数据,并且分区分布在集群的所有节点当中。在Coherence数据网格中,每一个键和每一个数据存储为数据对象,该数据对象由称为可移植对象格式(Portable Object Format,POF)的高效未压缩二进制编码序列化。
为了找到特定的数据,每一个节点具有将键映射到分区的映射,例如散列映射。映射对集群中的所有节点都是已知的,并且跨集群的所有节点同步和更新。每一个分区具有将与该分区相关联的每一个键映射到存储在该分区中的对应数据的后备映射。可以在分布式数据网格中的任何节点处从客户端接收与特定键/数据相关联的操作。当节点接收到操作时,如果键与接收节点上的主分区相关联,那么节点可以提供对与该键相关联的值/对象的直接访问。如果键不与接收节点上的主分区相关联,那么节点可以将操作直接定向到保持与该键相关联的主分区的节点(在一跳中)。因此,使用散列映射和分区映射,每一个节点可以提供对与分布式高速缓存中的每一个键相对应的每一个数据的直接访问或一跳访问。
在一些应用中,分布式高速缓存中的数据初始地从包括数据112 的数据库110填充。数据库110中的数据112是序列化的、分区的并且分布在分布式数据网格的节点当中。分布式数据网格100将从来自数据库110的数据112创建的数据对象存储在服务器120a、120b、120c、120d的存储器中的分区中,使得数据网格100中的客户端150 和/或应用可以直接从存储器访问那些数据对象。相比于直接使用数据库110可以实现的,从分布式数据网格100中的数据对象读取和向分布式数据网格100中的数据对象写入快得多,并且允许更多的同时连接。数据的内存中复制和保证的数据一致性使得分布式数据网格适合用于管理存储器中的事务,直到它们被持久存储到外部数据源(诸如,数据库110)用于存档和报告。如果对存储器中的数据对象做出改变,那么在主分区和备份分区之间同步该改变,并且随后可以使用异步写(后写)写回数据库110以避免瓶颈。
虽然数据跨集群节点分散,但是客户端150可以连接到任何集群节点并取回任何数据。这被称为位置透明,意味着开发人员不必基于高速缓存的拓扑结构进行编码。在一些实施例中,客户端可以连接到特定服务,例如,特定节点上的代理服务。在其它实施例中,连接池或负载平衡器可以用于将客户端定向到特定节点并且确保客户端连接分布在一些或所有数据节点上。无论如何连接,分布式数据网格中的接收节点从客户端150接收任务,并且每一个任务与特定数据相关联,因此必须由特定节点进行处理。无论哪个节点接收到对于特定数据的任务(例如,针对高速缓存服务的调用),其识别存储该数据的分区和负责那个分区的节点,接收节点然后例如通过进行远程高速缓存调用来将任务定向到保持所请求的分区的节点。由于每条数据仅由一个集群节点管理,因此通过网络的访问只是“单跳”操作。这种类型的访问是极其可扩展的,因为它可以使用点对点通信并且因此最佳地利用了交换结构网络,诸如InfiniBand。
类似地,高速缓存更新操作可以使用相同的单跳点到点方法,其中数据被发送到具有主分区的节点和具有该分区的备份拷贝的节点两者。直到所有备份都已确认接收时,对高速缓存的修改才被认为是完整的,这保证维护了数据的一致性,并且保证如果集群节点在写入操作期间意外发生故障那么不会丢失任何数据。分布式高速缓存服务还允许某些集群节点被配置成存储数据,并且其它集群节点被配置成不存储数据。
在一些实施例中,分布式数据网格可选地被配置成具有弹性数据特征,该弹性数据特征利用固态设备(例如SSD 128a)(最典型的是闪存驱动器)为高速缓存提供溢出能力。使用弹性数据特征,高速缓存被指定使用基于RAM或DISK日志的后备映射。日志提供用于存储对象状态改变的机制。参考特定键记录每一个数据/值,并且存储器中的树用于存储指向数据的指针(微小数据/值可以直接存储在树中)。这允许一些值(数据)存储在固态设备(例如SSD 128a) 中,同时使索引/存储器树存储在存储器(例如RAM 124a)中。相比于完全基于RAM的解决方案,弹性数据特征允许分布式数据网格在性能损失很小的情况下支持每节点更大量的数据。
分布式数据网格(诸如,上述Coherence数据网格)可以通过解决数据操作延迟问题和通过实时高速缓存和处理数据来提高系统性能。应用在数据网格中高速缓存数据,从而避免对后端数据源的昂贵请求。共享数据高速缓存提供高速缓存数据的单一、一致的视图。从高速缓存读取比查询后端数据源更快,并且随着应用层自然地扩展。内存中执行减轻了瓶颈并且减少了数据竞争,从而提高应用响应性。支持并行查询和计算,以提高基于数据的计算的性能。分布式数据网格是容错的,从而提供数据可靠性、准确性、一致性、高可用性和灾难恢复。分布式数据网格使得应用能够线性地和动态地扩展,用于实现可预测的成本和改进的资源利用率。对于许多应用,分布式数据网格提供了有价值的共享数据源解决方案。
分布式数据网格中的代码执行
在实施例中,分布式数据网格支持使用代理来在分布式数据网格的节点上执行操作。对于分区数据,代理可以被配置成在拥有要针对其执行的数据的节点(或多个节点)上执行。排队、并发管理、代理执行、代理的数据访问和代理的数据修改都发生在该网格节点上。 (如果有的话,只有结果数据修改的同步备份需要额外的网络流量)。对于许多处理目的,向节点提供代理比处置分布式并发控制、一致性和数据更新更高效。换句话说,数据网格基于数据拓扑的配置确定执行代理的位置、将代理移动到那里、执行代理(在执行代理时自动处置项目的并发控制)、如果存在修改的话那么备份修改并且返回结果。
条目处理器是用于在分布式数据网格的节点上执行操作的代理的一个示例。代理/可执行代码的其它示例包括但不限于:聚合器、过滤器、值提取器和可调用代码。例如,Coherence数据网格通过EntryProcessor API支持无锁编程模型。有利地,条目处理器对其正在处理的条目执行隐式低级锁定,从而允许客户端将处理代码放置在条目处理器中,而不必担心并发控制。可以在特定键上、在键的集合上或者在过滤器(过滤器针对高速缓存条目执行,并且与过滤器标准匹配的每一个条目具有针对其执行的条目处理器)上调用条目处理器。条目处理器跨集群(在拥有各个条目的节点上)并行执行。这比让客户端锁定所有受影响的键、从高速缓存中提取所有需要的数据、处理数据、将数据放回高速缓存中、并且解锁键提供了显著的优势。处理跨若干计算机并行发生(而不是在一个计算机上串行地发生),并且获取和释放锁定的网络开销被消除。用于针对所选择的条目执行的条目处理器的代码被传输到分布式数据网格中。对于许多事务类型,在不损害数据操作的容错性的情况下,条目处理器的使用最小化了竞争和延迟并且提高了系统吞吐量。
例如,可以在图1所示的分布式数据网格100的客户端150上创建代理。为了执行代理,代理被串行化并且被传输到分布式数据网格 100中的一个或多个节点。串行化对象意味着将其状态转换为字节流,使得该字节流可以被恢复(解串行化)回到对象的拷贝。解串行化是将对象的串行化形式转换回到对象的拷贝的过程。Java平台指定了串行化可串行化对象的默认方式。(Java)类可以覆盖(override) 这种默认的串行化,并且定义其自己的串行化该类的对象的方式。当对象被串行化时,识别其类的信息被记录在串行化流中。但是,类的定义(“类文件”)本身通常没有被记录。通常是系统(例如,服务器)负责解串行化对象以确定如何定位和加载必要的类文件。
在代理利用在期望实现代理的分布式数据网格的节点上不可用的类定义(“类文件”)的情况下,可能出现问题。在这种情况下,代理将无法在节点上操作,因为代理正在其上尝试操作的节点不能找到必要的类。在客户端上的类定义与节点上的类定义不同的情况下,可能会出现另一个问题。例如,可能已经在客户端上修改/更新类定义,但是没有在分布式数据网格的节点上修改/更新类定义。在这种情况下,代理可以操作,因为在节点上找到必要的类,但是,代理可能不按预期操作,因为它利用与代理的创建者所期望的不同的类定义。在其中新的或更新的类文件被部署在客户端上的先前实施例中,有必要在分布式数据网格中重新部署和重新启动节点以在它们可被在分布式数据网格中操作的代理利用之前支持那些新的或更新的类文件。这对于大集群来说是非常麻烦和耗时的。
在实施例中,分布式数据网格100通过实现用于支持将新的或更新的类定义从分布式数据网格100的客户端150动态部署到节点以用于在代理中执行的系统和方法克服了这些问题。此外,分布式数据网格100实现用于类定义的版本控制,以确保由代理(诸如,条目处理器)调用的类具有与准备代理的客户端150上的类相同的类定义。利用用于支持类定义的动态部署和用于类定义的版本控制的系统和方法增加了分布式数据网格的用途,因为它允许在分布式数据网格的节点上正确地执行新的或更新的类定义。此外,避免重新部署和重新启动分布式数据网格中的节点以支持新的或更新的类定义的需要提高了分布式数据网格的性能。
类定义的动态部署
图2A图示用于将新类定义从分布式数据网格的客户端150动态部署到节点130a以使得能够在节点上实现利用该新类定义的代理的系统。虽然只示出了一个客户端和一个节点,但是相同的功能可以应用于分布式数据网格的所有客户端和节点。如图2A所示,节点130a 被实现为Java虚拟机(JVM)。例如,JRockit JVM、JVM、JVM、或JVM的另一个供应商实现。节点 130a包括执行引擎210、本地方法接口212、本地方法库214和类加载器217。节点130a具有JVM存储器区域220,该JVM存储器区域220包括方法区域212、堆214、JVM语言栈216、PC寄存器218、以及本地方法栈230。在节点130a启动时,类加载器217基于在 JVM的类路径中找到的类定义来加载和准备并初始化类。客户端 150被提供有远程类支持262,并且节点130a被提供有远程类支持 232。远程类支持功能允许如下所述使用从客户端150通过线(over- the-wire)传送到节点130a的远程类构造器(constructor)264将新类定义从分布式数据网格的客户端150动态部署到节点130a。
如图2A所示,客户端系统150的用户可以为将在节点130a上操作的代理准备代理代码250。代理代码可以包括新类定义252,该新类定义252或者是具有新类名的新类的定义或者是类的更新的定义 (即,类是预先存在的)。注意的是,即使在类定义被改变的情况下,从客户端的角度来看,它在技术上也是具有新类定义的新类。不能修改客户端上预先存在的类——而是实现包括任何改变的新类。当尝试发送代理代码250用于在节点130a上执行时,远程类支持262检查代理代码250以确定它是否包括任何新类定义252。在找到一个或多个新类定义252的情况下,远程类支持262为新类定义252准备远程类构造器264。远程类构造器264包括在节点130a上构建代理的实例所需的新类定义266和捕获的代理状态268。远程类构造器264用于新类的线传输,并且启用用于通过线传输到节点130a的新类定义的自动串行化。
远程类支持262利用类/ID表260。类/ID表260包括基于类名称的用于每一个预先存在的类的类标识符和类定义的散列函数(例如 MD5散列)。这确保用于每一个类的标识符是唯一的。此外,在类定义被更新的情况下,散列确保将分配新的标识符并且因此更新的类将具有新的类身份。因此,使用类/ID表260,远程类支持262可以确定代理代码250是否包括任何新类定义252。
远程类支持262因此使用类/ID表260确定在代理代码250中是否利用了任何新类定义252。如果所有类都在节点上预先存在,那么远程类支持仅返回类(其可以在节点130a上执行)的身份。但是,如果代理代码250利用新类定义252(即,该类在节点上不可用),那么准备新类定义252,并且将与新类定义252对应的新身份存储在类/ID表260中。准备远程类构造器264,其表示在节点130a上实现代理所需的新类定义266和捕获的代理状态268。远程类构造器实例被自动地串行化并通过线传输到节点130a。
远程类构造器264由节点130a接收并由远程类支持232处理。当通过线从客户端150接收到远程类构造器264时,它被自动地解串行化。节点130a还维护其自己的类/ID表260用于验证类身份。使用解串行化的远程类构造器264和远程类支持232,节点130a为新类定义266准备类加载器、将类加载到JVM存储器220中、并且在 JVM中初始化新类的实例。因此使得节点130a能够利用基于新类定义的类实例来执行代码。因此使得远程类支持232能够实现用于在节点130a上执行的代理238。
图2B图示用于将新的或更新的类定义从分布式数据网格的客户端150动态部署到节点130a的方法270。在步骤272处,客户端尝试发送用于在节点上执行的代理。在步骤274处,客户端确定类的身份。身份是唯一的并且客户端因此可以在步骤276处通过将该身份与先前存储在类/ID表中的身份进行比较来确定该类是否已经存在。如果身份与类/ID表中的类不匹配,那么该类肯定是新的或更新的类。
在步骤278处,如果类是新的或更新的类(身份没有存在于类 /ID表中),那么客户端为该类生成新类定义。在客户端上准备远程构造器。远程构造器包括在节点上实现代理所需的新类定义和捕获的代理状态。在步骤280中,远程类构造器实例被自动地串行化并通过线传输到节点。
在步骤282处,节点通过线从客户端接收远程构造器。在步骤 284处,远程构造器被解串行化并且在节点上执行。在步骤286处,实现代理所需的新类定义和捕获的代理状态被加载到JVM存储器中,以在节点上创建新的或更新的类的实例。在步骤288处,使得新的或更新的类的实例可用于在节点上执行,以便在0节点上实现代理。注意的是,在类定义在客户端上被改变的情况下,从客户端的角度来看,它在技术上是具有新类定义的新类。不能修改节点上预先存在的类——而是实现包括改变的新类(具有新的类身份)。在步骤290处,在节点上执行代理。
因此,该方法允许将新的或更新的类定义从客户端动态部署到节点,以便允许在无需重新部署节点/JVM的情况下实现这种新的或更新的类。这种在无需重新部署节点/JVM情况下的新的或更新的类的动态部署增强了分布式数据网络执行代理的用途,并且消除了在需要新的或更新的类定义时重新启动节点的需要。
实现Lambda的类定义的动态部署
在实施例中,用于动态部署类定义的系统和方法可以用于与 lambda表达式相关联的类定义。近年来,面向对象的编程语言(诸如JavaTM)对于在许多不同类型的平台上运行的各种各样的应用已经变得越来越流行。一些编程语言可以支持“lambda表达式”。在面向对象的编程语言中,lambda表达式可以用作用于定义只有一个方法并且没有状态的对象的轻量级机制。对于在各种编程语言环境中的常见使用可以优化lambda表达式的轻量级语法。JavaTM编程语言是词法范围的命令性编程语言的示例。在JavaTM 8编程语言中引入对于lambda表达式的支持。因此,用于将在分布式数据网格的节点上执行的代理的代码在一些情况下可以包括lambda表达式。
Lambda表达式是描述可以被编程语言看作值的函数的轻量级方式。Lambda表达式可以是匿名方法,其目的在于通过用语法上更轻量级的机制替换匿名内部类的机制来解决“垂直问题”或庞大的语法。 Lambda表达式可以被视为提供对“代码作为数据”的支持,因为方法可以作为参数接受lambda(函数)并且作为结果返回它们。 lambda表达式如同方法:它提供形式参数的列表和按照那些参数表达的主体–表达式或块。Lambda表达式可以使用诸如以下的语法来表达:
(参数列表)→主体。
例如在以下通过引用被结合于此的美国专利申请中描述了在 JavaTM编程语言中使用lambda表达式的各方面:于2014年2月27 日提交的标题为“SYSTEM AND METHOD FORSUPPORTING COMPATIBILITY CHECKING FOR LAMBDA EXPRESSION”的美国专利申请序列No.13/779,536;于2012年11月14日提交的标题为“TARGET TYPING OF OVERLOADED METHODAND CONSTRUCTOR ARGUMENTS”的美国专利申请序列 No.13/677,001;于2012年11月14日提交的标题为“SYSTEM AND METHOD FOR INFERRING IMMUTABILITY OF PROGRAMATARAABLES”的美国专利申请序列No.13/677000;于2013年2月27日提交的标题为“SYSTEM AND METHODFOR COMPILING LAMBDA EXPRESSION IN A PROGRAMMING LANGUAGE ENVIRONMENT”的美国专利序列No.13/779557;和于2011年2月15日提交的标题为“BINDING-BASEDCHARACTERIZATION OF CLOSURES IN SOFTWARE PROGRAMS”的美国专利申请序列No.13/028111。
Lambda表达式是“匿名的”,因为它们没有被命名。因此, Lambda表达式使得能够定义匿名方法,并且使得能够将这样的匿名方法看作功能接口的实例。使用具有匿名内部类的功能接口是 JavaTM编程语言中的常见模式,因此JavaTM编程语言利用功能接口来实现lambda表达式。在JavaTM 8编程语言中,lambda表达式可以被描述为匿名类声明的简化形式,其中lambda表达式的参数与给匿名类声明的方法的参数相同,并且lambda表达式的主体与匿名类声明的方法的主体相同(但是能够省略“return”关键字,因为这种特定lambda表达式的主体所做的唯一事情是返回值)。表达式主体形式消除了对返回关键字的需要,否则它可能以其他方式表示相对于表达式大小的大量的语法开销。因此,在JavaTM 8编程语言中,按照用于功能接口的类定义来实现lambda表达式。
本文描述的是可以在包括例如图1的分布式数据网格的分布式计算环境中支持实现lambda的类的动态部署的系统和方法。如上所述,分布式数据网格支持使用在分布式数据网格的节点上操作的代理来执行事务。用于这种代理的代码可以包括lambda表达式。但是,在先前的实现中,在代理中使用的类必须在用于每一个集群节点的类路径中可用(预先存在)——这排除了在代理中使用lambda,除非实现 lambda的类之前已经被部署到分布式数据网格的节点(或节点被重新部署)。为了服务器实际处理lambda表达式,需要在客户端和服务器类路径中相同的编译代码。即,服务器必须具有对应于服务器类路径中的lambda表达式的类。在客户端上新的lambda的任何改变或引入需要重新部署和重新启动客户端和服务器两者,以便将对应于 lambda表达式的新类部署到服务器。这对于大集群来说是非常麻烦和耗时的。
为了克服这个限制,在本发明的实施例中,客户端不仅传输描述用于在代理中使用的lambda表达式的元数据,而且还传输用于实现 lambda表达式的类的实际类定义。可以作为上述类定义的动态部署的特定情况来执行实现lambda表达式的类的动态部署。在服务器处,解析从客户端接收到的类定义并从其生成用于在代理/条目处理器中使用的新lambda类。服务器基于从客户端接收到的类定义来定义 lambda类并执行该lambda类。这允许修改现有的lambda表达式或引入新的lambda表达式,而无需重新部署或服务器重新启动以将用于lambda表达式的编译代码放置在类路径中。
图3A示出了根据本发明的实施例在分布式计算环境中支持动态 lambda的系统的图示。如图3A 所示,分布式计算环境300(诸如,分布式数据网格)包括客户端301和服务器302。在实施例中,分布式计算环境可以是如图1所示的分布式数据网格100,其中客户端301表示客户端150中的一个或多个,并且服务器302表示节点130a、 130b、130c、130d和130e中的一个或多个。
如上所述,在没有类定义的动态部署的先前实施例中,只有描述 lambda表达式303的元数据305被从客户端301发送到服务器302。然后,服务器302可以基于接收到的元数据306利用客户端侧上的 lambda表达式303。服务器302的责任是解串行化接收到的元数据306以确定如何定位和加载用于静态lambda的必要类文件。因此,类文件需要已经被部署在服务器302上并且还与客户端301上的相同 (即,在客户端上没有被改变/更新)。因此,在客户端侧上的任何改变或引入新lambda需要重新部署和/或重新启动客户端301和服务器302两者,然后新lambda才可以在服务器302上被客户端调用。
在另一方面,在使得能够使用类定义的动态部署的本发明的实施例中,当新的或更新的类定义用于实现lambda时,客户端301生成要根据lambda表达式303执行的一个或多个类定义307,并且将类定义307发送到分布式计算环境300中的服务器302。在服务器302接收到要执行的类定义308之后,服务器302基于接收到的类定义 308定义服务器侧上的lambda实例304,并且然后执行由接收到的类定义308定义的lambda实例304。此外,如果客户端301更新客户端侧上的lambda表达式303,例如当lambda表达式303被修改或者被引入新的行为时,可以准备新类定义307并将其传输到服务器 302,并且可以创建并执行具有新行为的新lambda实例。
图3B图示用于在分布式计算环境中支持动态lambda的方法。在步骤320处,客户端从lambda表达式生成所述类定义。在步骤 322处,服务器从客户端接收要执行的类定义。在步骤324处,服务器基于接收到的类定义在服务器侧上定义和加载lambda类。在步骤 326处,服务器创建和执行基于接收到的类定义在服务器侧上定义的 lambda实例。如果lambda表达式在客户端侧上更新,那么从步骤 320到326重复过程,使用基于更新的lambda表达式的新类定义并且得到服务器侧上的新lambda类定义和实例。
虽然以上已经描述了本发明的各种实施例,但是应当理解的是,它们以示例的方式而不是限制的方式给出。对于相关领域的技术人员将显而易见的是,在不脱离本发明的精神和范围的情况下,可以在其中进行各种形式和细节上的改变。
还要注意的是,虽然出于说明的目的,主要在使用JavaTM编程语言(或与JavaTM密切相关的语言)的上下文中提供以上描述,但是所描述的技术可以用于支持Lambda表达式,重载调用操作(诸如方法、构造器或函数)的任何编程语言。本技术在一些实施例中可以用于面向对象的语言,或者在其它实施例中用于非面向对象的语言 (诸如各种过程语言)。
可以在硬件、软件、固件或其组合中、使用其或在其的帮助下执行本发明的许多特征。可以使用一个或多个常规通用或专用数字计算机、计算装置、机器或微处理器(包括一个或多个处理器、存储器和 /或根据本公开的教导编程的计算机可读存储介质)来方便地实现本发明。还可以使用例如硬件组件(诸如,专用集成电路(ASIC)和可编程逻辑器件)在硬件中实现本发明的特征。实现硬件状态机以便执行本文所描述的功能对于相关领域的技术人员将显而易见。
可以在用于控制处理系统的硬件和用于使得处理系统能够利用本发明的结果与其它机制交互的软件和/或固件中结合本发明的特征。这种软件或固件可以包括但不限于应用代码、设备驱动程序、操作系统和执行环境/容器。如同对软件领域的技术人员将显而易见的,熟练的程序员可以基于本公开的教导容易地准备适当的软件编码。
在一些实施例中,本发明包括计算机程序产品,该计算机程序产品是具有存储在其上/其中的指令的存储介质或计算机可读介质,其中指令可以用来对计算机进行编程以执行本发明的任何过程。存储介质或计算机可读介质可以包括但不限于,任何类型的盘(包括软盘、光盘、DVD、CD-ROM、微驱动器和磁光盘)、ROM、RAM、 EPROM、EEPROM、DRAM、VRAM、闪存设备、磁卡或光卡、纳米系统(包括分子存储器IC)、或适于存储指令和/或数据的任何类型的介质或设备。在实施例中,存储介质或计算机可读介质可以是非瞬态的。
为了说明和描述的目的,提供了本发明的前述描述。它并不旨在穷举或将本发明限制为所公开的精确形式。许多修改和变化对于本领域技术人员将是显而易见的。选择和描述实施例是为了最好地解释本发明的原理及其实际应用,从而使得本领域的其他技术人员能够理解本发明的各种实施例和具有适于特定使用预期的各种修改。本发明的范围旨在由以下权利要求及其等效物限定。
Claims (23)
1.一种用于在分布式计算环境中支持可执行代码从客户端到节点的动态部署的方法,所述方法包括:
在节点处从客户端接收串行化对象,其中串行化对象包括:
不存在于节点的类路径中的新类的类定义,其中所述类定义包括来自所述客户端上的定义所述新类的类文件的所述新类的定义的至少一部分,和
利用所述新类的捕获的代理状态,其中所述捕获的代理状态是在节点上构建代理的实例所需的状态;
在所述节点上对串行化对象解串行化以取回所述新类的所述类定义和所述捕获的代理状态;
将所述新类的类定义和捕获的代理状态加载到节点的存储器中;
使用加载到节点的存储器中的所述新类的类定义在节点上生成新类的实例;以及
在节点上执行代理。
2.如权利要求1所述的方法,其中所述类定义实现lambda表达式。
3.如权利要求1至2中任何一项所述的方法,所述方法还包括:
在客户端上接收代理代码;
从客户端上的所述代理代码确定用于所述新类的类定义;以及
基于类定义生成用于所述新类的类身份。
4.如权利要求1至2中任何一项所述的方法,所述方法还包括:
在所述客户端上维护类/身份表;
在客户端上接收用于所述代理的代理代码;
从客户端上的所述代理代码确定用于所述新类的类定义;
基于类定义生成用于所述新类的类身份;以及
使用类/身份表来确定所述新类不存在于节点的类路径中。
5.如权利要求1至2中任何一项所述的方法,所述方法还包括:
在所述客户端上维护类/身份表;
在客户端上接收用于所述代理的代理代码;
从客户端上的所述代理代码确定用于所述新类的类定义;
基于类定义生成用于所述新类的类身份;
使用类/身份表来确定所述新类不存在于节点的类路径中;以及
将用于所述新类的类身份添加到类/身份表。
6.如权利要求1至2中任何一项所述的方法,所述方法还包括:
在客户端上接收用于所述代理的代理代码;
从客户端上的所述代理代码确定用于所述新类的类定义;
在所述客户端上生成串行化对象,所述串行化对象包括用于不存在于节点的类路径中的新类的类定义和利用所述新类的所述捕获的代理状态;以及
将所述串行化对象传输到节点。
7.如权利要求1至2中任何一项所述的方法,所述方法还包括:
在客户端上接收用于所述代理的代理代码,其中所述代理代码包括lambda表达式;
从客户端上的所述代理代码确定用于所述新类的类定义,其中类定义实现所述lambda表达式;
在所述客户端上生成串行化对象,所述串行化对象包括用于不存在于节点的类路径中的新类的类定义和利用所述新类的捕获的代理状态;以及
将所述串行化对象传输到节点。
8.如权利要求1至2中任何一项所述的方法,其中分布式计算环境包括数据网格集群,并且其中可执行代码的动态部署使得能够在所述数据网格集群中保持要由代理对其操作的数据的多个节点上执行所述代理,而无需重新部署所述数据网格集群中的所述多个节点。
9.如权利要求1至2中任何一项所述的方法,其中分布式计算环境包括数据网格集群,并且其中所述代理是用于针对在所述节点中保持的数据执行的条目处理器。
10.如权利要求1至2中任何一项所述的方法,其中分布式计算环境包括数据网格集群,并且其中所述代理是用于针对在所述节点中保持的数据执行的聚合器、过滤器、值提取器和可调用代码中的一个。
11.一种用于在分布式计算环境中支持可执行代码的动态部署的系统,所述系统包括:
计算机系统,所述计算机系统包括微处理器和存储器;
节点,所述节点部署在所述计算机系统上作为所述分布式计算环境的一部分;以及
其中所述节点被配置成:
从客户端接收串行化对象,其中串行化对象包括:
不存在于节点的类路径中的新类的类定义,其中所述类定义包括来自所述客户端上的定义所述新类的类文件的所述新类的定义的至少一部分,和
利用所述新类的捕获的代理状态,其中所述捕获的代理状态是在节点上构建代理的实例所需的状态,
在节点上对串行化对象解串行化以取回所述新类的所述类定义和所述捕获的代理状态,
将所述新类的类定义和捕获的代理状态加载到分配给所述节点的所述存储器的一部分中;
使用加载到节点的存储器中的所述新类的类定义在节点上生成新类的实例,以及
在节点上执行代理。
12.如权利要求11所述的系统,其中所述类定义实现lambda表达式。
13.如权利要求11至12中任何一项所述的系统,所述系统还包括:
客户端计算机系统,所述客户端计算机系统包括微处理器和存储器;以及
在所述客户端计算机系统上操作的客户端,其中所述客户端被配置成:
接收用于所述代理的代理代码,
从所述代理代码确定用于所述新类的类定义;以及
基于类定义生成用于所述新类的类身份。
14.如权利要求11至12中任何一项所述的系统,所述系统还包括:
客户端计算机系统,所述客户端计算机系统包括微处理器和存储器;以及
在所述客户端计算机系统上操作的客户端,其中所述客户端被配置成:
维护类/身份表,
接收用于所述代理的代理代码,
从所述代理代码确定用于所述新类的类定义,
基于类定义生成用于所述新类的类身份,以及
使用类/身份表来确定所述新类不存在于所述节点的类路径中。
15.如权利要求11至12中任何一项所述的系统,所述系统还包括:
客户端计算机系统,所述客户端计算机系统包括微处理器和存储器;以及
在所述客户端计算机系统上操作的客户端,其中所述客户端被配置成:
维护类/身份表,
接收用于所述代理的代理代码,
从所述代理代码确定用于所述新类的类定义,
基于类定义生成用于所述新类的类身份,
使用类/身份表确定所述新类不存在于节点的类路径中,以及
将用于所述新类的类身份添加到类/身份表。
16.如权利要求11至12中任何一项所述的系统,所述系统还包括:
客户端计算机系统,所述客户端计算机系统包括微处理器和存储器;以及
在所述客户端计算机系统上操作的客户端,其中所述客户端被配置成:
维护类/身份表,
接收用于所述代理的代理代码,
从所述代理代码确定用于所述新类的类定义,
生成串行化对象,所述串行化对象包括用于不存在于节点的类路径中的新类的类定义和利用所述新类的捕获的代理状态,以及
将所述串行化对象传输到节点。
17.如权利要求11至12中任何一项所述的系统,所述系统还包括:
客户端计算机系统,所述客户端计算机系统包括微处理器和存储器;以及
在所述客户端计算机系统上操作的客户端,其中所述客户端被配置成:
维护类/身份表,
接收用于所述代理的代理代码,其中所述代理代码包括lambda表达式,
从所述代理代码确定用于所述新类的类定义,其中类定义实现所述lambda表达式,
生成串行化对象,所述串行化对象包括用于不存在于节点的类路径中的新类的类定义和利用所述新类的捕获的代理状态,以及
将所述串行化对象传输到节点。
18.如权利要求11至12中任何一项所述的系统,其中分布式计算环境包括数据网格集群,并且其中可执行代码的动态部署使得能够在所述数据网格集群中保持要由代理对其操作的数据的多个节点上执行所述代理,而无需重新部署所述数据网格集群中的所述多个节点。
19.如权利要求11至12中任何一项所述的系统,其中分布式计算环境包括数据网格集群,并且其中所述代理是用于针对在所述节点中保持的数据执行的条目处理器、聚合器、过滤器、值提取器和可调用代码中的一个。
20.一种非瞬态计算机可读介质,所述非瞬态计算机可读介质包括存储在其上用于在分布式计算环境中支持可执行代码从客户端到节点的动态部署的指令,所述指令当被执行时使得所述节点执行包括以下的步骤:
在节点处从客户端接收串行化对象,其中串行化对象包括:
不存在于节点的类路径中的新类的类定义,其中所述类定义包括来自所述客户端上的定义所述新类的类文件的所述新类的定义的至少一部分,和
利用所述新类的捕获的代理状态,其中所述捕获的代理状态是在节点上构建代理的实例所需的状态;
在节点上对串行化对象解串行化以取回所述新类的所述类定义和所述捕获的代理状态;
将所述新类的类定义和捕获的代理状态加载到节点的存储器中;
使用加载到节点的存储器中的所述新类的类定义在节点上生成新类的实例;以及
在节点上执行代理。
21.一种计算设备,包括:
一个或多个处理器;
存储器,所述存储器包括存储在其上的程序指令,其中程序指令当被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如权利要求1至10中任何一项所述的方法。
22.一种非瞬态计算机可读介质,所述非瞬态计算机可读介质包括存储在其上用于在分布式计算环境中支持可执行代码从客户端到节点的动态部署的指令,所述指令当被执行时,使得所述节点执行如权利要求2至10中任何一项所述的方法。
23.一种用于在分布式计算环境中支持可执行代码的动态部署的装置,所述装置包括用于执行如权利要求1至10中任何一项所述的方法的构件。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462055482P | 2014-09-25 | 2014-09-25 | |
US62/055,482 | 2014-09-25 | ||
US201462076159P | 2014-11-06 | 2014-11-06 | |
US62/076,159 | 2014-11-06 | ||
PCT/US2015/052060 WO2016049379A1 (en) | 2014-09-25 | 2015-09-24 | System and method for supporting dynamic deployment of executable code in a distributed computing environment |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107077358A CN107077358A (zh) | 2017-08-18 |
CN107077358B true CN107077358B (zh) | 2020-08-25 |
Family
ID=54325684
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580051606.0A Active CN107077358B (zh) | 2014-09-25 | 2015-09-24 | 用于在分布式计算环境中支持可执行代码的动态部署的系统和方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10095508B2 (zh) |
EP (1) | EP3198424B1 (zh) |
JP (1) | JP6621470B2 (zh) |
CN (1) | CN107077358B (zh) |
WO (1) | WO2016049379A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9286056B2 (en) * | 2014-05-19 | 2016-03-15 | International Business Machines Corporation | Reducing storage facility code load suspend rate by redundancy check |
EP3198424B1 (en) * | 2014-09-25 | 2021-11-17 | Oracle International Corporation | System and method for supporting dynamic deployment of executable code in a distributed computing environment |
US10129361B2 (en) | 2015-07-01 | 2018-11-13 | Oracle International Corporation | System and method for multi-version remote function execution control in a distributed computing environment |
US10387229B2 (en) * | 2015-11-23 | 2019-08-20 | International Business Machines Corporation | Reducing cost of deserialization by skipping unused array regions |
US9817653B2 (en) * | 2015-12-16 | 2017-11-14 | Sap Se | Updating extension in response to opening associated document |
US9798569B2 (en) * | 2016-02-15 | 2017-10-24 | Nvidia Corporation | System and method for retrieving values of captured local variables for lambda functions in Java |
US20190334765A1 (en) * | 2018-04-30 | 2019-10-31 | Nutanix, Inc. | Apparatuses and methods for site configuration management |
CN109618005B (zh) * | 2019-01-18 | 2020-12-08 | 华为终端有限公司 | 调用服务器的方法和代理服务器 |
US11138077B2 (en) * | 2019-01-24 | 2021-10-05 | Walmart Apollo, Llc | System and method for bootstrapping replicas from active partitions |
CN110795109A (zh) * | 2019-10-25 | 2020-02-14 | 北京达佳互联信息技术有限公司 | 一种功能扩展方法、装置及电子设备 |
CN111062684B (zh) * | 2019-11-29 | 2023-10-20 | 普元信息技术股份有限公司 | 云流程平台下实现业务数据与流程数据一致性处理的系统及其方法 |
Family Cites Families (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6233601B1 (en) * | 1996-11-14 | 2001-05-15 | Mitsubishi Electric Research Laboratories, Inc. | Itinerary based agent mobility including mobility of executable code |
US6119145A (en) | 1997-02-28 | 2000-09-12 | Oracle Corporation | Multithreaded client application storing a separate context for each transaction thus allowing threads to resume transactions started by other client threads |
US5974428A (en) | 1997-08-29 | 1999-10-26 | International Business Machines Corporation | Method and apparatus for class version naming and mapping |
US6366898B2 (en) | 1998-09-21 | 2002-04-02 | Sun, Microsystems, Inc. | Method and apparatus for managing classfiles on devices without a file system |
US8082491B1 (en) * | 2000-05-09 | 2011-12-20 | Oracle America, Inc. | Dynamic displays in a distributed computing environment |
US7200848B1 (en) * | 2000-05-09 | 2007-04-03 | Sun Microsystems, Inc. | Migrating processes using data representation language representations of the processes in a distributed computing environment |
US6898618B1 (en) * | 2000-05-09 | 2005-05-24 | Sun Microsystems, Inc. | Client-specified display services in a distributed computing environment |
US7016966B1 (en) * | 2000-05-09 | 2006-03-21 | Sun Microsystems, Inc. | Generating results gates in a distributed computing environment |
US6925638B1 (en) | 2000-09-21 | 2005-08-02 | International Business Machines Corporation | Mutability analysis in Java |
US7207002B2 (en) * | 2003-11-13 | 2007-04-17 | International Business Machines Corporation | Serialization and preservation of objects |
US20050229048A1 (en) | 2004-03-30 | 2005-10-13 | International Business Machines Corporation | Caching operational code in a voice markup interpreter |
US7913239B2 (en) | 2005-03-08 | 2011-03-22 | International Business Machines Corporation | Method and apparatus for a programming framework for pattern matching and transformation of intermediate language expression trees |
US20060212847A1 (en) | 2005-03-18 | 2006-09-21 | Microsoft Corporation | Type checker for a typed intermediate representation of object-oriented languages |
US20070044083A1 (en) | 2005-07-29 | 2007-02-22 | Microsoft Corporation | Lambda expressions |
US8984534B2 (en) | 2006-03-31 | 2015-03-17 | British Telecommunications Public Limited Company | Interfacing between a receiving component of a server application and a remote application |
US20080178140A1 (en) | 2007-01-18 | 2008-07-24 | United Microelectronics Corp. | Method for correcting photomask pattern |
US7873592B2 (en) | 2007-04-20 | 2011-01-18 | Microsoft Corporation | Type inference for object-oriented languages |
FI20070366A0 (fi) | 2007-05-09 | 2007-05-09 | Webmedia As | Menetelmä ja järjestelmä luokan uudelleen lataamiseksi |
US8397227B2 (en) * | 2007-12-04 | 2013-03-12 | International Business Machines Corporation | Automatic deployment of Java classes using byte code instrumentation |
US20090265688A1 (en) | 2008-04-18 | 2009-10-22 | Paul Govereau | Circuits and methods for mobility of effectful program fragments |
US20090328016A1 (en) | 2008-06-27 | 2009-12-31 | Microsoft Corporation | Generalized expression trees |
US9170787B2 (en) | 2008-06-27 | 2015-10-27 | Microsoft Technology Licensing, Llc | Componentization of compiler functionality |
US20100088686A1 (en) | 2008-10-06 | 2010-04-08 | Microsoft Corporation | Programming language with extensible syntax |
JP2010108258A (ja) | 2008-10-30 | 2010-05-13 | Panasonic Corp | コンパイル方法及びコンパイルプログラム |
US8397222B2 (en) | 2008-12-05 | 2013-03-12 | Peter D. Warren | Any-to-any system for doing computing |
US8266604B2 (en) | 2009-01-26 | 2012-09-11 | Microsoft Corporation | Transactional memory compatibility management |
US9201701B2 (en) * | 2010-07-16 | 2015-12-01 | Nokia Technologies Oy | Method and apparatus for distributing computation closures |
US9177017B2 (en) | 2010-09-27 | 2015-11-03 | Microsoft Technology Licensing, Llc | Query constraint encoding with type-based state machine |
US9542168B2 (en) | 2011-11-10 | 2017-01-10 | Microsoft Technology Licensing Llc | Hostable compiler utilizing type information from a host application |
US8990070B2 (en) | 2011-11-18 | 2015-03-24 | International Business Machines Corporation | Computer-based construction of arbitrarily complex formal grammar expressions |
US8997070B2 (en) | 2011-12-15 | 2015-03-31 | Sap Se | Extension mechanism for scripting language compiler |
US9524323B2 (en) * | 2012-09-05 | 2016-12-20 | Microsoft Technology Licensing, Llc | Delegation of expression tree evaluation |
WO2014071360A2 (en) | 2012-11-05 | 2014-05-08 | Sea Street Technologies, Inc. | Systems and methods for provisioning and managing an elastic computing infrastructure |
US9332083B2 (en) | 2012-11-21 | 2016-05-03 | International Business Machines Corporation | High performance, distributed, shared, data grid for distributed Java virtual machine runtime artifacts |
US9910680B2 (en) | 2014-04-22 | 2018-03-06 | Oracle International Corporation | Decomposing a generic class into layers |
EP3198424B1 (en) * | 2014-09-25 | 2021-11-17 | Oracle International Corporation | System and method for supporting dynamic deployment of executable code in a distributed computing environment |
US9411618B2 (en) | 2014-11-21 | 2016-08-09 | Red Hat, Inc. | Metadata-based class loading using a content repository |
US10129361B2 (en) * | 2015-07-01 | 2018-11-13 | Oracle International Corporation | System and method for multi-version remote function execution control in a distributed computing environment |
-
2015
- 2015-09-24 EP EP15781206.6A patent/EP3198424B1/en active Active
- 2015-09-24 WO PCT/US2015/052060 patent/WO2016049379A1/en active Application Filing
- 2015-09-24 US US14/864,558 patent/US10095508B2/en active Active
- 2015-09-24 CN CN201580051606.0A patent/CN107077358B/zh active Active
- 2015-09-24 JP JP2017516347A patent/JP6621470B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
EP3198424A1 (en) | 2017-08-02 |
CN107077358A (zh) | 2017-08-18 |
US10095508B2 (en) | 2018-10-09 |
JP6621470B2 (ja) | 2019-12-18 |
WO2016049379A1 (en) | 2016-03-31 |
EP3198424B1 (en) | 2021-11-17 |
US20160092205A1 (en) | 2016-03-31 |
JP2017528847A (ja) | 2017-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107077358B (zh) | 用于在分布式计算环境中支持可执行代码的动态部署的系统和方法 | |
US10129361B2 (en) | System and method for multi-version remote function execution control in a distributed computing environment | |
CN109062655B (zh) | 一种容器化云平台及服务器 | |
US10664495B2 (en) | System and method for supporting data grid snapshot and federation | |
US10817478B2 (en) | System and method for supporting persistent store versioning and integrity in a distributed data grid | |
US6192514B1 (en) | Multicomputer system | |
US10860378B2 (en) | System and method for association aware executor service in a distributed computing environment | |
US11609717B2 (en) | System and method for rare copy-on-write in a distributed computing environment | |
US11550820B2 (en) | System and method for partition-scoped snapshot creation in a distributed data computing environment | |
US20030187927A1 (en) | Clustering infrastructure system and method | |
US10691712B2 (en) | System and method for merging a mainframe data file to a database table for use by a mainframe rehosting platform | |
US6424988B2 (en) | Multicomputer system | |
US10133489B2 (en) | System and method for supporting a low contention queue in a distributed data grid | |
US20070100828A1 (en) | Modified machine architecture with machine redundancy | |
US10769019B2 (en) | System and method for data recovery in a distributed data computing environment implementing active persistence | |
US9672038B2 (en) | System and method for supporting a scalable concurrent queue in a distributed data grid | |
US10061627B2 (en) | System and method for supporting waiting thread notification offloading in a distributed data grid | |
US10798146B2 (en) | System and method for universal timeout in a distributed computing environment | |
Fagg et al. | HARNESS fault tolerant MPI design, usage and performance issues | |
Palanciuc | DOORS: Distributed object oriented runtime system (position paper) | |
Raicevic | DPR Cluster: An Automated Framework for Deploying Resilient Stateful Cloud Microservices | |
Galdámez et al. | HIDRA: Architecture and high availability support | |
Schöttner et al. | Checkpointing in distributed heterogeneous environments |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |