一种函数托管服务的系统和方法与流程

文档序号:14879689发布日期:2018-07-07 09:22阅读:198来源:国知局

本发明涉及云计算领域,尤其涉及一种函数托管服务的系统和方法。



背景技术:

云计算的本质是为了将业务和数据托管在可信的云上,以通过规模效应降低成本。然而,现有的大多数云计算平台皆是通过以虚拟机或者容器为单位封装业务逻辑。但需要注意的是,以虚拟机为单位进行托管的计算粒度会过大,额外开销较大,使得计算性能降低,因为虚拟机中除了包含业务逻辑之外,还运行了一些不必要的进程和客户机操作系统等;以容器为单位进行托管,又会引入容器间的互相干扰,影响同台主机上的租户或用户的应用性能,无法达到用户指定的qos(qualityofservice,服务质量)。同时,现有的云计算平台也皆是以虚拟机和容器为单位进行计费,而除实际业务负载之外的部分开销由使用平台方来承担后,会加重使用平台方的成本。使用托管函数平台后,可以按照实际调用次数或实际cpu使用情况进行计费,大幅度减少开销。然而,现有技术中,对于该问题的解决都采用闭源机制,无法实现高效和经济的托管服务。



技术实现要素:

有鉴于此,本发明实施例期望提供一种函数托管服务的系统和方法,能够提供高效、经济的函数托管服务。

为达到上述目的,本发明的技术方案是这样实现的:

本发明实施例提供了一种函数托管服务的系统,所述系统包括:函数托管单元、函数调用单元;其中,

所述函数托管单元,用于接收到包含待托管函数的创建任务请求后,为所述待托管函数创建托管环境;

所述函数调用单元,用于当所述函数托管单元接收到包含调用所述待托管函数的服务请求后,基于为所述待托管函数创建的托管环境,调用所述待托管函数执行所述服务请求,并生成执行结果。

上述方案中,所述函数托管单元,包括:第一函数托管子单元、第二函数托管子单元、第三函数托管子单元、第四函数托管子单元、第五函数托管子单元;其中,

所述第一函数托管子单元,用于接收用户提交的包含待托管函数的创建任务请求,为所述待托管函数分配标识,并存储所述待托管函数的信息;

所述第二函数托管子单元,用于根据所述第一函数托管子单元中存储的所述待托管函数的信息,为所述待托管函数制作镜像,并记录所述待托管函数的标识与所述待托管函数的镜像之间的对应关系;

所述第三函数托管子单元,用于为所述待托管函数分配调用接口参数,并将所述待托管函数的调用接口参数和标识发送至第五函数托管子单元;

所述第四函数托管子单元,用于为所述待托管函数分配消息通道,并记录所述待托管函数的消息通道与所述待托管函数的调用接口参数之间的对应关系;

所述第五函数托管子单元,用于接收并存储所述第三函数托管子单元发送的所述待托管函数的调用接口参数和标识。

上述方案中,所述函数调用单元,包括:第一函数调用子单元、第二函数调用子单元;其中,

所述第五函数托管子单元,还用于接收包含调用所述待托管函数的服务请求,将所述服务请求封装成消息,并将所述消息发送至与所述待托管函数的调用接口参数对应的消息通道中;所述服务请求中包含有所述待托管函数的调用接口参数;

所述第一函数调用子单元,用于从与所述待托管函数的调用接口参数对应的消息通道中获取所述消息、以及从所述第五函数托管子单元中获取与所述待托管函数的调用接口参数对应的标识,并将所述消息和所述待托管函数的标识发送至第二函数调用子单元;

所述第二函数调用子单元,用于根据接收到的所述消息和所述待托管函数的标识,调用所述待托管函数执行所述服务请求,并生成执行结果。

上述方案中,所述第一函数托管子单元存储所述待托管函数的信息为:存储所述待托管函数的标识以及所述创建任务请求中包含的所述待托管函数的代码片段的地址;

所述第二函数托管子单元,具体用于:从所述第一函数托管子单元中获取所述待托管函数的标识和代码片段的地址,解析所述待托管函数的代码片段的地址,根据解析结果制作所述待托管函数的镜像,并记录所述待托管函数的标识与所述待托管函数的镜像之间的对应关系。

