一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

函数冷启动方法及装置、电子设备及可读存储介质与流程

2022-06-02 16:34:01 来源:中国专利 TAG:


1.本发明涉及软件开发技术领域,具体而言,涉及一种函数冷启动方法及装置、电子设备及可读存储介质。


背景技术:

2.冷启动是faas(functions as a service,函数即服务))面临的主要问题,在没有函数实例存在的情况下,对该函数的请求会触发冷启动,冷启动通常会比较耗时。faas冷启动的流程包括:
3.1)机器资源调度;
4.2)函数代码下载解压;
5.3)启动runtime;
6.4)加载函数。
7.当冷启动完成后,函数实例就绪,函数才能处理请求。每个流程均存在不同程度的开销,其中步骤1)-3)是系统层面的冷启动开销,步骤4)是应用层面的冷启动开销,例如远程过程调用rpc框架资源初始化、数据库场景下连接池构建、函数依赖库加载等。
8.冷启动耗时是衡量faas平台冷启动性能的核心指标,更快的冷启动可以实现服务的秒级扩容,并一步实现缩容至0实例(scale to zero),达到节省机器资源、自动扩缩容、无需运维等目的。在实际应用中,不同语言的冷启动耗时差异巨大,java faas的冷启动耗时显著高于python和node.js。此外,java faas函数在富中间件的情况下,中间件的初始化耗时会大幅增加函数的冷启动耗时,部分情况下可增加十几秒耗时,因为中间件通常需要建立较多的tcp连接,存在较大的网络io开销。
9.实际开发中的绝大部分faas函数开发会引入较多的中间件,富中间件函数实例化时,中间件对函数冷启动耗时的影响,部分情况下可增加十几秒耗时。


技术实现要素:

