CN111475235B - 函数计算冷启动的加速方法、装置、设备及存储介质 - Google Patents
函数计算冷启动的加速方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111475235B CN111475235B CN202010283409.4A CN202010283409A CN111475235B CN 111475235 B CN111475235 B CN 111475235B CN 202010283409 A CN202010283409 A CN 202010283409A CN 111475235 B CN111475235 B CN 111475235B
- Authority
- CN
- China
- Prior art keywords
- function
- preheating
- instance
- node
- function instance
- 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
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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
-
- 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/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本公开实施例提供一种函数计算冷启动的加速方法、装置、设备及存储介质,该方法包括:响应于用于指示冷启动预设函数的指令,获取支持所述预设函数运行的目标预热函数实例,所述目标预热函数实例包含支持动态加载函数代码的函数程序;获取所述预设函数对应的用户代码;在所述目标预热函数实例上,通过所述支持动态加载函数代码的函数程序加载所述用户代码,得到所述用户代码对应的运行结果。本公开实施例能够解决现有技术中无法有效地缩短函数冷启动时间,进而降低函数计算平台的资源利用效率的问题。
Description
技术领域
本公开实施例涉及计算机技术领域,尤其涉及一种函数计算冷启动的加速方法、装置、设备及存储介质。
背景技术
随着科技的发展,为了使用户能够专注于开发、运行和管理自己的应用程序,提出了一种函数计算。函数计算是一类新兴的云计算服务,它将应用标准化的功能,如监控、性能、弹性扩缩容、高可用、日志追踪等,统一集成在平台中,用户无需构建和维护通常与开发和启动应用程序相关的基础架构。
函数计算平台的服务粒度为函数,函数即为一个代码功能块,当有针对某个函数的调用请求时,函数计算平台会将调用请求发送给函数实例(该函数实例可能是容器或虚拟机或其他类似运行环境),从而触发相应的函数执行。现有技术中,如果在没有函数实例的情况下调用该函数,函数计算平台需要先等待函数实例准备就绪,才可以执行函数调用,这段等待函数实例就绪的时间被称为函数冷启动时间。
因此,函数冷启动时间影响函数计算平台的资源利用效率,但是,现有技术无法有效地缩短函数冷启动时间,进而降低函数计算平台的资源利用效率。
发明内容
本公开实施例提供一种函数计算冷启动的加速方法、装置、设备及存储介质,以解决现有技术中无法有效地缩短函数冷启动时间,进而降低函数计算平台的资源利用效率。
第一方面,本公开实施例提供一种函数计算冷启动的加速方法,所述方法包括:
响应于用于指示冷启动预设函数的指令,获取支持所述预设函数运行的目标预热函数实例,所述目标预热函数实例包含支持动态加载函数代码的函数程序;
获取所述预设函数对应的用户代码;
在所述目标预热函数实例上,通过所述支持动态加载函数代码的函数程序加载所述用户代码,得到所述用户代码对应的运行结果。
第二方面,本公开实施例提供一种函数计算冷启动的加速装置,包括:
第一获取模块,用于响应于用于指示冷启动预设函数的指令,获取支持所述预设函数运行的目标预热函数实例,所述目标预热函数实例包含支持动态加载函数代码的函数程序;
第二获取模块,用于获取所述预设函数对应的用户代码;
运行模块,用于在所述目标预热函数实例上,通过所述支持动态加载函数代码的函数程序加载所述用户代码,得到所述用户代码对应的运行结果。
第三方面,本公开实施例提供一种电子设备,包括:至少一个处理器、存储器以及通信接口;
所述通信接口用于与网络设备进行通信;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上述第一方面以及第一方面各种可能的设计所述的函数计算冷启动的加速方法。
第四方面,本公开实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一方面以及第一方面各种可能的设计所述的函数计算冷启动的加速方法。
本公开实施例提供的函数计算冷启动的加速方法、装置、设备及存储介质,首先响应于用于指示冷启动预设函数的指令,来获取支持所述预设函数运行的目标预热函数实例,节约了临时创建函数实例的时间,然后再下载预设函数对应的用户代码,再通过目标预热函数实例直接加载用户代码,使得用户代码能够在目标预热函数实例中执行,冷启动结束。因此,通过响应于用于指示冷启动预设函数的指令,调取支持所述预设函数能够执行的目标预热函数实例,然后下载用户代码,由于目标预热函数实例包含支持动态加载函数代码的函数程序,所以该目标预热函数实例是预先启动好的,使得在目标预热函数实例上直接加载用户代码,完成预设函数的调用,从而消除了资源调度的时间消耗、启动目标预热函数实例对应的运行环境的时间消耗和启动函数程序的时间消耗,缩短了函数的冷启动时间,进而提高了函数计算平台的资源利用效率和用户体验。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中函数冷启动的流程示意图;
图2为现有技术中用于运行函数实例的集群示意图;
图3为本公开实施例提供的新增的用于运行预热函数实例的集群示意图;
图4为本公开实施例提供的函数计算冷启动的加速方法的场景示意图;
图5为本公开实施例提供的函数冷启动的流程示意图;
图6为本公开实施例提供的函数计算冷启动的加速方法的流程示意图;
图7为本公开实施例提供的所述函数计算冷启动的加速装置的结构框图;
图8为本公开实施例提供的电子设备的硬件结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本公开实施方式中的多个装置或模块之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
现有技术中,为了提高平台的资源利用效率,如果函数在一段时间内没有被调用,计算平台会停止运行该函数相应的函数实例,释放***资源。当有针对某个函数的调用请求时,函数计算平台会将调用请求发送给函数实例,从而触发相应的函数执行,但是在没有函数实例的情况下调用该函数,函数计算平台需要先等待函数实例准备就绪,比如,临时创建可以执行该函数的函数实例,才可以真正执行函数调用,因此,函数的冷启动时间在很大程度上影响用户的使用体验,同时也影响函数计算平台的资源利用效率。
参见图1所示,图1为现有技术中函数冷启动的流程示意图。其中,现有的函数计算平台上有用于运行函数实例的集群,参见图2所示,图2为现有技术中用于运行函数实例的集群示意图,节点1上有A函数实例和B函数实例;节点2上有B函数实例、C函数实例和D函数实例;节点3上有A函数实例和D函数实例。集群由多个节点组成,每个节点上运行多个函数实例。
应用场景为:函数计算平台上在用于运行函数实例的集群中没有对应的函数实例的情况下调用该函数。比如调用E函数实例,此时各个节点上没有E函数实例。
首先资源调度阶段:函数计算平台根据集群状态做决策,将即将创建的函数实例分配到某个节点,并划分一定资源给即将创建的函数实例,例如CPU资源、内存资源等。然后下载用户代码,在被分配到的节点上下载用户函数代码。再启动函数运行环境,例如启动容器、启动虚拟机等。最后启动函数程序,函数程序启动完毕后,该函数实例即为可用,此时函数计算平台会获取到一个准备就绪的函数实例,该实例可以用于执行函数请求。上述场景,函数的冷启动时间在很大程度上影响用户的使用体验,同时也影响函数计算平台的资源利用效率。
为了解决上述问题,在现有函数计算平台上用于运行函数实例的集群中没有函数实例的情况下调用该函数的场景下,可以增加预热函数实例池,预热函数实例池中的各个预热函数实例运行在集群的各个节点上,并且对各个节点上运行的各个预热函数实例的类型和数量不做具体限定,根据具体的应用场景而定,参见图3所示,图3为本公开实施例提供的新增的用于运行预热函数实例的集群示意图。其中,节点通常为物理机,预热函数实例通常为容器或者虚拟机。该预热函数实例池支持取预热函数实例请求,当有函数调用请求时返回一个预热的函数实例给调用方,节约了由于临时创建函数实例时资源调度的时间。使用预热,是由于一旦类加载完成,所有重要的类(在进程启动时使用)都会被推送到运行环境缓存(本机代码)中,这使得它们在运行时可以更快地访问,节约了运行环境启动时间;由于预热函数实例中包含支持动态加载函数代码的函数程序,在下载用户代码后,可以在预热函数实例上可以通过预先启动好的函数程序,让其动态加载用户函数代码(即用户代码)。
参考图4,图4为本公开实施例提供的函数计算冷启动的加速方法的场景示意图。在实际应用中,实现函数计算冷启动的加速方法的执行主体可以是函数计算平台10,其中函数计算平台10增加了预热函数实例池,预热函数实例池中的各个预热函数实例运行在集群的各个节点上,函数计算平台可以控制各个节点,使得调用的函数能够执行。函数计算平台10可以通过与网络设备20(该网络设备20可以是终端设备(终端设备可以是用户端)或服务器)进行交互,进而实现函数计算冷启动的加速。
结合图5所示,图5为本公开实施例提供的函数冷启动的流程示意图。具体的实现过程为:函数计算平台的服务粒度为函数,该函数为一个代码功能块,当用户调用函数时,通过网络设备向函数计算平台发送调用请求指令,该调用请求指令是用于指示冷启动预设函数的指令,函数计算平台接收调用请求指令,并响应于该用于指示冷启动预设函数的指令,从增加的预热函数实例池中取与所述预设函数匹配的预热函数实例即目标预热函数实例。其中,调用请求指令可以是并发的,即函数计算平台支持并发请求,可同时从预热函数实例池中取多个预热函数实例,因此,目标预热函数实例可以是一个也可以是多个,可以根据函数计算平台接收到的指令条数相对应。函数计算平台在选出目标预热函数实例后,在该目标预热函数实例所在的节点上下载请求调用函数的用户代码即预设函数对应的用户代码,然后在所述目标预热函数实例上,通知预先启动好的函数程序即指示支持动态加载函数代码的函数程序,让其动态加载用户函数代码,冷启动结束,使得用户代码能够在目标预热函数实例上运行,并将用户代码对应的运行结果发送给网络设备,通过网络设备向用户显示运行结果。
因此,本公开实施例中,通过预先准备好一个可动态调整大小的预热函数实例池,预热函数实例池中是预先启动好的支持动态加载用户函数代码的预热函数实例,可供所有函数使用,从而消除了资源调度的时间消耗、启动运行环境的时间消耗和启动函数程序的时间消耗。
其中,函数计算冷启动的加速方法的实现可以用过以下方式实现:
参考图6,图6为本公开实施例提供的函数计算冷启动的加速方法的流程示意图。本公开实施例的方法可以应用在终端设备或服务器中,本公开实施例中对执行主体不进行限定。该函数计算冷启动的加速方法包括:
步骤S101、响应于用于指示冷启动预设函数的指令,获取支持所述预设函数运行的目标预热函数实例,所述目标预热函数实例包含支持动态加载函数代码的函数程序。
本公开实施例中,可以应用于函数计算平台。一个或多个网络设备可以同时或不同时间段发送至少一个目标函数调用请求指令,其中,调用请求指令是用于指示冷启动预设函数的指令,说明现有的函数实例集群上没有可以执行预设函数的函数实例。在接收到指令后,开启冷启动。
在实际应用中,一个调用请求指令可以对应一个函数调用请求,一个函数的执行需要在相应的一个函数实例上,函数计算平台在接收到用于指示冷启动预设函数的指令时,可以从新增的预热函数实例中获取与预设函数匹配的目标预热函数实例。
在本公开的一个实施例中,所述获取与所述预设函数匹配的目标预热函数实例,可以通过以下步骤实现:
步骤a1、根据所述预设函数,确定符合所述预设函数运行的目标预热函数实例类型;
步骤a2、从所述预热函数实例池中选取与所述目标预热函数实例类型一致的任一个预热函数实例作为所述目标预热函数实例。
本公开实施例中,由于预热函数实例可以是容器或虚拟机或其他类似运行环境,因此,函数计算平台在接收到用于指示冷启动预设函数的指令时,首先需要确认支持预设函数执行的运行环境类型,即确定符合所述预设函数运行的目标预热函数实例类型,然后从所述预热函数实例池中随即取出与目标预热函数实例类型一致的一个预热函数实例,并将该预设函数实例作为支持预设函数执行的运行环境。
此外,对于目标预热函数实例类型的选取可以是从预热函数实例池中选取与所述目标预热函数实例类型一致的任一个预热函数实例,也可以是根据预热函数实例池中与所述目标预热函数实例类型一致的所有预热函数实例类型,然后根据所有预热函数实例类型所在的节点的状态信息,来确定从哪个节点上取预热函数实例类型作为目标预设函数实例。或者,根据节点中承载的与所述目标预热函数实例类型一致的预热函数实例的数量多少,来确定从哪个节点上取预热函数实例类型作为目标预设函数实例。这里的节点可以是物理机,比如服务器。
针对状态信息:比如,节点1和节点2中均存在与所述目标预热函数实例类型一致的预热函数实例,节点1当前资源紧张,这里的资源可以至少包括CPU资源、占用内存资源等,为了更好的释放节点1的资源或是减轻节点1所承载的资源,可以确定从节点1中选取与所述目标预热函数实例类型一致的预热函数实例作为目标预热函数实例。
针对数量:比如,节点1和节点2中均存在与所述目标预热函数实例类型一致的预热函数实例,节点1中符合条件的预热函数实例的数量多于节点2中符合条件的预热函数实例的数量,为了实现为各个节点分配的资源平衡,可以确定从节点1中选取与所述目标预热函数实例类型一致的预热函数实例作为目标预热函数实例。
步骤S102、获取所述预设函数对应的用户代码。
其中,函数(或预设函数)即为一个代码功能块。可以从预设地址或文件中下载预设函数的用户代码(或用户函数代码)。
在本公开的一个实施例中,所述获取所述预设函数对应的用户代码,可以通过以下步骤实现:
步骤b1、确定所述目标预热函数实例所在的目标节点,所述目标节点为所述集群上的一个节点;
步骤b2、在所述目标节点上下载所述预设函数对应的用户代码。
本公开实施例中,以节点为服务器为例,由于每个服务器上运行多个新增的预热函数实例,函数计算平台在确定了目标预热函数实例后,可以进而确定该目标预热函数实例在哪个服务器上运行,即为目标节点或是目标服务器。在确定了承载目标预热函数实例的服务器后,由于函数执行或是用户代码运行需在目标预热函数实例这一运行环境下实现,同时该目标预热函数实例运行在该服务器上,因此,在该服务器上下载预设函数对应的用户代码,即在被分配的节点上下载用户代码,使用户代码在运行环境中可见。例如运行环境采用虚拟机时,可将用户代码以虚拟磁盘方式挂载至虚拟机内部。
步骤S103、在所述目标预热函数实例上,通过所述支持动态加载函数代码的函数程序加载所述用户代码,得到所述用户代码对应的运行结果。
本公开实施例中,以目标预热函数实例为虚拟机为例,虚拟机预热方案,通过预先缓存的方式,以便在运行时访问时立即使用,进而消除启动运行环境的时间消耗,同时目标预热函数实例上已经存在支持动态加载函数代码的函数程序,因此,在加载用户代码之前,函数程序已经是预先启动好的,可以消除现有技术中在启动运行环境后,还需要在运行环境中加载或配置函数程序而导致启动函数程序所消耗的时间,所以在目标预热函数实例上,可以直接通知预先启动好的函数程序,让其动态加载用户函数代码,减少了整个函数计算平台中函数冷启动时间。
在本公开的一个实施例中,在所述得到所述用户代码对应的运行结果之后,所述方法还包括:将所述用户代码对应的运行结果发送至发送用于指示冷启动预设函数的指令的网络设备,用以供使用所述网络设备的用户查看。
本公开实施例,在整个冷启动过程中,用户虽然对于具体操作过程是无感知的,但是针对冷启动时间的缩短是有使用体验的,因此,当用户发送调用请求后,函数计算平台通过对冷启动时间的优化,加速了函数计算的冷启动,将运行结果反馈至使用网络设备的用户,用以供用户查看运行结果。通过缩短冷启动时间,提高了用户的使用体验,同时提高了函数计算平台的资源利用效率。
本公开实施例提供的函数计算冷启动的加速方法,通过响应于用于指示冷启动预设函数的指令,来获取支持所述预设函数运行的目标预热函数实例,节约了临时创建函数实例的时间,然后再下载预设函数对应的用户代码,再通过目标预热函数实例直接加载用户代码,使得用户代码能够在目标预热函数实例中执行,冷启动结束。因此,通过响应于用于指示冷启动预设函数的指令,调取支持所述预设函数能够执行的目标预热函数实例,然后下载用户代码,由于目标预热函数实例包含支持动态加载函数代码的函数程序,所以该目标预热函数实例是预先启动好的,使得在目标预热函数实例上直接加载用户代码,完成预设函数的调用,从而消除了资源调度的时间消耗、启动目标预热函数实例对应的运行环境的时间消耗和启动函数程序的时间消耗,缩短了函数的冷启动时间,进而提高了函数计算平台的资源利用效率和用户体验。
在本公开的一个实施例中,在上述实施例的基础上,对如何创建预热函数实例,进而生成预热函数实例池进行了详细说明,可以通过下述方式实现:
在所述获取与所述预设函数匹配的目标预热函数实例之前,所述方法还包括:根据集群上各个节点的状态信息,生成预热函数实例池。
其中,所述预热函数实例池中的各个预热函数实例运行在集群的各个节点上,每个所述节点上运行至少一类预热函数实例,所述预热函数实例为预先启动好且与任意函数内容不相关的运行环境。
具体地,生成预热函数实例池可以通过以下步骤:
步骤c1、根据所述集群上各个所述节点的状态信息,确定为各个所述节点分配的待创建预热函数实例的类型和数量;
步骤c2、通过各个所述节点生成相应类型和数量的预热函数实例,并形成所述预热函数实例池。
本公开实施例中,首先根据所述集群上各个所述节点的状态信息,将即将创建的预热函数实例(即为待创建预设函数实例)分配到某个节点,然后在分配的节点上创建相应类型和数量预热函数实例。
其中,这里的待创建预设函数实例为多个,并且待创建预设函数实例的类型不止一类,具体在哪个节点上分配几个类型的待创建预设函数实例以及各类型的待创建预设函数实例的数量,都是根据集群上各个所述节点的状态信息分配的,比如,为节点1分配类型1的待创建预设函数实例的数量是2个,类型2的待创建预设函数实例的数量是3个,类型N1的待创建预设函数实例的数量是M1个;为节点1分配类型1的待创建预设函数实例的数量是1个,类型2的待创建预设函数实例的数量是2个,类型N2的待创建预设函数实例的数量是M2个等等。因此,针对创建的预热函数实例池中预热函数实例的数量和类型不做限定,只要保证各个节点能够承载。
在本公开的一个实施例中,所述待创建预热函数实例为多个。本公开实施例在上述公开实施例的基础上,对步骤c1和c2分别进行了详细说明。根据所述集群上各个所述节点的状态信息,确定为各个所述节点分配的待创建预热函数实例的类型和数量,可以包括以下步骤:
步骤d1、获取各个所述待创建预热函数实例的类型和各个所述类型对应的待创建预热函数实例待占用的资源;
步骤d2、根据所述待创建预热函数实例待占用的资源、所述节点的状态信息(这里的状态信息为节点中的资源,比如节点的CPU资源和节点的内存资源),确定在各个所述节点上分配的各个待创建预热函数实例的类型和在各个所述节点上支持运行相应类型的各个待创建预热函数实例的数量。
本公开实施例中,在创建预热函数实例时,可以结合各个类型的预热函数实例本身所占用的资源,比如第一CPU资源和第一内存资源等资源,为各个类型的预热函数实例分配节点。其中,针对预热函数实例,不同的类型所占用的资源可能不同。这里的预热函数实例的类型可以理解为支持哪一类语言运行的类型。
具体地,根据第一CPU资源、第一内存资源、所述节点的CPU资源和节点的内存资源,对各个节点进行合理分配,计算出各个节点所能承载的预热函数实例的类型和数量。
此外,通过各个所述节点生成相应类型和数量的预热函数实例,可以包括以下:
步骤d3、将各个所述待创建预热函数实例分配到对应的各个所述节点;
步骤d4、为各个所述节点分配的各个待创建预热函数实例分配目标资源(比如目标CPU资源和目标内存等资源);
步骤d5、基于所述目标CPU资源和所述目标内存资源等资源,生成与目标函数不存在相关性的运行环境,所述目标函数至少包括所述预设函数;
步骤d6、在所述运行环境中配置支持动态加载函数代码的函数程序,生成预热函数实例。
本公开实施例中,将待创建预热函数实例分配到对应的某个节点,并划分对应的资源给待创建预热函数实例,例如CPU资源、内存资源等。然后创建运行环境,即启动运行环境,此时启动的运行环境与具体函数无关,因为在调用函数时,预热函数实例是共用的,为了体现共享特性,避免在多个函数调用时,被其他函数调用请求占用执行该函数运行的预热函数实例,或是避免出现调用混乱,以至于没有可以调用的预热函数实例,因此,生成的是与目标函数不存在相关性的运行环境。这里的目标函数可以为任一具体的函数。
然后启动一个支持动态加载函数代码的函数程序,在所述运行环境中配置或加载或添加支持动态加载函数代码的函数程序,生成预热函数实例。这里将优化前的(参见图1)“启动函数程序”拆成两个阶段,分别为“支持动态加载函数代码的函数程序”和“动态加载用户代码”,从而节省“启动函数程序”所消耗的时间。
在实际应用中,无论针对同一函数还是针对不同函数,所述函数计算冷启动的加速方法都支持并行执行,即在相同时刻,可以同时冷启动多个函数实例。
在本公开的一个实施例中,能够支持设置预热函数实例池中的预热函数实例数量,实现可动态调整大小的预热函数实例池,本实施例在上述实施例的基础上,对函数计算冷启动的加速方法进行了详细说明。在所述获取支持所述预设函数运行的目标预热函数实例之后,可以通过以下至少两种方式实现动态调整预热函数实例池中预热函数实例数量:
方式一:根据各个所述节点当前的状态信息,生成新的预热函数实例。
具体地,在所述获取支持所述预设函数运行的目标预热函数实例之后,获取各个所述节点当前的状态信息;根据各个所述节点当前的状态信息,通过各个所述节点生成相应类型和数量的新的预热函数实例,所述状态信息用于表示所述节点中的资源。其中,生成新的预热函数实例的过程与上述生成预设函数实例的过程类似,在此不再赘述。
本公开实施例,可以根据函数计算平台的冷启动请求数量自动调整池中预热函数实例的数量,尽量避免出现预热函数实例池中预热函数实例数量不够的情况。比如,有5个预热函数实例从预热函数实例池中取出,为了避免出现预热函数实例池中预热函数实例数量不够的情况,可以根据各个所述节点当前的状态信息,比如各个节点当前的CPU资源和当前的内存资源,为各个节点再次分配新的待创建函数实例,在分配的节点上生成新的预热函数实例。
方式二:确定所述预热函数实例池中剩余预热函数实例的数量;若所述剩余预热函数实例的数量低于预设阈值,则根据各个所述节点当前的状态信息,生成新的预热函数实例。
具体地,在生成相应类型和数量的新的预热函数实例之前,确定所述预热函数实例池中剩余预热函数实例的数量;若所述剩余预热函数实例的数量低于预设阈值,则确定创建新的预热函数实例,即创建新的预热函数实例,可以包括:获取各个所述节点当前的状态信息;根据各个所述节点当前的状态信息,通过各个所述节点生成相应类型和数量的新的预热函数实例。
其中,创建或生成新的预热函数实例的过程分别与方式一和上述生成预设函数实例的过程类似,在此不再赘述。
本公开实施例中,当预热函数实例池中预热函数实例数量不满足预期时(例如有预热实例从池中被取出时),即预热函数实例池中剩余预热函数实例的数量低于预设阈值,可自动补充预热函数实例。具体如何创建新的预热函数实例与上述公开实施例描述的创建预热函数实例的过程类似,在此不再赘述。其中,对动态调整预热函数实例池中预热函数实例的数量的时机不做具体限定。可以是在所述获取支持所述预设函数运行的目标预热函数实例之后,也可以是在所述得到所述用户代码对应的运行结果之后等等,即在所述获取支持所述预设函数运行的目标预热函数实例之后的任意时刻,只要预热函数实例池中预热函数实例的数量出现变化,均可以建立新的预热函数实例来补入预热函数实例池中。
本公开实施例中,通过预先准备好一个可动态调整大小的预热函数实例池,预热函数实例池中是预先启动好的支持动态加载用户函数代码的预热函数实例,并且各个预热函数实例的运行环境与具体函数无关,因此可供所有函数使用,从而消除了资源调度的时间消耗、启动运行环境的时间消耗和启动函数程序的时间消耗。因此,本公开通过增加预热函数实例池和采用代码模块动态加载的方式降低函数冷启动延迟,进而提高了用户的使用体验以及函数计算平台的资源利用效率。
对应于上文公开实施例的函数计算冷启动的加速方法,图7为本公开实施例提供的函数计算冷启动的加速装置的结构框图。其中函数计算冷启动的加速装置可以是函数计算平台。为了便于说明,仅示出了与本公开实施例相关的部分。参照图7,函数计算冷启动的加速装置所述函数计算冷启动的加速装置70包括:第一获取模块701、第二获取模块702、以及运行模块703;第一获取模块701,用于响应于用于指示冷启动预设函数的指令,获取支持所述预设函数运行的目标预热函数实例,所述目标预热函数实例包含支持动态加载函数代码的函数程序;第二获取模块702,用于获取所述预设函数对应的用户代码;运行模块703,用于在所述目标预热函数实例上,通过所述支持动态加载函数代码的函数程序加载所述用户代码,得到所述用户代码对应的运行结果。
本公开实施例提供的第一获取模块701、第二获取模块702、以及运行模块703,用于响应于用于指示冷启动预设函数的指令,来获取支持所述预设函数运行的目标预热函数实例,节约了临时创建函数实例的时间,然后再下载预设函数对应的用户代码,再通过目标预热函数实例直接加载用户代码,使得用户代码能够在目标预热函数实例中执行,冷启动结束。因此,通过响应于用于指示冷启动预设函数的指令,调取支持所述预设函数能够执行的目标预热函数实例,然后下载用户代码,由于目标预热函数实例包含支持动态加载函数代码的函数程序,所以该目标预热函数实例是预先启动好的,使得在目标预热函数实例上直接加载用户代码,完成预设函数的调用,从而消除了资源调度的时间消耗、启动目标预热函数实例对应的运行环境的时间消耗和启动函数程序的时间消耗,缩短了函数的冷启动时间,进而提高了函数计算平台的资源利用效率和用户体验。
本公开实施例提供的装置,可用于执行上文第一方面及第一方面各种可能的设计对应的方法实施例的技术方案,其实现原理和技术效果类似,本公开实施例此处不再赘述。
在本公开的一个实施例中,本公开实施例在上述公开实施例的基础上,对函数计算冷启动的加速装置进行了详细说明。所述装置还包括:预热函数实例池创建模块704;预热函数实例池创建模块704,用于在所述获取与所述预设函数匹配的目标预热函数实例之前,根据集群上各个节点的状态信息,生成预热函数实例池;其中,所述预热函数实例池中的各个预热函数实例运行在集群的各个节点上,每个所述节点上运行至少一类预热函数实例,所述预热函数实例为预先启动好且与任意函数内容不相关的运行环境。
在本公开的一个实施例中,本公开实施例在上述公开实施例的基础上,本公开实施例对第一获取模块701进行了详细说明。第一获取模块701,具体用于:根据所述预设函数,确定符合所述预设函数运行的目标预热函数实例类型;从所述预热函数实例池中选取与所述目标预热函数实例类型一致的任一个预热函数实例作为所述目标预热函数实例。
在本公开的一个实施例中,本公开实施例在上述公开实施例的基础上,本公开实施例对第二获取模块702进行了详细说明。第二获取模块702,具体用于:确定所述目标预热函数实例所在的目标节点,所述目标节点为所述集群上的一个节点;在所述目标节点上下载所述预设函数对应的用户代码。
在本公开的一个实施例中,本公开实施例在上述公开实施例的基础上,本公开实施例对预热函数实例池创建模块704进行了详细说明。预热函数实例池创建模块704,具体用于:
根据所述集群上各个所述节点的状态信息,确定为各个所述节点分配的待创建预热函数实例的类型和数量;通过各个所述节点生成相应类型和数量的预热函数实例,并形成所述预热函数实例池。
在本公开的一个实施例中,所述待创建预热函数实例为多个;预热函数实例池创建模块704,具体用于:
获取各个所述待创建预热函数实例的类型和各个所述类型对应的待创建预热函数实例待占用的资源;根据所述待创建预热函数实例待占用的资源、所述节点的状态信息,确定在各个所述节点上分配的各个待创建预热函数实例的类型和在各个所述节点上支持运行相应类型的各个待创建预热函数实例的数量。
在本公开的一个实施例中,所述待创建预热函数实例为多个;预热函数实例池创建模块704,具体用于:
将各个所述待创建预热函数实例分配到对应的各个所述节点;为各个所述节点分配的各个待创建预热函数实例分配目标资源;基于所述目标资源,生成与目标函数不存在相关性的运行环境,所述目标函数至少包括所述预设函数;在所述运行环境中配置支持动态加载函数代码的函数程序,生成预热函数实例。
在本公开的一个实施例中,本公开实施例在上述公开实施例的基础上,对装置进行了详细说明。其中,所述预设函数为至少一个;所述装置还包括:第一新的预热函数实例创建模块705;第一新的预热函数实例创建模块705,用于获取各个所述节点当前的状态信息;根据各个所述节点当前的状态信息,通过各个所述节点生成相应类型和数量的新的预热函数实例,所述状态信息用于表示所述节点中的资源。参见图7中,以第一新的预热函数实例创建模块705在第一获取模块701之后为例。
在本公开的一个实施例中,本公开实施例在上述公开实施例的基础上,对装置进行了详细说明。所述装置还包括:第二新的预热函数实例创建模块706;第二新的预热函数实例创建模块706,用于在生成相应类型和数量的新的预热函数实例之前,确定所述预热函数实例池中剩余预热函数实例的数量;若所述剩余预热函数实例的数量低于预设阈值,则确定创建新的预热函数实例。参见图7中,以第二新的预热函数实例创建模块706在第一获取模块701之后为例。
其中,第二新的预热函数实例创建模块,具体用于:在生成相应类型和数量的新的预热函数实例之前,确定所述预热函数实例池中剩余预热函数实例的数量;若所述剩余预热函数实例的数量低于预设阈值,则获取各个所述节点当前的状态信息;根据各个所述节点当前的状态信息,通过各个所述节点生成相应类型和数量的新的预热函数实例,所述状态信息用于表示所述节点中的资源。
在本公开的一个实施例中,所述装置还包括:发送模块707;发送模块707用于,在所述得到所述用户代码对应的运行结果之后,将所述用户代码对应的运行结果发送至发送用于指示冷启动预设函数的指令的网络设备,用以供使用所述网络设备的用户查看。
参考图8,其示出了适于用来实现本公开实施例的电子设备800的结构示意图,该电子设备800可以为终端设备或服务器。其中,终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、个人数字助理(Personal Digital Assistant,简称PDA)、平板电脑(Portable Android Device,简称PAD)、便携式多媒体播放器(Portable MediaPlayer,简称PMP)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图8示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图8所示,电子设备800可以包括处理装置(例如中央处理器、图形处理器等)801,其可以根据存储在只读存储器(Read Only Memory,简称ROM)802中的程序或者从存储装置808加载到随机访问存储器(Random Access Memory,简称RAM)803中的程序而执行各种适当的动作和处理。在RAM 803中,还存储有电子设备800操作所需的各种程序和数据。处理装置801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
通常,以下装置可以连接至I/O接口805:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置806;包括例如液晶显示器(Liquid CrystalDisplay,简称LCD)、扬声器、振动器等的输出装置805;包括例如磁带、硬盘等的存储装置808;以及通信装置809。通信装置809可以允许电子设备800与其他设备进行无线或有线通信以交换数据。虽然图8示出了具有各种装置的电子设备800,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置809从网络上被下载和安装,或者从存储装置808被安装,或者从ROM 802被安装。在该计算机程序被处理装置801执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备执行上述公开实施例所示的方法。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LocalArea Network,简称LAN)或广域网(Wide Area Network,简称WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定,例如,第一获取单元还可以被描述为“获取至少两个网际协议地址的单元”。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上***(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行***、装置或设备使用或与指令执行***、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体***、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
第一方面,本公开实施例提供一种函数计算冷启动的加速方法,所述方法包括:
响应于用于指示冷启动预设函数的指令,获取支持所述预设函数运行的目标预热函数实例,所述目标预热函数实例包含支持动态加载函数代码的函数程序;
获取所述预设函数对应的用户代码;
在所述目标预热函数实例上,通过所述支持动态加载函数代码的函数程序加载所述用户代码,得到所述用户代码对应的运行结果。
根据本公开的一个或多个实施例,在所述获取与所述预设函数匹配的目标预热函数实例之前,所述方法还包括:
根据集群上各个节点的状态信息,生成预热函数实例池;
其中,所述预热函数实例池中的各个预热函数实例运行在集群的各个节点上,每个所述节点上运行多个预热函数实例,所述预热函数实例为预先启动好且与任意函数内容不相关的运行环境。
根据本公开的一个或多个实施例,所述根据集群上各个节点的状态信息,生成预热函数实例池,包括:
根据所述集群上各个所述节点的状态信息,确定为各个所述节点分配的待创建预热函数实例的类型和数量;
通过各个所述节点生成相应类型和数量的预热函数实例,并形成所述预热函数实例池。
根据本公开的一个或多个实施例,所述待创建预热函数实例为多个;
所述根据所述集群上各个所述节点的状态信息,确定为各个所述节点分配的待创建预热函数实例的类型和数量,包括:
获取各个所述待创建预热函数实例的类型和各个所述类型对应的待创建预热函数实例待占用的资源;
根据所述待创建预热函数实例待占用的资源、所述节点的状态信息,确定在各个所述节点上分配的各个待创建预热函数实例的类型和在各个所述节点上支持运行相应类型的各个待创建预热函数实例的数量。
根据本公开的一个或多个实施例,所述通过各个所述节点生成相应类型和数量的预热函数实例,包括:
将各个所述待创建预热函数实例分配到对应的各个所述节点;
为各个所述节点分配的各个待创建预热函数实例分配目标资源;
基于所述目标资源,生成与目标函数不存在相关性的运行环境,所述目标函数至少包括所述预设函数;
在所述运行环境中配置支持动态加载函数代码的函数程序,生成预热函数实例。
根据本公开的一个或多个实施例,所述获取与所述预设函数匹配的目标预热函数实例,包括:
根据所述预设函数,确定符合所述预设函数运行的目标预热函数实例类型;
从所述预热函数实例池中选取与所述目标预热函数实例类型一致的任一个预热函数实例作为所述目标预热函数实例。
根据本公开的一个或多个实施例,所述预设函数为至少一个;
在所述获取支持所述预设函数运行的目标预热函数实例之后,所述方法还包括:
获取各个所述节点当前的状态信息;
根据各个所述节点当前的状态信息,通过各个所述节点生成相应类型和数量的新的预热函数实例,所述状态信息用于表示所述节点中的资源。
根据本公开的一个或多个实施例,在所述获取支持所述预设函数运行的目标预热函数实例之后,所述方法还包括:
确定所述预热函数实例池中剩余预热函数实例的数量;
若所述剩余预热函数实例的数量低于预设阈值,则根据各个所述节点当前的状态信息,生成新的预热函数实例。
根据本公开的一个或多个实施例,所述获取所述预设函数对应的用户代码,包括:
确定所述目标预热函数实例所在的目标节点,所述目标节点为所述集群上的一个节点;
在所述目标节点上下载所述预设函数对应的用户代码。
根据本公开的一个或多个实施例,在所述得到所述用户代码对应的运行结果之后,所述方法还包括:
将所述用户代码对应的运行结果发送至发送用于指示冷启动预设函数的指令的网络设备,用以供使用所述网络设备的用户查看。
第二方面,本公开实施例提供一种函数计算冷启动的加速装置,包括:
第一获取模块,用于响应于用于指示冷启动预设函数的指令,获取支持所述预设函数运行的目标预热函数实例,所述目标预热函数实例包含支持动态加载函数代码的函数程序;
第二获取模块,用于获取所述预设函数对应的用户代码;
运行模块,用于在所述目标预热函数实例上,通过所述支持动态加载函数代码的函数程序加载所述用户代码,得到所述用户代码对应的运行结果。
根据本公开的一个或多个实施例,所述装置还包括:预热函数实例池创建模块;预热函数实例池创建模块,用于在所述获取与所述预设函数匹配的目标预热函数实例之前,根据集群上各个节点的状态信息,生成预热函数实例池;其中,所述预热函数实例池中的各个预热函数实例运行在集群的各个节点上,每个所述节点上运行至少一类预热函数实例,所述预热函数实例为预先启动好且与任意函数内容不相关的运行环境。
根据本公开的一个或多个实施例,预热函数实例池创建模块,具体用于:
根据所述集群上各个所述节点的状态信息,确定为各个所述节点分配的待创建预热函数实例的类型和数量;
通过各个所述节点生成相应类型和数量的预热函数实例,并形成所述预热函数实例池。
根据本公开的一个或多个实施例,所述待创建预热函数实例为多个;预热函数实例池创建模块,具体用于:
获取各个所述待创建预热函数实例的类型和各个所述类型对应的待创建预热函数实例待占用的资源;
根据所述待创建预热函数实例待占用的资源、所述节点的状态信息,确定在各个所述节点上分配的各个待创建预热函数实例的类型和在各个所述节点上支持运行相应类型的各个待创建预热函数实例的数量。
根据本公开的一个或多个实施例,预热函数实例池创建模块,具体用于:
将各个所述待创建预热函数实例分配到对应的各个所述节点;
为各个所述节点分配的各个待创建预热函数实例分配目标资源;
基于所述目标资源,生成与目标函数不存在相关性的运行环境,所述目标函数至少包括所述预设函数;
在所述运行环境中配置支持动态加载函数代码的函数程序,生成预热函数实例。
根据本公开的一个或多个实施例,第一获取模块,具体用于:根据所述预设函数,确定符合所述预设函数运行的目标预热函数实例类型;
从所述预热函数实例池中选取与所述目标预热函数实例类型一致的任一个预热函数实例作为所述目标预热函数实例。
根据本公开的一个或多个实施例,第二获取模块,具体用于:
确定所述目标预热函数实例所在的目标节点,所述目标节点为所述集群上的一个节点;
在所述目标节点上下载所述预设函数对应的用户代码。
根据本公开的一个或多个实施例,所述装置还包括:第一新的预热函数实例创建模块;第一新的预热函数实例创建模块,用于在所述获取支持所述预设函数运行的目标预热函数实例之后,获取各个所述节点当前的状态信息;根据各个所述节点当前的状态信息,通过各个所述节点生成相应类型和数量的新的预热函数实例,所述状态信息用于表示所述节点中的资源。
根据本公开的一个或多个实施例,所述装置还包括:第二新的预热函数实例创建模块;第二新的预热函数实例创建模块,用于在生成相应类型和数量的新的预热函数实例之前,确定所述预热函数实例池中剩余预热函数实例的数量;若所述剩余预热函数实例的数量低于预设阈值,则确定创建新的预热函数实例。
根据本公开的一个或多个实施例,所述装置还包括:发送模块;发送模块用于,在所述得到所述用户代码对应的运行结果之后,将所述用户代码对应的运行结果发送至发送用于指示冷启动预设函数的指令的网络设备,用以供使用所述网络设备的用户查看。
第三方面,本公开实施例提供一种电子设备,包括:至少一个处理器、存储器以及通信接口;
所述通信接口用于与网络设备进行通信;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上述第一方面以及第一方面各种可能的设计所述的函数计算冷启动的加速方法。
第四方面,本公开实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一方面以及第一方面各种可能的设计所述的函数计算冷启动的加速方法。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。
Claims (9)
1.一种函数计算冷启动的加速方法,其特征在于,所述方法包括:
响应于用于指示冷启动预设函数的指令,获取支持所述预设函数运行的目标预热函数实例,所述目标预热函数实例包含支持动态加载函数代码的函数程序,所述指示冷启动预设函数的指令是并发的;
获取所述预设函数对应的用户代码;
在所述目标预热函数实例上,通过所述支持动态加载函数代码的函数程序加载所述用户代码,得到所述用户代码对应的运行结果;
在获取与所述预设函数匹配的目标预热函数实例之前,所述方法还包括:
根据集群上各个节点的状态信息,确定为各个所述节点分配的待创建预热函数实例的类型和数量;
通过各个所述节点生成相应类型和数量的预热函数实例,并形成所述预热函数实例池;
其中,所述预热函数实例池中的各个预热函数实例运行在集群的各个节点上,每个所述节点上运行至少一类预热函数实例,所述预热函数实例为预先启动好且与任意函数内容不相关的运行环境。
2.根据权利要求1所述的方法,其特征在于,所述待创建预热函数实例为多个;
所述根据所述集群上各个所述节点的状态信息,确定为各个所述节点分配的待创建预热函数实例的类型和数量,包括:
获取各个所述待创建预热函数实例的类型和各个所述类型对应的待创建预热函数实例待占用的资源;
根据所述待创建预热函数实例待占用的资源、所述节点的状态信息,确定在各个所述节点上分配的各个待创建预热函数实例的类型和在各个所述节点上支持运行相应类型的各个待创建预热函数实例的数量。
3.根据权利要求1所述的方法,其特征在于,所述通过各个所述节点生成相应类型和数量的预热函数实例,包括:
将各个所述待创建预热函数实例分配到对应的各个所述节点;
为各个所述节点分配的各个待创建预热函数实例分配目标资源;
基于所述目标资源,生成与目标函数不存在相关性的运行环境,所述目标函数至少包括所述预设函数;
在所述运行环境中配置支持动态加载函数代码的函数程序,生成预热函数实例。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述获取与所述预设函数匹配的目标预热函数实例,包括:
根据所述预设函数,确定符合所述预设函数运行的目标预热函数实例类型;
从所述预热函数实例池中选取与所述目标预热函数实例类型一致的任一个预热函数实例作为所述目标预热函数实例。
5.根据权利要求1-3任一项所述的方法,其特征在于,所述预设函数为至少一个;
在所述获取支持所述预设函数运行的目标预热函数实例之后,所述方法还包括:
获取各个所述节点当前的状态信息;
根据各个所述节点当前的状态信息,通过各个所述节点生成相应类型和数量的新的预热函数实例,所述状态信息用于表示所述节点中的资源。
6.根据权利要求5所述的方法,其特征在于,在生成相应类型和数量的新的预热函数实例之前,所述方法还包括:
确定所述预热函数实例池中剩余预热函数实例的数量;
若所述剩余预热函数实例的数量低于预设阈值,则确定创建新的预热函数实例。
7.一种函数计算冷启动的加速装置,其特征在于,包括:
第一获取模块,用于响应于用于指示冷启动预设函数的指令,获取支持所述预设函数运行的目标预热函数实例,所述目标预热函数实例包含支持动态加载函数代码的函数程序;
第二获取模块,用于获取所述预设函数对应的用户代码;
运行模块,用于在所述目标预热函数实例上,通过所述支持动态加载函数代码的函数程序加载所述用户代码,得到所述用户代码对应的运行结果;
所述装置还包括:预热函数实例池创建模块;预热函数实例池创建模块,用于在获取与所述预设函数匹配的目标预热函数实例之前,根据集群上各个节点的状态信息,确定为各个所述节点分配的待创建预热函数实例的类型和数量;通过各个所述节点生成相应类型和数量的预热函数实例,并形成所述预热函数实例池;其中,所述预热函数实例池中的各个预热函数实例运行在集群的各个节点上,每个所述节点上运行至少一类预热函数实例,所述预热函数实例为预先启动好且与任意函数内容不相关的运行环境。
8.一种电子设备,其特征在于,包括:至少一个处理器、存储器以及通信接口;
所述通信接口用于与网络设备进行通信;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求1至6任一项所述函数计算冷启动的加速方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1至6任一项所述的函数计算冷启动的加速方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010283409.4A CN111475235B (zh) | 2020-04-13 | 2020-04-13 | 函数计算冷启动的加速方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010283409.4A CN111475235B (zh) | 2020-04-13 | 2020-04-13 | 函数计算冷启动的加速方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111475235A CN111475235A (zh) | 2020-07-31 |
CN111475235B true CN111475235B (zh) | 2023-09-12 |
Family
ID=71752168
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010283409.4A Active CN111475235B (zh) | 2020-04-13 | 2020-04-13 | 函数计算冷启动的加速方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111475235B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112394941A (zh) * | 2020-11-18 | 2021-02-23 | 京东数字科技控股股份有限公司 | 代码预热方法、装置、电子设备及存储介质 |
CN114518932A (zh) * | 2020-11-18 | 2022-05-20 | 华为云计算技术有限公司 | 函数服务的调度方法、***、计算设备和存储介质 |
WO2022120577A1 (zh) * | 2020-12-08 | 2022-06-16 | 中国科学院深圳先进技术研究院 | 一种预处理函数的无服务器计算方法及其*** |
CN113656142B (zh) * | 2021-07-16 | 2023-10-10 | 华为技术有限公司 | 基于容器组pod的处理方法及相关***、存储介质 |
US11683391B2 (en) | 2021-09-10 | 2023-06-20 | International Business Machines Corporation | Predicting microservices required for incoming requests |
CN114064251A (zh) * | 2022-01-19 | 2022-02-18 | 浪潮云信息技术股份公司 | 一种函数启动加速方法、装置、设备及可读存储介质 |
CN116501438A (zh) * | 2022-01-19 | 2023-07-28 | 华为技术有限公司 | 一种容器加载方法及装置 |
CN114564245A (zh) * | 2022-02-18 | 2022-05-31 | 北京三快在线科技有限公司 | 函数冷启动方法及装置、电子设备及可读存储介质 |
CN114615340B (zh) * | 2022-03-08 | 2023-10-20 | 抖音视界有限公司 | 一种请求处理方法、装置、计算机设备和存储装置 |
CN115357342B (zh) * | 2022-08-23 | 2024-05-28 | 北京火山引擎科技有限公司 | 冷启动资源处理方法及装置 |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1180973A (zh) * | 1996-10-21 | 1998-05-06 | 次级***有限公司 | 用于电视显示和控制的超级文本标示语言协议 |
US5872967A (en) * | 1989-12-29 | 1999-02-16 | Packard Bell Nec | Method for warm boot from reset |
WO2016142552A1 (en) * | 2015-03-12 | 2016-09-15 | Limacorporate S.P.A. | Quality control method for regulating the operation of an electromechanical apparatus, for example an ebm apparatus, in order to obtain certified processed products |
US9756050B1 (en) * | 2015-03-26 | 2017-09-05 | Amazon Technologies, Inc. | Using transient processing containers for security authorization |
WO2017157175A1 (zh) * | 2016-03-15 | 2017-09-21 | 阿里巴巴集团控股有限公司 | 一种应用启动方法、装置和智能终端 |
US10002026B1 (en) * | 2015-12-21 | 2018-06-19 | Amazon Technologies, Inc. | Acquisition and maintenance of dedicated, reserved, and variable compute capacity |
CN108259418A (zh) * | 2016-12-28 | 2018-07-06 | 中移(苏州)软件技术有限公司 | 一种函数托管服务的***和方法 |
US10067801B1 (en) * | 2015-12-21 | 2018-09-04 | Amazon Technologies, Inc. | Acquisition and maintenance of compute capacity |
CN108717374A (zh) * | 2018-04-24 | 2018-10-30 | 阿里巴巴集团控股有限公司 | Java虚拟机启动时预热的方法、装置、及计算机设备 |
EP3396543A1 (en) * | 2017-04-26 | 2018-10-31 | Nokia Solutions and Networks Oy | Method to allocate/deallocate resources on a platform, platform and computer readable medium |
CN109375961A (zh) * | 2018-10-17 | 2019-02-22 | 平安普惠企业管理有限公司 | 应用程序启动优化方法、装置、计算机设备及存储介质 |
EP3553689A1 (en) * | 2018-04-11 | 2019-10-16 | Capital One Services, LLC | System and method for automatically securing sensitive data in public cloud using a serverless architecture |
CN110383764A (zh) * | 2016-12-16 | 2019-10-25 | 华为技术有限公司 | 无服务器***中使用历史数据处理事件的***和方法 |
US10613901B1 (en) * | 2016-11-29 | 2020-04-07 | Amazon Technologies, Inc. | Context-aware resource allocation |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8719559B2 (en) * | 2010-10-13 | 2014-05-06 | International Business Machines Corporation | Memory tagging and preservation during a hot upgrade |
US10489175B2 (en) * | 2013-06-10 | 2019-11-26 | Amazon Technologies, Inc. | Pre-configure and pre-launch compute resources |
US9424006B2 (en) * | 2014-12-24 | 2016-08-23 | International Business Machines Corporation. | Execution optimization of mobile applications |
US10489170B2 (en) * | 2017-06-19 | 2019-11-26 | Salesforce.Com, Inc. | Application warmup engine |
US10216615B2 (en) * | 2017-06-30 | 2019-02-26 | Sap Se | Debuggable instance code in a cloud-based instance platform environment |
US11088926B2 (en) * | 2017-09-01 | 2021-08-10 | Futurewei Technologies, Inc. | Instantiation of cloud-hosted functions based on call to function graph |
US20200081745A1 (en) * | 2018-09-10 | 2020-03-12 | Nuweba Labs Ltd. | System and method for reducing cold start latency of serverless functions |
-
2020
- 2020-04-13 CN CN202010283409.4A patent/CN111475235B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5872967A (en) * | 1989-12-29 | 1999-02-16 | Packard Bell Nec | Method for warm boot from reset |
CN1180973A (zh) * | 1996-10-21 | 1998-05-06 | 次级***有限公司 | 用于电视显示和控制的超级文本标示语言协议 |
WO2016142552A1 (en) * | 2015-03-12 | 2016-09-15 | Limacorporate S.P.A. | Quality control method for regulating the operation of an electromechanical apparatus, for example an ebm apparatus, in order to obtain certified processed products |
US9756050B1 (en) * | 2015-03-26 | 2017-09-05 | Amazon Technologies, Inc. | Using transient processing containers for security authorization |
US10002026B1 (en) * | 2015-12-21 | 2018-06-19 | Amazon Technologies, Inc. | Acquisition and maintenance of dedicated, reserved, and variable compute capacity |
US10067801B1 (en) * | 2015-12-21 | 2018-09-04 | Amazon Technologies, Inc. | Acquisition and maintenance of compute capacity |
WO2017157175A1 (zh) * | 2016-03-15 | 2017-09-21 | 阿里巴巴集团控股有限公司 | 一种应用启动方法、装置和智能终端 |
US10613901B1 (en) * | 2016-11-29 | 2020-04-07 | Amazon Technologies, Inc. | Context-aware resource allocation |
CN110383764A (zh) * | 2016-12-16 | 2019-10-25 | 华为技术有限公司 | 无服务器***中使用历史数据处理事件的***和方法 |
CN108259418A (zh) * | 2016-12-28 | 2018-07-06 | 中移(苏州)软件技术有限公司 | 一种函数托管服务的***和方法 |
EP3396543A1 (en) * | 2017-04-26 | 2018-10-31 | Nokia Solutions and Networks Oy | Method to allocate/deallocate resources on a platform, platform and computer readable medium |
EP3553689A1 (en) * | 2018-04-11 | 2019-10-16 | Capital One Services, LLC | System and method for automatically securing sensitive data in public cloud using a serverless architecture |
CN108717374A (zh) * | 2018-04-24 | 2018-10-30 | 阿里巴巴集团控股有限公司 | Java虚拟机启动时预热的方法、装置、及计算机设备 |
CN109375961A (zh) * | 2018-10-17 | 2019-02-22 | 平安普惠企业管理有限公司 | 应用程序启动优化方法、装置、计算机设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
Jeremy Daly.Lambda Warmer: Optimize AWS Lambda Function Cold Starts.《https://www.jeremydaly.com/lambda-warmer-optimize-aws-lambda-function-cold-starts/》.2020,全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111475235A (zh) | 2020-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111475235B (zh) | 函数计算冷启动的加速方法、装置、设备及存储介质 | |
US20210216875A1 (en) | Method and apparatus for training deep learning model | |
US11146502B2 (en) | Method and apparatus for allocating resource | |
CN114020470B (zh) | 资源分配方法、装置、可读介质及电子设备 | |
CN111581555B (zh) | 一种文档加载方法、装置、设备及存储介质 | |
CN114625536B (zh) | 显存分配方法、装置、介质及电子设备 | |
CN112379982B (zh) | 任务处理方法、装置、电子设备及计算机可读存储介质 | |
CN114089920A (zh) | 数据存储方法、装置、可读介质及电子设备 | |
CN111240766A (zh) | 应用启动方法、装置、电子设备及计算机可读存储介质 | |
CN116257320B (zh) | 一种基于dpu虚拟化配置管理方法、装置、设备及介质 | |
CN114595065A (zh) | 数据获取方法、装置、存储介质以及电子设备 | |
CN111400068B (zh) | 接口的控制方法、装置、可读介质和电子设备 | |
CN115237589A (zh) | 一种基于sr-iov的虚拟化方法、装置和设备 | |
CN113886019B (zh) | 虚拟机创建方法、装置、***、介质和设备 | |
CN111324376A (zh) | 功能配置方法、装置、电子设备及计算机可读介质 | |
CN113391860A (zh) | 服务请求处理方法、装置、电子设备及计算机存储介质 | |
CN111813541A (zh) | 一种任务调度方法、装置、介质和设备 | |
CN113518183B (zh) | 摄像头调用方法、装置和电子设备 | |
CN110633141A (zh) | 一种应用程序的内存管理方法、装置、终端设备及介质 | |
CN111831655B (zh) | 一种数据处理的方法、装置、介质和电子设备 | |
CN112148448B (zh) | 资源分配方法、装置、设备和计算机可读介质 | |
CN114785794B (zh) | 资源分配方法、装置、设备、介质和*** | |
CN110704767B (zh) | 页面打开方法、装置、电子设备及存储介质 | |
CN116382804A (zh) | 应用运行方法、装置、介质及设备 | |
CN115080059A (zh) | 请求处理方法、装置和电子设备 |
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 |