上述方案中,所述第二函数调用子单元,具体用于:根据接收到的所述待托管函数的标识,从所述第二函数托管子单元中获取所述待托管函数的镜像;根据所述待托管函数的镜像创建容器,在所述容器内执行所述待托管函数的代码片段,生成执行结果。

本发明实施例还提供了一种函数托管服务的方法,所述方法包括:

函数托管单元接收到包含待托管函数的创建任务请求后,为所述待托管函数创建托管环境;

当所述函数托管单元接收到包含调用所述待托管函数的服务请求后,函数调用单元基于为所述待托管函数创建的托管环境,调用所述待托管函数执行所述服务请求,并生成执行结果。

上述方案中,所述函数托管单元,包括:第一函数托管子单元、第二函数托管子单元、第三函数托管子单元、第四函数托管子单元、第五函数托管子单元;

所述函数托管单元接收到包含待托管函数的创建任务请求后,为所述待托管函数创建托管环境,包括:

第一函数托管子单元接收用户提交的包含待托管函数的创建任务请求,为所述待托管函数分配标识,并存储所述待托管函数的信息;

第二函数托管子单元根据所述第一函数托管子单元存储的所述待托管函数的信息,为所述待托管函数制作镜像,并记录所述待托管函数的标识与所述待托管函数的镜像之间的对应关系;

第三函数托管子单元为所述待托管函数分配调用接口参数,并将所述待托管函数的调用接口参数和标识发送至第五函数托管子单元;

第四函数托管子单元为所述待托管函数分配消息通道,并记录所述待托管函数的消息通道与所述待托管函数的调用接口参数之间的对应关系;

第五函数托管子单元接收并存储所述第三函数托管子单元发送的所述待托管函数的调用接口参数和标识。

上述方案中,所述函数调用单元,包括:第一函数调用子单元、第二函数调用子单元;

所述当所述函数托管单元接收到包含调用所述待托管函数的服务请求后,函数调用单元基于为所述待托管函数创建的托管环境,调用所述待托管函数执行所述服务请求,并生成执行结果,包括:

第五函数托管子单元接收包含调用所述待托管函数的服务请求,将所述服务请求封装成消息,并将所述消息发送至与所述待托管函数的调用接口参数对应的消息通道中;所述服务请求中包含有所述待托管函数的调用接口参数;

第一函数调用子单元从与所述待托管函数的调用接口参数对应的消息通道中获取所述消息、以及从所述第五函数托管子单元中获取与所述待托管函数的调用接口参数对应的标识,并将所述消息和所述待托管函数的标识发送至第二函数调用子单元;

第二函数调用子单元根据接收到的所述消息和所述待托管函数的标识,调用所述待托管函数执行所述服务请求,并生成执行结果。

上述方案中,所述存储所述待托管函数的信息为:存储所述待托管函数的标识以及所述创建任务请求中包含的所述待托管函数的代码片段的地址;

所述第二函数托管子单元根据所述第一函数托管子单元中存储的所述待托管函数的信息,为所述待托管函数制作镜像,并记录所述待托管函数的标识与所述待托管函数的镜像之间的对应关系,包括:

第二函数托管子单元从所述第一函数托管子单元中获取所述待托管函数的标识和代码片段的地址,解析所述待托管函数的代码片段的地址,根据解析结果制作所述待托管函数的镜像,并记录所述待托管函数的标识与所述待托管函数的镜像之间的对应关系。

上述方案中,所述第二函数调用子单元根据接收到的所述消息和所述待托管函数的标识,调用所述待托管函数执行所述服务请求,并生成执行结果,包括:

第二函数调用子单元根据接收到的所述待托管函数的标识,从所述第二函数托管子单元中获取所述待托管函数的镜像;根据所述待托管函数的镜像创建容器,在所述容器内执行所述待托管函数的代码片段,生成执行结果。