10.本发明实施例提供了一种函数冷启动方法及装置、电子设备及可读存储介质,以至少解决由于相关技术中富中间件函数实例化时,函数冷启动因中间件加载耗时的技术问题。
11.根据本发明实施例的一个方面,提供了一函数冷启动方法,包括:根据目标函数对应的调度命令将所述目标函数下载至目标容器,其中,所述目标容器预先部署有容器镜像,且所述目标容器中预先加载有中间件;通过所述目标容器运行所述目标函数。
12.进一步地,在所述根据目标函数对应的调度命令将所述目标函数下载至目标容器之前,还包括:构建所述容器镜像;根据所述容器镜像构建所述目标容器;在所述目标容器中加载所述中间件,并初始化所述中间件对应的中间件资源。
13.进一步地,构建所述容器镜像,包括:构建执行应用程序镜像;构建函数下载镜像;合并所述执行应用程序镜像以及所述函数下载镜像,以得到所述容器镜像。
14.进一步地,在所述根据目标函数对应的调度命令将所述目标函数下载至目标容器之前,还包括:接收所述目标函数对应的函数请求;若不存在所述目标函数对应的函数实例,则向调度管理器发送所述调度命令;在所述调度管理器接收到所述调度命令后,根据目标函数对应的调度命令将所述目标函数下载至目标容器。
15.进一步地,所述根据目标函数对应的调度命令将所述目标函数下载至目标容器,包括:通过所述函数下载镜像从预设服务器中下载所述目标函数;通过所述函数下载镜像将所述目标函数的函数代码,解压至预设目录;通过所述执行应用程序镜像加载所述函数代码。
16.根据本发明实施例的另一方面,还提供了一种函数冷启动装置,包括:下载模块,用于根据目标函数对应的调度命令将所述目标函数下载至目标容器,其中,所述目标容器预先部署有容器镜像,且所述目标容器中预先加载有中间件;执行模块,用于在所述目标容器中运行所述目标函数。
17.进一步地,还包括:处理模块,用于在所述根据目标函数对应的调度命令将所述目标函数下载至目标容器之前,构建所述容器镜像;部署处理模块,用于根据所述容器镜像部署所述目标容器;加载模块,用于在所述目标容器中加载所述中间件,并初始化所述中间件对应的中间件资源。
18.进一步地,所述处理模块包括:第一处理子模块,用于构建执行应用程序镜像;第二处理子模块,用于构建函数下载镜像;第三处理子模块,用于合并所述执行应用程序镜像以及所述函数下载镜像,以得到所述容器镜像。
19.进一步地,还包括:接收模块,用于在所述根据目标函数对应的调度命令将所述目标函数下载至目标容器之前,接收所述目标函数对应的函数请求;发送模块,用于若不存在所述目标函数对应的函数实例,则向调度管理器发送所述调度命令;调度模块,用于在所述调度管理器接收到所述调度命令后,根据目标函数对应的调度命令将所述目标函数下载至目标容器。
20.进一步地,所述下载模块包括:下载子模块,用于通过所述函数下载镜像从预设服务器中下载所述目标函数;解压子模块,用于通过所述函数下载镜像将所述目标函数的函数代码,解压至预设目录;加载子模块,用于通过所述执行应用程序镜像加载所述函数代码。
21.根据本发明实施例的另一方面,还提供了一种电子设备,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如上所述的函数冷启动方法的步骤。
22.根据本发明实施例的另一方面,还提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如上所述的函数冷启动方法的步骤。
23.在本发明实施例中,通过根据目标函数对应的调度命令将目标函数下载至目标容器,其中,目标容器预先部署有容器镜像,且目标容器中预先加载有中间件;在目标容器中运行目标函数。通过预先在目标容器中加载中间件,在后续加载函数时无需加载中间件资源,从而实现了减少函数冷启动耗时的技术效果,进而解决了由于相关技术中富中间件函数实例化时,函数冷启动因中间件加载耗时的技术问题。
附图说明
24.此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
25.图1是根据本发明实施例的一种可选的函数冷启动方法的流程示意图;
26.图2是根据本发明实施例的一种可选的目标容器构建方法的流程示意图;
27.图3是根据本发明实施例的一种可选的函数冷启动方法的流程示意图;
28.图4是根据本发明实施例的一种可选的函数冷启动装置的结构示意图。
具体实施方式
29.为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
30.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
31.实施例1
32.现有技术中,冷启动是faas(functions as a service,函数即服务))面临的主要问题,在没有函数实例存在的情况下,对该函数的请求会触发冷启动,由于相关技术中富中间件函数实例化时,函数冷启动因中间件加载耗时的技术问题。
33.为了解决上述问题,根据本发明实施例,提供了一种函数冷启动方法,如图1所示,该方法包括:
34.s102,根据目标函数对应的调度命令将目标函数下载至目标容器,其中,目标容器预先部署有容器镜像,且目标容器中预先加载有中间件;
35.s104,在目标容器中运行目标函数。
36.在本实施例中,目标容器包括但不限于pod、container或其他qemu/kvm虚拟机等。目标容器具备目标函数运行的虚拟硬件环境以及软件环境,可以运行目标函数。
37.在本实施例中,通过预先创建容器,并在容器中预先部署容器镜像,且预先加载有中间件。其中,容器镜像包括但不限于runtime镜像等,容器镜像为目标函数运行所需的软件环境。本实施例中的中间件包括但不限于数据库连接池、缓存redis连接池、远程过程调用rpc客户端以及配置数据等。
38.在接收到对于目标函数的调度命令后,通过目标容器中的下载组件从预设数据库或预设存储介质中下载目标函数的函数实例至目标容器中,然后,对函数实例进行解压得到目标函数对应的函数代码,然后通过目标容器中容器镜像对应的容器系统或组件加载目
标函数对应的函数代码,以实现目标函数的冷启动。
39.需要说明的是,在本实施例中,根据目标函数对应的调度命令将目标函数下载至目标容器,其中,目标容器预先部署有容器镜像,且目标容器中预先加载有中间件;在目标容器中运行目标函数。通过预先在目标容器中加载中间件,在后续加载函数时无需加载中间件资源,从而实现了减少函数冷启动耗时的技术效果,进而解决了由于相关技术中富中间件函数实例化时,函数冷启动因中间件加载耗时的技术问题。
40.可选地,在本实施例中,在根据目标函数对应的调度命令将目标函数下载至目标容器之前,还包括但不限于:构建容器镜像;根据容器镜像构建目标容器;在目标容器中加载中间件,并初始化中间件对应的中间件资源。
41.在一些实施例中,在根据目标函数对应的调度命令将目标函数下载至目标容器之前,首先创建目标容器,以及,在目标容器中加载中间件。具体地,首先构建容器镜像,可以根据预先设置的虚拟机系统或者pod运行环境对应的镜像组件目标容器的容器镜像。例如,根据目标函数的运行环境所需的组件以及系统生成目标容器的容器镜像。
42.接下来,在容器中部署构建的容器镜像,然后在目标容器中加载中间件,然后初始化中间件对应的中间件资源。
43.通过上述示例,根据容器镜像构建目标容器;在目标容器中加载中间件,并初始化中间件对应的中间件资源,以实现对中间件的预先加载,以减少函数冷启动的耗时。
44.可选地,在本实施例中,构建容器镜像,包括:构建执行应用程序镜像;构建函数下载镜像;合并执行应用程序镜像以及函数下载镜像,以得到容器镜像。
45.具体地,目标容器的容器镜像构建过程中,首先确定容器的组件的运行环境,构建执行应用程序镜像,用于执行响应的函数代码,例如app镜像,app镜像中包括中间件及依赖,runtime组件及依赖等;然后,确定函数实例的下载应用或下载脚本对应的函数下载镜像,例如sidecar镜像;最后,合并执行容器的运行环境对应的应用程序镜像,以及下载应用或下载组件对应的函数下载镜像,得到目标容器对应的容器镜像。
46.需要说明的是,在构建了目标容器对应的容器镜像之后,会选定一批若干数量的容器,然后在容器中部署容器镜像,在容器镜像部署完成后,以等待目标函数的调度命令。
47.在一个例子中,如图2所示,根据容器镜像构建目标容器,具体可以包括以下步骤:
48.s21,构建app镜像;
49.具体地,app镜像的内容主要包括:中间件及其依赖;runtime及其依赖;runtime启动脚本。
50.s22,构建sidecar镜像;
51.具体地,sidecar主要负责下载/解压函数、通知runtime加载函数等。
52.s23,构建基础镜像;
53.具体地,合并app镜像和sidecar镜像,生成最终的pod部署镜像,即基础镜像。
54.s24,部署机器;
55.具体地,机器为容器,调度一批机器,下载基础镜像并部署,以得到目标容器。
56.s25,启动runtime;
57.具体,在部署好的机器中,通过执行脚本启动runtime。
58.s26,加载中间件;
59.具体地,初始化中间件资源,例如,初始化rpc框架资源;构建数据库连接池;初始化redis客户端;其他tcp连接等。
60.通过上述实施例,构建执行容器镜像并在容器中部署,在目标容器中并加载中间件,以得到目标容器,实现了在目标容器中对中间件资源的预加载以及初始化。
61.可选地,在本实施例中,在根据目标函数对应的调度命令将目标函数下载至目标容器之前,还包括但不限于:接收目标函数对应的函数请求;若不存在目标函数对应的函数实例,则向调度管理器发送调度命令;在调度管理器接收到调度命令后,根据目标函数对应的调度命令将目标函数下载至目标容器。
62.具体地,faas平台接收目标函数对应的函数请求,若此时在faas平台中没有目标函数对应的函数实例,则会发起函数实例化的调度命令;调度管理器接收调度命令,从一批预先部署有容器镜像的容器中选取1个容器作为目标容器,将目标函数下载至目标容器中。
63.可选地,在本实施例中,根据目标函数对应的调度命令将目标函数下载至目标容器,包括但不限于:通过函数下载镜像从预设服务器中下载目标函数;通过函数下载镜像将目标函数的函数代码,解压至预设目录;通过执行应用程序镜像加载函数代码。
64.具体地,通过目标容器中的函数下载镜像对应的函数下载组件从预设服务器或预设存储介质中下载目标函数对应的数据包,然后,通过函数下载组件将数据包解压至预设目录下,并发送下载完成消息给执行应用程序镜像对应的执行组件,执行组件在接收到下载完成消息后,加载目标函数对应的函数代码。其中,下载完成消息用于通知执行组件目标函数的代码已经下载完成。
65.在一个例子中,如图3所示,假定目标容器为pod,函数下载组件为sidecar,函数执行组件为runtime,存在一批预先部署有容器镜像的容器pod,pod中预先加载有runtime、sidecar以及中间件。接下来,在目标容器中加载函数代码具体可以包括以下步骤:
66.s1,faas平台接收函数请求,若此时没有函数实例,会发起函数实例化的调度命令。
67.s2,调度管理器接收调度命令,从一批预备机器中选取1个pod。
68.s3,pod的sidecar负责从远程存储介质中下载函数,解压到特定目录下,并通知runtime。
69.s4,runtime收到通知后,开始加载函数代码。
70.在未执行本实施例技术方案进行优化的情况下,加载富中间件函数的过程中需要对中间件资源进行初始化。而在本实施例中,目标容器pod预先对中间件进行了初始化,则在加载富中间件函数时无需执行中间件的初始化操作,加快大函数冷启动。
71.通过本实施例,根据目标函数对应的调度命令将目标函数下载至目标容器,其中,目标容器预先部署有容器镜像,且目标容器中预先加载有中间件;在目标容器中运行目标函数。通过预先在目标容器中加载中间件,在后续加载函数时无需加载中间件资源,从而实现了减少函数冷启动耗时的技术效果,进而解决了由于相关技术中富中间件函数实例化时,函数冷启动因中间件加载耗时的技术问题。
72.需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知
悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
73.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
74.实施例2
75.根据本发明实施例,还提供了一种用于实施上述函数冷启动方法的函数冷启动装置,如图4所示,该装置包括:
76.1)下载模块40,用于根据目标函数对应的调度命令将所述目标函数下载至目标容器,其中,所述目标容器预先部署有容器镜像,且所述目标容器中预先加载有中间件;
77.2)执行模块42,用于在所述目标容器中运行所述目标函数。
78.可选地,在本实施例中,还包括:
79.1)处理模块,用于在所述根据目标函数对应的调度命令将所述目标函数下载至目标容器之前,构建所述容器镜像;
80.2)部署处理模块,用于根据所述容器镜像部署所述目标容器;
81.3)加载模块,用于在所述目标容器中加载所述中间件,并初始化所述中间件对应的中间件资源。
82.可选地,在本实施例中,所述处理模块包括:
83.1)第一处理子模块,用于构建执行应用程序镜像;
84.2)第二处理子模块,用于构建函数下载镜像;
85.3)第三处理子模块,用于合并所述执行应用程序镜像以及所述函数下载镜像,以得到所述容器镜像。
86.可选地,在本实施例中,还包括:
87.1)接收模块,用于在所述根据目标函数对应的调度命令将所述目标函数下载至目标容器之前,接收所述目标函数对应的函数请求;
88.2)发送模块,用于若不存在所述目标函数对应的函数实例,则向调度管理器发送所述调度命令;
89.3)调度模块,用于在所述调度管理器接收到所述调度命令后,根据目标函数对应的调度命令将所述目标函数下载至目标容器。
90.可选地,在本实施例中,所述下载模块30包括:
91.1)下载子模块,用于通过所述函数下载镜像从预设服务器中下载所述目标函数;
92.2)解压子模块,用于通过所述函数下载镜像将所述目标函数的函数代码,解压至预设目录;
93.3)加载子模块,用于通过所述执行应用程序镜像加载所述函数代码。
94.通过本实施例,根据目标函数对应的调度命令将目标函数下载至目标容器,其中,目标容器预先部署有容器镜像,且目标容器中预先加载有中间件;在目标容器中运行目标
函数。通过预先在目标容器中加载中间件,在后续加载函数时无需加载中间件资源,从而实现了减少函数冷启动耗时的技术效果,进而解决了由于相关技术中富中间件函数实例化时,函数冷启动因中间件加载耗时的技术问题。
95.实施例3
96.根据本发明实施例,还提供了一种电子设备,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如上所述的函数冷启动方法的步骤。
97.可选地,在本实施例中,存储器被设置为存储用于执行以下步骤的程序代码:
98.s1,根据目标函数对应的调度命令将所述目标函数下载至目标容器,其中,所述目标容器预先部署有容器镜像,且所述目标容器中预先加载有中间件;
99.s2,通过所述目标容器运行所述目标函数。
100.可选地,本实施例中的具体示例可以参考上述实施例1中所描述的示例,本实施例在此不再赘述。
101.实施例4
102.本发明的实施例还提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如上所述的函数冷启动方法的步骤。
103.可选地,在本实施例中,可读存储介质被设置为存储用于执行以下步骤的程序代码:
104.s1,根据目标函数对应的调度命令将所述目标函数下载至目标容器,其中,所述目标容器预先部署有容器镜像,且所述目标容器中预先加载有中间件;
105.s2,通过所述目标容器运行所述目标函数。
106.可选地,存储介质还被设置为存储用于执行上述实施例1中的方法中所包括的步骤的程序代码,本实施例中对此不再赘述。
107.可选地,在本实施例中,上述可读存储介质可以包括但不限于:u盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
108.可选地,本实施例中的具体示例可以参考上述实施例1中所描述的示例,本实施例在此不再赘述。
109.上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
110.上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
111.在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
112.在本技术所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一
种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
113.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
114.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
115.以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献