本发明实施例提供的函数托管服务的系统和方法,函数托管单元接收到包含待托管函数的创建任务请求后,为所述待托管函数创建托管环境;当所述函数托管单元接收到包含调用所述待托管函数的服务请求后,函数调用单元基于为所述待托管函数创建的托管环境,调用所述待托管函数执行所述服务请求,并生成执行结果。可见,本发明实施例以开源软件为基础,通过容器技术实现了为用户提供高效、经济的函数托管服务,即通过为更小粒度的函数和代码片段提供了在运行时,按需调用、按调用次数或者实际运行时间计费的方式,使得函数托管服务更加经济和高效。

此外,通过托管函数的代码,能够为用户提供基于http、event等多种方式实现对该函数的调用。

附图说明

图1为本发明实施例一函数托管服务的系统的组成结构示意图;

图2为本发明实施例一函数托管服务的方法的实现流程示意图;

图3为本发明实施例二函数托管服务的系统的具体组成结构示意图;

图4为本发明实施例二中函数管理时序的示意图;

图5为本发明实施例二中用户访问函数时序的示意图。

具体实施方式

下面结合附图及具体实施例对本发明再作进一步详细的说明。

实施例一

图1为本发明实施例一函数托管服务的系统的组成结构示意图,该系统包括:函数托管单元11、函数调用单元12;其中,

所述函数托管单元11,用于接收到包含待托管函数的创建任务请求后,为所述待托管函数创建托管环境;

所述函数调用单元12,用于当所述函数托管单元接收到包含调用所述待托管函数的服务请求后,基于为所述待托管函数创建的托管环境,调用所述待托管函数执行所述服务请求,并生成执行结果。

这里,所述函数托管单元11为待托管函数创建托管环境后,以使所述函数调用单元12在需要调用所述待托管函数时,能够基于所述函数托管单元11为待托管函数创建的托管环境实现快速对所述待托管函数的调用。

所述函数托管单元11,包括:第一函数托管子单元110、第二函数托管子单元111、第三函数托管子单元112、第四函数托管子单元113、第五函数托管子单元114;其中,

所述第一函数托管子单元110,接收用户提交的包含待托管函数的创建任务请求,为所述待托管函数分配标识,并存储所述待托管函数的信息;

所述第二函数托管子单元111,用于根据所述第一函数托管子单元110中存储的所述待托管函数的信息,为所述待托管函数制作镜像,并记录所述待托管函数的标识与所述待托管函数的镜像之间的对应关系;

所述第三函数托管子单元112,用于为所述待托管函数分配调用接口参数,并将所述待托管函数的调用接口参数和标识发送至第五函数托管子单元114;

所述第四函数托管子单元113,用于为所述待托管函数分配消息通道,并记录所述待托管函数的消息通道与所述待托管函数的调用接口参数之间的对应关系;

所述第五函数托管子单元114,用于接收并存储所述第三函数托管子单元112发送的所述待托管函数的调用接口参数和标识。

其中,所述第一函数托管子单元110存储所述待托管函数的信息为:存储所述待托管函数的标识以及所述创建任务请求中包含的所述待托管函数的代码片段的地址。

这里,所述待托管函数的标识用于表示所述待托管函数的编码,即任意一个函数都有一个与众不同的编码;所述编码可用于确定函数的身份;根据所述待托管函数的代码片段的地址,可实现对所述待托管函数的调用。

这里,所述第一函数托管子单元110还可用于为所述待托管函数分配函数名,以及将所述待托管函数的函数名作为所述待托管函数的信息中的子信息进行存储;当然,若所述创建任务请求中包含有所述待托管函数的函数名,则所述第一函数托管子单元110不用为所述待托管函数分配函数名。

这里,所述创建任务请求中还可包含有所述待托管函数的代码片段的授权信息和/或所述待托管函数的依赖库列表;所述授权信息可作为是否允许对所述待托管函数的代码片段进行修改的检验要求,即在对所述待托管函数的代码片段进行修改时,需要具有所述授权信息,才允许修改所述代码片段;所述依赖库列表用于确定所述待托管函数的运行环境,即只有所述函数托管单元11为所述待托管函数创建的托管环境满足所述依赖库列表的要求时,才允许所述函数调用单元12调用所述待托管函数;所述授权信息和/或依赖库列表也可作为所述待托管函数的信息中的子信息存储至所述第一函数托管子单元110。

所述第二函数托管子单元111,具体用于:

从所述第一函数托管子单元110中获取所述待托管函数的标识和代码片段的地址,解析所述待托管函数的代码片段的地址,根据解析结果制作所述待托管函数的镜像,并记录所述待托管函数的标识与所述待托管函数的镜像之间的对应关系。

这里,所述镜像将用于后续处理中为所述待托管函数创建容器,以在容器内执行所述待托管函数的代码片段,即实现对所述待托管函数的调用;所述记录所述待托管函数的标识与所述待托管函数的镜像之间的对应关系,可用于根据所述待托管函数的标识便可获取所述待托管函数的镜像。

这里,所述第五函数托管子单元114用于作为对所述待托管函数调用的接入点,因此,所述第三函数托管子单元112为所述待托管函数分配调用接口参数后,需要将所述待托管函数的调用接口参数和标识发送至所述第五函数托管子单元114,以使所述第五函数托管子单元114在接收到包含所述待托管函数的调用接口参数的调用请求后,能够根据所述待托管函数的标识实现快速对所述待托管函数的调用。

所述函数调用单元12,包括:第一函数调用子单元120、第二函数调用子单元121;其中,

所述第五函数托管子单元114,还用于接收包含调用所述待托管函数的服务请求,将所述服务请求封装成消息,并将所述消息发送至与所述待托管函数的调用接口参数对应的消息通道中;所述服务请求中包含有所述待托管函数的调用接口参数;

所述第一函数调用子单元120,用于从与所述待托管函数的调用接口参数对应的消息通道中获取所述消息、以及从所述第五函数托管子单元114中获取与所述待托管函数的调用接口参数对应的标识,并将所述消息和所述待托管函数的标识发送至第二函数调用子单元121;

所述第二函数调用子单元121,用于根据接收到的所述消息和所述待托管函数的标识,调用所述待托管函数执行所述服务请求,并生成执行结果。

这里,所述第五函数托管子单元114接收到的服务请求可以以http、event等多种方式存在;所述服务请求中需要包含有需要被调用函数的调用接口参数,以告知所述第五函数托管子单元114哪个函数是需要被调用的函数。

所述第二函数调用子单元121,具体用于:根据接收到的所述待托管函数的标识,从所述第二函数托管子单元111中获取所述待托管函数的镜像;根据所述待托管函数的镜像创建容器,在所述容器内执行所述待托管函数的代码片段,生成执行结果。

这里,所述第二函数调用子单元121接收到所述第一函数调用子单元120发送的所述待托管函数的标识后,获取所述第二函数托管子单元111为所述待托管函数制作的镜像;接着,基于所述镜像,通过docker、lxc等容器技术创建与所述待托管函数对应的容器;然后,通过fork一个子进程,使该子进程通过docker、lxc等容器技术进入与所述待托管函数对应的容器内部,以在该容器内执行所述待托管函数的代码片段,生成执行结果,即生成调用所述待托管函数响应所述服务请求的结果。

在实际应用中,所述第一函数托管子单元110、第二函数托管子单元111、第三函数托管子单元112、第四函数托管子单元113、第五函数托管子单元114、第一函数调用子单元120、第二函数调用子单元121均可由位于终端的中央处理器(cpu)、微处理器(mpu)、数字信号处理器(dsp)、或现场可编程门阵列(fpga)等实现。

基于上述函数托管服务的系统,图2为本发明实施例一函数托管服务的方法的实现流程示意图,该方法包括:

步骤101:函数托管单元接收到包含待托管函数的创建任务请求后,为所述待托管函数创建托管环境;

这里,所述函数托管单元为待托管函数创建托管环境后,以使所述函数调用单元在需要调用所述待托管函数时,能够基于所述函数托管单元为待托管函数创建的托管环境实现快速对所述待托管函数的调用。

所述函数托管单元,包括:第一函数托管子单元、第二函数托管子单元、第三函数托管子单元、第四函数托管子单元、第五函数托管子单元;

所述函数托管单元接收到包含待托管函数的创建任务请求后,为所述待托管函数创建托管环境,包括:

第一函数托管子单元接收用户提交的包含待托管函数的创建任务请求,为所述待托管函数分配标识,并存储所述待托管函数的信息;

第二函数托管子单元根据所述第一函数托管子单元存储的所述待托管函数的信息,为所述待托管函数制作镜像,并记录所述待托管函数的标识与所述待托管函数的镜像之间的对应关系;

第三函数托管子单元为所述待托管函数分配调用接口参数,并将所述待托管函数的调用接口参数和标识发送至第五函数托管子单元;

第四函数托管子单元为所述待托管函数分配消息通道,并记录所述待托管函数的消息通道与所述待托管函数的调用接口参数之间的对应关系;

第五函数托管子单元接收并存储所述第三函数托管子单元发送的所述待托管函数的调用接口参数和标识。

其中,所述第一函数托管子单元存储所述待托管函数的信息为:存储所述待托管函数的标识以及所述创建任务请求中包含的所述待托管函数的代码片段的地址。

这里,所述待托管函数的标识用于表示所述待托管函数的编码,即任意一个函数都有一个与众不同的编码;所述编码可用于确定函数的身份;根据所述待托管函数的代码片段的地址,可实现对所述待托管函数的调用。

这里,所述第一函数托管子单元还可为所述待托管函数分配函数名,以及将所述待托管函数的函数名作为所述待托管函数的信息中的子信息进行存储;当然,若所述创建任务请求中包含有所述待托管函数的函数名,则所述第一函数托管子单元不用为所述待托管函数分配函数名。

这里,所述创建任务请求中还可包含有所述待托管函数的代码片段的授权信息和/或所述待托管函数的依赖库列表;所述授权信息可作为是否允许对所述待托管函数的代码片段进行修改的检验要求,即在对所述待托管函数的代码片段进行修改时,需要具有所述授权信息,才允许修改所述代码片段;所述依赖库列表用于确定所述待托管函数的运行环境,即只有所述函数托管单元为所述待托管函数创建的托管环境满足所述依赖库列表的要求时,才允许所述函数调用单元调用所述待托管函数;所述授权信息和/或依赖库列表也可作为所述待托管函数的信息中的子信息存储至所述第一函数托管子单元。

所述第二函数托管子单元根据所述第一函数托管子单元中存储的所述待托管函数的信息,为所述待托管函数制作镜像,并记录所述待托管函数的标识与所述待托管函数的镜像之间的对应关系,包括:

第二函数托管子单元从所述第一函数托管子单元中获取所述待托管函数的标识和代码片段的地址,解析所述待托管函数的代码片段的地址,根据解析结果制作所述待托管函数的镜像,并记录所述待托管函数的标识与所述待托管函数的镜像之间的对应关系。

这里,所述镜像将用于后续处理中为所述待托管函数创建容器,以在容器内执行所述待托管函数的代码片段,即实现对所述待托管函数的调用;所述记录所述待托管函数的标识与所述待托管函数的镜像之间的对应关系,可用于根据所述待托管函数的标识便可获取所述待托管函数的镜像。

这里,所述第五函数托管子单元作为对所述待托管函数调用的接入点,因此,所述第三函数托管子单元为所述待托管函数分配调用接口参数后,需要将所述待托管函数的调用接口参数和标识发送至所述第五函数托管子单元,以使所述第五函数托管子单元在接收到包含所述待托管函数的调用接口参数的调用请求后,能够根据所述待托管函数的标识实现快速对所述待托管函数的调用。

步骤102:当所述函数托管单元接收到包含调用所述待托管函数的服务请求后,函数调用单元基于为所述待托管函数创建的托管环境,调用所述待托管函数执行所述服务请求,并生成执行结果。

所述函数调用单元,包括:第一函数调用子单元、第二函数调用子单元;所述当所述函数托管单元接收到包含调用所述待托管函数的服务请求后,函数调用单元基于为所述待托管函数创建的托管环境,调用所述待托管函数执行所述服务请求,并生成执行结果,包括:

第五函数托管子单元接收包含调用所述待托管函数的服务请求,将所述服务请求封装成消息,并将所述消息发送至与所述待托管函数的调用接口参数对应的消息通道中;所述服务请求中包含有所述待托管函数的调用接口参数;

第一函数调用子单元从与所述待托管函数的调用接口参数对应的消息通道中获取所述消息、以及从所述第五函数托管子单元中获取与所述待托管函数的调用接口参数对应的标识,并将所述消息和所述待托管函数的标识发送至第二函数调用子单元;

第二函数调用子单元根据接收到的所述消息和所述待托管函数的标识,调用所述待托管函数执行所述服务请求,并生成执行结果。

这里,所述第五函数托管子单元接收到的服务请求可以以http、event等多种方式存在;所述服务请求中需要包含有需要被调用函数的调用接口参数,以告知所述第五函数托管子单元哪个函数是需要被调用的函数。

所述第二函数调用子单元根据接收到的所述消息和所述待托管函数的标识,调用所述待托管函数执行所述服务请求,并生成执行结果,包括:

第二函数调用子单元根据接收到的所述待托管函数的标识,从所述第二函数托管子单元中获取所述待托管函数的镜像;根据所述待托管函数的镜像创建容器,在所述容器内执行所述待托管函数的代码片段,生成执行结果。

这里,所述第二函数调用子单元接收到所述第一函数调用子单元发送的所述待托管函数的标识后,获取所述第二函数托管子单元为所述待托管函数制作的镜像;接着,基于所述镜像,通过docker、lxc等容器技术创建与所述待托管函数对应的容器;然后,通过fork一个子进程,使该子进程通过docker、lxc等容器技术进入与所述待托管函数对应的容器内部,以在该容器内执行所述待托管函数的代码片段,生成执行结果,即生成调用所述待托管函数响应所述服务请求的结果。

实施例二

下面通过一个具体示例对本发明实施例一作进一步说明,图3为本发明实施例二函数托管服务的系统的具体组成结构示意图,该系统主要包括:api-server、endpointscheduler、imagebuilder、taskscheduler、channelallocator、gw、executor等部分;其中,

api-server:负责接收提交的函数(function)请求,该请求包含了获取函数所需的url以及访问该函数所需要的认知口令(token)以及依赖库列表;其中,url是函数代码片段的地址,token是访问函数代码的授权信息,依赖库列表用于确定该函数的运行环境,即只有为该函数准备的托管环境满足依赖库列表时,才允许接受该请求;在实际应用中,依赖库列表是可选的,即该函数的内容是可能包含有依赖库列表,也可能没有包含依赖库列表;api-server在接收完毕函数后,会将该函数添加至数据库的functions表中,即在functions表中创建一个新的function,并为该函数分配函数名(name)和标识(id)、存储该函数的token和url等信息;

endpoint-scheduler:负责监听functions表,一旦functions表发生变动,比如当functions表中增加一个新的function时,则endpoint-scheduler将在endpoints表中新建一行记录,即为该function分配endpoint、以及记录该function的name、id、endpoint三者之间的对应关系;并将与该function对应的endpoint分配到具体的gw节点上,gw节点是一个业务引流的节点,对应具体的路径和函数的id;

image-builder:负责监听functions表,一旦functions表发生变动,比如当functions表中增加一个新的function时,则image-builder会从functions表中获取该function的信息,解析该function的url,并在镜像服务器上制作该function对应的镜像(image);在对该function的image制作完毕后,image-builder将在images列表中记录该function与该function的image之间的对应关系,比如记录该function的name、id、image三者之间的对应关系;

channel-allocator:负责监听functions表,一旦functions表发生变动,比如当functions表中增加一个新的function时,则channel-allocator在channels表为该function分配一个消息通道(channel),并记录该function与该function的channel之间的对应关系,比如记录该function的name、id、endpoint、channel四者之间的对应关系;

gw:负责监听endpoints表和channels表,如果在endpoints表中发现有与gw对应的信息,如endpoints表中增加了一行有关新的function的记录,则更新gw上的endpoints表和function的对应关系,即将该function的endpoint存储至gw上的endpoints表中,并记录该function的id、name等信息;这里,gw节点是实际接收函数调用的节点;如果gw接收到某个路径下调用函数的http请求,比如ip:port/adam/func1,则会将该请求封装成消息发送到消息队列中与该请求对应的channel中;

task-scheduler:负责具体把http等调用函数的请求分发到节点上执行的组件;gw产生的每条消息都对应有一个任务(task),task-scheduler监听消息队列中的消息,并通过一定的分配算法将该消息对应的task分配到计算节点上,在schedules表中记录该task;此处的分配仅仅是在数据库中记录一行记录,分配算法可以根据cpu使用率和内存使用率进行调度;

计算节点上有2个组件,一个是executor,负责监听schedules表,一旦发现schedules表中有分配给本节点的任务时,executor将在本节点上创建容器;这里,容器的创建可以基于function的image、通过采用docker、lxc等技术实现;创建容器需要的镜像即function的image可以通过fetcher从imagesstore中获取,imagesstore中的镜像是image-builder负责创建的;同时,executor将会fork一个子进程,子进程通过docker等容器技术进入容器内部,执行function的代码片段,以实现函数的调用。

本实施例中,用户通过api-server上传待托管函数请求后,系统根据用户上传的待托管函数,为该待托管函数准备托管环境,包括制作该待托管函数的镜像、创建该待托管函数的endpoint、创建该待托管函数的消息通道等,在系统准备好该待托管函数的托管环境后,用户即可通过访问gw,获取调用该待托管函数响应服务请求的执行结果。

基于上述系统,本发明实施例二中函数管理时序的示意图如图4所示,该函数管理时序包括:

步骤201:用户向api-server提交函数创建任务请求;

这里,所述函数创建任务请求中包含有函数代码片段的地址、访问函数代码的授权信息、确定函数的运行环境的依赖库列表。

步骤202:api-server接收用户提交的函数创建任务请求;

具体地,api-server接收用户通过文件形式提交的函数创建任务请求。

步骤203:image-builder分析函数,并为函数制作镜像;

具体地,image-builder解析函数代码片段的地址,并在镜像服务器上制作该函数的镜像。

步骤204:channel-allocator为函数分配消息通道;

具体地,channel-allocator为函数分配消息通道,以使gw能够将调用该函数的任务通过该函数的消息通道传输至task-scheduler。

步骤205:endpoint-scheduler在数据库中创建函数和endpoint的关系;

具体地,endpoint-scheduler在数据库中创建与函数对应的endpoint,并记录该函数与该endpoint的对应关系,以使用户能够通过endpoint调用函数。

步骤206:gw更新endpoint和函数的对应关系,并配置位于gw上的反向代理,增加对应的endpoint路径。

具体地,gw存储该函数以及endpoint-scheduler创建的与该函数对应的endpoint,以实现根据该函数的endpoint能够获取该函数的所有信息。

本发明实施例二中用户访问函数时序的示意图如图5所示,该用户访问函数时序包括:

步骤301:用户向gw发送访问函数的请求;

这里,所述请求中包含有需要访问的函数的endpoint。

步骤302:gw将所述访问函数的请求封装成消息,并传递到消息队列中;

具体地,gw接收到所述用户发送的访问函数的请求后,将所述访问函数的请求封装成消息,并根据所述函数的endpoint将所述消息传递到消息队列中与所述函数对应的消息通道中。

步骤303:task-scheduler为所述消息对应的任务分配执行节点;

具体地,task-scheduler从消息队列中获取到所述消息后,获取所述消息对应的任务,并为所述消息对应的任务分配执行节点,以在执行节点执行所述任务。

步骤304:executor为所述任务创建容器,执行所述函数的代码;

具体地,executor基于image-builder为所述函数制作的镜像,采用docker、lxc等技术创建容器,以在容器内执行所述函数的代码,生成所述函数响应所述请求的执行结果。

步骤305:executor将结果返回到消息队列中;

具体地,executor将步骤304中生成的所述执行结果返回到消息队列中。

步骤306:gw从消息队列中获取所述结果;

具体地,gw从消息队列中获取已被托管的函数响应所述请求的结果。

步骤307:gw返回所述结果给用户。

具体地,gw将所述结果返回给用户,以告知用户调用所述函数响应所述请求的结果。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1